diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index d46462e..0f64e8b 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -113,7 +113,7 @@
                         android:layout_gravity="center_vertical"
                         />
                     <ImageView
-                        android:id="@+id/call_subscription_icon"
+                        android:id="@+id/call_account_icon"
                         android:layout_width="@dimen/call_provider_small_icon_size"
                         android:layout_height="@dimen/call_provider_small_icon_size"
                         android:layout_marginEnd="@dimen/call_log_icon_margin"
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 311a5ee..b977ef9 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -19,8 +19,8 @@
         android:title="@string/add_contact"
         android:showAsAction="withText" />
     <item
-        android:id="@+id/menu_select_subscription"
-        android:title="@string/menu_select_subscription"
+        android:id="@+id/menu_select_account"
+        android:title="@string/menu_select_account"
         android:showAsAction="withText" />
     <item
         android:id="@+id/menu_2s_pause"
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 558cbd8..a410b43 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -20,8 +20,8 @@
         android:icon="@drawable/ic_menu_history_lt"
         android:title="@string/action_menu_call_history_description" />
     <item
-        android:id="@+id/menu_select_subscription"
-        android:title="@string/menu_select_subscription" />
+        android:id="@+id/menu_select_account"
+        android:title="@string/menu_select_account" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f40544c..5170459 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -326,8 +326,8 @@
     <string name="add_2sec_pause">Add 2-sec pause</string>
     <string name="add_wait">Add wait</string>
 
-    <!-- Menu item to select subscription (connection provider) to place call from [CHAR LIMIT=30] -->
-    <string name="menu_select_subscription">Select Subscription</string>
+    <!-- Menu item to select account used to make phone calls [CHAR LIMIT=30] -->
+    <string name="menu_select_account">Select Account</string>
 
     <!-- Menu item label for call settings [CHAR LIMIT=30] -->
     <string name="call_settings">Settings</string>
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index d070601..3735293 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -32,7 +32,6 @@
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.VoicemailContract.Voicemails;
-import android.telecomm.Subscription;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -196,8 +195,8 @@
         CallLog.Calls.COUNTRY_ISO,
         CallLog.Calls.GEOCODED_LOCATION,
         CallLog.Calls.NUMBER_PRESENTATION,
-        CallLog.Calls.SUBSCRIPTION_COMPONENT_NAME,
-        CallLog.Calls.SUBSCRIPTION_ID,
+        CallLog.Calls.ACCOUNT_COMPONENT_NAME,
+        CallLog.Calls.ACCOUNT_ID,
     };
 
     static final int DATE_COLUMN_INDEX = 0;
@@ -207,8 +206,8 @@
     static final int COUNTRY_ISO_COLUMN_INDEX = 4;
     static final int GEOCODED_LOCATION_COLUMN_INDEX = 5;
     static final int NUMBER_PRESENTATION_COLUMN_INDEX = 6;
-    static final int SUBSCRIPTION_COMPONENT_NAME = 7;
-    static final int SUBSCRIPTION_ID = 8;
+    static final int ACCOUNT_COMPONENT_NAME = 7;
+    static final int ACCOUNT_ID = 8;
 
     @Override
     protected void onCreate(Bundle icicle) {
@@ -487,7 +486,7 @@
             final int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX);
             String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
             final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
