diff --git a/res/drawable-hdpi/ic_dial_action_vm.png b/res/drawable-hdpi/ic_dial_action_vm.png
new file mode 100644
index 0000000..68ee3d6
--- /dev/null
+++ b/res/drawable-hdpi/ic_dial_action_vm.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_all_contacts_dk.png b/res/drawable-hdpi/ic_menu_all_contacts_dk.png
new file mode 100644
index 0000000..88ba4f1
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_all_contacts_dk.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialer_menu_dialpad_dk.png b/res/drawable-hdpi/ic_menu_dialpad_dk.png
similarity index 100%
rename from res/drawable-hdpi/ic_dialer_menu_dialpad_dk.png
rename to res/drawable-hdpi/ic_menu_dialpad_dk.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialer_menu_history_dk.png b/res/drawable-hdpi/ic_menu_history_dk.png
similarity index 100%
rename from res/drawable-hdpi/ic_dialer_menu_history_dk.png
rename to res/drawable-hdpi/ic_menu_history_dk.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_history_lt.png b/res/drawable-hdpi/ic_menu_history_lt.png
new file mode 100644
index 0000000..a36323c
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_history_lt.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_dark.png b/res/drawable-hdpi/ic_menu_overflow_dk.png
similarity index 100%
rename from res/drawable-hdpi/ic_menu_overflow_dark.png
rename to res/drawable-hdpi/ic_menu_overflow_dk.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_lt.png b/res/drawable-hdpi/ic_menu_overflow_lt.png
new file mode 100644
index 0000000..2561b8c
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_search.png b/res/drawable-hdpi/ic_voice_search.png
new file mode 100644
index 0000000..6caf4a4
--- /dev/null
+++ b/res/drawable-hdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-hdpi/shadow_contact_photo.png b/res/drawable-hdpi/shadow_contact_photo.png
new file mode 100644
index 0000000..49cbb97
--- /dev/null
+++ b/res/drawable-hdpi/shadow_contact_photo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_vm.png b/res/drawable-mdpi/ic_dial_action_vm.png
new file mode 100644
index 0000000..5b91b42
--- /dev/null
+++ b/res/drawable-mdpi/ic_dial_action_vm.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_all_contacts_dk.png b/res/drawable-mdpi/ic_menu_all_contacts_dk.png
new file mode 100644
index 0000000..03af9c4
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_all_contacts_dk.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialer_menu_dialpad_dk.png b/res/drawable-mdpi/ic_menu_dialpad_dk.png
similarity index 100%
rename from res/drawable-mdpi/ic_dialer_menu_dialpad_dk.png
rename to res/drawable-mdpi/ic_menu_dialpad_dk.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialer_menu_history_dk.png b/res/drawable-mdpi/ic_menu_history_dk.png
similarity index 100%
rename from res/drawable-mdpi/ic_dialer_menu_history_dk.png
rename to res/drawable-mdpi/ic_menu_history_dk.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_history_lt.png b/res/drawable-mdpi/ic_menu_history_lt.png
new file mode 100644
index 0000000..3597a5e
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_history_lt.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_dark.png b/res/drawable-mdpi/ic_menu_overflow_dk.png
similarity index 100%
rename from res/drawable-mdpi/ic_menu_overflow_dark.png
rename to res/drawable-mdpi/ic_menu_overflow_dk.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_lt.png b/res/drawable-mdpi/ic_menu_overflow_lt.png
new file mode 100644
index 0000000..7dc68c9
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_search.png b/res/drawable-mdpi/ic_voice_search.png
new file mode 100644
index 0000000..e290f92
--- /dev/null
+++ b/res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-mdpi/shadow_contact_photo.png b/res/drawable-mdpi/shadow_contact_photo.png
new file mode 100644
index 0000000..4734bbd
--- /dev/null
+++ b/res/drawable-mdpi/shadow_contact_photo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_vm.png b/res/drawable-xhdpi/ic_dial_action_vm.png
new file mode 100644
index 0000000..269fd1a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dial_action_vm.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_all_contacts_dk.png b/res/drawable-xhdpi/ic_menu_all_contacts_dk.png
new file mode 100644
index 0000000..11bd615
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_all_contacts_dk.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialer_menu_dialpad_dk.png b/res/drawable-xhdpi/ic_menu_dialpad_dk.png
similarity index 100%
rename from res/drawable-xhdpi/ic_dialer_menu_dialpad_dk.png
rename to res/drawable-xhdpi/ic_menu_dialpad_dk.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialer_menu_history_dk.png b/res/drawable-xhdpi/ic_menu_history_dk.png
similarity index 100%
rename from res/drawable-xhdpi/ic_dialer_menu_history_dk.png
rename to res/drawable-xhdpi/ic_menu_history_dk.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_history_lt.png b/res/drawable-xhdpi/ic_menu_history_lt.png
new file mode 100644
index 0000000..6b411cb
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_history_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_dark.png b/res/drawable-xhdpi/ic_menu_overflow_dk.png
similarity index 100%
rename from res/drawable-xhdpi/ic_menu_overflow_dark.png
rename to res/drawable-xhdpi/ic_menu_overflow_dk.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_lt.png b/res/drawable-xhdpi/ic_menu_overflow_lt.png
new file mode 100644
index 0000000..95e436c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_search.png b/res/drawable-xhdpi/ic_voice_search.png
new file mode 100644
index 0000000..6147581
--- /dev/null
+++ b/res/drawable-xhdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-xhdpi/shadow_contact_photo.png b/res/drawable-xhdpi/shadow_contact_photo.png
new file mode 100644
index 0000000..1077ec1
--- /dev/null
+++ b/res/drawable-xhdpi/shadow_contact_photo.png
Binary files differ
diff --git a/res/layout/dialpad_key.xml b/res/layout/dialpad_key.xml
new file mode 100644
index 0000000..b204c20
--- /dev/null
+++ b/res/layout/dialpad_key.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- A layout representing a single key in the dialpad -->
+<com.android.dialer.dialpad.DialpadKeyButton
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/DialtactsDialpadButtonStyle"
+    android:clickable="true" >
+    <TextView
+        android:id="@+id/dialpad_key_number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/dialpad_primary_text_color"
+        android:textSize="@dimen/dialpad_key_numbers_size"
+        android:fontFamily="sans-serif-light"
+        android:layout_centerInParent="true"
+        />
+    <TextView
+        android:id="@+id/dialpad_key_letters"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/dialpad_secondary_text_color"
+        android:textSize="@dimen/dialpad_key_letters_size"
+        android:paddingRight="11dp"
+        android:layout_alignBaseline="@id/dialpad_key_number"
+        android:fontFamily="sans-serif-light"
+        android:layout_alignParentRight="true"
+        />
+</com.android.dialer.dialpad.DialpadKeyButton>
\ No newline at end of file
diff --git a/res/layout/new_dialpad.xml b/res/layout/new_dialpad.xml
index 29f9cf0..60240bc 100644
--- a/res/layout/new_dialpad.xml
+++ b/res/layout/new_dialpad.xml
@@ -26,73 +26,86 @@
     android:paddingStart="5dip"
     android:paddingEnd="5dip"
     android:paddingBottom="10dip"
+    android:stretchColumns="0,1,2"
     android:layoutDirection="ltr" >
 
     <TableRow
-         android:layout_height="0px"
-         android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/one" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_1_wht"
-            android:contentDescription="@string/description_image_button_one" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/two" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_2_wht"
-            android:contentDescription="@string/description_image_button_two" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/three" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_3_wht"
-            android:contentDescription="@string/description_image_button_three" />
+        android:layout_height="0px"
+        android:layout_weight="1">
+        <com.android.dialer.dialpad.DialpadKeyButton
+            xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/one"
+            style="@style/DialtactsDialpadButtonStyle"
+            android:clickable="true" >
+            <TextView
+                android:id="@+id/dialpad_key_number"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/dialpad_primary_text_color"
+                android:textSize="@dimen/dialpad_key_numbers_size"
+                android:fontFamily="sans-serif-light"
+                android:layout_centerInParent="true" />
+            <ImageView
+                android:id="@+id/dialpad_key_voicemail"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:src="@drawable/ic_dial_action_vm"
+                android:paddingRight="11dp"
+                android:layout_alignBaseline="@id/dialpad_key_number"
+                android:baselineAlignBottom="true"
+                android:layout_alignParentRight="true" />
+        </com.android.dialer.dialpad.DialpadKeyButton>
+        <include layout="@layout/dialpad_key" android:id="@+id/two"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/three"/>
     </TableRow>
 
     <TableRow
-         android:layout_height="0px"
-         android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/four" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_4_wht"
-            android:contentDescription="@string/description_image_button_four" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/five" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_5_wht"
-            android:contentDescription="@string/description_image_button_five" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/six" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_6_wht"
-            android:contentDescription="@string/description_image_button_six" />
+        android:layout_height="0px"
+        android:layout_weight="1">
+        <include layout="@layout/dialpad_key" android:id="@+id/four"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/five"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/six"/>
     </TableRow>
 
     <TableRow
-         android:layout_height="0px"
-         android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/seven" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_7_wht"
-            android:contentDescription="@string/description_image_button_seven" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/eight" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_8_wht"
-            android:contentDescription="@string/description_image_button_eight" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/nine" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_9_wht"
-            android:contentDescription="@string/description_image_button_nine" />
+        android:layout_height="0px"
+        android:layout_weight="1">
+        <include layout="@layout/dialpad_key" android:id="@+id/seven"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/eight"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/nine"/>
     </TableRow>
 
     <TableRow
-         android:layout_height="0px"
-         android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/star" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_star_wht"
-            android:contentDescription="@string/description_image_button_star" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/zero" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_0_wht"
-            android:contentDescription="@string/description_image_button_zero" />
-        <com.android.dialer.dialpad.DialpadImageButton
-            android:id="@+id/pound" style="@style/DialtactsDialpadButtonStyle"
-            android:src="@drawable/dial_num_pound_wht"
-            android:contentDescription="@string/description_image_button_pound" />
+        android:layout_height="0px"
+        android:layout_weight="1">
+        <com.android.dialer.dialpad.DialpadKeyButton
+            xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/star"
+            style="@style/DialtactsDialpadButtonStyle"
+            android:clickable="true" >
+            <TextView
+                android:id="@id/dialpad_key_number"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/dialpad_secondary_text_color"
+                android:textSize="@dimen/dialpad_key_special_characters_size"
+                android:fontFamily="sans-serif-light"
+                android:layout_centerInParent="true" />
+        </com.android.dialer.dialpad.DialpadKeyButton>
+        <include layout="@layout/dialpad_key" android:id="@+id/zero"/>
+        <com.android.dialer.dialpad.DialpadKeyButton
+            xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/pound"
+            style="@style/DialtactsDialpadButtonStyle"
+            android:clickable="true" >
+            <TextView
+                android:id="@id/dialpad_key_number"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/dialpad_secondary_text_color"
+                android:textSize="@dimen/dialpad_key_special_characters_size"
+                android:fontFamily="sans-serif-light"
+                android:layout_centerInParent="true" />
+        </com.android.dialer.dialpad.DialpadKeyButton>
     </TableRow>
 </TableLayout>
diff --git a/res/layout/new_dialpad_fragment.xml b/res/layout/new_dialpad_fragment.xml
index 2026781..f6f652c 100644
--- a/res/layout/new_dialpad_fragment.xml
+++ b/res/layout/new_dialpad_fragment.xml
@@ -19,7 +19,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical" >
     <!-- spacer view -->
-    <View
+    <Space
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1" />
@@ -85,9 +85,9 @@
                 android:layout_height="@dimen/fake_action_bar_height"
                 android:layout_width="@dimen/fake_menu_button_min_width"
                 android:layout_gravity="bottom|start"
-                android:background="?android:attr/selectableItemBackground"
+                android:background="@drawable/btn_call"
                 android:contentDescription="@string/action_menu_call_history_description"
-                android:src="@drawable/ic_dialer_menu_history_dk"/>
+                android:src="@drawable/ic_menu_history_lt"/>
             <ImageButton
                 android:id="@+id/dialButton"
                 android:layout_width="0dp"
@@ -103,8 +103,8 @@
                 android:layout_height="@dimen/fake_action_bar_height"
                 android:layout_width="@dimen/fake_menu_button_min_width"
                 android:layout_gravity="bottom|end"
-                android:background="?android:attr/selectableItemBackground"
-                android:src="@drawable/ic_menu_overflow_dark"
+                android:background="@drawable/btn_call"
+                android:src="@drawable/ic_menu_overflow_lt"
                 android:contentDescription="@string/action_menu_overflow_description" />
         </LinearLayout>
 
@@ -119,4 +119,4 @@
         />
 
     </LinearLayout>
-</view>
\ No newline at end of file
+</view>
diff --git a/res/layout/new_dialtacts_activity.xml b/res/layout/new_dialtacts_activity.xml
index 7845d0f..b9d417b 100644
--- a/res/layout/new_dialtacts_activity.xml
+++ b/res/layout/new_dialtacts_activity.xml
@@ -49,8 +49,18 @@
                 android:layout_width="40dp"
                 android:padding="6dp"
                 android:src="@drawable/ic_close_dk"
+                android:clickable="true"
                 android:background="?android:attr/selectableItemBackground"
                 android:visibility="gone" />
+            <ImageView
+                android:id="@+id/voice_search_button"
+                android:layout_height="40dp"
+                android:layout_width="40dp"
+                android:padding="6dp"
+                android:src="@drawable/ic_voice_search"
+                android:clickable="true"
+                android:contentDescription="@string/description_start_voice_search"
+                android:background="?android:attr/selectableItemBackground" />
         </LinearLayout>
         <FrameLayout
             android:layout_height="0dp"
diff --git a/res/layout/new_phone_favorites_fragment.xml b/res/layout/new_phone_favorites_fragment.xml
index cc11ea1..2b6bbe4 100644
--- a/res/layout/new_phone_favorites_fragment.xml
+++ b/res/layout/new_phone_favorites_fragment.xml
@@ -58,7 +58,7 @@
             android:layout_gravity="bottom|start"
             android:background="?android:attr/selectableItemBackground"
             android:contentDescription="@string/action_menu_call_history_description"
-            android:src="@drawable/ic_dialer_menu_history_dk"/>
+            android:src="@drawable/ic_menu_history_dk"/>
         <ImageButton
             android:id="@+id/dialpad_button"
             android:layout_width="@dimen/fake_menu_button_min_width"
@@ -66,13 +66,13 @@
             android:layout_gravity="bottom|center"
             android:background="?android:attr/selectableItemBackground"
             android:contentDescription="@string/description_search_button"
-            android:src="@drawable/ic_dialer_menu_dialpad_dk"/>
+            android:src="@drawable/ic_menu_dialpad_dk"/>
         <ImageButton
              android:id="@+id/overflow_menu"
              android:layout_width="@dimen/fake_menu_button_min_width"
              android:layout_height="match_parent"
              android:layout_gravity="bottom|end"
-             android:src="@drawable/ic_menu_overflow_dark"
+             android:src="@drawable/ic_menu_overflow_dk"
              android:contentDescription="@string/action_menu_overflow_description"
              android:background="?android:attr/selectableItemBackground"/>
     </FrameLayout>
diff --git a/res/layout/phone_favorite_regular_row_view.xml b/res/layout/phone_favorite_regular_row_view.xml
index eda5a02..532e858 100644
--- a/res/layout/phone_favorite_regular_row_view.xml
+++ b/res/layout/phone_favorite_regular_row_view.xml
@@ -18,14 +18,14 @@
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/contact_tile_frequent_phone"
-    class="com.android.dialer.list.PhoneFavoriteRegularRowView"
-    android:focusable="true"
-    android:background="?android:attr/selectableItemBackground"
-    android:nextFocusLeft="@+id/contact_tile_quick">
+    class="com.android.dialer.list.PhoneFavoriteRegularRowView">
 
     <RelativeLayout
+        android:id="@+id/contact_favorite_card"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" >
+        android:layout_height="match_parent"
+        android:focusable="true"
+        android:background="?android:attr/selectableItemBackground" >
 
         <com.android.contacts.common.widget.LayoutSuppressingQuickContactBadge
             android:id="@id/contact_tile_quick"
