diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index b434ac3..d76e314 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -35,7 +35,7 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
-import com.android.internal.telecomm.ICallVideoProvider;
+import com.android.internal.telecomm.IVideoCallProvider;
 import com.android.internal.telephony.CallerInfo;
 import com.android.internal.telephony.CallerInfoAsyncQuery;
 import com.android.internal.telephony.CallerInfoAsyncQuery.OnQueryCompleteListener;
@@ -74,7 +74,7 @@
         void onParentChanged(Call call);
         void onChildrenChanged(Call call);
         void onCannedSmsResponsesLoaded(Call call);
-        void onCallVideoProviderChanged(Call call);
+        void onVideoCallProviderChanged(Call call);
         void onCallerInfoChanged(Call call);
         void onAudioModeIsVoipChanged(Call call);
         void onStatusHintsChanged(Call call);
@@ -113,7 +113,7 @@
         @Override
         public void onCannedSmsResponsesLoaded(Call call) {}
         @Override
-        public void onCallVideoProviderChanged(Call call) {}
+        public void onVideoCallProviderChanged(Call call) {}
         @Override
         public void onCallerInfoChanged(Call call) {}
         @Override
@@ -260,7 +260,7 @@
     /** Whether an attempt has been made to load the text message responses. */
     private boolean mCannedSmsResponsesLoadingStarted = false;
 
-    private ICallVideoProvider mCallVideoProvider;
+    private IVideoCallProvider mVideoCallProvider;
 
     private boolean mAudioModeIsVoip;
     private StatusHints mStatusHints;
@@ -577,7 +577,8 @@
         setHandle(connection.getHandle(), connection.getHandlePresentation());
         setCallerDisplayName(
                 connection.getCallerDisplayName(), connection.getCallerDisplayNamePresentation());
-        setCallVideoProvider(connection.getCallVideoProvider());
+
+        setVideoCallProvider(connection.getVideoCallProvider());
         setVideoState(connection.getVideoState());
 
         if (mIsIncoming) {
@@ -1060,20 +1061,20 @@
     }
 
     /**
-     * Sets a call video provider for the call.
+     * Sets a video call provider for the call.
      */