-            final Drawable subscriptionIcon = getSubscriptionIcon(callCursor);
+            final Drawable accountIcon = getAccountIcon(callCursor);
 
             if (TextUtils.isEmpty(countryIso)) {
                 countryIso = mDefaultCountryIso;
@@ -530,7 +529,7 @@
                     formattedNumber, countryIso, geocode,
                     new int[]{ callType }, date, duration,
                     nameText, numberType, numberLabel, lookupUri, photoUri, sourceType,
-                    subscriptionIcon);
+                    accountIcon);
         } finally {
             if (callCursor != null) {
                 callCursor.close();
@@ -539,11 +538,11 @@
     }
 
     /**
-     * Generate subscription object from data in Telecomm database
+     * Generate account object from data in Telecomm database
      */
-    private Drawable getSubscriptionIcon(Cursor c) {
-        final String component_name = c.getString(SUBSCRIPTION_COMPONENT_NAME);
-        final String subscription_id = c.getString(SUBSCRIPTION_ID);
+    private Drawable getAccountIcon(Cursor c) {
+        final String component_name = c.getString(ACCOUNT_COMPONENT_NAME);
+        final String account_id = c.getString(ACCOUNT_ID);
 
         // TODO: actually pull data from the database
         return null;
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index da46a40..014ea7e 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -28,16 +28,13 @@
 import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
 import android.speech.RecognizerIntent;
 import android.support.v4.view.ViewPager;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -63,10 +60,10 @@
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.SubscriptionManager;
+import com.android.contacts.common.PhoneAccountManager;
 import com.android.contacts.common.activity.TransactionSafeActivity;
 import com.android.contacts.common.dialog.ClearFrequentsDialog;
-import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
+import com.android.contacts.common.dialog.SelectAccountDialogFragment;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.widget.FloatingActionButtonController;
@@ -114,8 +111,8 @@
 
     public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    /** Temporary flag for disabling subscription selection menu */
-    public static final boolean ENABLE_SUBSCRIPTION_SELECT = false;
+    /** Temporary flag for disabling account selection menu */
+    public static final boolean ENABLE_ACCOUNT_SELECT = false;
 
     public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
 
@@ -199,9 +196,9 @@
     private boolean mIsLandscape;
 
     /**
-     * Information about the currently selected subscription.
+     * Information about the currently selected account.
      */
-    private SubscriptionManager mSubscriptionManager = null;
+    private PhoneAccountManager mAccountManager = null;
 
     /**
      * The position of the currently selected tab in the attached {@link ListsFragment}.
@@ -390,8 +387,8 @@
         mIsLandscape = getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
 
-        if (getTelephonyManager().getSubscriptions().size() > 1 && ENABLE_SUBSCRIPTION_SELECT) {
-            mSubscriptionManager = new SubscriptionManager(getTelephonyManager());
+        if (getTelephonyManager().getAccounts().size() > 1 && ENABLE_ACCOUNT_SELECT) {
+            mAccountManager = new PhoneAccountManager(getTelephonyManager());
         }
 
         final View floatingActionButtonContainer = findViewById(
@@ -601,8 +598,8 @@
             case R.id.menu_call_settings:
                 handleMenuSettings();
                 return true;
-            case R.id.menu_select_subscription:
-                SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
+            case R.id.menu_select_account:
+                SelectAccountDialogFragment.show(getFragmentManager(), mAccountManager);
                 return true;
         }
         return false;
@@ -638,7 +635,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
-        mDialpadFragment.setSubscriptionManager(mSubscriptionManager);
+        mDialpadFragment.setAccountManager(mAccountManager);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.show(mDialpadFragment);
@@ -776,8 +773,8 @@
         final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
         popupMenu.inflate(R.menu.dialtacts_options);
         final Menu menu = popupMenu.getMenu();
-        final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
-        selectSubscription.setVisible(mSubscriptionManager != null);
+        final MenuItem selectAccount = menu.findItem(R.id.menu_select_account);
+        selectAccount.setVisible(mAccountManager != null);
         popupMenu.setOnMenuItemClickListener(this);
         return popupMenu;
     }
@@ -1108,9 +1105,9 @@
 
     @Override
     public void onCallNumberDirectly(String phoneNumber) {
-        final Subscription subscription = mSubscriptionManager != null?
-                mSubscriptionManager.getCurrentSubscription(): null;
-        Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin(), subscription);
+        final PhoneAccount account = mAccountManager != null?
+                mAccountManager.getCurrentAccount(): null;
+        Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin(), account);
         DialerUtils.startActivityWithErrorToast(this, intent);
         mClearSearchOnPause = true;
     }
diff --git a/src/com/android/dialer/PhoneCallDetails.java b/src/com/android/dialer/PhoneCallDetails.java
index 3562b17..afdb2e3 100644
--- a/src/com/android/dialer/PhoneCallDetails.java
+++ b/src/com/android/dialer/PhoneCallDetails.java
@@ -20,7 +20,6 @@
 import android.net.Uri;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.telecomm.Subscription;
 
 /**
  * The details of a phone call to be shown in the UI.
@@ -68,14 +67,14 @@
     /**
      * The unique identifier for the provider associated with the call.
      */
-    public final Drawable subscriptionIcon;
+    public final Drawable accountIcon;
 
     /** Create the details for a call with a number not associated with a contact. */
     public PhoneCallDetails(CharSequence number, int numberPresentation,
             CharSequence formattedNumber, String countryIso, String geocode,
-            int[] callTypes, long date, long duration, Drawable subscriptionIcon) {
+            int[] callTypes, long date, long duration, Drawable accountIcon) {
         this(number, numberPresentation, formattedNumber, countryIso, geocode,
-                callTypes, date, duration, "", 0, "", null, null, 0, subscriptionIcon);
+                callTypes, date, duration, "", 0, "", null, null, 0, accountIcon);
     }
 
     /** Create the details for a call with a number associated with a contact. */
@@ -83,7 +82,7 @@
             CharSequence formattedNumber, String countryIso, String geocode,
             int[] callTypes, long date, long duration, CharSequence name,
             int numberType, CharSequence numberLabel, Uri contactUri,
-            Uri photoUri, int sourceType, Drawable subscriptionIcon) {
+            Uri photoUri, int sourceType, Drawable accountIcon) {
         this.number = number;
         this.numberPresentation = numberPresentation;
         this.formattedNumber = formattedNumber;
@@ -98,6 +97,6 @@
         this.contactUri = contactUri;
         this.photoUri = photoUri;
         this.sourceType = sourceType;
-        this.subscriptionIcon = subscriptionIcon;
+        this.accountIcon = accountIcon;
     }
 }
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index 0531412..62ef305 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -17,19 +17,11 @@
 package com.android.dialer;
 
 import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.graphics.Typeface;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.telecomm.Subscription;