@@ -54,4 +54,46 @@
             android:textAlignment="viewStart" />
     </RelativeLayout>
 
+    <LinearLayout
+        android:id="@+id/favorite_remove_dialogue"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:gravity="center_vertical"
+        android:alpha="0.0"
+        android:visibility="gone">
+
+        <TextView
+            android:id="@+id/favorite_remove_dialogue_text"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="@string/favorite_hidden"
+            android:ellipsize="marquee"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:layout_marginLeft="8dip"
+            android:layout_marginStart="8dip"
+            android:singleLine="true"
+            android:layout_gravity="center_vertical"
+            android:textDirection="ltr"
+            android:textAlignment="viewStart" />
+
+        <TextView
+            android:id="@+id/favorite_remove_undo_button"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_weight="0.5"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:ellipsize="marquee"
+            android:singleLine="true"
+            android:text="@string/favorite_hidden_undo"
+            android:layout_marginLeft="8dip"
+            android:layout_marginStart="8dip"
+            android:gravity="end"
+            android:layout_gravity="center_vertical"
+            android:clickable="true"/>
+
+    </LinearLayout>
 </view>
diff --git a/res/layout/phone_favorite_tile_view.xml b/res/layout/phone_favorite_tile_view.xml
index bf90205..2865c2a 100644
--- a/res/layout/phone_favorite_tile_view.xml
+++ b/res/layout/phone_favorite_tile_view.xml
@@ -19,11 +19,14 @@
     android:paddingBottom="1dip"
     android:paddingRight="1dip"
     android:paddingEnd="1dip"
-    class="com.android.dialer.list.PhoneFavoriteTileView" >
+    class="com.android.dialer.list.PhoneFavoriteSquareTileView" >
 
     <RelativeLayout
+        android:id="@+id/contact_tile_favorite_card"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" >
+        android:layout_height="match_parent"
+        android:focusable="true"
+        android:background="?android:attr/selectableItemBackground" >>
 
         <com.android.contacts.common.widget.LayoutSuppressingImageView
             android:id="@+id/contact_tile_image"
@@ -31,23 +34,29 @@
             android:layout_height="match_parent"
             android:scaleType="centerCrop" />
 
+        <View
+            android:id="@+id/shadow_overlay"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/shadow_contact_photo"/>
+
         <TextView
             android:id="@+id/contact_tile_name"
             android:layout_width="match_parent"
-            android:layout_height="@dimen/contact_tile_shadowbox_height"
-            android:background="@color/contact_tile_shadow_box_color"
+            android:layout_height="@dimen/contact_tile_info_button_height_and_width"
             android:gravity="center_vertical"
-            android:textColor="@android:color/white"
+            android:textColor="@color/contact_tile_name_color"
+            android:fontFamily="sans-serif-light"
             android:singleLine="true"
             android:textSize="16sp"
             android:fadingEdge="horizontal"
             android:fadingEdgeLength="3dip"
             android:ellipsize="marquee"
             android:layout_alignParentBottom="true"
-            android:paddingLeft="8dip"
-            android:paddingRight="47dip"
-            android:paddingStart="8dip"
-            android:paddingEnd="47dip"
+            android:paddingLeft="8dp"
+            android:paddingRight="@dimen/contact_tile_info_button_height_and_width"
+            android:paddingStart="8dp"
+            android:paddingEnd="@dimen/contact_tile_info_button_height_and_width"
             android:textAlignment="viewStart" />
 
         <View
@@ -62,14 +71,14 @@
             android:id="@id/contact_tile_secondary_button"
             android:src="@drawable/ic_contact_info"
             android:background="?android:attr/selectableItemBackground"
-            android:layout_height="@dimen/contact_tile_shadowbox_height"
-            android:layout_width="48dip"
-            android:paddingLeft="12dip"
-            android:paddingRight="12dip"
-            android:paddingStart="12dip"
-            android:paddingEnd="12dip"
-            android:paddingTop="12dip"
-            android:paddingBottom="12dip"
+            android:layout_height="@dimen/contact_tile_info_button_height_and_width"
+            android:layout_width="@dimen/contact_tile_info_button_height_and_width"
+            android:paddingLeft="8dp"
+            android:paddingRight="8dp"
+            android:paddingStart="8dp"
+            android:paddingEnd="8dp"
+            android:paddingTop="8dp"
+            android:paddingBottom="8dp"
             android:layout_alignParentBottom="true"
             android:layout_alignParentRight="true"
             android:layout_alignParentEnd="true"
@@ -77,4 +86,47 @@
 
     </RelativeLayout>
 
+    <LinearLayout
+        android:id="@+id/favorite_tile_remove_dialogue"
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:gravity="center_horizontal"
+        android:alpha="0.0"
+        android:visibility="gone">
+
+        <TextView
+            android:id="@+id/favorite_tile_remove_dialogue_text"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="@string/favorite_hidden"
+            android:ellipsize="marquee"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:layout_marginLeft="8dip"
+            android:layout_marginStart="8dip"
+            android:singleLine="true"
+            android:layout_gravity="center_horizontal"
+            android:textDirection="ltr"
+            android:textAlignment="viewStart" />
+
+        <TextView
+            android:id="@+id/favorite_tile_remove_undo_button"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_weight="0.5"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:ellipsize="marquee"
+            android:singleLine="true"
+            android:text="@string/favorite_hidden_undo"
+            android:layout_marginLeft="8dip"
+            android:layout_marginStart="8dip"
+            android:gravity="end"
+            android:layout_gravity="center_horizontal"
+            android:clickable="true"/>
+
+    </LinearLayout>
+
 </view>
diff --git a/res/layout/show_all_contact_button.xml b/res/layout/show_all_contact_button.xml
new file mode 100644
index 0000000..824d10c
--- /dev/null
+++ b/res/layout/show_all_contact_button.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/show_all_contact_button"
+    android:orientation="horizontal"
+    android:clickable="true"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center"
+    android:background="?android:attr/selectableItemBackground"
+    android:focusable="true">
+
+    <ImageView
+        android:layout_height="match_parent"
+        android:layout_width="wrap_content"
+        android:layout_gravity="center"
+        android:src="@drawable/ic_menu_all_contacts_dk"
+        android:layout_marginEnd="10dp"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:textSize="14sp"
+        android:ellipsize="marquee"
+        android:singleLine="true"
+        android:text="@string/show_all_contacts_button_text"
+        android:textAlignment="center"
+        android:gravity="center"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/show_all_contacts_fragment.xml b/res/layout/show_all_contacts_fragment.xml
new file mode 100644
index 0000000..0a95f27
--- /dev/null
+++ b/res/layout/show_all_contacts_fragment.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/pinned_header_list_layout"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_marginTop="?android:attr/actionBarSize">
+
+    <!-- Shown only when an Account filter is set.
+         - paddingTop should be here to show "shade" effect correctly. -->
+    <!-- TODO {klp} Remove the filter header. -->
+    <include
+        android:id="@+id/account_filter_header_container"
+        layout="@layout/account_filter_header" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1" >
+        <view
+            class="com.android.contacts.common.list.PinnedHeaderListView"
+            style="@style/NewDialtactsTheme"
+            android:id="@android:id/list"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="?attr/contact_browser_list_padding_left"
+            android:layout_marginRight="?attr/contact_browser_list_padding_right"
+            android:layout_marginStart="?attr/contact_browser_list_padding_left"
+            android:layout_marginEnd="?attr/contact_browser_list_padding_right"
+            android:fastScrollEnabled="true"
+            android:fadingEdge="none"/>
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/res/menu/dialpad_options_new.xml b/res/menu/dialpad_options_new.xml
new file mode 100644
index 0000000..0727dd5
--- /dev/null
+++ b/res/menu/dialpad_options_new.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_add_contacts"
+        android:title="@string/recentCalls_addToContact"
+        android:showAsAction="withText"
+        android:orderInCategory="1" />
+    <item
+        android:id="@+id/menu_2s_pause"
+        android:title="@string/add_2sec_pause"
+        android:showAsAction="withText"
+        android:orderInCategory="1" />
+    <item
+        android:id="@+id/menu_add_wait"
+        android:title="@string/add_wait"
+        android:showAsAction="withText"
+        android:orderInCategory="1" />
+</menu>
diff --git a/res/menu/dialtacts_options_new.xml b/res/menu/dialtacts_options_new.xml
index 92708fe..b306979 100644
--- a/res/menu/dialtacts_options_new.xml
+++ b/res/menu/dialtacts_options_new.xml
@@ -24,9 +24,6 @@
         android:id="@+id/add_contact"
         android:title="@string/menu_newContact"/>
     <item
-        android:id="@+id/menu_show_hide_all_contacts"
-        android:title="@string/show_all_contacts" />
-    <item
         android:id="@+id/menu_call_settings"
         android:title="@string/call_settings"
         android:orderInCategory="2" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 5309344..d46a173 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"bel"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"terugvee"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nommer om te skakel"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeskiedenis"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opsies"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopieer"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Wys slegs uitgaande"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1a947d8..e2b5593 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"ደውል"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"የኋሊት ደምሳሽ"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ቁጥር ለመደወል"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"የስልክ ጥሪ ታሪክ"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ተጨማሪ አማራጮች"</string>
     <string name="menu_copy" msgid="6108677035381940698">"ቅዳ"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"ወጪዎቹን ብቻ አሳይ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 158b095..f05ad3f 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"طلب"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"الرقم الذي سيتم طلبه"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"سجل المكالمات"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"مزيد من الخيارات"</string>
     <string name="menu_copy" msgid="6108677035381940698">"نسخ"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"عرض الصادر فقط"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 89f255f..430cfa2 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"набор"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"нумар для набору"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Дадатковыя параметры"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Капіраваць"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Паказаць толькі выходныя"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d7f5959..fd5ff4b 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"набиране"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"назад"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"номер за набиране"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Още опции"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Копиране"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Показване само на изходящите"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Няма скорошни гласови съобщения."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Показване на всички контакти"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Показване само на любимите"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 2e9e970..0df7d8b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"marca"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"retrocés"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número que es marcarà"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de trucades"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Més opcions"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copia"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostra només trucades sortints"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 906a899..5818768 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"vytáčení"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"číslo, které chcete vytočit"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historie volání"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Více možností"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopírovat"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Zobrazit pouze odchozí"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a5dfb2b..e937847 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"ring op"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer at ringe op"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Opkaldshistorik"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere valgmuligheder"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiér"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Vis kun udgående"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 5eba43b..2a53943 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"wählen"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Rücktaste"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"Zu wählende Nummer"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Anrufliste"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mehr Optionen"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopieren"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Nur ausgehende Anrufe anzeigen"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Keine Mailbox-Nachrichten"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Alle Kontakte anzeigen"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Nur Favoriten anzeigen"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Verlauf"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index a72c67e..bf61b60 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"κλήση"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"αριθμός για κλήση"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Ιστορικό κλήσεων"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Περισσότερες επιλογές"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Αντιγραφή"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Εμφάνιση μόνο εξερχόμενων"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 329a693..809cf1c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"number to dial"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Call History"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"More options"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copy"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Show outgoing only"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 3368c10..72ec7c8 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"retroceso"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número para marcar"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar solo salientes"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hay mensajes del buzón de voz recientes."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos los contactos"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostrar solo favoritos"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 4442b62..984c0ee 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"retroceder un espacio"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número que se va a marcar"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de llamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar solo llamadas salientes"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 767a972..93c27b8 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"Helista"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"tagasilüke"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"number valimiseks"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Kõneajalugu"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Rohkem valikuid"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopeeri"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Kuva ainult väljuvad"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Pole ühtegi hiljutist kõnepostiteadet."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Kuva kõik kontaktid"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Kuva ainult lemmikud"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Ajalugu"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f0244c5..ec181bc 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"شماره گیری"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"شماره برای شماره گیری"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"سابقه تماس"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"گزینه‌های بیشتر"</string>
     <string name="menu_copy" msgid="6108677035381940698">"کپی"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"فقط نمایش خروجی"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"اخیراً هیچ پست صوتی نداشته‌اید."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"نمایش همه مخاطبین"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"فقط نمایش موارد دلخواه"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"سابقه"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index e4c1fa0..0467092 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"soita"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"askelpalautin"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numero johon soitetaan"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Soittohistoria"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Lisää vaihtoehtoja"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopioi"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Näytä vain soitetut"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ei uusia viestejä vastaajassa."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Näytä kaikki yhteystiedot"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Näytä vain suosikit"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index d83c512..caade3a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"retour arrière"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Plus d\'options"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copier"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Afficher appels sortants uniq."</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Aucun message vocal récent"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Afficher tous les contacts"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Afficher les contacts ajoutés aux favoris uniquement"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Historique"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 77facaa..9ae8edd 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"डायल करें"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"हटाएं"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"डायल करने के लिए नंबर"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"कॉल इतिहास"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"अधिक विकल्प"</string>
     <string name="menu_copy" msgid="6108677035381940698">"प्रतिलिपि"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"केवल आउटगोइंग ही दिखाएं"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index a57e8be..16fa3f6 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"biraj"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"broj za pozivanje"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Povijest poziva"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Više opcija"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiranje"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Prikaži samo odlazne"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 2d99a75..8c761fc 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"tárcsázás"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"a tárcsázandó szám"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Hívási előzmények"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"További beállítások"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Másolás"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Csak a kimenők megjelenítése"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 81abeac..5c22006 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"panggil"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nomor untuk dipanggil"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Opsi lainnya"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Salin"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Tampilkan panggilan keluar"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tidak ada pesan suara terbaru."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Tampilkan semua kontak"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Hanya tampilkan favorit"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Riwayat"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 6b2d875..1c091a7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"componi"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numero da comporre"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Cronologia chiamate"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Altre opzioni"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copia"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostra solo in uscita"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index ce05262..64d9a9a 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"חייג"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"מספר לחיוג"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"היסטוריית שיחות"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"אפשרויות נוספות"</string>
     <string name="menu_copy" msgid="6108677035381940698">"העתק"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"הצג רק שיחות יוצאות"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"אין הודעות דואר קולי אחרונות."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"הצג את כל אנשי הקשר"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"הצג מועדפים בלבד"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"היסטוריה"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 31e9300..42336ef 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"発信"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"発信番号"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話履歴"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"その他のオプション"</string>
     <string name="menu_copy" msgid="6108677035381940698">"コピー"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"発信のみを表示"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近のボイスメールはありません。"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"すべての連絡先を表示"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"お気に入りのみを表示"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"履歴"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 5cee4ef..a104018 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"전화걸기"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"백스페이스"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"전화를 걸 번호"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"옵션 더보기"</string>
     <string name="menu_copy" msgid="6108677035381940698">"복사"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"발신 전화만 표시"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"최근 음성사서함이 없습니다."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"모든 연락처 표시"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"즐겨찾는 연락처만 표시"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"기록"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 692cc69..0e88b32 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"rinkti numerį"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"naikinimo klavišas"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"renkamas numeris"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Skambučių istorija"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Daugiau parinkčių"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopijuoti"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Rodyti tik išsiunčiamus"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 12bf57a..71a28fe 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"sastādīt numuru"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"atpakaļatkāpe"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"sastādītais numurs"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Zvanu vēsture"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Vairāk opciju"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopēt"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Rādīt tikai izejošos zvanus"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nav nesenu balss pasta ziņojumu."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Rādīt visas kontaktpersonas"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Rādīt tikai izlasi"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Vēsture"</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 05df3a1..bd30e5e 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"dail"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"undur ruang"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nombor untuk didail"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Lagi pilihan"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Salin"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Tunjuk panggilan keluar shj"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tiada mel suara terbaru."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Tunjukkan semua kenalan"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Tunjukkan kegemaran sahaja"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Sejarah"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 64d3181..d10fb2e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"tilbaketast"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ring til"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Anropslogg"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere alternativer"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiér"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Vis bare utgående"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index e4ff8b0..14d1946 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"bellen"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer om te bellen"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeschiedenis"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opties"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiëren"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Alleen uitgaand weergeven"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 695416a..b01a8fe 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"wybierz numer"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numer do wybrania"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia połączeń"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Więcej opcji"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiuj"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Pokaż tylko wychodzące"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 820d581..3a3c6c8 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"retrocesso"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número a marcar"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Histórico de Chamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar apenas cham. efetuadas"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index c0462b9..74f0a02 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"discar"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número para discagem"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar apenas enviadas"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 9375776..5fd6541 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -114,6 +114,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"cumponer"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"tasta da return"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numer da cumponer"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <!-- no translation found for action_menu_overflow_description (2303272250613084574) -->
     <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
     <skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index f107ee6..dea770c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"apelaţi"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"tasta backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numărul de apelat"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mai multe opţiuni"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Copiaţi"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Numai apelurile efectuate"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nu există mesaje vocale recente."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Afișați toate persoanele de contact"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Afișați numai preferate"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Istoric"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 93fbb6e..905f230 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"набор номера"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"удаление последнего символа"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"набираемый номер"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Ещё"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Копировать"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Исходящие"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Нет новых голосовых сообщений"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Все контакты"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Только часто используемые"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 5c2a599..6c2e229 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"vytáčanie"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"číslo, ktoré chcete vytočiť"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Ďalšie možnosti"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopírovať"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Zobraziť len odchádzajúce"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Žiadne nedávne hlasové správy."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Zobraziť všetky kontakty"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Zobraziť iba obľúbené"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"História"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 5f30c33..8f12142 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"pokliči"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"vračalka"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"številka, ki bo poklicana"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Več možnosti"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiraj"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Pokaži samo odhodne"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5087ac5..1708718 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"бирање"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"број за бирање"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Историја позива"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Још опција"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Копирај"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Прикажи само одлазне"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 2f91b46..c754492 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backsteg"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer att ringa"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Samtalshistorik"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Fler alternativ"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopiera"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Visa endast utgående samtal"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 482fbac..1b5f2dc 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"piga simu"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"futa"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nambari ya kupiga"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia ya Simu"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Chaguo zaidi"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Nakili"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Onyesha zinazotoka pekee"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Hakuna ujumbe wa sauti wa hivi karibuni."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Onyesha anwani zote"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Onyesha zinazopendwa tu"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index c38740f..092f3c9 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"หมุนหมายเลข"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"ย้อนกลับ"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"หมายเลขที่จะโทร"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"ประวัติการโทร"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ตัวเลือกเพิ่มเติม"</string>
     <string name="menu_copy" msgid="6108677035381940698">"คัดลอก"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"แสดงสายที่โทรออกเท่านั้น"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"ไม่มีข้อความเสียงล่าสุด"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"แสดงรายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"แสดงเฉพาะรายชื่อที่ชื่นชอบ"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"ประวัติ"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 75bdfd4..127b094 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"mag-dial"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numerong ida-dial"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Kasaysayan ng Tawag"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Higit pang mga pagpipilian"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopyahin"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Ipakita lang ang papalabas"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Walang mga kamakailang voicemail."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Ipakita ang lahat ng contact"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mga paborito lang ang ipakita"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Kasaysayan"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index abbdc3e..ed49499 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"çevir"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"geri tuşu"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"çevrilecek numara"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Diğer seçenekler"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopyala"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Yalnızca gidenleri göster"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Yakın zamanda bırakılan sesli mesaj yok."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Tüm kişileri göster"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Yalnızca favori kişileri göster"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Geçmiş"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ddb623e..2e37861 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"дзвон."</string>
     <string name="description_delete_button" msgid="6263102114033407382">"видалити"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"номер для набору"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Історія викликів"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Інші варіанти"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Копіювати"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Показувати лише вихідні"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 74d4a9d..1ed85d0 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"quay số"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"số để quay"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Tùy chọn khác"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Sao chép"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Chỉ hiển thị cuộc gọi đi"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Không có thư thoại gần đây nào."</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"Hiển thị tất cả liên hệ"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Chỉ hiển thị liên hệ ưa thích"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"Lịch sử"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index eb7d201..5ff5079 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -82,6 +82,8 @@
     <string name="description_dial_button" msgid="1274091017188142646">"拨打"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"退格"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"要拨打的号码"</string>
