diff --git a/service/src/com/android/car/AppContextService.java b/service/src/com/android/car/AppContextService.java
index af05fc9..71bd539 100644
--- a/service/src/com/android/car/AppContextService.java
+++ b/service/src/com/android/car/AppContextService.java
@@ -15,6 +15,9 @@
  */
 package com.android.car;
 
+import android.car.CarAppContextManager;
+import android.car.IAppContext;
+import android.car.IAppContextListener;
 import android.content.Context;
 import android.os.Binder;
 import android.os.Handler;
@@ -22,9 +25,6 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
-import android.support.car.CarAppContextManager;
-import android.support.car.IAppContext;
-import android.support.car.IAppContextListener;
 import android.util.Log;
 
 import com.android.car.hal.VehicleHal;
@@ -34,7 +34,6 @@
 
 public class AppContextService extends IAppContext.Stub implements CarServiceBase,
         BinderInterfaceContainer.BinderEventHandler<IAppContextListener> {
-    private static final int VERSION = 1;
     private static final boolean DBG = true;
     private static final boolean DBG_EVENT = false;
 
@@ -55,17 +54,11 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
-    public void registerContextListener(int clientVersion, IAppContextListener listener,
-            int filter) {
+    public void registerContextListener(IAppContextListener listener, int filter) {
         synchronized (this) {
             ClientInfo info = (ClientInfo) mAllClients.getBinderInterface(listener);
             if (info == null) {
-                info = new ClientInfo(mAllClients, clientVersion, listener, Binder.getCallingUid(),
+                info = new ClientInfo(mAllClients, listener, Binder.getCallingUid(),
                         Binder.getCallingPid(), filter);
                 mAllClients.addBinderInterface(info);
             } else {
@@ -294,9 +287,9 @@
         /** contexts owned by this client */
         private int mOwnedContexts;
 
-        private ClientInfo(ClientHolder holder, int clientVersion, IAppContextListener binder,
-                int uid, int pid, int filter) {
-            super(holder, clientVersion, binder);
+        private ClientInfo(ClientHolder holder, IAppContextListener binder, int uid, int pid,
+                int filter) {
+            super(holder, binder);
             this.uid = uid;
             this.pid = pid;
             this.mFilter = filter;
diff --git a/service/src/com/android/car/AudioRoutingPolicy.java b/service/src/com/android/car/AudioRoutingPolicy.java
index dcca8c5..39ad826 100644
--- a/service/src/com/android/car/AudioRoutingPolicy.java
+++ b/service/src/com/android/car/AudioRoutingPolicy.java
@@ -15,15 +15,15 @@
  */
 package com.android.car;
 
-import java.io.PrintWriter;
-import java.util.Arrays;
-
+import android.car.media.CarAudioManager;
 import android.content.Context;
 import android.content.res.Resources;
 import android.media.AudioAttributes;
-import android.support.car.media.CarAudioManager;
 import android.util.Log;
 
+import java.io.PrintWriter;
+import java.util.Arrays;
+
 /**
  * Holds audio routing policy from config.xml. R.array.audioRoutingPolicy can contain
  * multiple policies and VEHICLE_PROPERTY_AUDIO_HW_VARIANT decide which one to use.
diff --git a/service/src/com/android/car/BinderInterfaceContainer.java b/service/src/com/android/car/BinderInterfaceContainer.java
index c233afa..bf56706 100644
--- a/service/src/com/android/car/BinderInterfaceContainer.java
+++ b/service/src/com/android/car/BinderInterfaceContainer.java
@@ -31,14 +31,11 @@
 
     public static class BinderInterface<T extends IInterface>
             implements IBinder.DeathRecipient {
-        public final int version;
         public final T binderInterface;
         private final BinderInterfaceContainer<T> mContainer;
 
-        public BinderInterface(BinderInterfaceContainer<T> container, int version,
-                T binderInterface) {
+        public BinderInterface(BinderInterfaceContainer<T> container, T binderInterface) {
             mContainer = container;
-            this.version = version;
             this.binderInterface = binderInterface;
         }
 
@@ -60,14 +57,14 @@
         mEventHandler = eventHandler;
     }
 
-    public void addBinder(int version, T binderInterface) {
+    public void addBinder(T binderInterface) {
         IBinder binder = binderInterface.asBinder();
         synchronized (this) {
             BinderInterface<T> bInterface = mBinders.get(binder);
             if (bInterface != null) {
                 return;
             }
-            bInterface = new BinderInterface<T>(this, version, binderInterface);
+            bInterface = new BinderInterface<T>(this, binderInterface);
             try {
                 binder.linkToDeath(bInterface, 0);
             } catch (RemoteException e) {
diff --git a/service/src/com/android/car/BootReceiver.java b/service/src/com/android/car/BootReceiver.java
index 75cacaf..adedf7e 100644
--- a/service/src/com/android/car/BootReceiver.java
+++ b/service/src/com/android/car/BootReceiver.java
@@ -16,11 +16,11 @@
 
 package com.android.car;
 
-import android.os.UserHandle;
-import android.support.car.Car;
+import android.car.Car;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.car.hal.VehicleHal;
diff --git a/service/src/com/android/car/CarAudioAttributesUtil.java b/service/src/com/android/car/CarAudioAttributesUtil.java
index c51c9b7..97221d4 100644
--- a/service/src/com/android/car/CarAudioAttributesUtil.java
+++ b/service/src/com/android/car/CarAudioAttributesUtil.java
@@ -15,9 +15,9 @@
  */
 package com.android.car;
 
+import android.car.media.CarAudioManager;
 import android.media.AudioAttributes;
 import android.os.Bundle;
-import android.support.car.media.CarAudioManager;
 
 /**
  * Utility class to map car usage into AudioAttributes and the other way around.
diff --git a/service/src/com/android/car/CarAudioService.java b/service/src/com/android/car/CarAudioService.java
index 0eee2e7..5bbad78 100644
--- a/service/src/com/android/car/CarAudioService.java
+++ b/service/src/com/android/car/CarAudioService.java
@@ -15,6 +15,8 @@
  */
 package com.android.car;
 
+import android.car.media.CarAudioManager;
+import android.car.media.ICarAudio;
 import android.content.Context;
 import android.media.AudioAttributes;
 import android.media.AudioFocusInfo;
@@ -25,8 +27,6 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
-import android.support.car.media.CarAudioManager;
-import android.support.car.media.ICarAudio;
 import android.util.Log;
 
 import com.android.car.hal.AudioHalService;
@@ -46,8 +46,6 @@
 
     private static final boolean DBG = true;
 
-    private static final int VERSION = 1;
-
     private final AudioHalService mAudioHal;
     private final Context mContext;
     private final HandlerThread mFocusHandlerThread;
@@ -103,11 +101,6 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public AudioAttributes getAudioAttributesForCarUsage(int carUsage) {
         return CarAudioAttributesUtil.getAudioAttributesForCarUsage(carUsage);
     }
diff --git a/service/src/com/android/car/CarHvacService.java b/service/src/com/android/car/CarHvacService.java
index 54358c8..30232b7 100644
--- a/service/src/com/android/car/CarHvacService.java
+++ b/service/src/com/android/car/CarHvacService.java
@@ -16,14 +16,14 @@
 
 package com.android.car;
 
+import android.car.Car;
+import android.car.hardware.hvac.CarHvacEvent;
+import android.car.hardware.hvac.CarHvacProperty;
+import android.car.hardware.hvac.ICarHvac;
+import android.car.hardware.hvac.ICarHvacEventListener;
 import android.content.Context;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.car.Car;
-import android.support.car.hardware.hvac.CarHvacEvent;
-import android.support.car.hardware.hvac.CarHvacProperty;
-import android.support.car.hardware.hvac.ICarHvac;
-import android.support.car.hardware.hvac.ICarHvacEventListener;
 import android.util.Log;
 
 import com.android.car.hal.VehicleHal;
@@ -37,7 +37,6 @@
         implements CarServiceBase, HvacHalService.HvacHalListener {
     public static final boolean DBG = true;
     public static final String  TAG = CarLog.TAG_HVAC + ".CarHvacService";
-    public static final int     VERSION = 1;
 
     private HvacHalService mHvacHal;
     private final HashMap<IBinder, ICarHvacEventListener> mListenersMap =
@@ -96,12 +95,7 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
-    public synchronized void registerListener(ICarHvacEventListener listener, int version) {
+    public synchronized void registerListener(ICarHvacEventListener listener) {
         if (DBG) {
             Log.d(TAG, "registerListener");
         }
diff --git a/service/src/com/android/car/CarInfoService.java b/service/src/com/android/car/CarInfoService.java
index 6957a3c..2f7185c 100644
--- a/service/src/com/android/car/CarInfoService.java
+++ b/service/src/com/android/car/CarInfoService.java
@@ -15,12 +15,12 @@
  */
 package com.android.car;
 
+import android.car.CarInfoManager;
+import android.car.ICarInfo;
+import android.car.annotation.ValueTypeDef;
 import android.content.Context;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.car.CarInfoManager;
-import android.support.car.ICarInfo;
-import android.support.car.annotation.ValueTypeDef;
 
 import com.android.car.hal.InfoHalService;
 import com.android.car.hal.VehicleHal;
@@ -32,8 +32,6 @@
 
 public class CarInfoService extends ICarInfo.Stub implements CarServiceBase {
 
-    private static final int VERSION = 1;
-
     private static final HashMap<String, Class> sKeyValueTypeMap;
     static {
         sKeyValueTypeMap = new HashMap<String, Class>();
@@ -60,11 +58,6 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public int[] getInt(String key) {
         assertType(key, Integer.class);
         Object o = findFromCache(key);
diff --git a/service/src/com/android/car/CarNavigationStatusService.java b/service/src/com/android/car/CarNavigationService.java
similarity index 73%
rename from service/src/com/android/car/CarNavigationStatusService.java
rename to service/src/com/android/car/CarNavigationService.java
index 4b8c9ec..8351dbf 100644
--- a/service/src/com/android/car/CarNavigationStatusService.java
+++ b/service/src/com/android/car/CarNavigationService.java
@@ -15,16 +15,16 @@
  */
 package com.android.car;
 
+import android.car.Car;
+import android.car.CarAppContextManager;
+import android.car.navigation.CarNavigationInstrumentCluster;
+import android.car.navigation.ICarNavigation;
+import android.car.navigation.ICarNavigationEventListener;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.car.Car;
-import android.support.car.CarAppContextManager;
-import android.support.car.navigation.CarNavigationInstrumentCluster;
-import android.support.car.navigation.ICarNavigationStatus;
-import android.support.car.navigation.ICarNavigationStatusEventListener;
 import android.util.Log;
 
 import java.io.PrintWriter;
@@ -35,17 +35,17 @@
  * Service for talking to the instrument cluster.
  * TODO: implement HAL integration.
  */
-public class CarNavigationStatusService extends ICarNavigationStatus.Stub
+public class CarNavigationService extends ICarNavigation.Stub
         implements CarServiceBase {
     private static final String TAG = CarLog.TAG_NAV;
 
-    private final List<CarNavigationStatusEventListener> mListeners = new ArrayList<>();
+    private final List<CarNavigationEventListener> mListeners = new ArrayList<>();
 
     private CarNavigationInstrumentCluster mInstrumentClusterInfo = null;
     private AppContextService mAppContextService;
     private Context mContext;
 
-    public CarNavigationStatusService(Context context) {
+    public CarNavigationService(Context context) {
         mContext = context;
     }
 
@@ -89,23 +89,23 @@
     }
 
     @Override
-    public boolean registerEventListener(ICarNavigationStatusEventListener listener) {
+    public boolean registerEventListener(ICarNavigationEventListener listener) {
         synchronized(mListeners) {
             if (findClientLocked(listener) == null) {
-                CarNavigationStatusEventListener carInstrumentClusterEventListener =
-                        new CarNavigationStatusEventListener(listener);
+                CarNavigationEventListener eventListener =
+                        new CarNavigationEventListener(listener);
                 try {
-                    listener.asBinder().linkToDeath(carInstrumentClusterEventListener, 0);
+                    listener.asBinder().linkToDeath(eventListener, 0);
                 } catch (RemoteException e) {
                     Log.w(TAG, "Adding listener failed.");
                     return false;
                 }
-                mListeners.add(carInstrumentClusterEventListener);
+                mListeners.add(eventListener);
 
                 // The new listener needs to be told the instrument cluster parameters.
                 try {
                     // TODO: onStart and onStop methods might be triggered from vehicle HAL as well.
-                    carInstrumentClusterEventListener.listener.onStart(mInstrumentClusterInfo);
+                    eventListener.listener.onInstrumentClusterStart(mInstrumentClusterInfo);
                 } catch (RemoteException e) {
                     Log.e(TAG, "listener.onStart failed.");
                     return false;
@@ -116,8 +116,8 @@
     }
 
     @Override
-    public boolean unregisterEventListener(ICarNavigationStatusEventListener listener) {
-        CarNavigationStatusEventListener client;
+    public boolean unregisterEventListener(ICarNavigationEventListener listener) {
+        CarNavigationEventListener client;
         synchronized (mListeners) {
             client = findClientLocked(listener);
         }
@@ -125,12 +125,12 @@
     }
 
     @Override
-    public CarNavigationInstrumentCluster getInfo() {
+    public CarNavigationInstrumentCluster getInstrumentClusterInfo() {
         return mInstrumentClusterInfo;
     }
 
     @Override
-    public boolean isSupported() {
+    public boolean isInstrumentClusterSupported() {
         return mInstrumentClusterInfo != null;
     }
 
@@ -144,9 +144,9 @@
         }
     }
 
-    private boolean removeClient(CarNavigationStatusEventListener listener) {
+    private boolean removeClient(CarNavigationEventListener listener) {
         synchronized(mListeners) {
-            for (CarNavigationStatusEventListener currentListener : mListeners) {
+            for (CarNavigationEventListener currentListener : mListeners) {
                 // Use asBinder() for comparison.
                 if (currentListener == listener) {
                     currentListener.listener.asBinder().unlinkToDeath(currentListener, 0);
@@ -157,9 +157,9 @@
         return false;
     }
 
-    private CarNavigationStatusEventListener findClientLocked(
-            ICarNavigationStatusEventListener listener) {
-        for (CarNavigationStatusEventListener existingListener : mListeners) {
+    private CarNavigationEventListener findClientLocked(
+            ICarNavigationEventListener listener) {
+        for (CarNavigationEventListener existingListener : mListeners) {
             if (existingListener.listener.asBinder() == listener.asBinder()) {
                 return existingListener;
             }
@@ -168,10 +168,10 @@
     }
 
 
-    private class CarNavigationStatusEventListener implements IBinder.DeathRecipient {
-        final ICarNavigationStatusEventListener listener;
+    private class CarNavigationEventListener implements IBinder.DeathRecipient {
+        final ICarNavigationEventListener listener;
 
-        public CarNavigationStatusEventListener(ICarNavigationStatusEventListener listener) {
+        public CarNavigationEventListener(ICarNavigationEventListener listener) {
             this.listener = listener;
         }
 
diff --git a/service/src/com/android/car/CarNightService.java b/service/src/com/android/car/CarNightService.java
index b250b54..eb92fed 100644
--- a/service/src/com/android/car/CarNightService.java
+++ b/service/src/com/android/car/CarNightService.java
@@ -17,12 +17,12 @@
 package com.android.car;
 
 import android.app.UiModeManager;
+import android.car.Car;
+import android.car.CarNotConnectedException;
+import android.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorManager;
+import android.car.hardware.ICarSensorEventListener;
 import android.content.Context;
-import android.support.car.Car;
-import android.support.car.CarNotConnectedException;
-import android.support.car.hardware.CarSensorEvent;
-import android.support.car.hardware.CarSensorManager;
-import android.support.car.hardware.ICarSensorEventListener;
 import android.util.Log;
 
 import java.io.PrintWriter;
@@ -32,7 +32,6 @@
 public class CarNightService implements CarServiceBase {
 
     public static final boolean DBG = true;
-    private static final int VERSION = 1;
     private int mNightSetting = UiModeManager.MODE_NIGHT_YES;
     private final Context mContext;
     private final UiModeManager mUiModeManager;
@@ -82,7 +81,7 @@
         mCarSensorService = (CarSensorService) ICarImpl.getInstance(mContext).getCarService(
                 Car.SENSOR_SERVICE);
         mCarSensorService.registerOrUpdateSensorListener(CarSensorManager.SENSOR_TYPE_NIGHT,
-                CarSensorManager.SENSOR_RATE_NORMAL,VERSION,mICarSensorEventListener);
+                CarSensorManager.SENSOR_RATE_NORMAL, mICarSensorEventListener);
         CarSensorEvent currentState = mCarSensorService.getLatestSensorEvent(
                 CarSensorManager.SENSOR_TYPE_NIGHT);
         handleSensorEvent(currentState);
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index e748cc2..819e094 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -16,6 +16,7 @@
 package com.android.car;
 
 import android.annotation.NonNull;
+import android.car.Car;
 import android.content.Context;
 import android.hardware.display.DisplayManager;
 import android.os.Handler;
@@ -25,7 +26,6 @@
 import android.os.PowerManager;
 import android.os.PowerManager.WakeLock;
 import android.os.SystemClock;
-import android.support.car.CarSystemTest;
 import android.util.Log;
 import android.view.Display;
 
@@ -523,8 +523,7 @@
         if (!carImpl.isInMocking()) {
             return false;
         }
-        CarTestService testService = (CarTestService) carImpl.getCarService(
-                CarSystemTest.TEST_SERVICE);
+        CarTestService testService = (CarTestService) carImpl.getCarService(Car.TEST_SERVICE);
         return !testService.shouldDoRealShutdownInMocking();
     }
 
diff --git a/service/src/com/android/car/CarRadioService.java b/service/src/com/android/car/CarRadioService.java
index 7355d0f..3e5e6df 100644
--- a/service/src/com/android/car/CarRadioService.java
+++ b/service/src/com/android/car/CarRadioService.java
@@ -16,17 +16,16 @@
 
 package com.android.car;
 
+import android.car.Car;
+import android.car.hardware.radio.CarRadioEvent;
+import android.car.hardware.radio.CarRadioPreset;
+import android.car.hardware.radio.ICarRadio;
+import android.car.hardware.radio.ICarRadioEventListener;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
-import android.support.car.Car;
-import android.support.car.CarSystem;
-import android.support.car.hardware.radio.CarRadioEvent;
-import android.support.car.hardware.radio.CarRadioPreset;
-import android.support.car.hardware.radio.ICarRadio;
-import android.support.car.hardware.radio.ICarRadioEventListener;
 import android.util.Log;
 
 import com.android.car.hal.VehicleHal;
@@ -39,7 +38,6 @@
         implements CarServiceBase, RadioHalService.RadioListener {
     public static boolean DBG = true;
     public static String TAG = CarLog.TAG_RADIO + ".CarRadioService";
-    public static final int VERSION = 1;
 
     private RadioHalService mRadioHal;
     private final HashMap<IBinder, ICarRadioEventListener> mListenersMap =
@@ -98,17 +96,12 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public int getPresetCount() {
         return mRadioHal.getPresetCount();
     }
 
     @Override
-    public synchronized void registerListener(ICarRadioEventListener listener, int version) {
+    public synchronized void registerListener(ICarRadioEventListener listener) {
         if (DBG) {
             Log.d(TAG, "registerListener");
         }
@@ -209,10 +202,10 @@
 
     private void checkRadioPremissions() {
         if (getCallingUid() != Process.SYSTEM_UID &&
-            mContext.checkCallingOrSelfPermission(CarSystem.PERMISSION_CAR_RADIO) !=
+            mContext.checkCallingOrSelfPermission(Car.PERMISSION_CAR_RADIO) !=
             PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("requires system app or " +
-                CarSystem.PERMISSION_CAR_RADIO);
+                Car.PERMISSION_CAR_RADIO);
         }
     }
 }
diff --git a/service/src/com/android/car/CarSensorEventFactory.java b/service/src/com/android/car/CarSensorEventFactory.java
index 7940f9a..e270eba 100644
--- a/service/src/com/android/car/CarSensorEventFactory.java
+++ b/service/src/com/android/car/CarSensorEventFactory.java
@@ -16,7 +16,7 @@
 
 package com.android.car;
 
-import android.support.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorEvent;
 
 //TODO add memory pool and recycling
 public class CarSensorEventFactory {
diff --git a/service/src/com/android/car/CarSensorService.java b/service/src/com/android/car/CarSensorService.java
index 5e843f5..992c033 100644
--- a/service/src/com/android/car/CarSensorService.java
+++ b/service/src/com/android/car/CarSensorService.java
@@ -17,6 +17,12 @@
 package com.android.car;
 
 import android.Manifest;
+import android.car.Car;
+import android.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorManager;
+import android.car.hardware.ICarSensor;
+import android.car.hardware.ICarSensorEventListener;
+import android.car.hardware.CarSensorManager.CarSensorEventListener;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.hardware.SensorEvent;
@@ -29,12 +35,6 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
-import android.support.car.Car;
-import android.support.car.hardware.CarSensorEvent;
-import android.support.car.hardware.CarSensorManager;
-import android.support.car.hardware.ICarSensor;
-import android.support.car.hardware.ICarSensorEventListener;
-import android.support.car.hardware.CarSensorManager.CarSensorEventListener;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
@@ -79,8 +79,6 @@
      */
     private static final boolean ENABLE_DISPATCHING_LIMIT = false;
 
-    public static final int VERSION = 1;
-
     /** {@link #mSensorLock} is not waited forever for handling disconnection */
     private static final long MAX_SENSOR_LOCK_WAIT_MS = 1000;
 
@@ -279,15 +277,9 @@
         return mSupportedSensors;
     }
 
-
-    @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
     @Override
     public boolean registerOrUpdateSensorListener(int sensorType, int rate,
-            int clientVersion, ICarSensorEventListener listener) {
+            ICarSensorEventListener listener) {
         boolean shouldStartSensors = false;
         SensorRecord sensorRecord = null;
         SensorClient sensorClient = null;
diff --git a/service/src/com/android/car/CarService.java b/service/src/com/android/car/CarService.java
index 8e0f74a..e0feb8a 100644
--- a/service/src/com/android/car/CarService.java
+++ b/service/src/com/android/car/CarService.java
@@ -21,7 +21,7 @@
 import com.android.car.hal.VehicleHal;
 
 import android.app.Service;
-import android.support.car.Car;
+import android.car.Car;
 import android.content.Intent;
 import android.os.IBinder;
 import android.util.Log;
diff --git a/service/src/com/android/car/CarTestService.java b/service/src/com/android/car/CarTestService.java
index b272bbd..59a12f4 100644
--- a/service/src/com/android/car/CarTestService.java
+++ b/service/src/com/android/car/CarTestService.java
@@ -15,10 +15,10 @@
  */
 package com.android.car;
 
+import android.car.test.CarTestManager;
+import android.car.test.ICarTest;
 import android.content.Context;
 import android.util.Log;
-import android.support.car.CarTestManager;
-import android.support.car.ICarTest;
 
 import com.android.car.hal.VehicleHal;
 import com.android.car.vehiclenetwork.IVehicleNetworkHalMock;
@@ -33,7 +33,6 @@
  * requires accessing that level directly.
  */
 public class CarTestService extends ICarTest.Stub implements CarServiceBase {
-    private static final int VERSION = 1;
 
     private final Context mContext;
     private final VehicleNetwork mVehicleNetwork;
@@ -66,11 +65,6 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public void injectEvent(VehiclePropValueParcelable value) {
         ICarImpl.assertVehicleHalMockPermission(mContext);
         mVehicleNetwork.injectEvent(value.value);
diff --git a/service/src/com/android/car/DayNightModePolicy.java b/service/src/com/android/car/DayNightModePolicy.java
index c0859de..38a5332 100644
--- a/service/src/com/android/car/DayNightModePolicy.java
+++ b/service/src/com/android/car/DayNightModePolicy.java
@@ -16,11 +16,11 @@
 
 package com.android.car;
 
+import android.car.Car;
+import android.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorManager;
 import android.content.Context;
 import android.os.SystemClock;
-import android.support.car.Car;
-import android.support.car.hardware.CarSensorEvent;
-import android.support.car.hardware.CarSensorManager;
 import android.util.Log;
 
 import com.android.car.hal.SensorHalServiceBase.SensorListener;
diff --git a/service/src/com/android/car/DrivingStatePolicy.java b/service/src/com/android/car/DrivingStatePolicy.java
index 41f1e1a..2b2402f 100644
--- a/service/src/com/android/car/DrivingStatePolicy.java
+++ b/service/src/com/android/car/DrivingStatePolicy.java
@@ -16,12 +16,12 @@
 
 package com.android.car;
 
+import android.car.Car;
+import android.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorManager;
+import android.car.hardware.ICarSensorEventListener;
 import android.content.Context;
 import android.os.SystemClock;
-import android.support.car.Car;
-import android.support.car.hardware.CarSensorEvent;
-import android.support.car.hardware.CarSensorManager;
-import android.support.car.hardware.ICarSensorEventListener;
 import android.util.Log;
 
 import com.android.car.hal.SensorHalServiceBase.SensorListener;
@@ -141,7 +141,7 @@
             return false;
         }
         return mSensorService.registerOrUpdateSensorListener(sensorType, rate,
-                CarSensorService.VERSION, mICarSensorEventListener);
+                mICarSensorEventListener);
     }
 
     private synchronized void handleSensorEvent(CarSensorEvent event) {
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 7f83db2..fe8d7ef 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -16,15 +16,13 @@
 
 package com.android.car;
 
+import android.car.Car;
+import android.car.ICar;
+import android.car.ICarConnectionListener;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.car.Car;
-import android.support.car.CarSystem;
-import android.support.car.CarSystemTest;
-import android.support.car.ICar;
-import android.support.car.ICarConnectionListener;
 import android.util.Log;
 
 import com.android.car.hal.VehicleHal;
@@ -35,7 +33,6 @@
 import java.util.Collection;
 
 public class ICarImpl extends ICar.Stub {
-    private static final int VERSION = 1;
 
     @GuardedBy("ICarImpl.class")
     private static ICarImpl sInstance = null;
@@ -53,7 +50,7 @@
     private final AppContextService mAppContextService;
     private final CarPackageManagerService mCarPackageManagerService;
     private final GarageModeService mGarageModeService;
-    private final CarNavigationStatusService mCarNavigationStatusService;
+    private final CarNavigationService mCarNavigationStatusService;
 
     /** Test only service. Populate it only when necessary. */
     @GuardedBy("this")
@@ -93,7 +90,7 @@
         mCarRadioService = new CarRadioService(serviceContext);
         mCarNightService = new CarNightService(serviceContext);
         mCarPackageManagerService = new CarPackageManagerService(serviceContext);
-        mCarNavigationStatusService = new CarNavigationStatusService(serviceContext);
+        mCarNavigationStatusService = new CarNavigationService(serviceContext);
 
         // Be careful with order. Service depending on other service should be inited later.
         mAllServices = new CarServiceBase[] {
@@ -158,7 +155,7 @@
         for (BinderInterfaceContainer.BinderInterface<ICarConnectionListener> client :
                 connectionListeners) {
             try {
-                client.binderInterface.onConnected(Car.CONNECTION_TYPE_EMBEDDED);
+                client.binderInterface.onConnected();
             } catch (RemoteException e) {
                 //ignore
             }
@@ -166,11 +163,6 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public IBinder getCarService(String serviceName) {
         switch (serviceName) {
             case Car.AUDIO_SERVICE:
@@ -183,15 +175,15 @@
                 return mAppContextService;
             case Car.PACKAGE_SERVICE:
                 return mCarPackageManagerService;
-            case CarSystem.HVAC_SERVICE:
+            case Car.HVAC_SERVICE:
                 assertHvacPermission(mContext);
                 return mCarHvacService;
-            case CarSystem.RADIO_SERVICE:
+            case Car.RADIO_SERVICE:
                 assertRadioPermission(mContext);
                 return mCarRadioService;
             case Car.CAR_NAVIGATION_SERVICE:
                 return mCarNavigationStatusService;
-            case CarSystemTest.TEST_SERVICE: {
+            case Car.TEST_SERVICE: {
                 assertVehicleHalMockPermission(mContext);
                 synchronized (this) {
                     if (mCarTestService == null) {
@@ -212,15 +204,10 @@
     }
 
     @Override
-    public int getCarConnectionType() {
-        return Car.CONNECTION_TYPE_EMBEDDED;
-    }
-
-    @Override
-    public void registerCarConnectionListener(int clientVersion, ICarConnectionListener listener) {
-        mCarConnectionListeners.addBinder(clientVersion, listener);
+    public void registerCarConnectionListener(ICarConnectionListener listener) {
+        mCarConnectionListeners.addBinder(listener);
         try {
-            listener.onConnected(Car.CONNECTION_TYPE_EMBEDDED);
+            listener.onConnected();
         } catch (RemoteException e) {
             //ignore
         }
@@ -243,25 +230,25 @@
     }
 
     public static void assertVehicleHalMockPermission(Context context) {
-        if (context.checkCallingOrSelfPermission(CarSystemTest.PERMISSION_MOCK_VEHICLE_HAL)
+        if (context.checkCallingOrSelfPermission(Car.PERMISSION_MOCK_VEHICLE_HAL)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("requires CAR_MOCK_VEHICLE_HAL permission");
         }
     }
 
     public static void assertHvacPermission(Context context) {
-        if (context.checkCallingOrSelfPermission(CarSystem.PERMISSION_CAR_HVAC)
+        if (context.checkCallingOrSelfPermission(Car.PERMISSION_CAR_HVAC)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException(
-                    "requires " + CarSystem.PERMISSION_CAR_HVAC);
+                    "requires " + Car.PERMISSION_CAR_HVAC);
         }
     }
 
     private static void assertRadioPermission(Context context) {
-        if (context.checkCallingOrSelfPermission(CarSystem.PERMISSION_CAR_RADIO)
+        if (context.checkCallingOrSelfPermission(Car.PERMISSION_CAR_RADIO)
             != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException(
-                "requires permission " + CarSystem.PERMISSION_CAR_RADIO);
+                "requires permission " + Car.PERMISSION_CAR_RADIO);
         }
     }
 
diff --git a/service/src/com/android/car/hal/AudioHalService.java b/service/src/com/android/car/hal/AudioHalService.java
index b19368f..68c4d11 100644
--- a/service/src/com/android/car/hal/AudioHalService.java
+++ b/service/src/com/android/car/hal/AudioHalService.java
@@ -15,7 +15,7 @@
  */
 package com.android.car.hal;
 
-import android.support.car.media.CarAudioManager;
+import android.car.media.CarAudioManager;
 import android.util.Log;
 
 import com.android.car.AudioRoutingPolicy;
diff --git a/service/src/com/android/car/hal/HvacHalService.java b/service/src/com/android/car/hal/HvacHalService.java
index 060b637..958ce52 100644
--- a/service/src/com/android/car/hal/HvacHalService.java
+++ b/service/src/com/android/car/hal/HvacHalService.java
@@ -18,9 +18,9 @@
 import static com.android.car.vehiclenetwork.VehiclePropValueUtil.toFloatArray;
 import static com.android.car.vehiclenetwork.VehiclePropValueUtil.toIntArray;
 
-import android.support.car.hardware.hvac.CarHvacEvent;
-import android.support.car.hardware.hvac.CarHvacManager;
-import android.support.car.hardware.hvac.CarHvacProperty;
+import android.car.hardware.hvac.CarHvacEvent;
+import android.car.hardware.hvac.CarHvacManager;
+import android.car.hardware.hvac.CarHvacProperty;
 import android.util.Log;
 
 import com.android.car.CarLog;
diff --git a/service/src/com/android/car/hal/InfoHalService.java b/service/src/com/android/car/hal/InfoHalService.java
index 5540778..816e634 100644
--- a/service/src/com/android/car/hal/InfoHalService.java
+++ b/service/src/com/android/car/hal/InfoHalService.java
@@ -15,7 +15,7 @@
  */
 package com.android.car.hal;
 
-import android.support.car.CarInfoManager;
+import android.car.CarInfoManager;
 import android.util.Log;
 
 import com.android.car.CarLog;
diff --git a/service/src/com/android/car/hal/RadioHalService.java b/service/src/com/android/car/hal/RadioHalService.java
index feec521..9c3a4a3 100644
--- a/service/src/com/android/car/hal/RadioHalService.java
+++ b/service/src/com/android/car/hal/RadioHalService.java
@@ -16,12 +16,11 @@
 
 package com.android.car.hal;
 
+import android.car.hardware.radio.CarRadioEvent;
+import android.car.hardware.radio.CarRadioPreset;
 import android.util.Log;
 import android.hardware.radio.RadioManager;
 
-import android.support.car.hardware.radio.CarRadioEvent;
-import android.support.car.hardware.radio.CarRadioPreset;
-
 import com.android.car.CarLog;
 import com.android.car.vehiclenetwork.VehicleNetworkConsts;
 import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
diff --git a/service/src/com/android/car/hal/SensorHalService.java b/service/src/com/android/car/hal/SensorHalService.java
index 6418d30..05e7571 100644
--- a/service/src/com/android/car/hal/SensorHalService.java
+++ b/service/src/com/android/car/hal/SensorHalService.java
@@ -16,8 +16,8 @@
 
 package com.android.car.hal;
 
-import android.support.car.hardware.CarSensorEvent;
-import android.support.car.hardware.CarSensorManager;
+import android.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorManager;
 import android.util.Log;
 import android.util.SparseArray;
 
diff --git a/service/src/com/android/car/hal/SensorHalServiceBase.java b/service/src/com/android/car/hal/SensorHalServiceBase.java
index 3e2fee1..ff106fd 100644
--- a/service/src/com/android/car/hal/SensorHalServiceBase.java
+++ b/service/src/com/android/car/hal/SensorHalServiceBase.java
@@ -16,7 +16,7 @@
 
 package com.android.car.hal;
 
-import android.support.car.hardware.CarSensorEvent;
+import android.car.hardware.CarSensorEvent;
 
 import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
 import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
diff --git a/service/src/com/android/car/pm/AppBlockingPolicyProxy.java b/service/src/com/android/car/pm/AppBlockingPolicyProxy.java
index b9ea0f8..3ab7df4 100644
--- a/service/src/com/android/car/pm/AppBlockingPolicyProxy.java
+++ b/service/src/com/android/car/pm/AppBlockingPolicyProxy.java
@@ -15,6 +15,9 @@
  */
 package com.android.car.pm;
 
+import android.car.content.pm.CarAppBlockingPolicy;
+import android.car.content.pm.ICarAppBlockingPolicy;
+import android.car.content.pm.ICarAppBlockingPolicySetter;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -24,9 +27,6 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.support.car.content.pm.CarAppBlockingPolicy;
-import android.support.car.content.pm.ICarAppBlockingPolicy;
-import android.support.car.content.pm.ICarAppBlockingPolicySetter;
 import android.util.Log;
 
 import com.android.car.CarLog;
@@ -149,11 +149,6 @@
     }
 
     private class ICarAppBlockingPolicySetterImpl extends ICarAppBlockingPolicySetter.Stub {
-        private static final int VERSION = 1;
-        @Override
-        public int getVersion() {
-            return VERSION;
-        }
 
         @Override
         public void setAppBlockingPolicy(CarAppBlockingPolicy policy) {
diff --git a/service/src/com/android/car/pm/CarAppMetadataReader.java b/service/src/com/android/car/pm/CarAppMetadataReader.java
index 878dabc..b54e192 100644
--- a/service/src/com/android/car/pm/CarAppMetadataReader.java
+++ b/service/src/com/android/car/pm/CarAppMetadataReader.java
@@ -36,7 +36,7 @@
  */
 public class CarAppMetadataReader {
     /** Name of the meta-data attribute for the automotive application XML resource */
-    private static final String METADATA_ATTRIBUTE = "android.support.car.application";
+    private static final String METADATA_ATTRIBUTE = "android.car.application";
     /** Name of the tag to declare automotive usage */
     private static final String USES_TAG = "uses";
     /** Name of the attribute to name the usage type */
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 627bba5..8816502 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -15,6 +15,12 @@
  */
 package com.android.car.pm;
 
+import android.car.Car;
+import android.car.content.pm.AppBlockingPackageInfo;
+import android.car.content.pm.CarAppBlockingPolicy;
+import android.car.content.pm.CarAppBlockingPolicyService;
+import android.car.content.pm.CarPackageManager;
+import android.car.content.pm.ICarPackageManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
@@ -27,12 +33,6 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
-import android.support.car.Car;
-import android.support.car.content.pm.AppBlockingPackageInfo;
-import android.support.car.content.pm.CarAppBlockingPolicy;
-import android.support.car.content.pm.CarAppBlockingPolicyService;
-import android.support.car.content.pm.CarPackageManager;
-import android.support.car.content.pm.ICarPackageManager;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Pair;
@@ -53,7 +53,6 @@
 //TODO monitor app installing and refresh policy
 
 public class CarPackageManagerService extends ICarPackageManager.Stub implements CarServiceBase {
-    private static final int VERSION = 1;
     static final boolean DBG_POLICY_SET = true;
     static final boolean DBG_POLICY_CHECK = false;
 
@@ -89,11 +88,6 @@
     }
 
     @Override
-    public int getVersion() {
-        return VERSION;
-    }
-
-    @Override
     public void setAppBlockingPolicy(String packageName, CarAppBlockingPolicy policy, int flags) {
         if (DBG_POLICY_SET) {
             Log.i(CarLog.TAG_PACKAGE, "policy setting from binder call, client:" + packageName);
