diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index ddd4b1d..0771df9 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -27,8 +27,8 @@
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.CallState;
 import android.telecomm.GatewayInfo;
+import android.telecomm.PhoneAccount;
 import android.telecomm.Response;
-import android.telecomm.Subscription;
 import android.telecomm.TelecommConstants;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
@@ -117,7 +117,7 @@
      * service. */
     private final GatewayInfo mGatewayInfo;
 
-    private final Subscription mSubscription;
+    private final PhoneAccount mAccount;
 
     private final Handler mHandler = new Handler();
 
@@ -226,15 +226,15 @@
      *
      * @param handle The handle to dial.
      * @param gatewayInfo Gateway information to use for the call.
-     * @param subscription Subscription information to use for the call.
+     * @param account Account information to use for the call.
      * @param isIncoming True if this is an incoming call.
      */
-    Call(Uri handle, GatewayInfo gatewayInfo, Subscription subscription,
+    Call(Uri handle, GatewayInfo gatewayInfo, PhoneAccount account,
             boolean isIncoming, boolean isConference) {
         mState = isConference ? CallState.ACTIVE : CallState.NEW;
         setHandle(handle);
         mGatewayInfo = gatewayInfo;
-        mSubscription = subscription;
+        mAccount = account;
         mIsIncoming = isIncoming;
         mIsConference = isConference;
         maybeLoadCannedSmsResponses();
@@ -360,8 +360,8 @@
         return mGatewayInfo;
     }
 
-    Subscription getSubscription() {
-        return mSubscription;
+    PhoneAccount getAccount() {
+        return mAccount;
     }
 
     boolean isIncoming() {
@@ -728,7 +728,7 @@
                     mGatewayInfo.getOriginalHandle());
 
         }
-        return new CallInfo(callId, mState, mHandle, mGatewayInfo, mSubscription,
+        return new CallInfo(callId, mState, mHandle, mGatewayInfo, mAccount,
                 extras, descriptor);
     }
 
diff --git a/src/com/android/telecomm/CallLogManager.java b/src/com/android/telecomm/CallLogManager.java
index 53d2072..906ecd4 100644
--- a/src/com/android/telecomm/CallLogManager.java
+++ b/src/com/android/telecomm/CallLogManager.java
@@ -21,14 +21,11 @@
 import android.os.AsyncTask;
 import android.provider.CallLog.Calls;
 import android.telecomm.CallState;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telephony.PhoneNumberUtils;
 
 import com.android.internal.telephony.PhoneConstants;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
 /**
  * Helper class that provides functionality to write information about calls and their associated
  * caller details to the call log. All logging activity will be performed asynchronously in a
@@ -49,14 +46,14 @@
          * @param durationInMillis Duration of the call (milliseconds).
          */
         public AddCallArgs(Context context, ContactInfo contactInfo, String number,
-                int presentation, int callType, Subscription subscription,
+                int presentation, int callType, PhoneAccount account,
                 long creationDate, long durationInMillis) {
             this.context = context;
             this.contactInfo = contactInfo;
             this.number = number;
             this.presentation = presentation;
             this.callType = callType;
-            this.subscription = subscription;
+            this.mAccount = account;
             this.timestamp = creationDate;
             this.durationInSec = (int)(durationInMillis / 1000);
         }
@@ -67,7 +64,7 @@
         public final String number;
         public final int presentation;
         public final int callType;
-        public final Subscription subscription;
+        public final PhoneAccount mAccount;
         public final long timestamp;
         public final int durationInSec;
     }
@@ -115,9 +112,9 @@
         Log.d(TAG, "logNumber set to: %s", Log.pii(logNumber));
 
         final int presentation = getPresentation(call, contactInfo);
-        final Subscription subscription = call.getSubscription();
+        final PhoneAccount account = call.getAccount();
 
-        logCall(contactInfo, logNumber, presentation, callLogType, subscription, creationTime, age);
+        logCall(contactInfo, logNumber, presentation, callLogType, account, creationTime, age);
     }
 
     /**
@@ -135,7 +132,7 @@
             String number,
             int presentation,
             int callType,
-            Subscription subscription,
+            PhoneAccount account,
             long start,
             long duration) {
         boolean isEmergencyNumber = PhoneNumberUtils.isLocalEmergencyNumber(mContext, number);
@@ -154,7 +151,7 @@
                     + Log.pii(number) + "," + presentation + ", " + callType
                     + ", " + start + ", " + duration);
             AddCallArgs args = new AddCallArgs(mContext, contactInfo, number, presentation,
-                    callType, subscription, start, duration);
+                    callType, account, start, duration);
             logCallAsync(args);
         } else {
           Log.d(TAG, "Not adding emergency call to call log.");
@@ -226,7 +223,7 @@
                 try {
                     // May block.
                     result[i] = Calls.addCall(null, c.context, c.number, c.presentation,
-                            c.callType, c.subscription, c.timestamp, c.durationInSec);
+                            c.callType, c.mAccount, c.timestamp, c.durationInSec);
                 } catch (Exception e) {
                     // This is very rare but may happen in legitimate cases.
                     // E.g. If the phone is encrypted and thus write request fails, it may cause
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index cd5cb2a..664fc55 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -23,7 +23,7 @@
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.CallState;
 import android.telecomm.GatewayInfo;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telephony.DisconnectCause;
 
 import com.google.common.base.Preconditions;
@@ -304,7 +304,7 @@
      * @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
      */
     void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo,