-    public void setCallVideoProvider(ICallVideoProvider callVideoProvider) {
-        mCallVideoProvider = callVideoProvider;
+    public void setVideoCallProvider(IVideoCallProvider videoCallProvider) {
+        mVideoCallProvider = videoCallProvider;
         for (Listener l : mListeners) {
-            l.onCallVideoProviderChanged(Call.this);
+            l.onVideoCallProviderChanged(Call.this);
         }
     }
 
     /**
-     * @return Return the call video Provider binder.
+     * @return Return the {@link VideoCallProvider} binder.
      */
-    public ICallVideoProvider getCallVideoProvider() {
-        return mCallVideoProvider;
+    public IVideoCallProvider getVideoCallProvider() {
+        return mVideoCallProvider;
     }
 
     /**
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index a78f928..b2a2bf0 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -33,9 +33,9 @@
 import android.telephony.DisconnectCause;
 
 import com.android.internal.os.SomeArgs;
-import com.android.internal.telecomm.ICallVideoProvider;
 import com.android.internal.telecomm.IConnectionService;
 import com.android.internal.telecomm.IConnectionServiceAdapter;
+import com.android.internal.telecomm.IVideoCallProvider;
 import com.android.internal.telecomm.RemoteServiceCallback;
 import com.google.common.base.Preconditions;
 
@@ -250,9 +250,9 @@
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
                         call = mCallIdMapper.getCall(args.arg1);
-                        ICallVideoProvider callVideoProvider = (ICallVideoProvider) args.arg2;
+                        IVideoCallProvider videoCallProvider = (IVideoCallProvider) args.arg2;
                         if (call != null) {
-                            call.setCallVideoProvider(callVideoProvider);
+                            call.setVideoCallProvider(videoCallProvider);
                         }
                     } finally {
                         args.recycle();
@@ -373,12 +373,12 @@
         }
 
         @Override
-        public void setCallVideoProvider(String callId, ICallVideoProvider callVideoProvider) {
-            logIncoming("setCallVideoProvider %s", callId);
+        public void setVideoCallProvider(String callId, IVideoCallProvider videoCallProvider) {
+            logIncoming("setVideoCallProvider %s", callId);
             mCallIdMapper.checkValidCallId(callId);
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = callId;
-            args.arg2 = callVideoProvider;
+            args.arg2 = videoCallProvider;
             mHandler.obtainMessage(MSG_SET_CALL_VIDEO_PROVIDER, args).sendToTarget();
         }
 
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index 8442597..10ea443 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -73,7 +73,7 @@
         }
 
         @Override
-        public void onCallVideoProviderChanged(Call call) {
+        public void onVideoCallProviderChanged(Call call) {
             updateCall(call);
         }
 
@@ -350,7 +350,7 @@
                 call.getCallerDisplayNamePresentation(),
                 call.getGatewayInfo(),
                 call.getPhoneAccount(),
-                call.getCallVideoProvider(),
+                call.getVideoCallProvider(),
                 parentCallId,
                 childCallIds,
                 call.getStatusHints(),
diff --git a/tests/src/com/android/telecomm/testapps/TestConnectionService.java b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
index 803c380..43c1d21 100644
--- a/tests/src/com/android/telecomm/testapps/TestConnectionService.java
+++ b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
@@ -137,7 +137,7 @@
         private final RemoteConnection mRemoteConnection;
 
         /** Used to cleanup camera and media when done with connection. */
-        private TestCallVideoProvider mTestCallVideoProvider;
+        private TestVideoCallProvider mTestVideoCallProvider;
 
         TestConnection(RemoteConnection remoteConnection, int initialState) {
             mRemoteConnection = remoteConnection;
@@ -255,17 +255,17 @@
             }
         }
 
-        public void setTestCallVideoProvider(TestCallVideoProvider testCallVideoProvider) {
-            mTestCallVideoProvider = testCallVideoProvider;
+        public void setTestVideoCallProvider(TestVideoCallProvider testVideoCallProvider) {
+            mTestVideoCallProvider = testVideoCallProvider;
         }
 
         /**
          * Stops playback of test videos.
          */
         private void stopAndCleanupMedia() {
-            if (mTestCallVideoProvider != null) {
-                mTestCallVideoProvider.stopAndCleanupMedia();
-                mTestCallVideoProvider.stopCamera();
+            if (mTestVideoCallProvider != null) {
+                mTestVideoCallProvider.stopAndCleanupMedia();
+                mTestVideoCallProvider.stopCamera();
             }
         }
     }
@@ -466,12 +466,12 @@
 
             TestConnection connection = new TestConnection(null, Connection.State.RINGING);
             if (isVideoCall) {
-                TestCallVideoProvider testCallVideoProvider =
-                        new TestCallVideoProvider(getApplicationContext());
-                connection.setCallVideoProvider(testCallVideoProvider);
+                TestVideoCallProvider testVideoCallProvider =
+                        new TestVideoCallProvider(getApplicationContext());
+                connection.setVideoCallProvider(testVideoCallProvider);
 
                 // Keep reference to original so we can clean up the media players later.
-                connection.setTestCallVideoProvider(testCallVideoProvider);
+                connection.setTestVideoCallProvider(testVideoCallProvider);
             }
 
             // Assume all calls are video capable.
diff --git a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java b/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
similarity index 91%
rename from tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
rename to tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
index 3f83bb9..ad4814d 100644
--- a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
+++ b/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
@@ -31,11 +31,9 @@
 import android.hardware.camera2.TotalCaptureResult;
 import android.media.MediaPlayer;
 import android.os.Handler;
-import android.os.RemoteException;
 import android.telecomm.CallCameraCapabilities;
-import android.telecomm.CallVideoClient;
-import android.telecomm.CallVideoProvider;
-import android.telecomm.RemoteCallVideoClient;
+import android.telecomm.InCallService.VideoCall;
+import android.telecomm.VideoCallProvider;
 import android.telecomm.VideoCallProfile;
 import android.text.TextUtils;
 import android.util.Log;
@@ -46,10 +44,9 @@
 import java.util.Random;
 
 /**
- * Implements the CallVideoProvider.
+ * Implements the VideoCallProvider.
  */
-public class TestCallVideoProvider extends CallVideoProvider {
-    private RemoteCallVideoClient mCallVideoClient;
+public class TestVideoCallProvider extends VideoCallProvider {
     private CallCameraCapabilities mCapabilities;
     private Random random;
     private Surface mDisplaySurface;
@@ -67,21 +64,13 @@
 
     private static final long SESSION_TIMEOUT_MS = 2000;
 
-    public TestCallVideoProvider(Context context) {
+    public TestVideoCallProvider(Context context) {
         mContext = context;
         mCapabilities = new CallCameraCapabilities(false /* zoomSupported */, 0 /* maxZoom */);
         random = new Random();
         mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
     }
 
-    /**
-     * Save the reference to the CallVideoClient so callback can be invoked.
-     */
-    @Override
-    public void onSetCallVideoClient(RemoteCallVideoClient callVideoClient) {
-        mCallVideoClient = callVideoClient;
-    }
-
     @Override
     public void onSetCamera(String cameraId) {
         log("Set camera to " + cameraId);
@@ -145,7 +134,7 @@
             mCapabilities = new CallCameraCapabilities(true /* zoomSupported */, value);
         }
 
-        mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
+        changeCameraCapabilities(mCapabilities);
     }
 
     /**
@@ -158,8 +147,8 @@
 
         VideoCallProfile responseProfile = new VideoCallProfile(
                 requestProfile.getVideoState(), requestProfile.getQuality());
-        mCallVideoClient.receiveSessionModifyResponse(
-                CallVideoClient.SESSION_MODIFY_REQUEST_SUCCESS,
+        receiveSessionModifyResponse(
+                VideoCall.SESSION_MODIFY_REQUEST_SUCCESS,
                 requestProfile,
                 responseProfile);
     }
@@ -175,7 +164,7 @@
     @Override
     public void onRequestCameraCapabilities() {
         log("Requested camera capabilities");
-        mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
+        changeCameraCapabilities(mCapabilities);
     }
 
     /**
@@ -185,7 +174,7 @@
     public void onRequestCallDataUsage() {
         log("Requested call data usage");
         int dataUsageKb = (10 *1024) + random.nextInt(50 * 1024);
-        mCallVideoClient.updateCallDataUsage(dataUsageKb);
+        changeCallDataUsage(dataUsageKb);
     }
 
     /**