+    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
+    <skip />
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多选项"</string>
     <string name="menu_copy" msgid="6108677035381940698">"复制"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"仅显示外拨电话"</string>
@@ -138,6 +140,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近没有语音邮件。"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"显示所有联系人"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"仅显示常用联系人"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"通话记录"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 4bade3b..4dc626d 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"撥號號碼"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話紀錄"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多選項"</string>
     <string name="menu_copy" msgid="6108677035381940698">"複製"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"僅顯示撥出電話"</string>
@@ -138,6 +139,5 @@
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近沒有語音留言。"</string>
     <string name="show_all_contacts" msgid="1732256558071778056">"顯示所有聯絡人"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的最愛"</string>
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
+    <string name="call_log_activity_title" msgid="4612824396355272023">"通話紀錄"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a651ae1..b6c5498 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -82,6 +82,7 @@
     <string name="description_dial_button" msgid="1274091017188142646">"dayela"</string>
     <string name="description_delete_button" msgid="6263102114033407382">"i-backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"inombolo okumele uyidayele"</string>
+    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Umlando wekholi"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Izinketho eziningi"</string>
     <string name="menu_copy" msgid="6108677035381940698">"Kopisha"</string>
     <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Bonisa eziphumayo kuphela"</string>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index c35ea39..2fc78b8 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -54,10 +54,9 @@
     <color name="background_dialpad">#ee020709</color>
 
     <!-- Primary color of dialpad text, including the call button -->
