diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index 5d1bc91..6ca5ef5 100644
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -475,7 +475,7 @@
 
                     // display the name as a toast
                     Context context = sc.progressDialog.getContext();
-                    CharSequence msg = ContactDisplayUtils.getTtsSpannedPhoneNumberString(
+                    CharSequence msg = ContactDisplayUtils.getTtsSpannedPhoneNumber(
                             context.getResources(), R.string.menu_callNumber, name);
                     Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
                 }
diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
index eccad58..c40c993 100644
--- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
@@ -19,6 +19,8 @@
 import static android.Manifest.permission.READ_CALL_LOG;
 import static android.Manifest.permission.READ_CONTACTS;
 
+import com.google.common.collect.Maps;
+
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -40,10 +42,8 @@
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.calllog.PhoneAccountUtils;
 import com.android.dialer.filterednumber.FilteredNumbersUtil;
 import com.android.dialer.list.ListsFragment;
-import com.google.common.collect.Maps;
 
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -214,7 +214,7 @@
 
         // The text to show in the ticker, describing the new event.
         if (callToNotify != null) {
-            CharSequence msg = ContactDisplayUtils.getTtsSpannedPhoneNumberString(
+            CharSequence msg = ContactDisplayUtils.getTtsSpannedPhoneNumber(
                     resources,
                     R.string.notification_new_voicemail_ticker,
                     names.get(callToNotify.number));
diff --git a/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java b/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
index abc502f..792cead 100644
--- a/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
@@ -134,13 +134,13 @@
         String okText;
         String message;
         if (isBlocked) {
-            title = ContactDisplayUtils.getTtsSpannedPhoneNumberString(getResources(),
+            title = ContactDisplayUtils.getTtsSpannedPhoneNumber(getResources(),
                     R.string.unblock_number_confirmation_title,
                     mDisplayNumber);
             okText = getString(R.string.unblock_number_ok);
             message = null;
         } else {
-            title = ContactDisplayUtils.getTtsSpannedPhoneNumberString(getResources(),
+            title = ContactDisplayUtils.getTtsSpannedPhoneNumber(getResources(),
                     R.string.block_number_confirmation_title,
                     mDisplayNumber);
             okText = getString(R.string.block_number_ok);
@@ -180,7 +180,7 @@
         if (!FilteredNumbersUtil.canBlockNumber(getActivity(), mNumber, mCountryIso)) {
             dismiss();
             Toast.makeText(getContext(),
-                    ContactDisplayUtils.getTtsSpannedPhoneNumberString(
+                    ContactDisplayUtils.getTtsSpannedPhoneNumber(
                             getResources(), R.string.invalidNumber, mDisplayNumber),
                     Toast.LENGTH_SHORT).show();
         }
@@ -200,12 +200,12 @@
     }
 
     private CharSequence getBlockedMessage() {
-        return ContactDisplayUtils.getTtsSpannedPhoneNumberString(getResources(),
+        return ContactDisplayUtils.getTtsSpannedPhoneNumber(getResources(),
                 R.string.snackbar_number_blocked, mDisplayNumber);
     }
 
     private CharSequence getUnblockedMessage() {
-        return ContactDisplayUtils.getTtsSpannedPhoneNumberString(getResources(),
+        return ContactDisplayUtils.getTtsSpannedPhoneNumber(getResources(),
                 R.string.snackbar_number_unblocked, mDisplayNumber);
     }
 
diff --git a/src/com/android/dialer/list/BlockedListSearchFragment.java b/src/com/android/dialer/list/BlockedListSearchFragment.java
index a54a721..bddd3d4 100644
--- a/src/com/android/dialer/list/BlockedListSearchFragment.java
+++ b/src/com/android/dialer/list/BlockedListSearchFragment.java
@@ -187,7 +187,7 @@
                             BlockedListSearchFragment.this);
                 } else {
                     Toast.makeText(getContext(),
-                            ContactDisplayUtils.getTtsSpannedPhoneNumberString(getResources(),
+                            ContactDisplayUtils.getTtsSpannedPhoneNumber(getResources(),
                                     R.string.alreadyBlocked, number),
                             Toast.LENGTH_SHORT).show();
                 }
@@ -197,7 +197,7 @@
                 onCheckListener, number, countryIso);
         if (!success) {
             Toast.makeText(getContext(),
-                    ContactDisplayUtils.getTtsSpannedPhoneNumberString(
+                    ContactDisplayUtils.getTtsSpannedPhoneNumber(
                             getResources(), R.string.invalidNumber, number),
                     Toast.LENGTH_SHORT).show();
         }
@@ -223,7 +223,7 @@
             final String number,
             final Integer blockId) {
         if (blockId != null) {
-            Toast.makeText(getContext(), ContactDisplayUtils.getTtsSpannedPhoneNumberString(
+            Toast.makeText(getContext(), ContactDisplayUtils.getTtsSpannedPhoneNumber(
                             getResources(), R.string.alreadyBlocked, number),
                     Toast.LENGTH_SHORT).show();
             return;
diff --git a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
index 9e75b2b..488bb33 100644
--- a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
+++ b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
@@ -148,9 +148,9 @@
         final String number = getFormattedQueryString();
         switch (shortcutType) {
             case SHORTCUT_DIRECT_CALL:
-                text = ContactDisplayUtils.getTtsSpannedPhoneNumberString(resources,
-                                R.string.search_shortcut_call_number,
-                                mBidiFormatter.unicodeWrap(number, TextDirectionHeuristics.LTR));
+                text = ContactDisplayUtils.getTtsSpannedPhoneNumber(resources,
+                        R.string.search_shortcut_call_number,
+                        mBidiFormatter.unicodeWrap(number, TextDirectionHeuristics.LTR));
                 drawableId = R.drawable.ic_search_phone;
                 break;
             case SHORTCUT_CREATE_NEW_CONTACT:
