diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 1f9ffab..9347c2e 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -126,7 +126,12 @@
             return;
         }
 
+        Bundle clientExtras = Bundle.EMPTY;
+        if (intent.hasExtra(TelecommConstants.EXTRA_INCOMING_CALL_EXTRAS)) {
+            clientExtras = intent.getBundleExtra(TelecommConstants.EXTRA_INCOMING_CALL_EXTRAS);
+        }
+
         Log.d(TAG, "Processing incoming call from call service [" + descriptor + "]");
-        mCallsManager.processIncomingCallIntent(descriptor);
+        mCallsManager.processIncomingCallIntent(descriptor, clientExtras);
     }
 }
diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index bb9d649..72e1041 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -16,9 +16,11 @@
 
 package com.android.telecomm;
 
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.telecomm.CallInfo;
+import android.telecomm.CallService;
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.ICallService;
 import android.telecomm.ICallServiceAdapter;
@@ -105,11 +107,11 @@
     }
 
     /** See {@link ICallService#setIncomingCallId}. */
-    public void setIncomingCallId(String callId) {
+    public void setIncomingCallId(String callId, Bundle extras) {
         if (isServiceValid("setIncomingCallId")) {
             mAdapter.addPendingIncomingCallId(callId);
             try {
-                mServiceInterface.setIncomingCallId(callId);
+                mServiceInterface.setIncomingCallId(callId, extras);
             } catch (RemoteException e) {
                 Log.e(TAG, "Failed to setIncomingCallId for call " + callId, e);
                 mAdapter.removePendingIncomingCallId(callId);
@@ -155,13 +157,16 @@
      * call-service adapter using the specified call ID. Upon failure, the specified error callback
      * is invoked. Can be invoked even when the call service is unbound.
      *
-     * @param callID The call ID used for the incoming call.
+     * @param callId The call ID used for the incoming call.
+     * @param extras The {@link CallService}-provided extras which need to be sent back.
      * @param errorCallback The callback invoked upon failure.
      */
-    void retrieveIncomingCall(final String callId, final Runnable errorCallback) {
+    void retrieveIncomingCall(final String callId, final Bundle extras,
+            final Runnable errorCallback) {
+
         BindCallback callback = new BindCallback() {
             @Override public void onSuccess() {
-                setIncomingCallId(callId);
+                setIncomingCallId(callId, extras);
             }
             @Override public void onFailure() {
                 errorCallback.run();
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index a592ee3..7381bdc 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -16,6 +16,7 @@
 
 package com.android.telecomm;
 
+import android.os.Bundle;
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.CallState;
 import android.util.Log;
@@ -101,15 +102,16 @@
      * to {@link #handleSuccessfulIncomingCall} to start the in-call UI.
      *
      * @param descriptor The descriptor of the call service to use for this incoming call.
+     * @param extras The optional extras Bundle passed with the intent used for the incoming call.
      */
-    void processIncomingCallIntent(CallServiceDescriptor descriptor) {
+    void processIncomingCallIntent(CallServiceDescriptor descriptor, Bundle extras) {
         Log.d(TAG, "processIncomingCallIntent");
         // Create a call with no handle. Eventually, switchboard will update the call with
         // additional information from the call service, but for now we just need one to pass around
         // with a unique call ID.
         Call call = new Call();
 
-        mSwitchboard.retrieveIncomingCall(call, descriptor);
+        mSwitchboard.retrieveIncomingCall(call, descriptor, extras);
     }
 
     /**
diff --git a/src/com/android/telecomm/IncomingCallsManager.java b/src/com/android/telecomm/IncomingCallsManager.java
index 13f1319..d82a7de 100644
--- a/src/com/android/telecomm/IncomingCallsManager.java
+++ b/src/com/android/telecomm/IncomingCallsManager.java
@@ -16,7 +16,9 @@
 
 package com.android.telecomm;
 
+import android.os.Bundle;
 import android.telecomm.CallInfo;
+import android.telecomm.CallService;
 import android.util.Log;
 
 import com.google.common.base.Preconditions;
@@ -53,8 +55,10 @@
      * Starts the timeout sequence in case the call service is unresponsive.
      *
      * @param call The call object.
+     * @param extras The optional extras passed with the incoming call intent (to be returned to
+     *     the call service via {@link CallService#setIncomingCallId(String, android.os.Bundle)}).
      */
-    void retrieveIncomingCall(final Call call) {
+    void retrieveIncomingCall(final Call call, Bundle extras) {
         ThreadUtil.checkOnMainThread();
         Log.d(TAG, "retrieveIncomingCall");
 
@@ -71,7 +75,7 @@
         };
 
         // TODO(gilad): call.retrieve*Call() seems a bit unusual, consider revisiting.
-        call.getCallService().retrieveIncomingCall(callId, errorCallback);
+        call.getCallService().retrieveIncomingCall(callId, extras, errorCallback);
     }
 
     /**
diff --git a/src/com/android/telecomm/Switchboard.java b/src/com/android/telecomm/Switchboard.java
index 4967c36..a9889c5 100644
--- a/src/com/android/telecomm/Switchboard.java
+++ b/src/com/android/telecomm/Switchboard.java
@@ -20,10 +20,12 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.ICallServiceSelector;
+import android.telecomm.TelecommConstants;
 import android.util.Log;
 
 import java.util.Collection;
@@ -155,14 +157,16 @@
      *
      * @param call The call object.
      * @param descriptor The relevant call-service descriptor.
+     * @param extras The optional extras passed via
+     *     {@link TelecommConstants#EXTRA_INCOMING_CALL_EXTRAS}
      */
-    void retrieveIncomingCall(Call call, CallServiceDescriptor descriptor) {
+    void retrieveIncomingCall(Call call, CallServiceDescriptor descriptor, Bundle extras) {
         Log.d(TAG, "retrieveIncomingCall");
         mBinderDeallocator.acquireUsePermit();
 
         CallServiceWrapper callService = mCallServiceRepository.getCallService(descriptor);
         call.setCallService(callService);
-        mIncomingCallsManager.retrieveIncomingCall(call);
+        mIncomingCallsManager.retrieveIncomingCall(call, extras);
     }
 
     /**