-    <color name="dialpad_primary_text_color">#0099cc</color>
-    <!-- Secondary color of dialpad text (mainly used for the letters corresponding to each digit
-        -->
-    <color name="dialpad_secondary_text_color">#888888</color>
+    <color name="dialpad_primary_text_color">#33b5e5</color>
+    <!-- Secondary color of dialpad text (used for the letters corresponding to each digit -->
+    <color name="dialpad_secondary_text_color">#aaaaaa</color>
 
     <!-- Background color of action bars -->
     <color name="actionbar_background_color">#e6e6e6</color>
@@ -70,4 +69,6 @@
     <!-- Text color of the search box -->
     <color name="searchbox_text_color">#d3d3d3</color>
 
+    <!-- Color of the contact name in favorite tiles -->
+    <color name="contact_tile_name_color">#f0f0f0</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e9f2ce0..7b4c65e 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -34,7 +34,7 @@
     <dimen name="call_log_call_action_width">48dip</dimen>
     <dimen name="call_log_icon_margin">4dip</dimen>
     <dimen name="call_log_inner_margin">8dip</dimen>
-    <dimen name="call_log_outer_margin">16dip</dimen>
+    <dimen name="call_log_outer_margin">8dip</dimen>
     <dimen name="call_log_indent_margin">24dip</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
     <dimen name="call_log_list_contact_photo_size">64dip</dimen>
@@ -49,6 +49,11 @@
     <integer name="dialpad_layout_weight_dialpad">65</integer>
     <integer name="dialpad_layout_weight_additional_buttons">15</integer>
 
+    <!-- Text dimensions for dialpad keys -->
+    <dimen name="dialpad_key_numbers_size">40dp</dimen>
+    <dimen name="dialpad_key_letters_size">11dp</dimen>
+    <dimen name="dialpad_key_special_characters_size">25dp</dimen>
+
     <dimen name="fake_action_bar_height">48dp</dimen>
     <!-- Min with of fake menu buttons, which should be same as ActionBar's one -->
     <dimen name="fake_menu_button_min_width">56dp</dimen>
@@ -59,7 +64,8 @@
     <dimen name="smartdial_confidence_hint_text_size">27dp</dimen>
 
     <!--  Favorites tile and recent call log padding -->
-    <dimen name="phone_contact_tile_divider_padding">3dp</dimen>
+    <dimen name="contact_tile_divider_padding">3dp</dimen>
+    <dimen name="contact_tile_info_button_height_and_width">36dp</dimen>
     <dimen name="favorites_row_top_padding">8dp</dimen>
     <dimen name="favorites_row_bottom_padding">8dp</dimen>
     <dimen name="favorites_row_start_padding">8dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c7e1b86..307d56b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -452,6 +452,9 @@
     -->
     <string name="description_call_log_unheard_voicemail">Unheard voicemail</string>
 
+    <!-- String describing the icon used to start a voice search -->
+    <string name="description_start_voice_search">Start voice search</string>
+
     <!-- The string used to represent an unknown location for a phone number in the call log [CHAR LIMIT=3] -->
     <string name="call_log_empty_gecode">-</string>
 
@@ -527,6 +530,14 @@
          [CHAR LIMIT=15] -->
     <string name="call_log_missed_title">Missed</string>
 
+    <!-- String resource for the font-family to use for the call log activity's title
+         Do not translate. -->
+    <string name="call_log_activity_title_font_family">sans-serif-light</string>
+
+    <!-- String resource for the font-family to use for show all contacts' title
+         Do not translate. -->
+    <string name="show_all_contacts_title_font_family">sans-serif-light</string>
+
     <!-- Text displayed when the list of missed calls is empty -->
     <string name="recentMissed_empty">No recent missed calls.</string>
 
@@ -541,4 +552,62 @@
 
     <!--  Title of activity that displays a list of all calls -->
     <string name="call_log_activity_title">History</string>
+
+    <!--  Do not translate. -->
+    <string name="dialpad_0_number">0</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_0_letters">+</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_1_number">1</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_1_letters"></string>
+    <!--  Do not translate. -->
+    <string name="dialpad_2_number">2</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_2_letters">ABC</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_3_number">3</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_3_letters">DEF</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_4_number">4</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_4_letters">GHI</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_5_number">5</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_5_letters">JKL</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_6_number">6</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_6_letters">MNO</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_7_number">7</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_7_letters">PQRS</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_8_number">8</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_8_letters">TUV</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_9_number">9</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_9_letters">WXYZ</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_star_number">*</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_star_letters"></string>
+    <!--  Do not translate. -->
+    <string name="dialpad_pound_number">#</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_pound_letters"></string>
+
+    <!--  Title of fragment that displays all contacts -->
+    <string name="show_all_contacts_title">All contacts</string>
+    <!--  Title of show all contacts button -->
+    <string name="show_all_contacts_button_text">All contacts</string>
+    <!--  Text displayed when user swipes out a favorite contact -->
+    <string name="favorite_hidden">Hidden from favorites</string>
+    <!--  Text displayed for the undo button to undo removing a favorite contact -->
+    <string name="favorite_hidden_undo">Undo</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 02b693c..0805dd8 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -92,11 +92,11 @@
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
         <item name="list_item_header_text_indent">8dip</item>
-        <item name="list_item_header_text_color">@color/people_app_theme_color</item>
-        <item name="list_item_header_text_size">14sp</item>
-        <item name="list_item_header_height">24dip</item>
-        <item name="list_item_header_underline_height">1dip</item>
-        <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+        <item name="list_item_header_text_color">@color/dialtacts_secondary_text_color</item>
+        <item name="list_item_header_text_size">20sp</item>
+        <item name="list_item_header_height">48dip</item>
+        <item name="list_item_header_underline_height">2dip</item>
+        <item name="list_item_header_underline_color">@color/favorite_contacts_separator_color</item>
         <item name="list_item_data_width_weight">5</item>
         <item name="list_item_label_width_weight">3</item>
         <item name="contact_browser_list_padding_left">8dip</item>
diff --git a/src/com/android/dialer/NewDialtactsActivity.java b/src/com/android/dialer/NewDialtactsActivity.java
index 0229c6b..7ac1b6e 100644
--- a/src/com/android/dialer/NewDialtactsActivity.java
+++ b/src/com/android/dialer/NewDialtactsActivity.java
@@ -38,6 +38,8 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents.UI;
 import android.provider.Settings;
+import android.speech.RecognizerIntent;
+import android.support.v4.app.NavUtils;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -71,9 +73,12 @@
 import com.android.dialer.interactions.PhoneNumberInteraction;
 import com.android.dialer.list.NewPhoneFavoriteFragment;
 import com.android.dialer.list.OnListFragmentScrolledListener;
+import com.android.dialer.list.ShowAllContactsFragment;
 import com.android.dialer.list.SmartDialSearchFragment;
 import com.android.internal.telephony.ITelephony;
 
+import java.util.ArrayList;
+
 /**
  * The dialer tab's title is 'phone', a more common name (see strings.xml).
  *
@@ -93,7 +98,6 @@
     private static final String PHONE_PACKAGE = "com.android.phone";
     private static final String CALL_SETTINGS_CLASS_NAME =
             "com.android.phone.CallFeaturesSetting";
-
     /** @see #getCallOrigin() */
     private static final String CALL_ORIGIN_DIALTACTS =
             "com.android.dialer.DialtactsActivity";
@@ -102,6 +106,7 @@
     private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search";
     private static final String TAG_SMARTDIAL_SEARCH_FRAGMENT = "smartdial";
     private static final String TAG_FAVORITES_FRAGMENT = "favorites";
+    private static final String TAG_SHOW_ALL_CONTACTS_FRAGMENT = "show_all_contacts";
 
     /**
      * Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}.
@@ -110,6 +115,8 @@
 
     private static final int SUBACTIVITY_ACCOUNT_FILTER = 1;
 
+    private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
+
     private String mFilterText;
 
     /**
@@ -132,6 +139,8 @@
      */
     private SmartDialSearchFragment mSmartDialSearchFragment;
 
+    private ShowAllContactsFragment mShowAllContactsFragment;
+
     private View mMenuButton;
     private View mCallHistoryButton;
     private View mDialpadButton;
@@ -146,6 +155,7 @@
     private boolean mInSearchUi;
     private View mSearchViewContainer;
     private View mSearchViewCloseButton;
+    private View mVoiceSearchButton;
     private EditText mSearchView;
 
     /**
@@ -183,7 +193,13 @@
 
             @Override
             public void onTextChanged(CharSequence s, int start, int before, int count) {
-                        final boolean smartDialSearch = isDialpadShowing();
+                // TODO krelease: populate the search fragments with the correct
+                // search query at the correct point in time of the fragment lifecycle.
+                // The current behavior is to simply return to the favorites screen
+                // (when docked), or returning to the Dialer after it has been
+                // swapped out of memory.
+                if (mDialpadFragment == null) return;
+                final boolean smartDialSearch = isDialpadShowing();
                 final String newText = s.toString();
                 // Show search result with non-empty text. Show a bare list otherwise.
                 if (TextUtils.isEmpty(newText) && mInSearchUi) {
@@ -194,7 +210,7 @@
                     enterSearchUi(smartDialSearch);
                 }
 
-                if (isDialpadShowing()) {
+                if (smartDialSearch) {
                     mSmartDialSearchFragment.setQueryString(newText, false);
                 } else {
                     mRegularSearchFragment.setQueryString(newText, false);
@@ -209,7 +225,7 @@
     };
 
     private boolean isDialpadShowing() {
-        return mDialpadFragment.isVisible();
+        return mDialpadFragment != null && mDialpadFragment.isVisible();
     }
 
     @Override
@@ -223,23 +239,26 @@
 
         getActionBar().hide();
 
-        mPhoneFavoriteFragment = new NewPhoneFavoriteFragment();
-        mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
+        if (savedInstanceState == null) {
+            mPhoneFavoriteFragment = new NewPhoneFavoriteFragment();
+            mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
 
-        mRegularSearchFragment = new NewSearchFragment();
-        mSmartDialSearchFragment = new SmartDialSearchFragment();
-        mDialpadFragment = new NewDialpadFragment();
+            mRegularSearchFragment = new NewSearchFragment();
+            mSmartDialSearchFragment = new SmartDialSearchFragment();
+            mDialpadFragment = new NewDialpadFragment();
+            mShowAllContactsFragment = new ShowAllContactsFragment();
+            mShowAllContactsFragment.setOnPhoneNumberPickerActionListener(
+                    mPhoneNumberPickerActionListener);
 
-        // TODO krelease: load fragments on demand instead of creating all of them at run time
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        ft.add(R.id.dialtacts_frame, mPhoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
-        ft.add(R.id.dialtacts_frame, mRegularSearchFragment, TAG_REGULAR_SEARCH_FRAGMENT);
-        ft.add(R.id.dialtacts_frame, mSmartDialSearchFragment, TAG_SMARTDIAL_SEARCH_FRAGMENT);
-        ft.add(R.id.dialtacts_container, mDialpadFragment, TAG_DIALPAD_FRAGMENT);
-        ft.hide(mRegularSearchFragment);
-        ft.hide(mDialpadFragment);
-        ft.hide(mSmartDialSearchFragment);
-        ft.commit();
+            // TODO krelease: load fragments on demand instead of creating all of them at run time
+            final FragmentTransaction ft = getFragmentManager().beginTransaction();
+            ft.add(R.id.dialtacts_frame, mPhoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
+            ft.add(R.id.dialtacts_frame, mRegularSearchFragment, TAG_REGULAR_SEARCH_FRAGMENT);
+            ft.add(R.id.dialtacts_frame, mSmartDialSearchFragment, TAG_SMARTDIAL_SEARCH_FRAGMENT);
+            ft.add(R.id.dialtacts_frame, mShowAllContactsFragment, TAG_SHOW_ALL_CONTACTS_FRAGMENT);
+            ft.add(R.id.dialtacts_container, mDialpadFragment, TAG_DIALPAD_FRAGMENT);
+            ft.commit();
+        }
 
         mBottomPaddingView = findViewById(R.id.dialtacts_bottom_padding);
         prepareSearchView();
@@ -264,21 +283,39 @@
                 TAG_REGULAR_SEARCH_FRAGMENT);
         mRegularSearchFragment.setOnPhoneNumberPickerActionListener(
                 mPhoneNumberPickerActionListener);
-        if (!mRegularSearchFragment.isHidden()) {
-            final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-            transaction.hide(mRegularSearchFragment);
-            transaction.commit();
-        }
 
         mSmartDialSearchFragment = (SmartDialSearchFragment) fm.findFragmentByTag(
                 TAG_SMARTDIAL_SEARCH_FRAGMENT);
         mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(
                 mPhoneNumberPickerActionListener);
-        if (!mSmartDialSearchFragment.isHidden()) {
+
+        mShowAllContactsFragment = (ShowAllContactsFragment) fm.findFragmentByTag(
+                TAG_SHOW_ALL_CONTACTS_FRAGMENT);
+        mShowAllContactsFragment.setOnPhoneNumberPickerActionListener(
+                mPhoneNumberPickerActionListener);
+    }
+
+    @Override
+    public void onAttachFragment(Fragment fragment) {
+        if (fragment instanceof NewDialpadFragment || fragment instanceof NewSearchFragment
+                || fragment instanceof SmartDialSearchFragment
+                || fragment instanceof ShowAllContactsFragment) {
             final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-            transaction.hide(mSmartDialSearchFragment);
+            transaction.hide(fragment);
             transaction.commit();
         }
+        // TODO krelease: Save some kind of state here to show the appropriate fragment
+        // based on the state of the dialer when it was last paused
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            // Respond to the action bar's Up/Home button
+            case android.R.id.home:
+                hideAllContactsFragment();
+        }
+        return super.onOptionsItemSelected(item);
     }
 
     @Override
@@ -299,7 +336,8 @@
                 try {
                     startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
                 } catch (ActivityNotFoundException e) {
-                    Toast toast = Toast.makeText(this, R.string.add_contact_not_available,
+                    Toast toast = Toast.makeText(this,
+                            R.string.add_contact_not_available,
                             Toast.LENGTH_SHORT);
                     toast.show();
                 }
@@ -314,7 +352,6 @@
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
-            case R.id.overflow_menu_on_dialpad:
             case R.id.overflow_menu: {
                 final PopupMenu popupMenu = new PopupMenu(NewDialtactsActivity.this, view);
                 final Menu menu = popupMenu.getMenu();
@@ -340,6 +377,10 @@
                     mSearchView.setText("");
                 }
                 break;
+            case R.id.voice_search_button:
+                final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+                startActivityForResult(voiceIntent, ACTIVITY_REQUEST_CODE_VOICE_SEARCH);
+                break;
             default: {
                 Log.wtf(TAG, "Unexpected onClick event from " + view);
                 break;
@@ -347,6 +388,25 @@
         }
     }
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) {
+            if (resultCode == RESULT_OK) {
+                final ArrayList<String> matches = data.getStringArrayListExtra(
+                        RecognizerIntent.EXTRA_RESULTS);
+                if (matches.size() > 0) {
+                    final String match = matches.get(0);
+                    mSearchView.setText(match);
+                } else {
+                    Log.e(TAG, "Voice search - nothing heard");
+                }
+            } else {
+                Log.e(TAG, "Voice search failed");
+            }
+        }
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+
     private void showDialpadFragment(boolean animate) {
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         if (animate) {
@@ -365,11 +425,29 @@
         ft.commit();
     }
 
+    public void showAllContactsFragment() {
+        final FragmentTransaction ft = getFragmentManager().beginTransaction();
+        ft.hide(mPhoneFavoriteFragment);
+        ft.show(mShowAllContactsFragment);
+        // TODO{klp} Add animation
+        ft.commit();
+        hideSearchBar(false);
+    }
+
+    private void hideAllContactsFragment() {
+        final FragmentTransaction ft = getFragmentManager().beginTransaction();
+        ft.hide(mShowAllContactsFragment);
+        ft.show(mPhoneFavoriteFragment);
+        ft.commit();
+        showSearchBar();
+    }
+
     private void prepareSearchView() {
         mSearchViewContainer = findViewById(R.id.search_view_container);
         mSearchViewCloseButton = findViewById(R.id.search_close_button);
-        mSearchViewCloseButton.setClickable(true);
         mSearchViewCloseButton.setOnClickListener(this);
+        mVoiceSearchButton = findViewById(R.id.voice_search_button);
+        mVoiceSearchButton.setOnClickListener(this);
         mSearchView = (EditText) findViewById(R.id.search_view);
         mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
         mSearchView.setHint(getString(R.string.dialer_hint_find_contact));
@@ -397,43 +475,56 @@
     };
 
     public void hideSearchBar() {
-        mSearchViewContainer.animate().cancel();
-        mSearchViewContainer.setAlpha(1);
-        mSearchViewContainer.setTranslationY(0);
-        mSearchViewContainer.animate().withLayer().alpha(0).translationY(-mSearchView.getHeight())
-                .setDuration(200).setListener(mHideListener);
+       hideSearchBar(true);
+    }
 
-        mPhoneFavoriteFragment.getView().animate().withLayer()
-                .translationY(-mSearchViewContainer.getHeight()).setDuration(200).setListener(
+    public void hideSearchBar(boolean shiftView) {
+        if (shiftView) {
+            mSearchViewContainer.animate().cancel();
+            mSearchViewContainer.setAlpha(1);
+            mSearchViewContainer.setTranslationY(0);
+            mSearchViewContainer.animate().withLayer().alpha(0).translationY(-mSearchView.getHeight())
+                    .setDuration(200).setListener(mHideListener);
+
+            mPhoneFavoriteFragment.getView().animate().withLayer()
+                    .translationY(-mSearchViewContainer.getHeight()).setDuration(200).setListener(
                     new AnimatorListenerAdapter() {
-                    @Override
+                        @Override
                         public void onAnimationEnd(Animator animation) {
                             mBottomPaddingView.setVisibility(View.VISIBLE);
                             mPhoneFavoriteFragment.getView().setTranslationY(0);
                         }
                     });
+        } else {
+            mSearchViewContainer.setTranslationY(-mSearchView.getHeight());
+        }
     }
 
     public void showSearchBar() {
+        // If the favorites fragment hasn't been fully created before the dialpad fragment
+        // is hidden (i.e. onResume), don't bother animating
+        if (mPhoneFavoriteFragment == null || mPhoneFavoriteFragment.getView() == null) {
+            return;
+        }
         mSearchViewContainer.animate().cancel();
         mSearchViewContainer.setAlpha(0);
         mSearchViewContainer.setTranslationY(-mSearchViewContainer.getHeight());
         mSearchViewContainer.animate().withLayer().alpha(1).translationY(0).setDuration(200)
                 .setListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationStart(Animator animation) {
+                    @Override
+                    public void onAnimationStart(Animator animation) {
                         mSearchViewContainer.setVisibility(View.VISIBLE);
-                        }
+                    }
                 });
 
         mPhoneFavoriteFragment.getView().setTranslationY(-mSearchViewContainer.getHeight());
         mPhoneFavoriteFragment.getView().animate().withLayer().translationY(0).setDuration(200)
                 .setListener(
                         new AnimatorListenerAdapter() {
-                                @Override
-                                public void onAnimationStart(Animator animation) {
-                                    mBottomPaddingView.setVisibility(View.GONE);
-                                }
+                            @Override
+                            public void onAnimationStart(Animator animation) {
+                                mBottomPaddingView.setVisibility(View.GONE);
+                            }
                         });
     }
 
@@ -441,13 +532,7 @@
     public void setupFakeActionBarItemsForFavoritesFragment() {
         mMenuButton = findViewById(R.id.overflow_menu);
         if (mMenuButton != null) {
-            // mMenuButton.setMinimumWidth(fakeMenuItemWidth);
-            if (ViewConfiguration.get(this).hasPermanentMenuKey()) {
-                // This is required for dialpad button's layout, so must not use GONE here.
-                mMenuButton.setVisibility(View.INVISIBLE);
-            } else {
-                mMenuButton.setOnClickListener(this);
-            }
+            mMenuButton.setOnClickListener(this);
         }
 
         mCallHistoryButton = findViewById(R.id.call_history_button);
@@ -460,8 +545,6 @@
     }
 
     public void setupFakeActionBarItemsForDialpadFragment() {
-        final View overflowButton = findViewById(R.id.overflow_menu_on_dialpad);
-        overflowButton.setOnClickListener(this);
         final View callhistoryButton = findViewById(R.id.call_history_on_dialpad_button);
         callhistoryButton.setOnClickListener(this);
     }
@@ -705,6 +788,8 @@
             hideDialpadFragment(true);
         } else if (mInSearchUi) {
             mSearchView.setText(null);
+        } else if (mShowAllContactsFragment.isVisible()) {
+            hideAllContactsFragment();
         } else if (isTaskRoot()) {
             // Instead of stopping, simply push this to the back of the stack.
             // This is only done when running at the top of the stack;
diff --git a/src/com/android/dialer/calllog/NewCallLogActivity.java b/src/com/android/dialer/calllog/NewCallLogActivity.java
index a25729a..d8724cf 100644
--- a/src/com/android/dialer/calllog/NewCallLogActivity.java
+++ b/src/com/android/dialer/calllog/NewCallLogActivity.java
@@ -29,6 +29,9 @@
 import android.support.v4.view.PagerTabStrip;
 import android.support.v4.view.ViewPager;
 import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.TypefaceSpan;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -119,6 +122,11 @@
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setDisplayShowTitleEnabled(true);
 
+        final SpannableString s = new SpannableString(getString(R.string.call_log_activity_title));
+        s.setSpan(new TypefaceSpan(getString(R.string.call_log_activity_title_font_family)), 0,
+                s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        actionBar.setTitle(s);
+
         final Tab allTab = actionBar.newTab();
         final String allTitle = getString(R.string.call_log_all_title);
         allTab.setContentDescription(allTitle);
diff --git a/src/com/android/dialer/dialpad/DialpadKeyButton.java b/src/com/android/dialer/dialpad/DialpadKeyButton.java
new file mode 100644
index 0000000..9aae631
--- /dev/null
+++ b/src/com/android/dialer/dialpad/DialpadKeyButton.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.dialpad;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.RelativeLayout;
+
+/**
+ * Custom class for dialpad buttons.
+ * <p>
+ * This class implements lift-to-type interaction when touch exploration is
+ * enabled.
+ */
+public class DialpadKeyButton extends RelativeLayout {
+    /** Accessibility manager instance used to check touch exploration state. */
+    private AccessibilityManager mAccessibilityManager;
+
+    /** Bounds used to filter HOVER_EXIT events. */
+    private Rect mHoverBounds = new Rect();
+
+    public interface OnPressedListener {
+        public void onPressed(View view, boolean pressed);
+    }
+
+    private OnPressedListener mOnPressedListener;
+
+    public void setOnPressedListener(OnPressedListener onPressedListener) {
+        mOnPressedListener = onPressedListener;
+    }
+
+    public DialpadKeyButton(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initForAccessibility(context);
+    }
+
+    public DialpadKeyButton(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        initForAccessibility(context);
+    }
+
+    private void initForAccessibility(Context context) {
+        mAccessibilityManager = (AccessibilityManager) context.getSystemService(
+                Context.ACCESSIBILITY_SERVICE);
+    }
+
+    @Override
+    public void setPressed(boolean pressed) {
+        super.setPressed(pressed);
+        if (mOnPressedListener != null) {
+            mOnPressedListener.onPressed(this, pressed);
+        }
+    }
+
+    @Override
+    public void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+
+        mHoverBounds.left = getPaddingLeft();
+        mHoverBounds.right = w - getPaddingRight();
+        mHoverBounds.top = getPaddingTop();
+        mHoverBounds.bottom = h - getPaddingBottom();
+    }
+
+    @Override
+    public boolean performAccessibilityAction(int action, Bundle arguments) {
+        if (action == AccessibilityNodeInfo.ACTION_CLICK) {
+            simulateClickForAccessibility();
+            return true;
+        }
+
+        return super.performAccessibilityAction(action, arguments);
+    }
+
+    @Override
+    public boolean onHoverEvent(MotionEvent event) {
+        // When touch exploration is turned on, lifting a finger while inside
+        // the button's hover target bounds should perform a click action.
+        if (mAccessibilityManager.isEnabled()
+                && mAccessibilityManager.isTouchExplorationEnabled()) {
+            switch (event.getActionMasked()) {
+                case MotionEvent.ACTION_HOVER_ENTER:
+                    // Lift-to-type temporarily disables double-tap activation.
+                    setClickable(false);
+                    break;
+                case MotionEvent.ACTION_HOVER_EXIT:
+                    if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
+                        simulateClickForAccessibility();
+                    }
+                    setClickable(true);
+                    break;
+            }
+        }
+
+        return super.onHoverEvent(event);
+    }
+
+    /**
+     * When accessibility is on, simulate press and release to preserve the
+     * semantic meaning of performClick(). Required for Braille support.
+     */
+    private void simulateClickForAccessibility() {
+        // Checking the press state prevents double activation.
+        if (isPressed()) {
+            return;
+        }
+
+        setPressed(true);
+
+        // Stay consistent with performClick() by sending the event after
+        // setting the pressed state but before performing the action.
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+
+        setPressed(false);
+    }
+}
diff --git a/src/com/android/dialer/dialpad/NewDialpadFragment.java b/src/com/android/dialer/dialpad/NewDialpadFragment.java
index 15627c7..7eb7c0f 100644
--- a/src/com/android/dialer/dialpad/NewDialpadFragment.java
+++ b/src/com/android/dialer/dialpad/NewDialpadFragment.java
@@ -69,6 +69,7 @@
 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;
@@ -98,7 +99,7 @@
         View.OnLongClickListener, View.OnKeyListener,
         AdapterView.OnItemClickListener, TextWatcher,
         PopupMenu.OnMenuItemClickListener,
