diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 09f60cf..4265c65 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -27,7 +27,6 @@
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.CallState;
 import android.telecomm.GatewayInfo;
-import android.telecomm.InCallService;
 import android.telecomm.Response;
 import android.telecomm.Subscription;
 import android.telecomm.TelecommConstants;
@@ -35,10 +34,10 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
+import com.android.internal.telecomm.ICallVideoProvider;
 import com.android.internal.telephony.CallerInfo;
 import com.android.internal.telephony.CallerInfoAsyncQuery;
 import com.android.internal.telephony.CallerInfoAsyncQuery.OnQueryCompleteListener;
-
 import com.android.internal.telephony.SmsApplication;
 import com.android.telecomm.ContactsAsyncHelper.OnImageLoadCompleteListener;
 import com.google.common.base.Preconditions;
@@ -74,6 +73,7 @@
         void onParentChanged(Call call);
         void onChildrenChanged(Call call);
         void onCannedSmsResponsesLoaded(Call call);
+        void onCallVideoProviderChanged(Call call);
     }
 
     private static final OnQueryCompleteListener sCallerInfoQueryListener =
@@ -206,6 +206,8 @@
     /** Whether an attempt has been made to load the text message responses. */
     private boolean mCannedSmsResponsesLoadingStarted = false;
 
+    private ICallVideoProvider mCallVideoProvider;
+
     /**
      * Creates an empty call object.
      *
@@ -1053,7 +1055,17 @@
     /**
      * Sets a call video provider for the call.
      */
-    public void setCallVideoProvider() {
-        //TODO: Implement this method. For now, it's just an empty stub.
+    public void setCallVideoProvider(ICallVideoProvider callVideoProvider) {
+        mCallVideoProvider = callVideoProvider;
+        for (Listener l : mListeners) {
+            l.onCallVideoProviderChanged(Call.this);
+        }
+    }
+
+    /**
+     * @return Return the call video Provider binder.
+     */
+    public ICallVideoProvider getCallVideoProvider() {
+        return mCallVideoProvider;
     }
 }
diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index 365a5ce..5970846 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -287,8 +287,9 @@
                         SomeArgs args = (SomeArgs) msg.obj;
                         try {
                             call = mCallIdMapper.getCall(args.arg1);
+                            ICallVideoProvider callVideoProvider = (ICallVideoProvider) args.arg2;
                             if (call != null) {
-                                call.setCallVideoProvider();
+                                call.setCallVideoProvider(callVideoProvider);
                             }
                         } finally {
                             args.recycle();
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index d53b583..26f627f 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -65,6 +65,7 @@
         void onIsConferenceCapableChanged(Call call, boolean isConferenceCapable);
         void onIsConferencedChanged(Call call);
         void onCannedSmsResponsesLoaded(Call call);
+        void onCallVideoProviderChanged(Call call);
     }
 
     private static final CallsManager INSTANCE = new CallsManager();
@@ -225,6 +226,13 @@
         }
     }
 
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+        for (CallsManagerListener listener : mListeners) {
+            listener.onCallVideoProviderChanged(call);
+        }
+    }
+
     ImmutableCollection<Call> getCalls() {
         return ImmutableList.copyOf(mCalls);
     }
diff --git a/src/com/android/telecomm/CallsManagerListenerBase.java b/src/com/android/telecomm/CallsManagerListenerBase.java
index 55fa0a1..26d122b 100644
--- a/src/com/android/telecomm/CallsManagerListenerBase.java
+++ b/src/com/android/telecomm/CallsManagerListenerBase.java
@@ -86,4 +86,9 @@
     @Override
     public void onCannedSmsResponsesLoaded(Call call) {
     }
+
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+
+    }
 }
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index bd41dcc..871bf75 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -162,6 +162,11 @@
         updateCall(call);
     }
 
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+        updateCall(call);
+    }
+
     void bringToForeground(boolean showDialpad) {
         if (mInCallService != null) {
             try {
@@ -311,7 +316,8 @@
         return new InCallCall(callId, state, call.getDisconnectCause(), call.getDisconnectMessage(),
                 call.getCannedSmsResponses(), capabilities, connectTimeMillis, call.getHandle(),
                 call.getGatewayInfo(), call.getSubscription(), descriptor,
-                call.getHandoffCallServiceDescriptor(), parentCallId, childCallIds);
+                call.getHandoffCallServiceDescriptor(), call.getCallVideoProvider(),
+                parentCallId, childCallIds);
     }
 
 }