-            Subscription subscription, boolean speakerphoneOn) {
+            PhoneAccount account, boolean speakerphoneOn) {
         final Uri uriHandle = (gatewayInfo == null) ? handle : gatewayInfo.getGatewayHandle();
 
         if (gatewayInfo == null) {
@@ -315,7 +315,7 @@
         }
 
         Call call = new Call(
-                uriHandle, gatewayInfo, subscription,
+                uriHandle, gatewayInfo, account,
                 false /* isIncoming */, false /* isConference */);
         call.setStartWithSpeakerphoneOn(speakerphoneOn);
 
@@ -497,7 +497,7 @@
         // service.
         Call tempCall = new Call(
                 originalCall.getHandoffHandle(), originalCall.getGatewayInfo(),
-                originalCall.getSubscription(), false, false);
+                originalCall.getAccount(), false, false);
         tempCall.setOriginalCall(originalCall);
         tempCall.setExtras(originalCall.getExtras());
         mPendingHandoffCalls.add(tempCall);
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index 90d24fd..9b53609 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -320,7 +320,7 @@
 
         return new InCallCall(callId, state, call.getDisconnectCause(), call.getDisconnectMessage(),
                 call.getCannedSmsResponses(), capabilities, connectTimeMillis, call.getHandle(),
-                call.getGatewayInfo(), call.getSubscription(), descriptor,
+                call.getGatewayInfo(), call.getAccount(), descriptor,
                 call.getHandoffCallServiceDescriptor(), call.getCallVideoProvider(),
                 parentCallId, childCallIds, call.getFeatures());
     }
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
index c18dbc5..770b75d 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
@@ -17,34 +17,18 @@
 package com.android.telecomm;
 
 import android.app.Activity;
-import android.app.ActivityManagerNative;
-import android.app.AlertDialog;
-import android.app.AppOpsManager;
-import android.app.Dialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.database.Cursor;
 import android.net.Uri;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.SystemProperties;
 import android.os.UserHandle;
-import android.provider.ContactsContract;
 import android.telecomm.GatewayInfo;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telecomm.TelecommConstants;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.view.View;
-import android.widget.ProgressBar;
 
 /**
  * OutgoingCallIntentBroadcaster receives CALL and CALL_PRIVILEGED Intents, and broadcasts the
@@ -135,9 +119,9 @@
             }
 
             GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
-            Subscription subscription = getSubscriptionFromIntent(intent);
+            PhoneAccount account = getAccountFromIntent(intent);
             mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo,
-                    subscription,
+                    account,
                     mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
                             false));
         }
@@ -276,11 +260,11 @@
             Log.d(this, "Found and copied gateway provider extras to broadcast intent.");
             return;
         }
-        Subscription extraSubscription = src.getParcelableExtra(
-                TelephonyManager.EXTRA_SUBSCRIPTION);
-        if (extraSubscription != null) {
-            dst.putExtra(TelephonyManager.EXTRA_SUBSCRIPTION, extraSubscription);
-            Log.d(this, "Found and copied subscription extra to broadcast intent.");
+        PhoneAccount extraAccount = src.getParcelableExtra(
+                TelephonyManager.EXTRA_ACCOUNT);
+        if (extraAccount != null) {
+            dst.putExtra(TelephonyManager.EXTRA_ACCOUNT, extraAccount);
+            Log.d(this, "Found and copied account extra to broadcast intent.");
         }
 
         Log.d(this, "No provider extras found in call intent.");
@@ -327,17 +311,17 @@
     }
 
     /**
-     * Extracts subscription/connection provider information from a provided intent..
+     * Extracts account/connection provider information from a provided intent..
      *
-     * @param intent to extract subscription information from.
-     * @return Subscription object containing extracted subscription information
+     * @param intent to extract account information from.
+     * @return Account object containing extracted account information
      */