-        DialpadImageButton.OnPressedListener {
+        DialpadKeyButton.OnPressedListener {
     private static final String TAG = NewDialpadFragment.class.getSimpleName();
 
     public interface OnDialpadFragmentStartedListener {
@@ -425,6 +426,9 @@
             throw new ClassCastException(activity.toString()
                     + " must implement OnDialpadFragmentStartedListener");
         }
+
+        final View overflowButton = getView().findViewById(R.id.overflow_menu_on_dialpad);
+        overflowButton.setOnClickListener(this);
     }
 
     private boolean isLayoutReady() {
@@ -577,10 +581,36 @@
     }
 
     private void setupKeypad(View fragmentView) {
-        int[] buttonIds = new int[] { R.id.one, R.id.two, R.id.three, R.id.four, R.id.five,
-                R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.zero, R.id.star, R.id.pound};
-        for (int id : buttonIds) {
-            ((DialpadImageButton) fragmentView.findViewById(id)).setOnPressedListener(this);
+        final int[] buttonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
+                R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.pound};
+
+        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
+                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
+                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
+                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
+                R.string.dialpad_pound_number};
+
+        final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
+                R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
+                R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
+                R.string.dialpad_8_letters, R.string.dialpad_9_letters,
+                R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
+
+        DialpadKeyButton dialpadKey;
+        TextView numberView;
+        TextView lettersView;
+        final Resources resources = getResources();
+        for (int i = 0; i < buttonIds.length; i++) {
+            dialpadKey = (DialpadKeyButton) fragmentView.findViewById(buttonIds[i]);
+            dialpadKey.setLayoutParams(new TableRow.LayoutParams(
+                    TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
+            dialpadKey.setOnPressedListener(this);
+            numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
+            lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
+            numberView.setText(resources.getString(numberIds[i]));
+            if (lettersView != null) {
+                lettersView.setText(resources.getString(letterIds[i]));
+            }
         }
 
         // Long-pressing one button will initiate Voicemail.
@@ -726,24 +756,8 @@
     }
 
     private void setupMenuItems(Menu menu) {
-        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings_dialpad);
         final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_contacts);
 
-        // Check if all the menu items are inflated correctly. As a shortcut, we assume all menu
-        // items are ready if the first item is non-null.
-        if (callSettingsMenuItem == null) {
-            return;
-        }
-
-        final Activity activity = getActivity();
-        if (activity != null && ViewConfiguration.get(activity).hasPermanentMenuKey()) {
-            // Call settings should be available via its parent Activity.
-            callSettingsMenuItem.setVisible(false);
-        } else {
-            callSettingsMenuItem.setVisible(true);
-            callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
-        }
-
         // We show "add to contacts" menu only when the user is
         // seeing usual dialpad and has typed at least one digit.
         // We never show a menu if the "choose dialpad" UI is up.
@@ -751,7 +765,6 @@
             addToContactMenuItem.setVisible(false);
         } else {
             final CharSequence digits = mDigits.getText();
-
             // Put the current digits string into an intent
             addToContactMenuItem.setIntent(getAddToContactIntent(digits));
             addToContactMenuItem.setVisible(true);
@@ -917,6 +930,15 @@
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
+            case R.id.overflow_menu_on_dialpad: {
+                final PopupMenu popupMenu = new PopupMenu(getActivity(), view);
+                final Menu menu = popupMenu.getMenu();
+                popupMenu.inflate(R.menu.dialpad_options_new);
+                popupMenu.setOnMenuItemClickListener(this);
+                setupMenuItems(menu);
+                popupMenu.show();
+                break;
+            }
             case R.id.deleteButton: {
                 keyPressed(KeyEvent.KEYCODE_DEL);
                 return;
@@ -939,19 +961,6 @@
         }
     }
 
-    public PopupMenu constructPopupMenu(View anchorView) {
-        final Context context = getActivity();
-        if (context == null) {
-            return null;
-        }
-        final PopupMenu popupMenu = new PopupMenu(context, anchorView);
-        final Menu menu = popupMenu.getMenu();
-        popupMenu.inflate(R.menu.dialpad_options);
-        popupMenu.setOnMenuItemClickListener(this);
-        setupMenuItems(menu);
-        return popupMenu;
-    }
-
     @Override
     public boolean onLongClick(View view) {
         final Editable digits = mDigits.getText();
@@ -1496,13 +1505,22 @@
 
     @Override
     public boolean onMenuItemClick(MenuItem item) {
-        return onOptionsItemSelected(item);
+        // R.id.menu_add_contacts already has an add to contact intent populated by setupMenuItems
+        switch (item.getItemId()) {
+            case R.id.menu_2s_pause:
+                updateDialString(PAUSE);
+                return true;
+            case R.id.menu_add_wait:
+                updateDialString(WAIT);
+                return true;
+            default:
+                return false;
+        }
     }
 
     /**
      * Updates the dial string (mDigits) after inserting a Pause character (,)
      * or Wait character (;).
-     * TODO krelease: add new dialpad buttons to add PAUSE and WAIT characters
      */
     private void updateDialString(char newDigit) {
         if(newDigit != WAIT && newDigit != PAUSE) {
diff --git a/src/com/android/dialer/list/NewPhoneFavoriteFragment.java b/src/com/android/dialer/list/NewPhoneFavoriteFragment.java
index a181fb0..eba9310 100644
--- a/src/com/android/dialer/list/NewPhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/NewPhoneFavoriteFragment.java
@@ -19,18 +19,14 @@
 import android.app.Fragment;
 import android.app.LoaderManager;
 import android.content.CursorLoader;
-import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.ContactsContract.Directory;
-import android.provider.Settings;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
@@ -44,10 +40,8 @@
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactTileLoaderFactory;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.ContactTileView;
 import com.android.contacts.common.list.PhoneNumberListAdapter;
-import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.dialer.NewDialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.calllog.ContactInfoHelper;
@@ -94,19 +88,6 @@
             if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
             mContactTileAdapter.setContactCursor(data);
 
-            if (mAllContactsForceReload) {
-                mAllContactsAdapter.onDataReload();
-                // Use restartLoader() to make LoaderManager to load the section again.
-                getLoaderManager().restartLoader(
-                        LOADER_ID_ALL_CONTACTS, null, mAllContactsLoaderListener);
-            } else if (!mAllContactsLoaderStarted) {
-                // Load "all" contacts if not loaded yet.
-                getLoaderManager().initLoader(
-                        LOADER_ID_ALL_CONTACTS, null, mAllContactsLoaderListener);
-            }
-            mAllContactsForceReload = false;
-            mAllContactsLoaderStarted = true;
-
             // Show the filter header with "loading" state.
             mAccountFilterHeader.setVisibility(View.VISIBLE);
         }
@@ -117,29 +98,6 @@
         }
     }
 
-    private class AllContactsLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-            if (DEBUG) Log.d(TAG, "AllContactsLoaderListener#onCreateLoader");
-            CursorLoader loader = new CursorLoader(getActivity(), null, null, null, null, null);
-            mAllContactsAdapter.configureLoader(loader, Directory.DEFAULT);
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            if (DEBUG) Log.d(TAG, "AllContactsLoaderListener#onLoadFinished");
-            mAllContactsAdapter.changeCursor(0, data);
-            mHandler.removeMessages(MESSAGE_SHOW_LOADING_EFFECT);
-            mLoadingView.setVisibility(View.VISIBLE);
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Cursor> loader) {
-            if (DEBUG) Log.d(TAG, "AllContactsLoaderListener#onLoaderReset. ");
-        }
-    }
-
     private class ContactTileAdapterListener implements ContactTileView.Listener {
         @Override
         public void onContactSelected(Uri contactUri, Rect targetRect) {
@@ -161,16 +119,6 @@
         }
     }
 
-    private class ContactsPreferenceChangeListener
-            implements ContactsPreferences.ChangeListener {
-        @Override
-        public void onChange() {
-            if (loadContactsPreferences()) {
-                requestReloadAllContacts();
-            }
-        }
-    }
-
     private class ScrollListener implements ListView.OnScrollListener {
         @Override
         public void onScroll(AbsListView view,
@@ -183,19 +131,6 @@
         }
     }
 
-    private static final int MESSAGE_SHOW_LOADING_EFFECT = 1;
-    private static final int LOADING_EFFECT_DELAY = 500;  // ms
-    private final Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MESSAGE_SHOW_LOADING_EFFECT:
-                    mLoadingView.setVisibility(View.VISIBLE);
-                    break;
-            }
-        }
-    };
-
     private Listener mListener;
 
     private OnListFragmentScrolledListener mActivityScrollListener;
@@ -206,21 +141,9 @@
     private NewCallLogAdapter mCallLogAdapter;
     private CallLogQueryHandler mCallLogQueryHandler;
 
-    /**
-     * true when the loader for {@link PhoneNumberListAdapter} has started already.
-     */
-    private boolean mAllContactsLoaderStarted;
-    /**
-     * true when the loader for {@link PhoneNumberListAdapter} must reload "all" contacts again.
-     * It typically happens when {@link ContactsPreferences} has changed its settings
-     * (display order and sort order)
-     */
-    private boolean mAllContactsForceReload;
-
-    private ContactsPreferences mContactsPrefs;
-
     private TextView mEmptyView;
     private ListView mListView;
+    private View mShowAllContactsButton;
     /**
      * Layout containing {@link #mAccountFilterHeader}. Used to limit area being "pressed".
      */
@@ -237,10 +160,6 @@
             new ContactTileAdapterListener();
     private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
             new ContactTileLoaderListener();
-    private final LoaderManager.LoaderCallbacks<Cursor> mAllContactsLoaderListener =
-            new AllContactsLoaderListener();
-    private final ContactsPreferenceChangeListener mContactsPreferenceChangeListener =
-            new ContactsPreferenceChangeListener();
     private final ScrollListener mScrollListener = new ScrollListener();
 
     private boolean mOptionsMenuHasFrequents;
@@ -250,8 +169,6 @@
         if (DEBUG) Log.d(TAG, "onAttach()");
         super.onAttach(activity);
 
-        mContactsPrefs = new ContactsPreferences(activity);
-
         // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
         // We don't construct the resultant adapter at this moment since it requires LayoutInflater
         // that will be available on onCreateView().
@@ -260,33 +177,6 @@
                 getResources().getInteger(R.integer.contact_tile_column_count_in_favorites_new),
                 1);
         mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
-
-        // Setup the "all" adapter manually. See also the setup logic in ContactEntryListFragment.
-        mAllContactsAdapter = new PhoneNumberListAdapter(activity);
-        mAllContactsAdapter.setDisplayPhotos(true);
-        mAllContactsAdapter.setQuickContactEnabled(true);
-        mAllContactsAdapter.setSearchMode(false);
-        mAllContactsAdapter.setIncludeProfile(false);
-        mAllContactsAdapter.setSelectionVisible(false);
-        mAllContactsAdapter.setDarkTheme(false);
-        mAllContactsAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
-        // Disable directory header.
-        mAllContactsAdapter.setHasHeader(0, false);
-        // Show A-Z section index.
-        mAllContactsAdapter.setSectionHeaderDisplayEnabled(true);
-        // Disable pinned header. It doesn't work with this fragment.
-        mAllContactsAdapter.setPinnedPartitionHeadersEnabled(false);
-        // Put photos on START (LEFT in LTR layout direction and RIGHT in RTL layout direction)
-        // for consistency with "frequent" contacts section.
-        mAllContactsAdapter.setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(
-                true /* opposite */ ));
-
-        // Use Callable.CONTENT_URI which will include not only phone numbers but also SIP
-        // addresses.
-        mAllContactsAdapter.setUseCallableUri(true);
-
-        mAllContactsAdapter.setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
-        mAllContactsAdapter.setSortOrder(mContactsPrefs.getSortOrder());
     }
 
     @Override
@@ -330,9 +220,18 @@
         mAccountFilterHeaderContainer.addView(mAccountFilterHeader);
 
         mLoadingView = inflater.inflate(R.layout.phone_loading_contacts, mListView, false);
+        mShowAllContactsButton = inflater.inflate(R.layout.show_all_contact_button, mListView,
+                false);
+        mShowAllContactsButton.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                showAllContacts();
+            }
+        });
 
-        mAdapter = new NewPhoneFavoriteMergedAdapter(getActivity(),
-                mContactTileAdapter, mAccountFilterHeaderContainer, mCallLogAdapter, mLoadingView);
+        mAdapter = new NewPhoneFavoriteMergedAdapter(getActivity(), mContactTileAdapter,
+                mAccountFilterHeaderContainer, mCallLogAdapter, mLoadingView,
+                mShowAllContactsButton);
 
         mListView.setAdapter(mAdapter);
 
@@ -347,6 +246,7 @@
         return listLayout;
     }
 
+
     // TODO krelease: update the options menu when displaying the popup menu instead. We could
     // possibly get rid of this method entirely.
     private boolean isOptionsMenuChanged() {
@@ -386,30 +286,11 @@
             throw new ClassCastException(activity.toString()
                     + " must implement OnListFragmentScrolledListener");
         }
-        mContactsPrefs.registerChangeListener(mContactsPreferenceChangeListener);
-
-        // If ContactsPreferences has changed, we need to reload "all" contacts with the new
-        // settings. If mAllContactsFoarceReload is already true, it should be kept.
-        if (loadContactsPreferences()) {
-            mAllContactsForceReload = true;
-        }
 
         // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
         // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
         // be called, on which we'll check if "all" contacts should be reloaded again or not.
         getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, mContactTileLoaderListener);
-
-        // Delay showing "loading" view until certain amount of time so that users won't see
-        // instant flash of the view when the contacts load is fast enough.
-        // This will be kept shown until both tile and all sections are loaded.
-        mLoadingView.setVisibility(View.INVISIBLE);
-        mHandler.sendEmptyMessageDelayed(MESSAGE_SHOW_LOADING_EFFECT, LOADING_EFFECT_DELAY);
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mContactsPrefs.unregisterChangeListener();
     }
 
     /**
@@ -424,58 +305,17 @@
         if (position <= contactTileAdapterCount) {
             Log.e(TAG, "onItemClick() event for unexpected position. "
                     + "The position " + position + " is before \"all\" section. Ignored.");
-        } else {
-            final int localPosition = position - mContactTileAdapter.getCount() - 1;
-            if (mListener != null) {
-                mListener.onContactSelected(mAllContactsAdapter.getDataUri(localPosition));
-            }
         }
     }
 
-    private boolean loadContactsPreferences() {
-        if (mContactsPrefs == null || mAllContactsAdapter == null) {
-            return false;
-        }
-
-        boolean changed = false;
-        final int currentDisplayOrder = mContactsPrefs.getDisplayOrder();
-        if (mAllContactsAdapter.getContactNameDisplayOrder() != currentDisplayOrder) {
-            mAllContactsAdapter.setContactNameDisplayOrder(currentDisplayOrder);
-            changed = true;
-        }
-
-        final int currentSortOrder = mContactsPrefs.getSortOrder();
-        if (mAllContactsAdapter.getSortOrder() != currentSortOrder) {
-            mAllContactsAdapter.setSortOrder(currentSortOrder);
-            changed = true;
-        }
-
-        return changed;
-    }
-
     /**
-     * Requests to reload "all" contacts. If the section is already loaded, this method will
-     * force reloading it now. If the section isn't loaded yet, the actual load may be done later
-     * (on {@link #onStart()}.
+     * Gets called when user click on the show all contacts button.
      */
