diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ee47f18..c0cdc3e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -585,5 +585,11 @@
             </intent-filter>
         </provider>
 
+        <receiver android:name="com.android.services.telephony.AddAccountsReceiver">
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </receiver>
     </application>
 </manifest>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2825a7e..70dcfc2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -125,7 +125,7 @@
     <!-- Label for the "Network settings" screen in the Settings UI -->
     <string name="settings_label">Network settings</string>
     <!-- Label for connection service setting -->
-    <string name="connection_service">Connection service to use</string>
+    <string name="phone_accounts">Phone account settings</string>
     <!-- Built-in label for the default connection service setting. -->
     <string name="connection_service_default_label">Built-in connection service</string>
     <!-- Call settings screen, setting option name -->
diff --git a/res/xml/call_feature_setting.xml b/res/xml/call_feature_setting.xml
index 6c1b570..30811e4 100644
--- a/res/xml/call_feature_setting.xml
+++ b/res/xml/call_feature_setting.xml
@@ -41,11 +41,13 @@
       android:title="@string/other_settings"
       android:persistent="false" />
 
-  <ListPreference
-      android:key="button_connection_service"
-      android:title="@string/connection_service"
-      android:defaultValue="@string/connection_service_default"
-      android:persistent="true" />
+    <Preference
+            android:key="phone_accounts"
+            android:title="@string/phone_accounts" >
+        <intent
+                android:targetClass="com.android.telecomm.PhoneAccountPreferencesActivity"
+                android:targetPackage="com.android.telecomm" />
+    </Preference>
 
   <PreferenceScreen
       android:key="button_voicemail_category_key"
diff --git a/sip/src/com/android/services/telephony/sip/SipConnection.java b/sip/src/com/android/services/telephony/sip/SipConnection.java
index 5bca97b..699090f 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnection.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnection.java
@@ -144,11 +144,11 @@
     }
 
     @Override
-    protected void onAnswer() {
+    protected void onAnswer(int videoState) {
         if (VERBOSE) log("onAnswer");
         try {
             if (isValidRingingCall() && getPhone() != null) {
-                getPhone().acceptCall();
+                getPhone().acceptCall(videoState);
             }
         } catch (CallStateException e) {
             log("onAnswer, exception: " + e);
diff --git a/sip/src/com/android/services/telephony/sip/SipConnectionService.java b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
index a46180d..a87b398 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnectionService.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
@@ -48,9 +48,7 @@
     static PhoneAccount getPhoneAccount(Context context) {
         return new PhoneAccount(
                 new ComponentName(context, SipConnectionService.class),
-                null /* id */,
-                null /* handle */,
-                PhoneAccount.CAPABILITY_CALL_PROVIDER);
+                null /* id */);
     }
 
     @Override
diff --git a/src/com/android/phone/CdmaOptions.java b/src/com/android/phone/CdmaOptions.java
index 3e3c8b5..8971fa4 100644
--- a/src/com/android/phone/CdmaOptions.java
+++ b/src/com/android/phone/CdmaOptions.java
@@ -43,6 +43,7 @@
     private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key";
     private static final String BUTTON_CDMA_SUBSCRIPTION_KEY = "cdma_subscription_key";
     private static final String BUTTON_CDMA_ACTIVATE_DEVICE_KEY = "cdma_activate_device_key";
+    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
 
     private PreferenceActivity mPrefActivity;
     private PreferenceScreen mPrefScreen;
@@ -83,6 +84,16 @@
             mPrefScreen.removePreference(
                     mPrefScreen.findPreference(BUTTON_CDMA_ACTIVATE_DEVICE_KEY));
         }
+
+        // Read platform settings for carrier settings
+        final boolean isCarrierSettingsEnabled = mPrefActivity.getResources().getBoolean(
+                R.bool.config_carrier_settings_enable);
+        if (!isCarrierSettingsEnabled) {
+            Preference pref = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
+            if (pref != null) {
+                mPrefScreen.removePreference(pref);
+            }
+        }
     }
 
     private boolean deviceSupportsNvAndRuim() {
diff --git a/src/com/android/phone/GsmUmtsOptions.java b/src/com/android/phone/GsmUmtsOptions.java
index 6829dec..6791f27 100644
--- a/src/com/android/phone/GsmUmtsOptions.java
+++ b/src/com/android/phone/GsmUmtsOptions.java
@@ -36,6 +36,7 @@
 
     private static final String BUTTON_APN_EXPAND_KEY = "button_apn_key";
     private static final String BUTTON_OPERATOR_SELECTION_EXPAND_KEY = "button_carrier_sel_key";
+    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
     private PreferenceActivity mPrefActivity;
     private PreferenceScreen mPrefScreen;
 
@@ -80,6 +81,16 @@
                           .findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY));
                 }
             }
