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(),