-    private void requestReloadAllContacts() {
-        if (DEBUG) {
-            Log.d(TAG, "requestReloadAllContacts()"
-                    + " mAllContactsAdapter: " + mAllContactsAdapter
-                    + ", mAllContactsLoaderStarted: " + mAllContactsLoaderStarted);
+    private void showAllContacts() {
+        // TODO {klp} Use interface for the fragment to communicate with the activity
+        if (getActivity() instanceof  NewDialtactsActivity) {
+            ((NewDialtactsActivity) getActivity()).showAllContactsFragment();
         }
-
-        if (mAllContactsAdapter == null || !mAllContactsLoaderStarted) {
-            // Remember this request until next load on onStart().
-            mAllContactsForceReload = true;
-            return;
-        }
-
-        if (DEBUG) Log.d(TAG, "Reload \"all\" contacts now.");
-
-        mAllContactsAdapter.onDataReload();
-        // Use restartLoader() to make LoaderManager to load the section again.
-        getLoaderManager().restartLoader(LOADER_ID_ALL_CONTACTS, null, mAllContactsLoaderListener);
     }
 
     public void setListener(Listener listener) {
diff --git a/src/com/android/dialer/list/NewPhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/NewPhoneFavoriteMergedAdapter.java
index d42189e..b350f02 100644
--- a/src/com/android/dialer/list/NewPhoneFavoriteMergedAdapter.java
+++ b/src/com/android/dialer/list/NewPhoneFavoriteMergedAdapter.java
@@ -23,11 +23,7 @@
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.SectionIndexer;
 
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
 import com.android.dialer.R;
 import com.android.dialer.calllog.NewCallLogAdapter;
 
@@ -49,6 +45,7 @@
     private final PhoneFavoritesTileAdapter mContactTileAdapter;
     private final NewCallLogAdapter mCallLogAdapter;
     private final View mLoadingView;
+    private final View mShowAllContactsButton;
 
     private final int mCallLogPadding;
 
@@ -60,7 +57,8 @@
             PhoneFavoritesTileAdapter contactTileAdapter,
             View accountFilterHeaderContainer,
             NewCallLogAdapter callLogAdapter,
-            View loadingView) {
+            View loadingView,
+            View showAllContactsButton) {
         final Resources resources = context.getResources();
         mContext = context;
         mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
@@ -70,6 +68,7 @@
         mObserver = new CustomDataSetObserver();
         mContactTileAdapter.registerDataSetObserver(mObserver);
         mLoadingView = loadingView;
+        mShowAllContactsButton = showAllContactsButton;
     }
 
     @Override
@@ -81,13 +80,11 @@
 
     @Override
     public int getCount() {
-        return mContactTileAdapter.getCount() + mCallLogAdapter.getCount();
+        return mContactTileAdapter.getCount() + mCallLogAdapter.getCount() + 1;
     }
 
     @Override
     public Object getItem(int position) {
-        final int contactTileAdapterCount = mContactTileAdapter.getCount();
-
         final int callLogAdapterCount = mCallLogAdapter.getCount();
 
         if (callLogAdapterCount > 0) {
@@ -108,7 +105,7 @@
 
     @Override
     public int getViewTypeCount() {
-        return (mContactTileAdapter.getViewTypeCount() + mCallLogAdapter.getViewTypeCount());
+        return (mContactTileAdapter.getViewTypeCount() + mCallLogAdapter.getViewTypeCount() + 1);
     }
 
     @Override
@@ -119,18 +116,24 @@
             // View type of the call log adapter is the last view type of the contact tile adapter
             // + 1
             return mContactTileAdapter.getViewTypeCount();
-        } else {
+        } else if (position < getCount() - 1) {
             return mContactTileAdapter.getItemViewType(
                     getAdjustedFavoritePosition(position, callLogAdapterCount));
+        } else {
+            // View type of the show all contact button is the last view type of the contact tile
+            // adapter + 2
+            return mContactTileAdapter.getViewTypeCount() + 1;
         }
     }
 
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        final int contactTileAdapterCount = mContactTileAdapter.getCount();
-
         final int callLogAdapterCount = mCallLogAdapter.getCount();
 
+        if (position == getCount() - 1) {
+            return mShowAllContactsButton;
+        }
+
         if (callLogAdapterCount > 0) {
             if (position == 0) {
                 final FrameLayout wrapper;
@@ -189,7 +192,6 @@
     @Override
     public boolean isEnabled(int position) {
         final int callLogAdapterCount = mCallLogAdapter.getCount();
-        final int contactTileAdapterCount = mContactTileAdapter.getCount();
         if (position < callLogAdapterCount) {
             return mCallLogAdapter.isEnabled(position);
         } else { // For favorites section
@@ -201,5 +203,4 @@
     private int getAdjustedFavoritePosition(int position, int callLogAdapterCount) {
         return position - callLogAdapterCount;
     }
-
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java b/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java
new file mode 100644
index 0000000..846b2a7
--- /dev/null
+++ b/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.list;
+
+import android.content.ClipData;
+import android.util.Log;
+import android.view.DragEvent;
+import android.view.GestureDetector.SimpleOnGestureListener;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnDragListener;
+
+import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
+
+/**
+ * Implements the OnLongClickListener and OnDragListener for phone's favorite tiles and rows.
+ */
+public class PhoneFavoriteDragAndDropListeners {
+
+    private static final String TAG = PhoneFavoriteDragAndDropListeners.class.getSimpleName();
+    private static final boolean DEBUG = false;
+
+    private static final float FLING_HEIGHT_PORTION = 1.f / 4.f;
+    private static final float FLING_WIDTH_PORTION = 1.f / 6.f;
+
+    public static class PhoneFavoriteGestureListener extends SimpleOnGestureListener {
+        private static final float FLING_VELOCITY_MINIMUM = 5.0f;
+        private float mFlingHorizontalThreshold;
+        private float mFlingVerticalThreshold;
+        private final PhoneFavoriteTileView mView;
+
+        public PhoneFavoriteGestureListener(View view) {
+            super();
+            mView = (PhoneFavoriteTileView) view;
+        }
+
+        @Override
+        public void onLongPress(MotionEvent event) {
+            final ClipData data = ClipData.newPlainText("", "");
+            final View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mView);
+            mView.setPressed(false);
+            if (mView instanceof PhoneFavoriteRegularRowView) {
+                // If the view is regular row, start drag the row view.
+                // TODO: move the padding so we can start drag the original view.
+                mView.getParentRow().startDrag(data, shadowBuilder, null, 0);
+            } else {
+                // If the view is a tile view, start drag the tile.
+                mView.startDrag(data, shadowBuilder, null, 0);
+            }
+        }
+
+        @Override
+        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
+            final float x1 = e1.getX();
+            final float x2 = e2.getX();
+            // Temporarily disables parents from getting this event so the listview does not scroll.
+            mView.getParent().requestDisallowInterceptTouchEvent(true);
+            mView.setScrollOffset(x2 - x1);
+            return true;
+        }
+
+        @Override
+        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+            // Sets fling trigger threshold.
+            mFlingVerticalThreshold = (float) mView.getHeight() * FLING_HEIGHT_PORTION;
+            mFlingHorizontalThreshold = (float) mView.getWidth() * FLING_WIDTH_PORTION;
+            final float x1 = e1.getX();
+            final float x2 = e2.getX();
+            final float y1 = e1.getY();
+            final float y2 = e2.getY();
+
+            mView.setPressed(false);
+
+            if (Math.abs(y1 - y2) < mFlingVerticalThreshold &&
+                    Math.abs(x2 - x1) > mFlingHorizontalThreshold &&
+                    Math.abs(velocityX) > FLING_VELOCITY_MINIMUM) {
+                // If fling is triggered successfully, end the scroll and setup removal dialogue.
+                final int removeIndex = mView.getParentRow().getItemIndex(x1, y1);
+                mView.setScrollEnd(false);
+                mView.setupRemoveDialogue();
+                mView.getParentRow().getTileAdapter().setPotentialRemoveEntryIndex(removeIndex);
+
+                return true;
+            } else {
+                mView.setScrollEnd(true);
+                return false;
+            }
+        }
+
+        @Override
+        public boolean onDown(MotionEvent e) {
+            mView.setPressed(true);
+            // Signals that the view will accept further events.
+            return true;
+        }
+
+        @Override
+        public boolean onSingleTapUp(MotionEvent e) {
+            mView.performClick();
+            return true;
+        }
+    }
+
+    /**
+     * Implements the OnDragListener to handle drag events.
+     */
+    public static class PhoneFavoriteDragListener implements OnDragListener {
+        /** Location of the drag event. */
+        private float mX = 0;
+        private float mY = 0;
+        private final ContactTileRow mContactTileRow;
+        private final PhoneFavoritesTileAdapter mTileAdapter;
+
+        public PhoneFavoriteDragListener(ContactTileRow contactTileRow,
+                PhoneFavoritesTileAdapter tileAdapter) {
+            super();
+            mContactTileRow = contactTileRow;
+            mTileAdapter = tileAdapter;
+        }
+
+        @Override
+        public boolean onDrag(View v, DragEvent event) {
+            // Handles drag events.
+            switch (event.getAction()) {
+                case DragEvent.ACTION_DRAG_STARTED:
+                    break;
+                case DragEvent.ACTION_DRAG_ENTERED:
+                    break;
+                case DragEvent.ACTION_DRAG_EXITED:
+                    break;
+                case DragEvent.ACTION_DROP:
+                    // Gets the location of the drag with respect to the whole Dialer view.
+                    mX = event.getX() + v.getLeft();
+                    mY = event.getY() + v.getTop();
+
+                    // Indicates a drag has finished.
+                    if (mTileAdapter != null && mContactTileRow != null) {
+                        mTileAdapter.setInDragging(false);
+
+                        // Finds out at which position of the list the Contact is being dropped.
+                        final int dropIndex = mContactTileRow.getItemIndex(mX, mY);
+                        if (DEBUG) {
+                            Log.v(TAG, "Stop dragging " + String.valueOf(dropIndex));
+                        }
+
+                        // Adds the dragged contact to the drop position.
+                        mTileAdapter.dropContactEntry(dropIndex);
+                    }
+                    break;
+                case DragEvent.ACTION_DRAG_ENDED:
+                    break;
+                case DragEvent.ACTION_DRAG_LOCATION:
+                    // Gets the current drag location with respect to the whole Dialer view.
+                    mX = event.getX() + v.getLeft();
+                    mY = event.getY() + v.getTop();
+                    if (DEBUG) {
+                        Log.v(TAG, String.valueOf(mX) + "; " + String.valueOf(mY));
+                    }
+
+                    if (mTileAdapter != null && mContactTileRow != null) {
+                        // If there is no drag in process, initializes the drag.
+                        if (!mTileAdapter.getInDragging()) {
+                            // Finds out which item is being dragged.
+                            final int dragIndex = mContactTileRow.getItemIndex(mX, mY);
+                            if (DEBUG) {
+                                Log.v(TAG, "Start dragging " + String.valueOf(dragIndex));
+                            }
+
+                            // Indicates a drag has started.
+                            mTileAdapter.setInDragging(true);
+
+                            // Temporarily pops out the Contact entry.
+                            mTileAdapter.popContactEntry(dragIndex);
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+            return true;
+        }
+    }
+}
diff --git a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
index 2f5921e..6d9fdcb 100644
--- a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
@@ -16,29 +16,45 @@
 package com.android.dialer.list;
 
 import android.content.Context;
-import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.view.View;
+import android.view.GestureDetector;
 
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactTileView;
 import com.android.contacts.common.util.ViewUtil;
+import com.android.dialer.R;
+import com.android.dialer.list.PhoneFavoriteDragAndDropListeners.PhoneFavoriteDragListener;
+import com.android.dialer.list.PhoneFavoriteDragAndDropListeners.PhoneFavoriteGestureListener;
 
-/**
- * A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in Dialtacts
- * for frequently called contacts. Slightly different behavior from superclass...
- * when you tap it, you want to call the frequently-called number for the
- * contact, even if that is not the default number for that contact.
- */
-public class PhoneFavoriteRegularRowView extends ContactTileView {
-    private String mPhoneNumberString;
+import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
+
+
+public class PhoneFavoriteRegularRowView extends PhoneFavoriteTileView {
+    private static final String TAG = PhoneFavoriteRegularRowView.class.getSimpleName();
+    private static final boolean DEBUG = false;
 
     public PhoneFavoriteRegularRowView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
     @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mFavoriteContactCard = findViewById(R.id.contact_favorite_card);
+        mRemovalDialogue = findViewById(R.id.favorite_remove_dialogue);
+        mUndoRemovalButton = findViewById(R.id.favorite_remove_undo_button);
+
+        mGestureDetector = new GestureDetector(getContext(),
+                new PhoneFavoriteGestureListener(this));
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        mParentRow = (ContactTileRow) getParent();
+        mParentRow.setOnDragListener(new PhoneFavoriteDragListener(mParentRow,
+                mParentRow.getTileAdapter()));
+    }
+
+    @Override
     protected boolean isDarkTheme() {
         return false;
     }
@@ -47,36 +63,4 @@
     protected int getApproximateImageSize() {
         return ViewUtil.getConstantPreLayoutWidth(getQuickContact());
     }
-
-    @Override
-    public void loadFromContact(ContactEntry entry) {
-        super.loadFromContact(entry);
-        mPhoneNumberString = null; // ... in case we're reusing the view
-        if (entry != null) {
-            // Grab the phone-number to call directly... see {@link onClick()}
-            mPhoneNumberString = entry.phoneNumber;
-        }
-    }
-
-    @Override
-    protected OnClickListener createClickListener() {
-        return new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mListener == null) return;
-                if (TextUtils.isEmpty(mPhoneNumberString)) {
-                    // Copy "superclass" implementation
-                    mListener.onContactSelected(getLookupUri(), MoreContactUtils
-                            .getTargetRectFromView(
-                                    mContext, PhoneFavoriteRegularRowView.this));
-                } else {
-                    // When you tap a frequently-called contact, you want to
-                    // call them at the number that you usually talk to them
-                    // at (i.e. the one displayed in the UI), regardless of
-                    // whether that's their default number.
-                    mListener.onCallNumberDirectly(mPhoneNumberString);
-                }
-            }
-        };
-    }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
new file mode 100644
index 0000000..fe07d18
--- /dev/null
+++ b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
@@ -0,0 +1,82 @@
+/*
+
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.list;
+
+import android.content.Context;
+import android.content.Intent;
+import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.View;
+import android.widget.ImageButton;
+
+import com.android.contacts.common.R;
+import com.android.dialer.list.PhoneFavoriteDragAndDropListeners.PhoneFavoriteDragListener;
+import com.android.dialer.list.PhoneFavoriteDragAndDropListeners.PhoneFavoriteGestureListener;
+import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
+
+/**
+ * Displays the contact's picture overlayed with their name
+ * in a perfect square. It also has an additional touch target for a secondary action.
+ */
+public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView {
+    private static final String TAG = PhoneFavoriteSquareTileView.class.getSimpleName();
+    private ImageButton mSecondaryButton;
+
+    public PhoneFavoriteSquareTileView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mFavoriteContactCard = findViewById(com.android.dialer.R.id.contact_tile_favorite_card);
+        mRemovalDialogue = findViewById(com.android.dialer.R.id.favorite_tile_remove_dialogue);
+        mUndoRemovalButton = findViewById(com.android.dialer.R.id.favorite_tile_remove_undo_button);
+        mSecondaryButton = (ImageButton) findViewById(R.id.contact_tile_secondary_button);
+        mSecondaryButton.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(Intent.ACTION_VIEW, getLookupUri());
+                // Secondary target will be visible only from phone's favorite screen, then
+                // we want to launch it as a separate People task.
+                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                getContext().startActivity(intent);
+            }
+        });
+
+        mGestureDetector = new GestureDetector(getContext(),
+                new PhoneFavoriteGestureListener(this));
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        mParentRow = (ContactTileRow) getParent();
+        setOnDragListener(new PhoneFavoriteDragListener(mParentRow, mParentRow.getTileAdapter()));
+    }
+
+    @Override
+    protected boolean isDarkTheme() {
+        return false;
+    }
+
+    @Override
+    protected int getApproximateImageSize() {
+        // The picture is the full size of the tile (minus some padding, but we can be generous)
+        return mListener.getApproximateTileWidth();
+    }
+}
diff --git a/src/com/android/dialer/list/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java
index d87e2a8..9a1577a 100644
--- a/src/com/android/dialer/list/PhoneFavoriteTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java
@@ -1,4 +1,5 @@
 /*
+
  * Copyright (C) 2011 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,51 +16,239 @@
  */
 package com.android.dialer.list;
 
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.content.Intent;
+import android.text.TextUtils;
 import android.util.AttributeSet;
+import android.util.Log;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
 import android.view.View;
-import android.widget.ImageButton;
 
-import com.android.contacts.common.R;
+import com.android.contacts.common.MoreContactUtils;
+import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileView;
+import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
 
 /**
- * Displays the contact's picture overlayed with their name
- * in a perfect square. It also has an additional touch target for a secondary action.
+ * A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in
+ * Dialtacts for frequently called contacts. Slightly different behavior from superclass when you
+ * tap it, you want to call the frequently-called number for the contact, even if that is not the
+ * default number for that contact. This abstract class is the super class to both the row and tile
+ * view.
  */