+
+            // Read platform settings for carrier settings
+            final boolean isCarrierSettingsEnabled = mPrefActivity.getResources().getBoolean(
+                    R.bool.config_carrier_settings_enable);
+            if (!isCarrierSettingsEnabled) {
+                Preference pref = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
+                if (pref != null) {
+                    mPrefScreen.removePreference(pref);
+                }
+            }
         }
     }
 
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index c225eb4..492ccc5 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -71,7 +71,6 @@
     private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
     private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
     private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
-    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
 
     static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
 
@@ -333,16 +332,6 @@
             android.util.Log.d(LOG_TAG, "keep ltePref");
         }
 
-        // Read platform settings for carrier settings
-        final boolean isCarrierSettingsEnabled = getResources().getBoolean(
-                R.bool.config_carrier_settings_enable);
-        if (!isCarrierSettingsEnabled) {
-            Preference pref = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
-            if (pref != null) {
-                prefSet.removePreference(pref);
-            }
-        }
-
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
             // android.R.id.home will be triggered in onOptionsItemSelected()
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index a8d9598..8e25be9 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1618,6 +1618,10 @@
         if (DBG) log("setPreferredNetworkType: type " + networkType);
         Boolean success = (Boolean) sendRequest(CMD_SET_PREFERRED_NETWORK_TYPE, networkType);
         if (DBG) log("setPreferredNetworkType: " + (success ? "ok" : "fail"));
+        if (success) {
+            Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+                    Settings.Global.PREFERRED_NETWORK_MODE, networkType);
+        }
         return success;
     }
 
diff --git a/src/com/android/phone/SimContacts.java b/src/com/android/phone/SimContacts.java
index ebfc775..bebb6ea 100644
--- a/src/com/android/phone/SimContacts.java
+++ b/src/com/android/phone/SimContacts.java
@@ -59,10 +59,6 @@
 public class SimContacts extends ADNList {
     private static final String LOG_TAG = "SimContacts";
 
-    private static final String UP_ACTIVITY_PACKAGE = "com.android.contacts";
-    private static final String UP_ACTIVITY_CLASS =
-            "com.android.contacts.activities.PeopleActivity";
-
     static final ContentValues sEmptyContentValues = new ContentValues();
 
     private static final int MENU_IMPORT_ONE = 1;
@@ -274,11 +270,7 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case android.R.id.home:
-                Intent intent = new Intent();
-                intent.setClassName(UP_ACTIVITY_PACKAGE, UP_ACTIVITY_CLASS);
-                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(intent);
-                finish();
+                onBackPressed();
                 return true;
             case MENU_IMPORT_ALL:
                 CharSequence title = getString(R.string.importAllSimEntries);
diff --git a/src/com/android/services/telephony/AddAccountsReceiver.java b/src/com/android/services/telephony/AddAccountsReceiver.java
new file mode 100644
index 0000000..2e635c7
--- /dev/null
+++ b/src/com/android/services/telephony/AddAccountsReceiver.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony;
+
+import com.android.phone.R;
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.telecomm.PhoneAccount;
+import android.telecomm.PhoneAccountMetadata;
+import android.telecomm.TelecommManager;
+
+public class AddAccountsReceiver extends BroadcastReceiver {
+
+    private static String SCHEME_TEL = "tel";
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Log.d(this, "onReceive");
+        try {
+            TelecommManager telecommManager = TelecommManager.from(context);
+            telecommManager.clearAccounts(context.getPackageName());
+            PhoneAccountMetadata[] accounts = makeAccounts(context);
+            for (int i = 0; i < accounts.length; i++) {
+                telecommManager.registerPhoneAccount(accounts[i]);
+            }
+        } catch (Exception e) {
+            Log.e(this, e, "onReceive");
+            throw e;
+        }
+    }
+
+    public static PhoneAccountMetadata[] makeAccounts(Context context) {
+        ComponentName componentName = new ComponentName(
+                context.getPackageName(),
+                TelephonyConnectionService.class.getName());
+        return new PhoneAccountMetadata[]{
+                new PhoneAccountMetadata(
+                        new PhoneAccount(componentName, "sim_0"),
+                        Uri.fromParts(SCHEME_TEL, "650-555-1212", null),
+                        PhoneAccountMetadata.CAPABILITY_CALL_PROVIDER,
+                        R.drawable.fab_ic_call,
+                        "Zero SIM Account",
+                        "Short description for SIM card zero",
+                        false),
+                new PhoneAccountMetadata(
+                        new PhoneAccount(componentName, "sim_1"),
+                        Uri.fromParts(SCHEME_TEL, "650-555-1234", null),
+                        PhoneAccountMetadata.CAPABILITY_CALL_PROVIDER,
+                        R.drawable.fab_ic_call,
+                        "One SIM Account",
+                        "Short description for SIM card one",
+                        false)
+        };
+    }
+}
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index e19991a..1ba4a4e 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -20,7 +20,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Handler;
 import android.os.Message;
