diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index d728649..4678a2d 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -132,7 +132,7 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM 카드에서 로딩 중..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM 카드 주소록"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"이 기능을 사용하려면 주소록 애플리케이션을 사용하도록 다시 설정하세요."</string>
-    <string name="voice_search_not_available" msgid="7580616740587850828">"음성 검색을 사용할 수 없습니다."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"음성검색을 사용할 수 없습니다."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"이름 또는 전화번호 입력"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"전체"</string>
     <string name="call_log_missed_title" msgid="4541142293870638971">"부재중 전화"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c2738c6..43911c8 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -132,7 +132,7 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Đang tải từ thẻ SIM…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Danh bạ trên thẻ SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Bật lại ứng dụng Liên hệ để sử dụng tính năng này."</string>
-    <string name="voice_search_not_available" msgid="7580616740587850828">"Tìm kiếm bằng giọng nói là không khả dụng."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Tìm kiếm bằng giọng nói không khả dụng."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Nhập tên hoặc số điện thoại"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
     <string name="call_log_missed_title" msgid="4541142293870638971">"Bị nhỡ"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a0376a6..b28c8ea 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -265,6 +265,12 @@
     -->
     <string name="description_image_button_pound">pound</string>
 
+    <!-- String describing the image on ImageButton plus
+
+         Used by AccessibilityService to announce the purpose of the button.
+    -->
+    <string name="description_image_button_plus">plus</string>
+
     <!-- String describing the Voicemail ImageButton
 
          Used by AccessibilityService to announce the purpose of the button.
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 9a23812..0d23378 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -662,10 +662,16 @@
         }
 
         // Long-pressing one button will initiate Voicemail.
-        fragmentView.findViewById(R.id.one).setOnLongClickListener(this);
+        final DialpadKeyButton one = (DialpadKeyButton) fragmentView.findViewById(R.id.one);
+        one.setOnLongClickListener(this);
+        one.setLongHoverContentDescription(
+                resources.getText(R.string.description_voicemail_button));
 
         // Long-pressing zero button will enter '+' instead.
-        fragmentView.findViewById(R.id.zero).setOnLongClickListener(this);
+        final DialpadKeyButton zero = (DialpadKeyButton) fragmentView.findViewById(R.id.zero);
+        zero.setOnLongClickListener(this);
+        zero.setLongHoverContentDescription(
+                resources.getText(R.string.description_image_button_plus));
 
     }
 
diff --git a/src/com/android/dialer/dialpad/DialpadKeyButton.java b/src/com/android/dialer/dialpad/DialpadKeyButton.java
index 9a20993..1d5104c 100644
--- a/src/com/android/dialer/dialpad/DialpadKeyButton.java
+++ b/src/com/android/dialer/dialpad/DialpadKeyButton.java
@@ -22,6 +22,7 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -30,16 +31,46 @@
 /**
  * Custom class for dialpad buttons.
  * <p>
- * This class implements lift-to-type interaction when touch exploration is
- * enabled.
+ * When touch exploration mode is enabled for accessibility, this class
+ * implements the lift-to-type interaction model:
+ * <ul>
+ * <li>Hovering over the button will cause it to gain accessibility focus
+ * <li>Removing the hover pointer while inside the bounds of the button will
+ * perform a click action
+ * <li>If long-click is supported, hovering over the button for a longer period
+ * of time will switch to the long-click action
+ * <li>Moving the hover pointer outside of the bounds of the button will restore
+ * to the normal click action
+ * <ul>
  */
 public class DialpadKeyButton extends FrameLayout {
+    /** Timeout before switching to long-click accessibility mode. */
+    private static final int LONG_HOVER_TIMEOUT = ViewConfiguration.getLongPressTimeout() * 2;
+
     /** Accessibility manager instance used to check touch exploration state. */
     private AccessibilityManager mAccessibilityManager;
 
     /** Bounds used to filter HOVER_EXIT events. */
     private Rect mHoverBounds = new Rect();
 
+    /** Whether this view is currently in the long-hover state. */
+    private boolean mLongHovered;
+
+    /** Alternate content description for long-hover state. */
+    private CharSequence mLongHoverContentDesc;
+
+    /** Backup of standard content description. Used for accessibility. */
+    private CharSequence mBackupContentDesc;
+
+    /** Backup of clickable property. Used for accessibility. */
+    private boolean mWasClickable;
+
+    /** Backup of long-clickable property. Used for accessibility. */
+    private boolean mWasLongClickable;
+
+    /** Runnable used to trigger long-click mode for accessibility. */
+    private Runnable mLongHoverRunnable;
+
     public interface OnPressedListener {
         public void onPressed(View view, boolean pressed);
     }
@@ -65,6 +96,23 @@
                 Context.ACCESSIBILITY_SERVICE);
     }
 
