diff --git a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
index efd6982..b567dbb 100644
--- a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
+++ b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
@@ -20,11 +20,5 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
-
-    <view class="com.android.incallui.DialpadFragment$HoverIgnoringLinearLayout"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-        <include layout="@layout/dialpad_view"/>
-    </view>
+    <include layout="@layout/dialpad_view"/>
 </view>
diff --git a/InCallUI/res/values-am/strings.xml b/InCallUI/res/values-am/strings.xml
index 982a65f..9d439ea 100644
--- a/InCallUI/res/values-am/strings.xml
+++ b/InCallUI/res/values-am/strings.xml
@@ -45,9 +45,9 @@
     <string name="card_title_hanging_up" msgid="3999101620995182450">"በመዝጋት ላይ"</string>
     <string name="card_title_in_call" msgid="6346543933068225205">"ጥሪ ላይ"</string>
     <string name="card_title_my_phone_number" msgid="112428362494434191">"ቁጥሬ<xliff:g id="MY_PHONE_NUMBER">%s</xliff:g> ነው"</string>
-    <string name="card_title_video_call_connecting" msgid="297586766381973954">"ቪዲዮ በማገናኘት ላይ"</string>
+    <string name="card_title_video_call_connecting" msgid="297586766381973954">"ቪድዮ በማገናኘት ላይ"</string>
     <string name="card_title_video_call" msgid="5898636679563320218">"የቪዲዮ ጥሪ"</string>
-    <string name="card_title_video_call_requesting" msgid="4587504939739340937">"ቪዲዮ በመጠየቅ ላይ"</string>
+    <string name="card_title_video_call_requesting" msgid="4587504939739340937">"ቪድዮ በመጠየቅ ላይ"</string>
     <string name="card_title_video_call_error" msgid="9000555878389539225">"የቪዲዮ ጥሪን ማገናኘት አልተቻለም"</string>
     <string name="card_title_callback_number" msgid="7307938207564217293">"የእርስዎ የመልሶ መደወያ ቁጥር\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
     <string name="card_title_callback_number_emergency" msgid="8634765419223426754">"የእርስዎ የድንገተኛ አደጋ መልሶ መደወያ ቁጥር\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
@@ -69,10 +69,10 @@
     <string name="notification_network_selection_text" msgid="2607085729661923269">"የተመረጠ አውታረመረብ(<xliff:g id="OPERATOR_NAME">%s</xliff:g>) የለም"</string>
     <string name="notification_action_answer" msgid="6700362365135365143">"መልስ"</string>
     <string name="notification_action_end_call" msgid="6069460915123531620">"ዝጋ"</string>
-    <string name="notification_action_answer_video" msgid="7809271910870211729">"ቪዲዮ"</string>
+    <string name="notification_action_answer_video" msgid="7809271910870211729">"ቪድዮ"</string>
     <string name="notification_action_answer_voice" msgid="1770796916369437773">"ድምፅ"</string>
     <string name="notification_action_accept" msgid="2898609801209468429">"ተቀበል"</string>
-    <string name="notification_action_dismiss" msgid="2679969397930852858">"ያጥፉ"</string>
+    <string name="notification_action_dismiss" msgid="2679969397930852858">"አሰናብት"</string>
     <string name="notification_missedCall_call_back" msgid="2684890353590890187">"መልሰህ ደውል"</string>
     <string name="notification_missedCall_message" msgid="3049928912736917988">"መልዕክት"</string>
     <string name="incall_error_power_off" msgid="6550191216405193368">"ለመደወል፣ መጀመሪያየአውሮፕላኑን ሁነታ አጥፋ።"</string>
@@ -113,7 +113,7 @@
     <string name="onscreenVideoCallText" msgid="4800924186056115442">"የቪዲዮ ጥሪ"</string>
     <string name="onscreenChangeToVoiceText" msgid="5311407863653867937">"ወደ ድምጽ ጥሪ ይለውጡ"</string>
     <string name="onscreenSwitchCameraText" msgid="5324543493442787798">"ካሜራ ቀይር"</string>