@@ -157,7 +156,7 @@
         Intent intent = new Intent(TelecommConstants.ACTION_INCOMING_CALL);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.putExtra(TelecommConstants.EXTRA_PHONE_ACCOUNT,
-                TelephonyConnectionService.getPhoneAccount(context));
+                AddAccountsReceiver.makeAccounts(context)[0].getAccount());
 
         Log.d(this, "Sending incoming call intent: %s", intent);
         context.startActivityAsUser(intent, UserHandle.CURRENT);
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 5886ef2..3bf51d5 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -18,16 +18,26 @@
 
 import android.net.Uri;
 import android.os.AsyncResult;
+import android.content.ComponentName;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.telecomm.CallAudioState;
+import android.telecomm.CallCapabilities;
+import android.telecomm.ConnectionService;
+import android.telecomm.StatusHints;
+import android.telecomm.TelecommConstants;
 import android.telephony.DisconnectCause;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection.PostDialListener;
 import com.android.internal.telephony.Phone;
+import com.android.phone.R;
+
 import android.telecomm.Connection;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
 
 import java.util.List;
 import java.util.Objects;
@@ -72,9 +82,62 @@
         }
     };
 
+    /**
+     * Listener for listening to events in the {@link com.android.internal.telephony.Connection}.
+     */
+    private final com.android.internal.telephony.Connection.Listener mOriginalConnectionListener =
+            new com.android.internal.telephony.Connection.ListenerBase() {
+        @Override
+        public void onVideoStateChanged(int videoState) {
+            setVideoState(videoState);
+        }
+
+        /**
+         * The {@link com.android.internal.telephony.Connection} has reported a change in local
+         * video capability.
+         *
+         * @param capable True if capable.
+         */
+        @Override
+        public void onLocalVideoCapabilityChanged(boolean capable) {
+            setLocalVideoCapable(capable);
+        }
+
+        /**
+         * The {@link com.android.internal.telephony.Connection} has reported a change in remote
+         * video capability.
+         *
+         * @param capable True if capable.
+         */
+        @Override
+        public void onRemoteVideoCapabilityChanged(boolean capable) {
+            setRemoteVideoCapable(capable);
+        }
+    };
+
     private com.android.internal.telephony.Connection mOriginalConnection;
     private Call.State mOriginalConnectionState = Call.State.IDLE;
 