+    public void setLongHoverContentDescription(CharSequence contentDescription) {
+        mLongHoverContentDesc = contentDescription;
+
+        if (mLongHovered) {
+            super.setContentDescription(mLongHoverContentDesc);
+        }
+    }
+
+    @Override
+    public void setContentDescription(CharSequence contentDescription) {
+        if (mLongHovered) {
+            mBackupContentDesc = contentDescription;
+        } else {
+            super.setContentDescription(contentDescription);
+        }
+    }
+
     @Override
     public void setPressed(boolean pressed) {
         super.setPressed(pressed);
@@ -102,13 +150,36 @@
             switch (event.getActionMasked()) {
                 case MotionEvent.ACTION_HOVER_ENTER:
                     // Lift-to-type temporarily disables double-tap activation.
+                    mWasClickable = isClickable();
+                    mWasLongClickable = isLongClickable();
+                    if (mWasLongClickable && mLongHoverContentDesc != null) {
+                        if (mLongHoverRunnable == null) {
+                            mLongHoverRunnable = new Runnable() {
+                                @Override
+                                public void run() {
+                                    setLongHovered(true);
+                                    announceForAccessibility(mLongHoverContentDesc);
+                                }
+                            };
+                        }
+                        postDelayed(mLongHoverRunnable, LONG_HOVER_TIMEOUT);
+                    }
+
                     setClickable(false);
+                    setLongClickable(false);
                     break;
                 case MotionEvent.ACTION_HOVER_EXIT:
                     if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
-                        simulateClickForAccessibility();
+                        if (mLongHovered) {
+                            performLongClick();
+                        } else {
+                            simulateClickForAccessibility();
+                        }
                     }
-                    setClickable(true);
+
+                    cancelLongHover();
+                    setClickable(mWasClickable);
+                    setLongClickable(mWasLongClickable);
                     break;
             }
         }
@@ -134,4 +205,25 @@
 
         setPressed(false);
     }
+
+    private void setLongHovered(boolean enabled) {
+        if (mLongHovered != enabled) {
+            mLongHovered = enabled;
+
+            // Switch between normal and alternate description, if available.
+            if (enabled) {
+                mBackupContentDesc = getContentDescription();
+                super.setContentDescription(mLongHoverContentDesc);
+            } else {
+                super.setContentDescription(mBackupContentDesc);
+            }
+        }
+    }
+
+    private void cancelLongHover() {
+        if (mLongHoverRunnable != null) {
+            removeCallbacks(mLongHoverRunnable);
+        }
+        setLongHovered(false);
+    }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
index 04611b4..81d9bfd 100644
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java
@@ -541,7 +541,8 @@
                     final View child = mListView.getChildAt(i);
                     int position = firstVisiblePosition + i;
                     final int itemViewType = mAdapter.getItemViewType(position);
-                    if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP) {
+                    if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP &&
+                            child instanceof ContactTileRow) {
                         // This is a tiled row, so perform horizontal animations instead
                         performHorizontalAnimations((ContactTileRow) child, (
                                 ArrayList<ContactEntry>) mAdapter.getItem(position), idsInPlace);
