diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 9cd5d6f..27ed0d7 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -24,8 +24,10 @@
 import android.os.Handler;
 import android.telecomm.CallPropertyPresentation;
 import android.telecomm.CallState;
+import android.telecomm.Connection;
 import android.telecomm.ConnectionRequest;
 import android.telecomm.GatewayInfo;
+import android.telecomm.ParcelableConnection;
 import android.telecomm.PhoneAccountHandle;
 import android.telecomm.Response;
 import android.telecomm.StatusHints;
@@ -567,9 +569,15 @@
     }
 
     @Override
-    public void handleCreateConnectionSuccessful(ConnectionRequest request) {
+    public void handleCreateConnectionSuccessful(
+            ConnectionRequest request, ParcelableConnection connection) {
         mCreateConnectionProcessor = null;
-        mPhoneAccountHandle = request.getAccountHandle();
+        setState(getStateFromConnectionState(connection.getState()));
+        setPhoneAccount(connection.getPhoneAccount());
+        setHandle(connection.getHandle(), connection.getHandlePresentation());
+        setCallerDisplayName(
+                connection.getCallerDisplayName(), connection.getCallerDisplayNamePresentation());
+        setCallVideoProvider(connection.getCallVideoProvider());
 
         if (mIsIncoming) {
             // We do not handle incoming calls immediately when they are verified by the connection
@@ -578,9 +586,6 @@
             // the user or if we want to reject the call.
             mDirectToVoicemailQueryPending = true;
 
-            // Setting the handle triggers the caller info lookup code.
-            setHandle(request.getHandle(), request.getHandlePresentation());
-
             // Timeout the direct-to-voicemail lookup execution so that we dont wait too long before
             // showing the user the incoming call screen.
             mHandler.postDelayed(mDirectToVoicemailRunnable, Timeouts.getDirectToVoicemailMillis());
@@ -1144,4 +1149,22 @@
             Log.w(this, "startActivityFromInCall, activity intent required");
         }
     }
+
+    private CallState getStateFromConnectionState(int state) {
+        switch (state) {
+            case Connection.State.ACTIVE:
+                return CallState.ACTIVE;
+            case Connection.State.DIALING:
+                return CallState.DIALING;
+            case Connection.State.DISCONNECTED:
+                return CallState.DISCONNECTED;
+            case Connection.State.HOLDING:
+                return CallState.ON_HOLD;
+            case Connection.State.NEW:
+                return CallState.NEW;
+            case Connection.State.RINGING:
+                return CallState.RINGING;
+        }
+        return CallState.DISCONNECTED;
+    }
 }
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index 0dbe1b7..eca7e09 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -28,6 +28,7 @@
 import android.telecomm.ConnectionRequest;
 import android.telecomm.ConnectionService;
 import android.telecomm.GatewayInfo;
+import android.telecomm.ParcelableConnection;
 import android.telecomm.StatusHints;
 import android.telephony.DisconnectCause;
 
@@ -82,12 +83,16 @@
             Call call;
             switch (msg.what) {
                 case MSG_HANDLE_CREATE_CONNECTION_SUCCESSFUL: {
-                    ConnectionRequest request = (ConnectionRequest) msg.obj;
-                    if (mPendingResponses.containsKey(request.getCallId())) {
-                        mPendingResponses.remove(
-                                request.getCallId()).handleCreateConnectionSuccessful(request);
-                    } else {
-                        //Log.w(this, "handleCreateConnectionSuccessful, unknown call: %s", callId);
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        ConnectionRequest request = (ConnectionRequest) args.arg1;
+                        if (mPendingResponses.containsKey(request.getCallId())) {
+                            ParcelableConnection connection = (ParcelableConnection) args.arg2;
+                            mPendingResponses.remove(request.getCallId()).
+                                    handleCreateConnectionSuccessful(request, connection);
+                        }
+                    } finally {
+                        args.recycle();
                     }
                     break;
                 }
@@ -325,10 +330,15 @@
 
     private final class Adapter extends IConnectionServiceAdapter.Stub {
         @Override
-        public void handleCreateConnectionSuccessful(ConnectionRequest request) {
+        public void handleCreateConnectionSuccessful(
+                ConnectionRequest request, ParcelableConnection connection) {
+
             logIncoming("handleCreateConnectionSuccessful %s", request);
             mCallIdMapper.checkValidCallId(request.getCallId());
-            mHandler.obtainMessage(MSG_HANDLE_CREATE_CONNECTION_SUCCESSFUL, request).sendToTarget();
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = request;
+            args.arg2 = connection;
+            mHandler.obtainMessage(MSG_HANDLE_CREATE_CONNECTION_SUCCESSFUL, args).sendToTarget();
         }
 
         @Override
diff --git a/src/com/android/telecomm/CreateConnectionProcessor.java b/src/com/android/telecomm/CreateConnectionProcessor.java
index d0af6f0..5969b46 100644
--- a/src/com/android/telecomm/CreateConnectionProcessor.java
+++ b/src/com/android/telecomm/CreateConnectionProcessor.java
@@ -16,9 +16,10 @@
 
 package com.android.telecomm;
 
+import android.telecomm.ConnectionRequest;
+import android.telecomm.ParcelableConnection;
 import android.telecomm.PhoneAccountHandle;
 import android.telephony.DisconnectCause;
-import android.telecomm.ConnectionRequest;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -129,12 +130,13 @@
         }
 
         @Override
-        public void handleCreateConnectionSuccessful(ConnectionRequest request) {
+        public void handleCreateConnectionSuccessful(
+                ConnectionRequest request, ParcelableConnection connection) {
             if (mResponse == null) {
                 mService.abort(mCall);
             } else {
-                mResponse.handleCreateConnectionSuccessful(request);
-                mResponse= null;
+                mResponse.handleCreateConnectionSuccessful(request, connection);
+                mResponse = null;
             }
         }
 
diff --git a/src/com/android/telecomm/CreateConnectionResponse.java b/src/com/android/telecomm/CreateConnectionResponse.java
index caf2c1a..380f42c 100644
--- a/src/com/android/telecomm/CreateConnectionResponse.java
+++ b/src/com/android/telecomm/CreateConnectionResponse.java
@@ -17,12 +17,14 @@
 package com.android.telecomm;
 
 import android.telecomm.ConnectionRequest;
+import android.telecomm.ParcelableConnection;
 
 /**
  * A callback for providing the result of creating a connection.
  */
 interface CreateConnectionResponse {
-    void handleCreateConnectionSuccessful(ConnectionRequest request);
+    void handleCreateConnectionSuccessful(
+            ConnectionRequest request, ParcelableConnection connection);
     void handleCreateConnectionFailed(int code, String msg);
     void handleCreateConnectionCancelled();
 }