-public class PhoneFavoriteTileView extends ContactTileView {
-    private ImageButton mSecondaryButton;
+public abstract class PhoneFavoriteTileView extends ContactTileView {
+
+    private static final String TAG = PhoneFavoriteTileView.class.getSimpleName();
+    private static final boolean DEBUG = false;
+
+    /** Length of all animations in miniseconds. */
+    private static final int ANIMATION_LENGTH = 300;
+
+    /** The view that holds the front layer of the favorite contact card. */
+    protected View mFavoriteContactCard;
+    /** The view that holds the background layer of the removal dialogue. */
+    protected View mRemovalDialogue;
+    /** Undo button for undoing favorite removal. */
+    protected View mUndoRemovalButton;
+    /** The view that holds the list view row. */
+    protected ContactTileRow mParentRow;
+
+    /** Users' most frequent phone number. */
+    private String mPhoneNumberString;
+
+    /** Custom gesture detector.*/
+    protected GestureDetector mGestureDetector;
+    /** Indicator of whether a scroll has started. */
+    private boolean mInScroll;
 
     public PhoneFavoriteTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
+    public ContactTileRow getParentRow() {
+        return mParentRow;
+    }
 
-        mSecondaryButton = (ImageButton) findViewById(R.id.contact_tile_secondary_button);
-        mSecondaryButton.setOnClickListener(new OnClickListener() {
+    @Override
+    public void loadFromContact(ContactEntry entry) {
+        super.loadFromContact(entry);
+        mPhoneNumberString = null; // ... in case we're reusing the view
+        if (entry != null) {
+            // Grab the phone-number to call directly... see {@link onClick()}
+            mPhoneNumberString = entry.phoneNumber;
+        }
+    }
+
+    /**
+     * Gets the latest scroll gesture offset.
+     */
+    public void setScrollOffset(float offset) {
+        // Sets the mInScroll variable to indicate a scroll is in progress.
+        if (!mInScroll) {
+            mInScroll = true;
+        }
+
+        // Changes the view to follow user's scroll position.
+        shiftViewWithScroll(offset);
+    }
+
+    /**
+     * Shifts the view to follow user's scroll position.
+     */
+    private void shiftViewWithScroll(float offset) {
+       if (mInScroll) {
+           // Shifts the foreground card to follow users' scroll gesture.
+           mFavoriteContactCard.setTranslationX(offset);
+
+           // Changes transparency of the foreground and background color
+           final float alpha = 1.f - Math.abs((offset)) / getWidth();
+           final float cappedAlpha = Math.min(Math.max(alpha, 0.f), 1.f);
+           mFavoriteContactCard.setAlpha(cappedAlpha);
+       }
+    }
+
+    /**
+     * Sets the scroll has finished.
+     *
+     * @param isUnfinishedFling True if it is triggered from the onFling method, but the fling was
+     * too short or too slow, or from the scroll that does not trigger fling.
+     */
+    public void setScrollEnd(boolean isUnfinishedFling) {
+        mInScroll = false;
+
+        if (isUnfinishedFling) {
+            // If the fling is too short or too slow, or it is from a scroll, bring back the
+            // favorite contact card.
+            final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mFavoriteContactCard, "alpha",
+                    1.f).setDuration(ANIMATION_LENGTH);
+            final ObjectAnimator moveBack = ObjectAnimator.ofFloat(mFavoriteContactCard,
+                    "translationX", 0.f).setDuration(ANIMATION_LENGTH);
+            final ObjectAnimator backgroundFadeOut = ObjectAnimator.ofInt(
+                    mParentRow.getBackground(), "alpha", 255).setDuration(ANIMATION_LENGTH);
+            final AnimatorSet animSet = new AnimatorSet();
+            animSet.playTogether(fadeIn, moveBack, backgroundFadeOut);
+            animSet.start();
+        } else {
+            // If the fling is fast and far enough, move away the favorite contact card, bring the
+            // favorite removal view to the foreground to ask user to confirm removal.
+            int animationLength = (int) ((1 - Math.abs(mFavoriteContactCard.getTranslationX()) /
+                    getWidth()) * ANIMATION_LENGTH);
+            final ObjectAnimator fadeOut = ObjectAnimator.ofFloat(mFavoriteContactCard, "alpha",
+                    0.f).setDuration(animationLength);
+            final ObjectAnimator moveAway = ObjectAnimator.ofFloat(mFavoriteContactCard,
+                    "translationX", getWidth()).setDuration(animationLength);
+            final ObjectAnimator backgroundFadeIn = ObjectAnimator.ofInt(
+                    mParentRow.getBackground(), "alpha", 0).setDuration(animationLength);
+            if (mFavoriteContactCard.getTranslationX() < 0) {
+                moveAway.setFloatValues(-getWidth());
+            }
+            final AnimatorSet animSet = new AnimatorSet();
+            animSet.playTogether(fadeOut, moveAway, backgroundFadeIn);
+            animSet.start();
+        }
+    }
+
+    /**
+     * Signals the user wants to undo removing the favorite contact.
+     */
+    public void undoRemove() {
+        // Makes the removal dialogue invisible.
+        mRemovalDialogue.setAlpha(0.0f);
+        mRemovalDialogue.setVisibility(GONE);
+
+        // Animates back the favorite contact card.
+        final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mFavoriteContactCard, "alpha", 1.f).
+                setDuration(ANIMATION_LENGTH);
+        final ObjectAnimator moveBack = ObjectAnimator.ofFloat(mFavoriteContactCard, "translationX",
+                0.f).setDuration(ANIMATION_LENGTH);
+        final ObjectAnimator backgroundFadeOut = ObjectAnimator.ofInt(mParentRow.getBackground(),
+                "alpha", 255).setDuration(ANIMATION_LENGTH);
+        final AnimatorSet animSet = new AnimatorSet();
+        animSet.playTogether(fadeIn, moveBack, backgroundFadeOut);
+        animSet.start();
+
+        // Signals the PhoneFavoritesTileAdapter to undo the potential delete.
+        mParentRow.getTileAdapter().undoPotentialRemoveEntryIndex();
+    }
+
+    /**
+     * Sets up the removal dialogue.
+     */
+    public void setupRemoveDialogue() {
+        mRemovalDialogue.setVisibility(VISIBLE);
+        mRemovalDialogue.setAlpha(1.0f);
+
+        mUndoRemovalButton.setOnClickListener(new OnClickListener() {
             @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_VIEW, getLookupUri());
-                // Secondary target will be visible only from phone's favorite screen, then
-                // we want to launch it as a separate People task.
-                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                getContext().startActivity(intent);
+            public void onClick(View view) {
+                undoRemove();
             }
         });
     }
 
-    @Override
-    protected boolean isDarkTheme() {
-        return false;
+    /**
+     * Sets up the favorite contact card.
+     */
+    public void setupFavoriteContactCard() {
+        if (mRemovalDialogue != null) {
+            mRemovalDialogue.setVisibility(GONE);
+            mRemovalDialogue.setAlpha(0.f);
+        }
+        mFavoriteContactCard.setAlpha(1.0f);
+        mFavoriteContactCard.setTranslationX(0.f);
     }
 
     @Override
-    protected int getApproximateImageSize() {
-        // The picture is the full size of the tile (minus some padding, but we can be generous)
-        return mListener.getApproximateTileWidth();
+    protected OnClickListener createClickListener() {
+        return new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mListener == null) return;
+                if (TextUtils.isEmpty(mPhoneNumberString)) {
+                    // Copy "superclass" implementation
+                    mListener.onContactSelected(getLookupUri(), MoreContactUtils
+                            .getTargetRectFromView(
+                                    mContext, PhoneFavoriteTileView.this));
+                } else {
+                    // When you tap a frequently-called contact, you want to
+                    // call them at the number that you usually talk to them
+                    // at (i.e. the one displayed in the UI), regardless of
+                    // whether that's their default number.
+                    mListener.onCallNumberDirectly(mPhoneNumberString);
+                }
+            }
+        };
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (DEBUG) {
+            Log.v(TAG, event.toString());
+        }
+        switch (event.getAction()) {
+            // If the scroll has finished without triggering a fling, handles it here.
+            case MotionEvent.ACTION_UP:
+                setPressed(false);
+                if (mInScroll) {
+                    if (!mGestureDetector.onTouchEvent(event)) {
+                        setScrollEnd(true);
+                    }
+                    return true;
+                }
+                break;
+            // When user starts a new gesture, clean up the pending removals.
+            case MotionEvent.ACTION_DOWN:
+                mParentRow.getTileAdapter().removeContactEntry();
+                break;
+            // When user continues with a new gesture, cleans up all the temp variables.
+            case MotionEvent.ACTION_CANCEL:
+                mParentRow.getTileAdapter().cleanTempVariables();
+                break;
+            default:
+                break;
+        }
+        return mGestureDetector.onTouchEvent(event);
     }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 3657906..0a08f2c 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -15,11 +15,13 @@
  */
 package com.android.dialer.list;
 
+import android.animation.ObjectAnimator;
 import android.content.ContentUris;
 import android.content.Context;
 import android.content.res.Resources;
 import android.database.Cursor;
-import android.graphics.drawable.Drawable;
+import android.graphics.Color;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
@@ -33,7 +35,6 @@
 import com.android.contacts.common.ContactTileLoaderFactory;
 import com.android.contacts.common.R;
 import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactTileAdapter;
 import com.android.contacts.common.list.ContactTileView;
 
 import java.util.ArrayList;
@@ -45,14 +46,33 @@
  *
  */
 public class PhoneFavoritesTileAdapter extends BaseAdapter {
-    private static final String TAG = ContactTileAdapter.class.getSimpleName();
+    private static final String TAG = PhoneFavoritesTileAdapter.class.getSimpleName();
+    private static final boolean DEBUG = false;
 
     public static final int ROW_LIMIT_DEFAULT = 1;
 
+    /** Time period for an animation. */
+    private static final int ANIMATION_LENGTH = 300;
+
+    private final ObjectAnimator mTranslateHorizontalAnimation;
+    private final ObjectAnimator mTranslateVerticalAnimation;
+    private final ObjectAnimator mAlphaAnimation;
+
     private ContactTileView.Listener mListener;
     private Context mContext;
     private Resources mResources;
-    protected Cursor mContactCursor = null;
+
+    /** Contact data stored in cache. This is used to populate the associated view. */
+    protected ArrayList<ContactEntry> mContactEntries = null;
+    /** Back up of the temporarily removed Contact during dragging. */
+    private ContactEntry mDraggedEntry = null;
+    /** Position of the temporarily removed contact in the cache. */
+    private int mDraggedEntryIndex = -1;
+    /** New position of the temporarily removed contact in the cache. */
+    private int mDropEntryIndex = -1;
+    /** Position of the contact pending removal. */
+    private int mPotentialRemoveEntryIndex = -1;
+
     private ContactPhotoManager mPhotoManager;
     protected int mNumFrequents;
     protected int mNumStarred;
@@ -78,22 +98,36 @@
     private boolean mIsQuickContactEnabled = false;
     private final int mPaddingInPixels;
 
-    public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener, int numCols) {
+    /** Indicates whether a drag is in process. */
+    private boolean mInDragging = false;
+
+    public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener, 
+            int numCols) {
         this(context, listener, numCols, ROW_LIMIT_DEFAULT);
     }
 
-    public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener, int numCols,
-            int maxTiledRows) {
+    public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener,
+            int numCols, int maxTiledRows) {
         mListener = listener;
         mContext = context;
         mResources = context.getResources();
         mColumnCount = numCols;
         mNumFrequents = 0;
         mMaxTiledRows = maxTiledRows;
-
+        mContactEntries = new ArrayList<ContactEntry>();
         // Converting padding in dips to padding in pixels
         mPaddingInPixels = mContext.getResources()
-                .getDimensionPixelSize(R.dimen.phone_contact_tile_divider_padding);
+                .getDimensionPixelSize(R.dimen.contact_tile_divider_padding);
+
+        // Initiates all animations.
+        mAlphaAnimation = ObjectAnimator.ofFloat(null, "alpha", 1.f).setDuration(ANIMATION_LENGTH);
+
+        mTranslateHorizontalAnimation = ObjectAnimator.ofFloat(null, "translationX", 0.f).
+                setDuration(ANIMATION_LENGTH);
+
+        mTranslateVerticalAnimation = ObjectAnimator.ofFloat(null, "translationY", 0.f).setDuration(
+                ANIMATION_LENGTH);
+
         bindColumnIndices();
     }
 
@@ -114,6 +148,20 @@
     }
 
     /**
+     * Indicates whether a drag is in process.
+     *
+     * @param inDragging Boolean variable indicating whether there is a drag in process.
+     */
+    public void setInDragging(boolean inDragging) {
+        mInDragging = inDragging;
+    }
+
+    /** Gets whether the drag is in process. */
+    public boolean getInDragging() {
+        return mInDragging;
+    }
+
+    /**
      * Sets the column indices for expected {@link Cursor}
      * based on {@link DisplayType}.
      */
@@ -148,13 +196,49 @@
      * Else use {@link ContactTileLoaderFactory}
      */
     public void setContactCursor(Cursor cursor) {
-        mContactCursor = cursor;
-        mNumStarred = getNumStarredContacts(cursor);
+        if (cursor != null && !cursor.isClosed()) {
+            mNumStarred = getNumStarredContacts(cursor);
+            saveNumFrequentsFromCursor(cursor);
+            saveCursorToCache(cursor);
 
-        saveNumFrequentsFromCursor(cursor);
+            // cause a refresh of any views that rely on this data
+            notifyDataSetChanged();
+        }
+    }
 