-import android.text.SpannableString;
-import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
 import android.view.View;
 import android.widget.TextView;
-import android.widget.ImageView;
 
 import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.PhoneNumberHelper;
@@ -41,7 +33,6 @@
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Helper class to fill in the views in {@link PhoneCallDetailsViews}.
@@ -102,12 +93,12 @@
         // Set the call count, location and date.
         setCallCountAndDate(views, callCount, callLocationAndDate);
 
-        // set the subscription icon if it exists
-        if (details.subscriptionIcon != null) {
-            views.callSubscriptionIcon.setVisibility(View.VISIBLE);
-            views.callSubscriptionIcon.setImageDrawable(details.subscriptionIcon);
+        // set the account icon if it exists
+        if (details.accountIcon != null) {
+            views.callAccountIcon.setVisibility(View.VISIBLE);
+            views.callAccountIcon.setImageDrawable(details.accountIcon);
         } else {
-            views.callSubscriptionIcon.setVisibility(View.GONE);
+            views.callAccountIcon.setVisibility(View.GONE);
         }
 
         final CharSequence nameText;
diff --git a/src/com/android/dialer/PhoneCallDetailsViews.java b/src/com/android/dialer/PhoneCallDetailsViews.java
index 4f70137..67babc1 100644
--- a/src/com/android/dialer/PhoneCallDetailsViews.java
+++ b/src/com/android/dialer/PhoneCallDetailsViews.java
@@ -30,17 +30,17 @@
     public final TextView nameView;
     public final View callTypeView;
     public final CallTypeIconsView callTypeIcons;
-    public final ImageView callSubscriptionIcon;
+    public final ImageView callAccountIcon;
     public final TextView callLocationAndDate;
     public final TextView voicemailTranscriptionView;
 
     private PhoneCallDetailsViews(TextView nameView, View callTypeView,
-            CallTypeIconsView callTypeIcons, ImageView callSubscriptionIcon,
+            CallTypeIconsView callTypeIcons, ImageView callAccountIcon,
             TextView callLocationAndDate, TextView voicemailTranscriptionView) {
         this.nameView = nameView;
         this.callTypeView = callTypeView;
         this.callTypeIcons = callTypeIcons;
-        this.callSubscriptionIcon = callSubscriptionIcon;
+        this.callAccountIcon = callAccountIcon;
         this.callLocationAndDate = callLocationAndDate;
         this.voicemailTranscriptionView = voicemailTranscriptionView;
     }
@@ -56,7 +56,7 @@
         return new PhoneCallDetailsViews((TextView) view.findViewById(R.id.name),
                 view.findViewById(R.id.call_type),
                 (CallTypeIconsView) view.findViewById(R.id.call_type_icons),
-                (ImageView) view.findViewById(R.id.call_subscription_icon),
+                (ImageView) view.findViewById(R.id.call_account_icon),
                 (TextView) view.findViewById(R.id.call_location_and_date),
                 (TextView) view.findViewById(R.id.voicemail_transcription));
     }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index d089330..483c502 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -27,9 +27,8 @@
 import android.os.Message;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.PhoneLookup;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -41,7 +40,6 @@
 import com.android.common.widget.GroupingListAdapter;
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.util.DateUtils;
 import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