+    /**
+     * Determines if the {@link TelephonyConnection} has local video capabilities.
+     * This is used when {@link TelephonyConnection#updateCallCapabilities(boolean)}} is called,
+     * ensuring the appropriate {@link CallCapabilities} are set.  Since {@link CallCapabilities}
+     * can be rebuilt at any time it is necessary to track the video capabilities between rebuild.
+     * The {@link CallCapabilities} (including video capabilities) are communicated to the telecomm
+     * layer.
+     */
+    private boolean mLocalVideoCapable;
+
+    /**
+     * Determines if the {@link TelephonyConnection} has remote video capabilities.
+     * This is used when {@link TelephonyConnection#updateCallCapabilities(boolean)}} is called,
+     * ensuring the appropriate {@link CallCapabilities} are set.  Since {@link CallCapabilities}
+     * can be rebuilt at any time it is necessary to track the video capabilities between rebuild.
+     * The {@link CallCapabilities} (including video capabilities) are communicated to the telecomm
+     * layer.
+     */
+    private boolean mRemoteVideoCapable;
+
     protected TelephonyConnection(com.android.internal.telephony.Connection originalConnection) {
         Log.v(this, "new TelephonyConnection, originalConnection: " + originalConnection);
         mOriginalConnection = originalConnection;
@@ -82,6 +145,12 @@
                 mHandler, MSG_PRECISE_CALL_STATE_CHANGED, null);
         getPhone().registerForRingbackTone(mHandler, MSG_RINGBACK_TONE, null);
         mOriginalConnection.addPostDialListener(mPostDialListener);
+        mOriginalConnection.addListener(mOriginalConnectionListener);
+
+        // Set video state and capabilities
+        setVideoState(mOriginalConnection.getVideoState());
+        setLocalVideoCapable(mOriginalConnection.isLocalVideoCapable());
+        setRemoteVideoCapable(mOriginalConnection.isRemoteVideoCapable());
     }
 
     @Override
@@ -171,14 +240,14 @@
     }
 
     @Override
-    protected void onAnswer() {
+    protected void onAnswer(int videoState) {
         Log.v(this, "onAnswer");
         // TODO(santoscordon): Tons of hairy logic is missing here around multiple active calls on
         // CDMA devices. See {@link CallManager.acceptCall}.
 
         if (isValidRingingCall() && getPhone() != null) {
             try {
-                getPhone().acceptCall();
+                getPhone().acceptCall(videoState);
             } catch (CallStateException e) {
                 Log.e(this, e, "Failed to accept call.");
             }
@@ -225,12 +294,15 @@
 
     protected final void updateCallCapabilities(boolean force) {
         int newCallCapabilities = buildCallCapabilities();
+        newCallCapabilities = applyVideoCapabilities(newCallCapabilities);
+
         if (force || getCallCapabilities() != newCallCapabilities) {
             setCallCapabilities(newCallCapabilities);
         }
     }
 
     protected final void updateHandle(boolean force) {
+        updateCallCapabilities(force);
         if (mOriginalConnection != null) {
             Uri handle = TelephonyConnectionService.getHandleFromAddress(
                     mOriginalConnection.getAddress());
@@ -251,8 +323,30 @@
         }
     }
 
-    void onAddedToCallService() {
+    void onAddedToCallService(ConnectionService connectionService) {
         updateState(false);
+
+        StatusHints hints = getStatusHints();
+        if (hints == null) {
+            hints = new StatusHints(
+                    new ComponentName(connectionService, TelephonyConnectionService.class),
+                    "", R.mipmap.ic_launcher_phone, new Bundle());
+        }
+
+        Bundle extras = hints.getExtras();
+        String number = getHandle().getSchemeSpecificPart();
+        if (PhoneNumberUtils.isEmergencyNumber(number)) {
+            Phone phone = getOriginalConnection().getCall().getPhone();
+            long subId = phone.getSubId();
+
+            String simNumber = phone.getPhoneSubInfo().getLine1Number();
+            String visibleNumber = TelephonyManager.from(connectionService).getLine1Number(subId);
+            if (!PhoneNumberUtils.compare(simNumber, visibleNumber)) {
+                Log.d(this, "SIM number is different; populate the SIM number");
+                extras.putString(TelecommConstants.EXTRA_EMERGENCY_CALL_BACK_NUMBER, simNumber);
+            }
+        }
+        setStatusHints(hints);
     }
 
     void onRemovedFromCallService() {
@@ -377,4 +471,66 @@
         mOriginalConnection = null;
         setDestroyed();
     }
+
+    /**
+     * Applies the video capability states to the CallCapabilities bit-mask.
+     *
+     * @param capabilities The CallCapabilities bit-mask.
+     * @return The capabilities with video capabilities applied.
+     */
+    private int applyVideoCapabilities(int capabilities) {
+        int currentCapabilities = getCallCapabilities();
+        if (mRemoteVideoCapable) {
+            currentCapabilities |= CallCapabilities.SUPPORTS_VT_REMOTE;
+        } else {
+            currentCapabilities &= ~CallCapabilities.SUPPORTS_VT_REMOTE;
+        }
+
+        if (mLocalVideoCapable) {
+            currentCapabilities |= CallCapabilities.SUPPORTS_VT_LOCAL;
+        } else {
+            currentCapabilities &= ~CallCapabilities.SUPPORTS_VT_LOCAL;
+        }
+        return currentCapabilities;
+    }
+
+    /**
+     * Returns the local video capability state for the connection.
+     *
+     * @return {@code True} if the connection has local video capabilities.
+     */
+    public boolean isLocalVideoCapable() {
+        return mLocalVideoCapable;
+    }
+
+    /**
+     * Returns the remote video capability state for the connection.
+     *
+     * @return {@code True} if the connection has remote video capabilities.
+     */
+    public boolean isRemoteVideoCapable() {
+        return mRemoteVideoCapable;
+    }
+
+    /**
+     * Sets whether video capability is present locally.  Used during rebuild of the
+     * {@link CallCapabilities} to set the video call capabilities.
+     *
+     * @param capable {@code True} if video capable.
+     */
+    public void setLocalVideoCapable(boolean capable) {
+        mLocalVideoCapable = capable;
+        updateCallCapabilities(false);
+    }
+
+    /**
+     * Sets whether video capability is present remotely.  Used during rebuild of the
+     * {@link CallCapabilities} to set the video call capabilities.
+     *
+     * @param capable {@code True} if video capable.
+     */
+    public void setRemoteVideoCapable(boolean capable) {
+        mRemoteVideoCapable = capable;
+        updateCallCapabilities(false);
+    }
 }
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 2d55165..04b016b 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -20,6 +20,8 @@
 import android.content.Context;
 import android.net.Uri;
 import android.os.Debug;
+import android.telecomm.PhoneAccountMetadata;
+import android.telecomm.TelecommManager;
 import android.telephony.DisconnectCause;
 import android.telephony.ServiceState;
 import android.text.TextUtils;
@@ -45,14 +47,6 @@
 
     private EmergencyCallHelper mEmergencyCallHelper;
 
-    static PhoneAccount getPhoneAccount(Context context) {
-        return new PhoneAccount(
-                new ComponentName(context, TelephonyConnectionService.class),
-                null /* id */,
-                null,
-                PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
-    }
-
     @Override
     protected void onCreateOutgoingConnection(
             final ConnectionRequest request,
@@ -176,7 +170,7 @@
 
         Uri handle = getHandleFromAddress(originalConnection.getAddress());
         ConnectionRequest telephonyRequest = new ConnectionRequest(
-                getPhoneAccount(this),
+                request.getAccount(),
                 request.getCallId(),
                 handle,
                 originalConnection.getNumberPresentation(),
@@ -196,7 +190,7 @@
     protected void onConnectionAdded(Connection connection) {
         Log.v(this, "onConnectionAdded, connection: " + connection);
         if (connection instanceof TelephonyConnection) {
-            ((TelephonyConnection) connection).onAddedToCallService();
+            ((TelephonyConnection) connection).onAddedToCallService(this);
         }
     }
 
@@ -231,7 +225,7 @@
         }
 
         ConnectionRequest telephonyRequest = new ConnectionRequest(
-                getPhoneAccount(this),
+                request.getAccount(),
                 request.getCallId(),
                 request.getHandle(),
                 request.getHandlePresentation(),
