diff --git a/src/com/android/contacts/interactions/CalendarInteraction.java b/src/com/android/contacts/interactions/CalendarInteraction.java
index efd724a..e249e4f 100644
--- a/src/com/android/contacts/interactions/CalendarInteraction.java
+++ b/src/com/android/contacts/interactions/CalendarInteraction.java
@@ -11,6 +11,7 @@
 import android.net.Uri;
 import android.provider.CalendarContract.Attendees;
 import android.provider.CalendarContract.Events;
+import android.text.Spannable;
 import android.text.TextUtils;
 import android.text.format.Time;
 import android.util.Log;
@@ -278,7 +279,7 @@
     }
 
     @Override
-    public String getContentDescription(Context context) {
+    public Spannable getContentDescription(Context context) {
         // The default TalkBack is good
         return null;
     }
diff --git a/src/com/android/contacts/interactions/CallLogInteraction.java b/src/com/android/contacts/interactions/CallLogInteraction.java
index a03f6a4..3464c0f 100644
--- a/src/com/android/contacts/interactions/CallLogInteraction.java
+++ b/src/com/android/contacts/interactions/CallLogInteraction.java
@@ -17,6 +17,7 @@
 
 import com.android.contacts.R;
 import com.android.contacts.common.util.BitmapUtil;
+import com.android.contacts.common.util.ContactDisplayUtils;
 
 import android.content.ContentValues;
 import android.content.Context;
@@ -28,6 +29,7 @@
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.text.BidiFormatter;
+import android.text.Spannable;
 import android.text.TextDirectionHeuristics;
 
 /**
@@ -179,9 +181,12 @@
     }
 
     @Override
-    public String getContentDescription(Context context) {
-        return context.getResources().getString(R.string.content_description_recent_call,
-                getCallTypeString(context), getViewHeader(context), getViewFooter(context));
+    public Spannable getContentDescription(Context context) {
+        final String phoneNumber = getViewHeader(context);
+        final String contentDescription = context.getResources().getString(
+                R.string.content_description_recent_call,
+                getCallTypeString(context), phoneNumber, getViewFooter(context));
+        return ContactDisplayUtils.getTelephoneTtsSpannable(contentDescription, phoneNumber);
     }
 
     private String getCallTypeString(Context context) {
diff --git a/src/com/android/contacts/interactions/ContactInteraction.java b/src/com/android/contacts/interactions/ContactInteraction.java
index 11bbb49..bf00132 100644
--- a/src/com/android/contacts/interactions/ContactInteraction.java
+++ b/src/com/android/contacts/interactions/ContactInteraction.java
@@ -19,6 +19,7 @@
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.text.Spannable;
 
 /**
  * Represents a default interaction between the phone's owner and a contact
@@ -32,7 +33,7 @@
     Drawable getIcon(Context context);
     Drawable getBodyIcon(Context context);
     Drawable getFooterIcon(Context context);
-    String getContentDescription(Context context);
+    Spannable getContentDescription(Context context);
     /** The resource id for the icon, if available. May be 0 if one is not available. */
     int getIconResourceId();
 }
diff --git a/src/com/android/contacts/interactions/SmsInteraction.java b/src/com/android/contacts/interactions/SmsInteraction.java
index 3bba0bc..7d26401 100644
--- a/src/com/android/contacts/interactions/SmsInteraction.java
+++ b/src/com/android/contacts/interactions/SmsInteraction.java
@@ -16,6 +16,7 @@
 package com.android.contacts.interactions;
 
 import com.android.contacts.R;
+import com.android.contacts.common.util.ContactDisplayUtils;
 
 import android.content.ContentValues;
 import android.content.Context;
@@ -24,6 +25,7 @@
 import android.net.Uri;
 import android.provider.Telephony.Sms;
 import android.text.BidiFormatter;
+import android.text.Spannable;
 import android.text.TextDirectionHeuristics;
 
 /**
@@ -159,9 +161,12 @@
     }
 
     @Override
-    public String getContentDescription(Context context) {
-        return context.getResources().getString(R.string.content_description_recent_sms,
-                getViewHeader(context), getViewBody(context), getViewFooter(context));
+    public Spannable getContentDescription(Context context) {
+        final String phoneNumber = getViewBody(context);
+        final String contentDescription = context.getResources().getString(
+                R.string.content_description_recent_sms,
+                getViewHeader(context), phoneNumber, getViewFooter(context));
+        return ContactDisplayUtils.getTelephoneTtsSpannable(contentDescription, phoneNumber);
     }
 
     @Override
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index 68698d6..dc8970b 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -23,6 +23,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.support.v7.widget.CardView;
+import android.text.Spannable;
 import android.text.TextUtils;
 import android.transition.ChangeBounds;
 import android.transition.ChangeScroll;
@@ -73,7 +74,7 @@
         private final Drawable mSubHeaderIcon;
         private final String mText;
         private final Drawable mTextIcon;
-        private final String mPrimaryContentDescription;
+        private Spannable mPrimaryContentDescription;
         private final Intent mIntent;
         private final Drawable mAlternateIcon;
         private final Intent mAlternateIntent;
@@ -88,7 +89,7 @@
 
         public Entry(int id, Drawable mainIcon, String header, String subHeader,
                 Drawable subHeaderIcon, String text, Drawable textIcon,
-                String primaryContentDescription, Intent intent,
+                Spannable primaryContentDescription, Intent intent,
                 Drawable alternateIcon, Intent alternateIntent, String alternateContentDescription,
                 boolean shouldApplyColor, boolean isEditable,
                 EntryContextMenuInfo entryContextMenuInfo, Drawable thirdIcon, Intent thirdIntent,
@@ -138,7 +139,7 @@
             return mTextIcon;
         }
 
-        String getPrimaryContentDescription() {
+        Spannable getPrimaryContentDescription() {
             return mPrimaryContentDescription;
         }
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 4d543a4..dbd4494 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -73,6 +73,7 @@
 import android.telecom.PhoneAccount;
 import android.telecom.TelecomManager;
 import android.text.BidiFormatter;
+import android.text.SpannableString;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 import android.util.Log;
@@ -1606,7 +1607,8 @@
                 -1 : (int) dataItem.getId();
 
         return new Entry(dataId, icon, header, subHeader, subHeaderIcon, text, textIcon,
-                primaryContentDescription.toString(), intent, alternateIcon, alternateIntent,
+                new SpannableString(primaryContentDescription.toString()),
+                intent, alternateIcon, alternateIntent,
                 alternateContentDescription.toString(), shouldApplyColor, isEditable,
                 entryContextMenuInfo, thirdIcon, thirdIntent, thirdContentDescription,
                 iconResourceId);