@@ -54,7 +52,6 @@
 
 import java.util.HashMap;
 import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Adapter class to fill in data for the Call Log.
@@ -634,9 +631,9 @@
         final long date = c.getLong(CallLogQuery.DATE);
         final long duration = c.getLong(CallLogQuery.DURATION);
         final int callType = c.getInt(CallLogQuery.CALL_TYPE);
-        final Subscription subscription = getSubscription(c);
-        final Drawable subscriptionIcon = subscription != null?
-                subscription.getIcon(mContext) : null;
+        final PhoneAccount account = getAccount(c);
+        final Drawable accountIcon = account != null?
+                account.getIcon(mContext) : null;
         final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
         final long rowId = c.getLong(CallLogQuery.ID);
         views.rowId = rowId;
@@ -661,7 +658,7 @@
         views.number = number;
         views.numberPresentation = numberPresentation;
         views.callType = callType;
-        views.subscription = subscription;
+        views.mAccount = account;
         views.voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
         // Stash away the Ids of the calls so that we can support deleting a row in the call log.
         views.callIds = getCallIds(c, count);
@@ -680,7 +677,7 @@
             if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
                 // Sets the primary action to call the number.
                 views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number,
-                        subscription));
+                        account));
             } else {
                 // Number is not callable, so hide button.
                 views.primaryActionView.setTag(null);
@@ -750,12 +747,12 @@
         if (TextUtils.isEmpty(name)) {
             details = new PhoneCallDetails(number, numberPresentation,
                     formattedNumber, countryIso, geocode, callTypes, date,
-                    duration, subscriptionIcon);
+                    duration, accountIcon);
         } else {
             details = new PhoneCallDetails(number, numberPresentation,
                     formattedNumber, countryIso, geocode, callTypes, date,
                     duration, name, ntype, label, lookupUri, photoUri, sourceType,
-                    subscriptionIcon);
+                    accountIcon);
         }
 
         mCallLogViewsHelper.setPhoneCallDetails(views, details);
@@ -939,7 +936,7 @@
         if (PhoneNumberUtilsWrapper.canPlaceCallsTo(views.number, views.numberPresentation)) {
             // Sets the primary action to call the number.
             views.callBackButtonView.setTag(
-                    IntentProvider.getReturnCallIntentProvider(views.number, views.subscription));
+                    IntentProvider.getReturnCallIntentProvider(views.number, views.mAccount));
             views.callBackButtonView.setVisibility(View.VISIBLE);
             views.callBackButtonView.setOnClickListener(mActionListener);
         } else {
@@ -1185,9 +1182,9 @@
         return callTypes;
     }
 
-    private Subscription getSubscription(Cursor c) {
-        final String component_name = c.getString(CallLogQuery.SUBSCRIPTION_COMPONENT_NAME);
-        final String subscription_id = c.getString(CallLogQuery.SUBSCRIPTION_ID);
+    private PhoneAccount getAccount(Cursor c) {
+        final String component_name = c.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME);
+        final String account_id = c.getString(CallLogQuery.ACCOUNT_ID);
 
         // TODO: actually pull data from the database
         return null;
diff --git a/src/com/android/dialer/calllog/CallLogGroupBuilder.java b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
index a36ceb4..9c4e631 100644
--- a/src/com/android/dialer/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
@@ -126,9 +126,9 @@
         // This is the type of the first call in the group.
         int firstCallType = cursor.getInt(CallLogQuery.CALL_TYPE);
 
-        // The subscription information of the first entry in the group.
-        String firstSubscriptionComponentName = cursor.getString(CallLogQuery.SUBSCRIPTION_COMPONENT_NAME);
-        String firstSubscriptionId = cursor.getString(CallLogQuery.SUBSCRIPTION_ID);
+        // The account information of the first entry in the group.
+        String firstAccountComponentName = cursor.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME);
+        String firstAccountId = cursor.getString(CallLogQuery.ACCOUNT_ID);
 
         // Determine the day group for the first call in the cursor.
         final long firstDate = cursor.getLong(CallLogQuery.DATE);
@@ -140,24 +140,24 @@
             // The number of the current row in the cursor.
             final String currentNumber = cursor.getString(CallLogQuery.NUMBER);
             final int callType = cursor.getInt(CallLogQuery.CALL_TYPE);
-            final String currentSubscriptionComponentName = cursor.getString(
-                    CallLogQuery.SUBSCRIPTION_COMPONENT_NAME);
-            final String currentSubscriptionId = cursor.getString(CallLogQuery.SUBSCRIPTION_ID);
+            final String currentAccountComponentName = cursor.getString(
+                    CallLogQuery.ACCOUNT_COMPONENT_NAME);
+            final String currentAccountId = cursor.getString(CallLogQuery.ACCOUNT_ID);
 
             final boolean sameNumber = equalNumbers(firstNumber, currentNumber);
-            final boolean sameSubscriptionComponentName = Objects.equals(
-                    firstSubscriptionComponentName,
-                    currentSubscriptionComponentName);
-            final boolean sameSubscriptionId = Objects.equals(
-                    firstSubscriptionId,
-                    currentSubscriptionId);
-            final boolean sameSubscription = sameSubscriptionComponentName && sameSubscriptionId;
+            final boolean sameAccountComponentName = Objects.equals(
+                    firstAccountComponentName,
+                    currentAccountComponentName);
+            final boolean sameAccountId = Objects.equals(
+                    firstAccountId,
+                    currentAccountId);
+            final boolean sameAccount = sameAccountComponentName && sameAccountId;
 
             final boolean shouldGroup;
             final long currentCallId = cursor.getLong(CallLogQuery.ID);
             final long date = cursor.getLong(CallLogQuery.DATE);
 