-    <string name="onscreenPauseVideoText" msgid="5663965924921429203">"ቪዲዮ ለአፍታ አቁም"</string>
+    <string name="onscreenPauseVideoText" msgid="5663965924921429203">"ቪድዮ ለአፍታ አቁም"</string>
     <string name="onscreenOverflowText" msgid="2702376562345723132">"ተጨማሪ አማራጮች"</string>
     <string name="voicemail_provider" msgid="5135942703327136909">"አገልግሎት"</string>
     <string name="voicemail_settings" msgid="72448049107749316">"አዋቅር"</string>
@@ -130,7 +130,7 @@
     <string name="description_target_answer" msgid="7205604197797472471">"መልስ"</string>
     <string name="description_target_send_sms" msgid="2098326025587950144">"SMS ላክ"</string>
     <string name="description_target_decline" msgid="4789834364389731957">"አትቀበል"</string>
-    <string name="description_target_answer_video_call" msgid="3495965588512395026">"እንደ ቪዲዮ ጥሪ ይመልሱ"</string>
+    <string name="description_target_answer_video_call" msgid="3495965588512395026">"እንደ ቪድዮ ጥሪ ይመልሱ"</string>
     <string name="description_target_answer_audio_call" msgid="8396296303320994450">"እንደ ድምጽ ጥሪ ይመልሱ"</string>
     <string name="description_target_accept_upgrade_to_video_request" msgid="2894072808324604062">"የቪዲዮ ጥያቄ ተቀበል"</string>
     <string name="description_target_decline_upgrade_to_video_request" msgid="4093888612888538776">"የቪዲዮ ጥያቄ አትቀበል"</string>
diff --git a/InCallUI/src/com/android/incallui/CircularRevealActivity.java b/InCallUI/src/com/android/incallui/CircularRevealActivity.java
index 7a9b7cc..4dc58ba 100644
--- a/InCallUI/src/com/android/incallui/CircularRevealActivity.java
+++ b/InCallUI/src/com/android/incallui/CircularRevealActivity.java
@@ -59,9 +59,7 @@
         super.onCreate(savedInstanceState);
         overridePendingTransition(0, 0);
         setContentView(R.layout.outgoing_call_animation);
-        final Point touchPoint = getIntent().getParcelableExtra(TouchPointManager.TOUCH_POINT);
-        final MaterialPalette palette = getIntent().getParcelableExtra(EXTRA_THEME_COLORS);
-        setupDecorView(touchPoint, palette);
+        prepareDecorViewFromIntent(getIntent());
     }
 
     @Override
@@ -81,6 +79,18 @@
         super.onStop();
     }
 
+    @Override
+    protected void onNewIntent(Intent intent) {
+        setIntent(intent);
+        prepareDecorViewFromIntent(intent);
+    }
+
+    private void prepareDecorViewFromIntent(Intent intent) {
+        final Point touchPoint = intent.getParcelableExtra(TouchPointManager.TOUCH_POINT);
+        final MaterialPalette palette = intent.getParcelableExtra(EXTRA_THEME_COLORS);
+        setupDecorView(touchPoint, palette);
+    }
+
     private void setupDecorView(final Point touchPoint, MaterialPalette palette) {
         final View view  = getWindow().getDecorView();
 
diff --git a/InCallUI/src/com/android/incallui/DialpadFragment.java b/InCallUI/src/com/android/incallui/DialpadFragment.java
index b12b3eb..611815a 100644
--- a/InCallUI/src/com/android/incallui/DialpadFragment.java
+++ b/InCallUI/src/com/android/incallui/DialpadFragment.java
@@ -83,30 +83,6 @@
         }
     }
 
-    /**
-     * LinearLayout that always returns true for onHoverEvent callbacks, to fix
-     * problems with accessibility due to the dialpad overlaying other fragments.
-     */
-    public static class HoverIgnoringLinearLayout extends LinearLayout {
-
-        public HoverIgnoringLinearLayout(Context context) {
-            super(context);
-        }
-
-        public HoverIgnoringLinearLayout(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        public HoverIgnoringLinearLayout(Context context, AttributeSet attrs, int defStyle) {
-            super(context, attrs, defStyle);
-        }
-
-        @Override
-        public boolean onHoverEvent(MotionEvent event) {
-            return true;
-        }
-    }
-
     private EditText mDtmfDialerField;
 
     /** Hash Map to map a view id to a character*/