-    public static Subscription getSubscriptionFromIntent(Intent intent) {
+    public static PhoneAccount getAccountFromIntent(Intent intent) {
         if (intent == null) {
             return null;
         }
 
-        return intent.getParcelableExtra(TelephonyManager.EXTRA_SUBSCRIPTION);
+        return intent.getParcelableExtra(TelephonyManager.EXTRA_ACCOUNT);
     }
 
     private void launchSystemDialer(Context context, Uri handle) {
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index 24d6cc4..6ba90d0 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -21,6 +21,7 @@
 import com.android.internal.telecomm.ITelecommService;
 
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.res.Resources;
 import android.net.Uri;
 import android.os.Handler;
@@ -28,8 +29,8 @@
 import android.os.Message;
 import android.os.ServiceManager;
 import android.telecomm.CallState;
-import android.telecomm.Subscription;
 import android.text.TextUtils;
+import android.telecomm.PhoneAccount;
 
 import java.util.List;
 
@@ -131,18 +132,57 @@
     //
 
     @Override
-    public List<Subscription> getSubscriptions() {
-        return sSubscriptions;
+    public List<PhoneAccount> getAccounts() {
+        // TODO (STOPSHIP): Static list of Accounts for testing and UX work only.
+        ComponentName componentName = new ComponentName(
+                "com.android.telecomm",
+                TelecommServiceImpl.class.getName());  // This field is a no-op
+        Context app = TelecommApp.getInstance();
+
+        return Lists.newArrayList(
+                new PhoneAccount(
+                        componentName,
+                        "account0",
+                        Uri.parse("tel:999-555-1212"),
+                        app.getString(R.string.test_account_0_label),
+                        app.getString(R.string.test_account_0_short_description),
+                        true,
+                        true),
+                new PhoneAccount(
+                        componentName,
+                        "account1",
+                        Uri.parse("tel:333-111-2222"),
+                        app.getString(R.string.test_account_1_label),
+                        app.getString(R.string.test_account_1_short_description),
+                        true,
+                        false),
+                new PhoneAccount(
+                        componentName,
+                        "account2",
+                        Uri.parse("mailto:two@example.com"),
+                        app.getString(R.string.test_account_2_label),
+                        app.getString(R.string.test_account_2_short_description),
+                        true,
+                        false),
+                new PhoneAccount(
+                        componentName,
+                        "account3",
+                        Uri.parse("mailto:three@example.com"),
+                        app.getString(R.string.test_account_3_label),
+                        app.getString(R.string.test_account_3_short_description),
+                        true,
+                        false)
+        );
     }
 
     @Override
-    public void setEnabled(Subscription subscription, boolean enabled) {
+    public void setEnabled(PhoneAccount account, boolean enabled) {
         // Enforce MODIFY_PHONE_STATE ?
         // TODO
     }
 
     @Override
-    public void setSystemDefault(Subscription subscription) {
+    public void setSystemDefault(PhoneAccount account) {
         // Enforce MODIFY_PHONE_STATE ?
         // TODO
     }
@@ -260,50 +300,9 @@
                 android.Manifest.permission.READ_PHONE_STATE, null);
     }
 
-    // TODO (STOPSHIP): Static list of Subscriptions for testing and UX work only.
-
-    private  static final ComponentName sComponentName = new ComponentName(
-            "com.android.telecomm",
-            TelecommServiceImpl.class.getName());  // This field is a no-op
-
-    private static final List<Subscription> sSubscriptions = Lists.newArrayList(
-            new Subscription(
-                    sComponentName,
-                    "subscription0",
-                    Uri.parse("tel:999-555-1212"),
-                    R.string.test_subscription_0_label,
-                    R.string.test_subscription_0_short_description,
-                    R.drawable.q_mobile,
-                    true,
-                    true),
-            new Subscription(
-                    sComponentName,
-                    "subscription1",
-                    Uri.parse("tel:333-111-2222"),
-                    R.string.test_subscription_1_label,
-                    R.string.test_subscription_1_short_description,
-                    R.drawable.market_wireless,
-                    true,
-                    false),
-            new Subscription(
-                    sComponentName,
-                    "subscription2",
-                    Uri.parse("mailto:two@example.com"),
-                    R.string.test_subscription_2_label,
-                    R.string.test_subscription_2_short_description,
-                    R.drawable.talk_to_your_circles,
-                    true,
-                    false),
-            new Subscription(
-                    sComponentName,
-                    "subscription3",
-                    Uri.parse("mailto:three@example.com"),
-                    R.string.test_subscription_3_label,
-                    R.string.test_subscription_3_short_description,
-                    R.drawable.chat_with_others,
-                    true,
-                    false)
-    );
+    private void showCallScreenInternal(boolean showDialpad) {
+        CallsManager.getInstance().getInCallController().bringToForeground(showDialpad);
+    }
 
     private void publish() {
         Log.d(this, "publish: %s", this);