-            if (!sameNumber || !sameSubscription) {
+            if (!sameNumber || !sameAccount) {
                 // Should only group with calls from the same number.
                 shouldGroup = false;
             } else if (firstCallType == Calls.VOICEMAIL_TYPE) {
@@ -188,8 +188,8 @@
                 // The current entry is now the first in the group.
                 firstNumber = currentNumber;
                 firstCallType = callType;
-                firstSubscriptionComponentName = currentSubscriptionComponentName;
-                firstSubscriptionId = currentSubscriptionId;
+                firstAccountComponentName = currentAccountComponentName;
+                firstAccountId = currentAccountId;
             }
 
             // Save the day group associated with the current call.
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index 39c6e64..8048d83 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -17,9 +17,8 @@
 package com.android.dialer.calllog;
 
 import android.content.Context;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
@@ -81,10 +80,10 @@
     public int callType;
 
     /**
-     * The subscription for the current call log entry.  Cached here as the call back
+     * The account for the current call log entry.  Cached here as the call back
      * intent is set only when the actions ViewStub is inflated.
      */
-    public Subscription subscription;
+    public PhoneAccount mAccount;
 
     /**
      * If the call has an associated voicemail message, the URI of the voicemail message for
diff --git a/src/com/android/dialer/calllog/CallLogQuery.java b/src/com/android/dialer/calllog/CallLogQuery.java
index 87b7a45..42b4ae8 100644
--- a/src/com/android/dialer/calllog/CallLogQuery.java
+++ b/src/com/android/dialer/calllog/CallLogQuery.java
@@ -44,8 +44,8 @@
             Calls.CACHED_FORMATTED_NUMBER,      // 15
             Calls.IS_READ,                      // 16
             Calls.NUMBER_PRESENTATION,          // 17
-            Calls.SUBSCRIPTION_COMPONENT_NAME,  // 18
-            Calls.SUBSCRIPTION_ID,              // 19
+            Calls.ACCOUNT_COMPONENT_NAME,  // 18
+            Calls.ACCOUNT_ID,              // 19
     };
 
     public static final int ID = 0;
@@ -66,6 +66,6 @@
     public static final int CACHED_FORMATTED_NUMBER = 15;
     public static final int IS_READ = 16;
     public static final int NUMBER_PRESENTATION = 17;
-    public static final int SUBSCRIPTION_COMPONENT_NAME = 18;
-    public static final int SUBSCRIPTION_ID = 19;
+    public static final int ACCOUNT_COMPONENT_NAME = 18;
+    public static final int ACCOUNT_ID = 19;
 }
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index 6a270be..9820102 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -19,11 +19,9 @@
 import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
-import android.database.Cursor;
 import android.net.Uri;
 import android.provider.CallLog.Calls;
-import android.telecomm.Subscription;
-import android.util.Log;
+import android.telecomm.PhoneAccount;
 
 import com.android.contacts.common.CallUtil;
 import com.android.dialer.CallDetailActivity;
@@ -40,11 +38,11 @@
     public abstract Intent getIntent(Context context);
 
     public static IntentProvider getReturnCallIntentProvider(final String number,
-            final Subscription subscription) {
+            final PhoneAccount account) {
         return new IntentProvider() {
             @Override
             public Intent getIntent(Context context) {
-                return CallUtil.getCallIntent(number, subscription);
+                return CallUtil.getCallIntent(number, account);
             }
         };
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 9752aa7..f9139c7 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -34,13 +34,11 @@
 import android.media.ToneGenerator;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.PhonesColumns;
 import android.provider.Settings;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telecomm.TelecommManager;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.PhoneStateListener;
@@ -59,8 +57,6 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.ViewTreeObserver.OnPreDrawListener;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.EditText;
@@ -68,13 +64,12 @@
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.PopupMenu;
-import android.widget.TableRow;
 import android.widget.TextView;
 
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.SubscriptionManager;
-import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
+import com.android.contacts.common.PhoneAccountManager;
+import com.android.contacts.common.dialog.SelectAccountDialogFragment;
 import com.android.contacts.common.util.PhoneNumberFormatter;
 import com.android.contacts.common.util.StopWatch;
 import com.android.dialer.NeededForReflection;
@@ -101,7 +96,7 @@
         DialpadKeyButton.OnPressedListener {
     private static final String TAG = DialpadFragment.class.getSimpleName();
 
-    private static SubscriptionManager mSubscriptionManager;
+    private static PhoneAccountManager mAccountManager;
 
     /**
      * This interface allows the DialpadFragment to tell its hosting Activity when and when not
@@ -856,9 +851,9 @@
             @Override
             public void show() {
                 final Menu menu = getMenu();
-                final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
+                final MenuItem selectAccount = menu.findItem(R.id.menu_select_account);
                 final MenuItem sendMessage = menu.findItem(R.id.menu_send_message);
-                selectSubscription.setVisible(mSubscriptionManager != null);
+                selectAccount.setVisible(mAccountManager != null);
                 sendMessage.setVisible(mSmsPackageComponentName != null);
 
                 boolean enable = !isDigitsEmpty();
@@ -1077,14 +1072,15 @@
                 // Clear the digits just in case.
                 clearDialpad();
             } else {
-                final Subscription subscription = mSubscriptionManager != null?
-                        mSubscriptionManager.getCurrentSubscription() : null;
+                final PhoneAccount account = mAccountManager != null?
+                        mAccountManager.getCurrentAccount() : null;
 
 
                 final Intent intent = CallUtil.getCallIntent(number,
                         (getActivity() instanceof DialtactsActivity ?
                                 ((DialtactsActivity) getActivity()).getCallOrigin() : null),
-                                subscription);
+                        account
+                );
                 DialerUtils.startActivityWithErrorToast(getActivity(), intent);
                 hideAndClearDialpad(false);
             }
@@ -1444,8 +1440,8 @@
                 DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent);
                 return true;
             }
-            case R.id.menu_select_subscription:
-              SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
+            case R.id.menu_select_account:
+              SelectAccountDialogFragment.show(getFragmentManager(), mAccountManager);
               return true;
 
             default:
@@ -1617,8 +1613,8 @@
         return mAnimate;
     }
 
-    public void setSubscriptionManager(SubscriptionManager subscriptionManager) {
-        mSubscriptionManager = subscriptionManager;
+    public void setAccountManager(PhoneAccountManager accountManager) {
+        mAccountManager = accountManager;
     }
 
     public void setYFraction(float yFraction) {
diff --git a/tests/res/layout/fill_call_log_test.xml b/tests/res/layout/fill_call_log_test.xml
index c81a679..7651b08 100644
--- a/tests/res/layout/fill_call_log_test.xml
+++ b/tests/res/layout/fill_call_log_test.xml
@@ -179,28 +179,28 @@
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="@string/call_subscription" />
+        android:text="@string/call_account" />
     <RadioGroup
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal">
         <RadioButton
-            android:id="@+id/subscription0"
+            android:id="@+id/account0"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@string/subscription0"
+            android:text="@string/account0"
             android:textSize="9sp" />
         <RadioButton
-            android:id="@+id/subscription1"
+            android:id="@+id/account1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@string/subscription1"
+            android:text="@string/account1"
             android:textSize="9sp" />
         <RadioButton
-            android:id="@+id/no_subscription"
+            android:id="@+id/no_account"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@string/no_subscription"
+            android:text="@string/no_account"
             android:textSize="9sp" />
     </RadioGroup>
     <Button
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index cfc70c4..553b3c0 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -51,8 +51,8 @@
     <string name="presentation_unknown">Unknown</string>
     <string name="presentation_payphone">Payphone</string>
     <string name="delta_after_add">Offset call time after add (min): </string>
-    <string name="call_subscription">Subscription</string>
-    <string name="subscription0">Subscription 0</string>
-    <string name="subscription1">Subscription 1</string>
-    <string name="no_subscription">No Subscription</string>
+    <string name="call_account">Account</string>
+    <string name="account0">Account 0</string>
+    <string name="account1">Account 1</string>
+    <string name="no_account">No Account</string>
 </resources>
diff --git a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
index e12a2a2..e495ca7 100644
--- a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
+++ b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
@@ -31,7 +31,7 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.provider.CallLog.Calls;
-import android.telecomm.Subscription;
+import android.telecomm.PhoneAccount;
 import android.telephony.TelephonyManager;
 import android.text.format.DateFormat;
 import android.util.Log;
@@ -86,8 +86,8 @@
     private int mCallDateYear;
     private int mCallDateMonth;
     private int mCallDateDay;
-    private RadioButton mSubscription0;
-    private RadioButton mSubscription1;
+    private RadioButton mAccount0;
+    private RadioButton mAccount1;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -132,8 +132,8 @@
         mCallDate = (TextView) findViewById(R.id.call_date);
         mPhoneNumber = (TextView) findViewById(R.id.phone_number);
         mOffset = (EditText) findViewById(R.id.delta_after_add);
-        mSubscription0 = (RadioButton) findViewById(R.id.subscription0);
-        mSubscription1 = (RadioButton) findViewById(R.id.subscription1);
+        mAccount0 = (RadioButton) findViewById(R.id.account0);
+        mAccount1 = (RadioButton) findViewById(R.id.account1);
 
         // Use the current time as the default values for the picker
         final Calendar c = Calendar.getInstance();
@@ -395,13 +395,13 @@
         }
     }
 
-    private Subscription getManualSubscription() {
+    private PhoneAccount getManualAccount() {
         TelephonyManager telephonyManager = new TelephonyManager(this);
-        List <Subscription> subscriptions = telephonyManager.getSubscriptions();
-        if (mSubscription0.isChecked()) {
-            return subscriptions.get(0);
-        } else if (mSubscription1.isChecked()){
-            return subscriptions.get(1);
+        List <PhoneAccount> accounts = telephonyManager.getAccounts();
+        if (mAccount0.isChecked()) {
+            return accounts.get(0);
+        } else if (mAccount1.isChecked()){
+            return accounts.get(1);
         } else {
             return null;
         }
@@ -489,7 +489,7 @@
         dateTime.set(mCallDateYear, mCallDateMonth, mCallDateDay, mCallTimeHour, mCallTimeMinute);
 
         Calls.addCall(null, this, mPhoneNumber.getText().toString(), getManualPresentation(),
-                getManualCallType(), getManualSubscription(), dateTime.getTimeInMillis(),
+                getManualCallType(), getManualAccount(), dateTime.getTimeInMillis(),
                 RNG.nextInt(60 * 60));
 
         // Subtract offset from the call date/time and store as new date/time