-        // cause a refresh of any views that rely on this data
-        notifyDataSetChanged();
+    /**
+     * Saves the cursor data to the cache, to speed up UI changes.
+     *
+     * @param cursor Returned cursor with data to populate the view.
+     */
+    private void saveCursorToCache(Cursor cursor) {
+        mContactEntries.clear();
+        try {
+            cursor.moveToPosition(-1);
+            while (cursor.moveToNext()) {
+                final long id = cursor.getLong(mIdIndex);
+                final String photoUri = cursor.getString(mPhotoUriIndex);
+                final String lookupKey = cursor.getString(mLookupIndex);
+
+                final ContactEntry contact = new ContactEntry();
+                final String name = cursor.getString(mNameIndex);
+                contact.name = (name != null) ? name : mResources.getString(R.string.missing_name);
+                contact.status = cursor.getString(mStatusIndex);
+                contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
+                contact.lookupKey = ContentUris.withAppendedId(
+                        Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
+
+                // Set phone number and label
+                final int phoneNumberType = cursor.getInt(mPhoneNumberTypeIndex);
+                final String phoneNumberCustomLabel = cursor.getString(mPhoneNumberLabelIndex);
+                contact.phoneLabel = (String) Phone.getTypeLabel(mResources, phoneNumberType,
+                        phoneNumberCustomLabel);
+                contact.phoneNumber = cursor.getString(mPhoneNumberIndex);
+                mContactEntries.add(contact);
+            }
+        } finally {
+            cursor.close();
+        }
     }
 
     /**
@@ -164,10 +248,6 @@
      * Returns 0 if {@link DisplayType#FREQUENT_ONLY}
      */
     protected int getNumStarredContacts(Cursor cursor) {
-        if (cursor == null || cursor.isClosed()) {
-            throw new IllegalStateException("Unable to access cursor");
-        }
-
         cursor.moveToPosition(-1);
         while (cursor.moveToNext()) {
             if (cursor.getInt(mStarredIndex) == 0) {
@@ -180,32 +260,15 @@
         return cursor.getCount();
     }
 
-    protected ContactEntry createContactEntryFromCursor(Cursor cursor, int position) {
-        // If the loader was canceled we will be given a null cursor.
-        // In that case, show an empty list of contacts.
-        if (cursor == null || cursor.isClosed() || cursor.getCount() <= position) return null;
-
-        cursor.moveToPosition(position);
-        long id = cursor.getLong(mIdIndex);
-        String photoUri = cursor.getString(mPhotoUriIndex);
-        String lookupKey = cursor.getString(mLookupIndex);
-
-        ContactEntry contact = new ContactEntry();
-        String name = cursor.getString(mNameIndex);
-        contact.name = (name != null) ? name : mResources.getString(R.string.missing_name);
-        contact.status = cursor.getString(mStatusIndex);
-        contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
-        contact.lookupKey = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
-
-        // Set phone number and label
-        int phoneNumberType = cursor.getInt(mPhoneNumberTypeIndex);
-        String phoneNumberCustomLabel = cursor.getString(mPhoneNumberLabelIndex);
-        contact.phoneLabel = (String) Phone.getTypeLabel(mResources, phoneNumberType,
-                phoneNumberCustomLabel);
-        contact.phoneNumber = cursor.getString(mPhoneNumberIndex);
-
-        return contact;
+    /**
+     * Loads a contact from the cached list.
+     *
+     * @param position Position of the Contact.
+     * @return Contact at the requested position.
+     */
+    protected ContactEntry getContactEntryFromCache(int position) {
+        if (mContactEntries.size() <= position) return null;
+        return mContactEntries.get(position);
     }
 
     /**
@@ -217,11 +280,12 @@
 
     @Override
     public int getCount() {
-        if (mContactCursor == null || mContactCursor.isClosed()) {
+        if (mContactEntries == null) {
             return 0;
         }
 
-        final int total = mNumFrequents + mNumStarred;
+        int total = mNumFrequents + mNumStarred;
+
         return total - (mMaxTiledRows * (mColumnCount - 1));
     }
 
@@ -243,6 +307,14 @@
         return mColumnCount * mMaxTiledRows;
     }
 
+    protected int getRowIndex(int entryIndex) {
+        if (entryIndex < mMaxTiledRows * mColumnCount) {
+            return entryIndex / mColumnCount;
+        } else {
+            return entryIndex - mMaxTiledRows * mColumnCount + mMaxTiledRows;
+        }
+    }
+
     public int getColumnCount() {
         return mColumnCount;
     }
@@ -260,7 +332,7 @@
             // Contacts that appear as tiles
             for (int columnCounter = 0; columnCounter < mColumnCount &&
                     contactIndex != maxContactsInTiles; columnCounter++) {
-                resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
+                resultList.add(getContactEntryFromCache(contactIndex));
                 contactIndex++;
             }
         } else {
@@ -268,7 +340,7 @@
             // The actual position of the contact in the cursor is simply total the number of
             // tiled contacts + the given position
             contactIndex = maxContactsInTiles + position - 1;
-            resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
+            resultList.add(getContactEntryFromCache(contactIndex));
         }
 
         return resultList;
@@ -294,18 +366,89 @@
     }
 
     @Override
+    public void notifyDataSetChanged() {
+        if (DEBUG) {
+            Log.v(TAG, "nofigyDataSetChanged");
+        }
+        super.notifyDataSetChanged();
+    }
+
+    /**
+     * Configures the animation for each view.
+     *
+     * @param contactTileRowView The row to be animated.
+     * @param position The position of the row.
+     * @param itemViewType The type of the row.
+     */
+    private void configureAnimationToView(ContactTileRow contactTileRowView, int position,
+            int itemViewType) {
+        if (mInDragging) {
+            // If the one item above the row is being dragged, animates all following items to
+            // move up. If the item is a favorite tile, animate it to appear from right.
+            if (position >= getRowIndex(mDraggedEntryIndex)) {
+                if (itemViewType == ViewTypes.FREQUENT) {
+                    mTranslateVerticalAnimation.setTarget(contactTileRowView);
+                    mTranslateVerticalAnimation.setFloatValues(contactTileRowView.getHeight(), 0);
+                    mTranslateVerticalAnimation.clone().start();
+                } else {
+                    contactTileRowView.animateTilesAppearLeft(mDraggedEntryIndex -
+                            position * mColumnCount);
+                }
+            }
+        } else if (mDropEntryIndex != -1) {
+            // If one item is dropped in front the row, animate all following rows to shift down.
+            // If the item is a favorite tile, animate it to appear from left.
+            if (position >= getRowIndex(mDropEntryIndex)) {
+                if (itemViewType == ViewTypes.FREQUENT) {
+                    if (position == getRowIndex(mDropEntryIndex) || position == mMaxTiledRows) {
+                        contactTileRowView.setVisibility(View.VISIBLE);
+                        mAlphaAnimation.setTarget(contactTileRowView);
+                        mAlphaAnimation.clone().start();
+                    } else {
+                        mTranslateVerticalAnimation.setTarget(contactTileRowView);
+                        mTranslateVerticalAnimation.setFloatValues(-contactTileRowView.getHeight(),
+                                0);
+                        mTranslateVerticalAnimation.clone().start();
+                    }
+                } else {
+                    contactTileRowView.animateTilesAppearRight(mDropEntryIndex + 1 -
+                            position * mColumnCount);
+                }
+            }
+        } else if (mPotentialRemoveEntryIndex != -1) {
+            // If one item is to be removed above this row, animate the row to shift up. If it is
+            // a favorite contact tile, animate it to appear from right.
+            if (position >= getRowIndex(mPotentialRemoveEntryIndex)) {
+                if (itemViewType == ViewTypes.FREQUENT) {
+                    mTranslateVerticalAnimation.setTarget(contactTileRowView);
+                    mTranslateVerticalAnimation.setFloatValues(contactTileRowView.getHeight(), 0);
+                    mTranslateVerticalAnimation.clone().start();
+                } else {
+                    contactTileRowView.animateTilesAppearLeft(
+                            mPotentialRemoveEntryIndex - position * mColumnCount);
+                }
+            }
+        }
+    }
+
+    @Override
     public View getView(int position, View convertView, ViewGroup parent) {
+        Log.v(TAG, "get view for " + String.valueOf(position));
         int itemViewType = getItemViewType(position);
 
-        ContactTileRow contactTileRowView = (ContactTileRow) convertView;
+        ContactTileRow contactTileRowView  = (ContactTileRow) convertView;
+
         ArrayList<ContactEntry> contactList = getItem(position);
 
         if (contactTileRowView == null) {
             // Creating new row if needed
-            contactTileRowView = new ContactTileRow(mContext, itemViewType);
+            contactTileRowView = new ContactTileRow(mContext, itemViewType, position);
         }
 
-        contactTileRowView.configureRow(contactList, position == getCount() - 1);
+        contactTileRowView.configureRow(contactList, position, position == getCount() - 1);
+
+        configureAnimationToView(contactTileRowView, position, itemViewType);
+
         return contactTileRowView;
     }
 
@@ -345,22 +488,100 @@
     }
 
     /**
+     * Temporarily removes a contact from the list for UI refresh. Stores data for this contact
+     * in the back-up variable.
+     *
+     * @param index Position of the contact to be removed.
+     */
+    public void popContactEntry(int index) {
+        if (index >= 0 && index < mContactEntries.size()) {
+            mDraggedEntry = mContactEntries.get(index);
+            mDraggedEntryIndex = index;
+            mContactEntries.remove(index);
+            notifyDataSetChanged();
+        }
+    }
+
+    /**
+     * Drops the temporarily removed contact to the desired location in the list.
+     *
+     * @param index Location where the contact will be dropped.
+     */
+    public void dropContactEntry(int index) {
+        if (mDraggedEntry != null) {
+            if (index >= 0 && index <= mContactEntries.size()) {
+                mContactEntries.add(index, mDraggedEntry);
+                mDropEntryIndex = index;
+            } else if (mDraggedEntryIndex >= 0 && mDraggedEntryIndex <= mContactEntries.size()) {
+                /** If the index is invalid, falls back to the original position of the contact. */
+                mContactEntries.add(mDraggedEntryIndex, mDraggedEntry);
+                mDropEntryIndex = mDraggedEntryIndex;
+            }
+            mDraggedEntry = null;
+            notifyDataSetChanged();
+        }
+    }
+
+    /**
+     * Sets an item to for pending removal. If the user does not click the undo button, the item
+     * will be removed at the next interaction.
+     *
+     * @param index Index of the item to be removed.
+     */
+    public void setPotentialRemoveEntryIndex(int index) {
+        mPotentialRemoveEntryIndex = index;
+    }
+
+    /**
+     * Removes a contact entry from the cache.
+     *
+     * @return True is an item is removed. False is there is no item to be removed.
+     */
+    public boolean removeContactEntry() {
+        if (mPotentialRemoveEntryIndex >= 0 && mPotentialRemoveEntryIndex < mContactEntries.size()) {
+            mContactEntries.remove(mPotentialRemoveEntryIndex);
+            notifyDataSetChanged();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Resets the item for pending removal.
+     */
+    public void undoPotentialRemoveEntryIndex() {
+        mPotentialRemoveEntryIndex = -1;
+    }
+
+    /**
+     * Clears all temporary variables at a new interaction.
+     */
+    public void cleanTempVariables() {
+        mDraggedEntryIndex = -1;
+        mDropEntryIndex = -1;
+        mDraggedEntry = null;
+        mPotentialRemoveEntryIndex = -1;
+    }
+
+    /**
      * Acts as a row item composed of {@link ContactTileView}
      *
      * TODO: FREQUENT doesn't really need it.  Just let {@link #getView} return
      */
-    private class ContactTileRow extends FrameLayout {
+    public class ContactTileRow extends FrameLayout {
         private int mItemViewType;
         private int mLayoutResId;
         private final int mRowPaddingStart;
         private final int mRowPaddingEnd;
         private final int mRowPaddingTop;
         private final int mRowPaddingBottom;
+        private int mPosition;
 
-        public ContactTileRow(Context context, int itemViewType) {
+        public ContactTileRow(Context context, int itemViewType, int position) {
             super(context);
             mItemViewType = itemViewType;
             mLayoutResId = getLayoutResourceId(mItemViewType);
+            mPosition = position;
 
             final Resources resources = mContext.getResources();
             mRowPaddingStart = resources.getDimensionPixelSize(
@@ -384,8 +605,9 @@
         /**
          * Configures the row to add {@link ContactEntry}s information to the views
          */
-        public void configureRow(ArrayList<ContactEntry> list, boolean isLastRow) {
+        public void configureRow(ArrayList<ContactEntry> list, int position, boolean isLastRow) {
             int columnCount = mItemViewType == ViewTypes.FREQUENT ? 1 : mColumnCount;
+            mPosition = position;
 
             // Adding tiles to row and filling in contact information
             for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
@@ -396,11 +618,11 @@
         }
 
         private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
-            final ContactTileView contactTile;
+            final PhoneFavoriteTileView contactTile;
 
             if (getChildCount() <= childIndex) {
 
-                contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
+                contactTile = (PhoneFavoriteTileView) inflate(mContext, mLayoutResId, null);
                 // Note: the layoutparam set here is only actually used for FREQUENT.
                 // We override onMeasure() for STARRED and we don't care the layout param there.
                 final Resources resources = mContext.getResources();
@@ -409,18 +631,17 @@
                         ViewGroup.LayoutParams.WRAP_CONTENT);
 
                 params.setMargins(
-                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin),
-                        0,
-                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin),
-                        0);
+                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0,
+                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0);
                 contactTile.setLayoutParams(params);
                 contactTile.setPhotoManager(mPhotoManager);
                 contactTile.setListener(mListener);
                 addView(contactTile);
             } else {
-                contactTile = (ContactTileView) getChildAt(childIndex);
+                contactTile = (PhoneFavoriteTileView) getChildAt(childIndex);
             }
             contactTile.loadFromContact(entry);
+            contactTile.setId(childIndex);
             switch (mItemViewType) {
                 case ViewTypes.TOP:
                     // Setting divider visibilities
@@ -434,6 +655,7 @@
                 default:
                     break;
             }
+            contactTile.setupFavoriteContactCard();
         }
 
         @Override
@@ -516,6 +738,65 @@
             }
             setMeasuredDimension(width, imageSize + getPaddingTop() + getPaddingBottom());
         }
+
+        /**
+         * Gets the index of the item at the specified coordinates.
+         *
+         * @param itemX X-coordinate of the selected item.
+         * @param itemY Y-coordinate of the selected item.
+         * @return Index of the selected item in the cached array.
+         */
+        public int getItemIndex(float itemX, float itemY) {
+            if (mPosition < mMaxTiledRows) {
+                final Rect childRect = new Rect();
+                if (DEBUG) {
+                    Log.v(TAG, String.valueOf(itemX) + " " + String.valueOf(itemY));
+                }
+                for (int i = 0; i < getChildCount(); ++i) {
+                    /** If the row contains multiple tiles, checks each tile to see if the point
+                     * is contained in the tile. */
+                    getChildAt(i).getHitRect(childRect);
+                    if (DEBUG) {
+                        Log.v(TAG, childRect.toString());
+                    }
+                    if (childRect.contains((int)itemX, (int)itemY)) {
+                        /** If the point is contained in the rectangle, computes the index of the
+                         * item in the cached array. */
+                        return i + (mPosition) * mColumnCount;
+                    }
+                }
+            } else {
+                /** If the selected item is one of the rows, compute the index. */
+                return (mPosition - mMaxTiledRows) + mColumnCount * mMaxTiledRows;
+            }
+            return -1;
+        }
+
+        public PhoneFavoritesTileAdapter getTileAdapter() {
+            return PhoneFavoritesTileAdapter.this;
+        }
+
+        public void animateTilesAppearLeft(int index) {
+            for (int i = index; i < getChildCount(); ++i) {
+                View childView = getChildAt(i);
+                mTranslateHorizontalAnimation.setTarget(childView);
+                mTranslateHorizontalAnimation.setFloatValues(childView.getWidth(), 0);
+                mTranslateHorizontalAnimation.clone().start();
+            }
+        }
+
+        public void animateTilesAppearRight(int index) {
+            for (int i = index; i < getChildCount(); ++i) {
+                View childView = getChildAt(i);
+                mTranslateHorizontalAnimation.setTarget(childView);
+                mTranslateHorizontalAnimation.setFloatValues(-childView.getWidth(), 0);
+                mTranslateHorizontalAnimation.clone().start();
+            }
+        }
+
+        public int getPosition() {
+            return mPosition;
+        }
     }
 
     protected static class ViewTypes {
diff --git a/src/com/android/dialer/list/ShowAllContactsFragment.java b/src/com/android/dialer/list/ShowAllContactsFragment.java
new file mode 100644
index 0000000..85806b6
--- /dev/null
+++ b/src/com/android/dialer/list/ShowAllContactsFragment.java
@@ -0,0 +1,89 @@
+/*
+
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.list;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.os.Bundle;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.TypefaceSpan;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.common.list.ContactListItemView;
+import com.android.contacts.common.list.PhoneNumberPickerFragment;
+import com.android.dialer.R;
+
+// TODO{klp}: Wrap this fragment with an activity.
+/**
+ * Fragments to show all contacts with phone numbers.
+ */
+public class ShowAllContactsFragment extends PhoneNumberPickerFragment{
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+
+        // Customizes the listview according to the dialer specifics.
+        setQuickContactEnabled(true);
+        setDarkTheme(false);
+        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
+        setUseCallableUri(true);
+    }
+
+    @Override
+    public void onStart() {
+        // Displays action bar for quick navigation.
+        final ActionBar actionBar = getActivity().getActionBar();
+        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+        actionBar.setDisplayShowHomeEnabled(true);
+        actionBar.setDisplayHomeAsUpEnabled(true);
+        actionBar.setDisplayShowTitleEnabled(true);
+
+        final SpannableString s = new SpannableString(getString(R.string.show_all_contacts_title));
+        s.setSpan(new TypefaceSpan(getString(R.string.show_all_contacts_title)), 0,
+                s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        actionBar.setTitle(s);
+
+        super.onStart();
+    }
+
+    @Override
+    public void onHiddenChanged(boolean hidden) {
+        // Hides the action bar as it is hidden in the main activity
+        if (getActivity() != null) {
+            if (hidden) {
+                getActivity().getActionBar().hide();
+            } else {
+                getActivity().getActionBar().show();
+            }
+        }
+    }
+
+    @Override
+    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+        return inflater.inflate(R.layout.show_all_contacts_fragment, null);
+    }
+}
