auto import from //branches/cupcake_rel/...@140373
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 962fc54..e0aadd5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -224,16 +224,19 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
 
+            <meta-data android:name="android.app.searchable"
+                android:resource="@xml/searchable"
+            />
+        </activity>
+
+        <activity android:name="ShowOrCreateActivity"
+            android:theme="@android:style/Theme.Translucent.NoTitleBar">
             <intent-filter>
                 <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
                 <data android:scheme="mailto" />
                 <data android:scheme="tel" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable"
-            />
         </activity>
 
         <activity-alias android:name="ContactShortcut"
diff --git a/res/drawable-finger/contact_picture_border_highlight.9.png b/res/drawable-finger/contact_picture_border_highlight.9.png
index fc4e01d..c48b83f 100644
--- a/res/drawable-finger/contact_picture_border_highlight.9.png
+++ b/res/drawable-finger/contact_picture_border_highlight.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_in_list.9.png b/res/drawable-finger/contact_picture_border_in_list.9.png
new file mode 100644
index 0000000..e10b676
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_in_list.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_longpress.9.png b/res/drawable-finger/contact_picture_border_longpress.9.png
index c89a55a..c12ca7c 100644
--- a/res/drawable-finger/contact_picture_border_longpress.9.png
+++ b/res/drawable-finger/contact_picture_border_longpress.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_normal.9.png b/res/drawable-finger/contact_picture_border_normal.9.png
index 37451ae..84bfad5 100644
--- a/res/drawable-finger/contact_picture_border_normal.9.png
+++ b/res/drawable-finger/contact_picture_border_normal.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_pressed.9.png b/res/drawable-finger/contact_picture_border_pressed.9.png
index 11eaae5..d5328f3 100644
--- a/res/drawable-finger/contact_picture_border_pressed.9.png
+++ b/res/drawable-finger/contact_picture_border_pressed.9.png
Binary files differ
diff --git a/res/drawable-finger/divider_vertical_dark.png b/res/drawable-finger/divider_vertical_dark.png
new file mode 100644
index 0000000..dcf850e
--- /dev/null
+++ b/res/drawable-finger/divider_vertical_dark.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_incoming_call.png b/res/drawable-finger/ic_call_log_header_incoming_call.png
new file mode 100644
index 0000000..8b75287
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_incoming_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_missed_call.png b/res/drawable-finger/ic_call_log_header_missed_call.png
new file mode 100644
index 0000000..94dd69f
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_missed_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_outgoing_call.png b/res/drawable-finger/ic_call_log_header_outgoing_call.png
new file mode 100644
index 0000000..bdedc67
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_outgoing_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_incoming_call.png b/res/drawable-finger/ic_call_log_list_incoming_call.png
new file mode 100644
index 0000000..db74c8f
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_missed_call.png b/res/drawable-finger/ic_call_log_list_missed_call.png
new file mode 100644
index 0000000..1907a62
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_missed_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_outgoing_call.png b/res/drawable-finger/ic_call_log_list_outgoing_call.png
new file mode 100644
index 0000000..b47e022
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
index d2821e1..c208b93 100644
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -20,7 +20,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="?android:attr/listPreferredItemHeight"
-    android:paddingLeft="0dip"
+    android:paddingLeft="5dip"
     android:paddingRight="5dip"
 >
 
@@ -36,13 +36,15 @@
     />
 
     <ImageView android:id="@+id/photo"
-        android:layout_width="64dip"
-        android:layout_height="64dip"
+        android:layout_width="54dip"
+        android:layout_height="54dip"
         android:layout_alignParentLeft="true"
-        android:layout_marginRight="9dip"
+        android:layout_centerVertical="true"
+        android:layout_marginRight="8dip"
 
         android:gravity="center"
         android:scaleType="fitCenter"
+        android:background="@drawable/contact_picture_border_in_list"
     />
 
     <TextView android:id="@+id/label"
@@ -51,7 +53,7 @@
         android:layout_toRightOf="@id/photo"
         android:layout_alignParentBottom="true"
         android:layout_marginBottom="8dip"
-        android:layout_marginTop="-8dip"
+        android:layout_marginTop="-10dip"
 
         android:singleLine="true"
         android:ellipsize="marquee"
@@ -64,8 +66,8 @@
         android:layout_height="wrap_content"
         android:layout_marginLeft="5dip"
         android:layout_toRightOf="@id/label"
-        android:layout_alignBaseline="@id/label"
         android:layout_toLeftOf="@id/presence"
+        android:layout_alignBaseline="@id/label"
         android:layout_alignWithParentIfMissing="true"
 
         android:singleLine="true"
@@ -76,12 +78,11 @@
     <TextView android:id="@+id/name"
         android:layout_width="0dip"
         android:layout_height="0dip"
-        android:layout_above="@id/label"
-        android:layout_alignWithParentIfMissing="true"
-        android:layout_alignParentTop="true"
         android:layout_toRightOf="@id/photo"
         android:layout_toLeftOf="@id/presence"
-        android:layout_marginBottom="1dip"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/label"
+        android:layout_alignWithParentIfMissing="true"
 
         android:singleLine="true"
         android:ellipsize="marquee"
diff --git a/res/layout-finger/recent_calls_list_item.xml b/res/layout-finger/recent_calls_list_item.xml
index 3df1f13..bab9ea1 100644
--- a/res/layout-finger/recent_calls_list_item.xml
+++ b/res/layout-finger/recent_calls_list_item.xml
@@ -16,55 +16,91 @@
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight">
+    android:layout_height="?android:attr/listPreferredItemHeight"
+    android:paddingLeft="0dip"
+    android:paddingRight="12dip"
+>
+
+    <ImageView android:id="@+id/call_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+
+        android:paddingLeft="14dip"
+        android:paddingRight="11dip"
+        
+        android:gravity="center_vertical"
+        android:src="@android:drawable/sym_action_call"
+        android:background="@android:drawable/list_selector_background"
+    />
+
+    <View android:id="@+id/divider"
+        android:layout_width="1dip"
+        android:layout_height="fill_parent"
+        android:layout_toRightOf="@id/call_icon"
+        android:layout_marginRight="11dip"
+
+        android:background="@drawable/divider_vertical_dark"
+    />
 
     <ImageView android:id="@+id/call_type_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="4dip"
-        android:layout_centerVertical="true"
-    />
-
-    <TextView android:id="@+id/line1"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/call_type_icon"
-        android:layout_marginTop="6dip"
-        android:layout_marginLeft="5dip"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:singleLine="true"
-    />
-
-    <TextView android:id="@+id/line2"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/line1"
-        android:layout_alignLeft="@id/line1"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:singleLine="true"
-    />
-    
-    <TextView android:id="@+id/duration"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:layout_alignBaseline="@id/line1"
-        android:layout_toRightOf="@id/line1"
-        android:layout_marginRight="8dip"
-        android:gravity="right"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textStyle="bold"
-        android:textColor="?android:attr/textColorPrimary"
-        android:singleLine="true"
+        android:layout_alignParentTop="true"
     />
     
     <TextView android:id="@+id/date"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:layout_alignBaseline="@id/line2"
-        android:layout_marginRight="8dip"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="9dip"
+
         android:textAppearance="?android:attr/textAppearanceSmall"
         android:singleLine="true"
     />
+
+    <TextView android:id="@+id/label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/divider"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="8dip"
+        android:layout_marginTop="-10dip"
+
+        android:singleLine="true"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textStyle="bold"
+    />
+
+    <TextView android:id="@+id/number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dip"
+        android:layout_toRightOf="@id/label"
+        android:layout_toLeftOf="@id/date"
+        android:layout_alignBaseline="@id/label"
+        android:layout_alignWithParentIfMissing="true"
+
+        android:singleLine="true"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+    />
+
+
+    <TextView android:id="@+id/line1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/divider"
+        android:layout_toLeftOf="@id/call_type_icon"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/label"
+        android:layout_alignWithParentIfMissing="true"
+
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:singleLine="true"
+        android:gravity="center_vertical"
+    />
+    
 </RelativeLayout>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index e82b09b..98ed463 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"Upravit kontakt"</string>
     <string name="insertContactDescription">"Vytvořit kontakt"</string>
     <string name="searchHint">"Vyhledat kontakty"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Nový kontakt"</string>
     <string name="menu_viewContact">"Zobrazit kontakt"</string>
     <string name="menu_callNumber">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"Hlasová schránka"</string>
     <string name="unknown">"Neznámé číslo"</string>
     <string name="private_num">"Soukromé číslo"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Číslo vytočíte pomocí klávesnice"</string>
     <string name="dialerDialpadHintText">"Vytočením přidat hovor"</string>
     <string name="simContacts_emptyLoading">"Načítání z karty SIM..."</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 507d69d..c819169 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"Kontakt bearbeiten"</string>
     <string name="insertContactDescription">"Kontakt erstellen"</string>
     <string name="searchHint">"Kontakte durchsuchen"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Neuer Kontakt"</string>
     <string name="menu_viewContact">"Kontakt anzeigen"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"Mailbox"</string>
     <string name="unknown">"Unbekannt"</string>
     <string name="private_num">"Private Nummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Mit Tastatur wählen"</string>
     <string name="dialerDialpadHintText">"Zum Hinzufügen eines Anrufs wählen"</string>
     <string name="simContacts_emptyLoading">"Ladevorgang von SIM-Karte läuft..."</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f41406d..3727f4d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -26,6 +26,7 @@
     <string name="editContactDescription">"Editar contacto"</string>
     <string name="insertContactDescription">"Crear contacto"</string>
     <string name="searchHint">"Buscar contactos"</string>
+    <string name="menu_search">"Buscar"</string>
     <string name="menu_newContact">"Contacto nuevo"</string>
     <string name="menu_viewContact">"Ver contacto"</string>
     <string name="menu_callNumber">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -124,13 +125,15 @@
     <string name="voicemail">"Buzón de voz"</string>
     <string name="unknown">"Desconocidos"</string>
     <string name="private_num">"Número privado"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Utilizar teclado para marcar"</string>
     <string name="dialerDialpadHintText">"Marcar para añadir una llamada"</string>
     <string name="simContacts_emptyLoading">"Cargando desde tarjeta SIM…"</string>
     <string name="simContacts_title">"Contactos de tarjeta SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincroniza tus contactos de Google"</font>" "\n"Después de sincronizarlos con tu teléfono, podrás acceder a tus contactos desde cualquier lugar."</string>
-    <string name="noContactsHelpText">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla  "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para añadir un nuevo contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
-    <string name="noContactsHelpTextWithSync">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadirlos desde una cuenta de Google nueva o existente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
+    <string name="noContactsHelpText">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para añadir un nuevo contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadirlos desde la tarjeta SIM"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadirlos desde una cuenta de Google nueva o existente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadirlos desde la tarjeta SIM"\n</li></string>
     <string name="seclectSyncGroups_title">"Seleccionar grupos para la sincronización"</string>
     <string name="liveFolder_all_label">"Todos los contactos"</string>
     <string name="liveFolder_favorites_label">"Destacados"</string>
@@ -162,4 +165,7 @@
     <string name="callAgain">"Llamar de nuevo"</string>
     <string name="returnCall">"Devolver llamada"</string>
     <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
+    <string name="favoritesFrquentSeparator">"Más llamados"</string>
+    <string name="add_contact_dlg_title">"Añadir contacto"</string>
+    <string name="add_contact_dlg_message_fmt">"¿Añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index ce00813..15421b5 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -26,6 +26,8 @@
     <string name="editContactDescription">"Modifier le contact"</string>
     <string name="insertContactDescription">"Créer un contact"</string>
     <string name="searchHint">"Rechercher des contacts"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Nouveau contact"</string>
     <string name="menu_viewContact">"Afficher le contact"</string>
     <string name="menu_callNumber">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -124,6 +126,8 @@
     <string name="voicemail">"Boîte vocale"</string>
     <string name="unknown">"Inconnu"</string>
     <string name="private_num">"Numéro privée"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Utilisez le clavier pour composer le numéro"</string>
     <string name="dialerDialpadHintText">"Composer le numéro pour ajouter un appel"</string>
     <string name="simContacts_emptyLoading">"Chargement depuis la carte SIM..."</string>
@@ -162,4 +166,10 @@
     <string name="callAgain">"Rappeler"</string>
     <string name="returnCall">"Rappeler"</string>
     <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 59064f0..24330b9 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -26,6 +26,8 @@
     <string name="editContactDescription">"Modifica contatto"</string>
     <string name="insertContactDescription">"Crea contatto"</string>
     <string name="searchHint">"Cerca contatti"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Nuovo contatto"</string>
     <string name="menu_viewContact">"Visualizza contatto"</string>
     <string name="menu_callNumber">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -78,7 +80,7 @@
     <string name="syncGroupPreference">"Modifica sincr. gruppi"</string>
     <string name="importFromSim">"Importa contatti"</string>
     <string name="send_to_voicemail_checkbox">"Inoltra chiamate direttamente alla segreteria"</string>
-    <string name="send_to_voicemail_view">"Le chiamate vengono inoltrate direttamente alla segreteria."</string>
+    <string name="send_to_voicemail_view">"Chiamate inoltrate direttamente alla segreteria."</string>
     <string name="default_ringtone">"Predefinita"</string>
     <string name="addPicture">"Aggiungi icona"</string>
     <string name="removePicture">"Rimuovi icona"</string>
@@ -109,7 +111,7 @@
     <string name="contactsIconLabel">"Contatti"</string>
     <string name="contactsFavoritesLabel">"Preferiti"</string>
     <string name="dialerIconLabel">"Telefono"</string>
-    <string name="recentCallsIconLabel">"Reg. chiamate"</string>
+    <string name="recentCallsIconLabel">"Chiamate"</string>
     <string name="liveFolderAll">"Tutti i contatti"</string>
     <string name="liveFolderFavorites">"Contatti speciali"</string>
     <string name="liveFolderPhone">"Contatti con numeri di telefono"</string>
@@ -124,12 +126,14 @@
     <string name="voicemail">"Segreteria"</string>
     <string name="unknown">"Sconosciuto"</string>
     <string name="private_num">"Numero privato"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Usa la tastiera"</string>
     <string name="dialerDialpadHintText">"Componi per aggiungere una chiamata"</string>
     <string name="simContacts_emptyLoading">"Caricamento da SIM..."</string>
     <string name="simContacts_title">"Contatti SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincronizza i tuoi contatti Google."</font>" "\n"Dopo la sincronizzazione con il telefono, i tuoi contatti saranno sempre a tua disposizione."</string>
-    <string name="noContactsHelpText">"Non hai nessun contatto."\n\n"Per aggiungere dei contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM card"\n</li></string>
+    <string name="noContactsHelpText">"Non hai nessun contatto."\n\n"Per aggiungere dei contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM"\n</li></string>
     <string name="noContactsHelpTextWithSync">"Non hai nessun contatto."\n\n"Per aggiungere i contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifica sincr. gruppi"</b></font>" per aggiungere contatti da un account Google nuovo o già esistente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un contatto nuovo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM"\n</li></string>
     <string name="seclectSyncGroups_title">"Seleziona i gruppi da sincronizzare"</string>
     <string name="liveFolder_all_label">"Tutti i contatti"</string>
@@ -162,4 +166,10 @@
     <string name="callAgain">"Richiama"</string>
     <string name="returnCall">"Chiama numero"</string>
     <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 117c015..efc635e 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"連絡先"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"通話"</string>
     <string name="shortcutContact">"連絡先"</string>
     <string name="starredList">"スター付き"</string>
     <string name="frequentList">"よく連絡する連絡先"</string>
@@ -27,9 +26,11 @@
     <string name="editContactDescription">"連絡先を編集"</string>
     <string name="insertContactDescription">"連絡先を新規登録"</string>
     <string name="searchHint">"連絡先を検索"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"連絡先を新規登録"</string>
     <string name="menu_viewContact">"連絡先を表示"</string>
-    <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
+    <string name="menu_callNumber">"発信 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="menu_addStar">"お気に入りに追加"</string>
     <string name="menu_removeStar">"お気に入りから削除"</string>
     <string name="menu_showBarcode">"バーコードを表示"</string>
@@ -43,16 +44,15 @@
     <string name="deleteConfirmation_title">"削除"</string>
     <string name="deleteConfirmation">"この連絡先を削除します。"</string>
     <string name="menu_done">"完了"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"キャンセル"</string>
     <string name="editContact_title_edit">"連絡先を編集"</string>
     <string name="editContact_title_insert">"連絡先を新規登録"</string>
     <string name="menu_addItem">"情報を追加"</string>
-    <string name="label_phonetic_name">"音声"</string>
+    <string name="label_phonetic_name">"読み"</string>
     <string name="label_notes">"メモ"</string>
     <string name="label_ringtone">"着信音"</string>
     <string name="ghostData_name">"名前"</string>
-    <string name="ghostData_phonetic_name">"音声名"</string>
+    <string name="ghostData_phonetic_name">"読み仮名"</string>
     <string name="ghostData_company">"会社"</string>
     <string name="ghostData_title">"役職"</string>
     <string name="ghostData_im">"IM名"</string>
@@ -69,7 +69,7 @@
     <string name="postalLabelsGroup">"住所"</string>
     <string name="otherLabelsGroup">"その他"</string>
   <string-array name="otherLabels">
-    <item>"勤務先情報"</item>
+    <item>"所属"</item>
     <item>"メモ"</item>
   </string-array>
     <string name="errorDialogTitle">"写真なし"</string>
@@ -77,7 +77,7 @@
     <string name="attachToContact">"連絡先のアイコン"</string>
     <string name="customLabelPickerTitle">"新しいラベル名"</string>
     <string name="menu_displayGroup">"グループを表示"</string>
-    <string name="syncGroupPreference">"同期グループを編集"</string>
+    <string name="syncGroupPreference">"同期する範囲"</string>
     <string name="importFromSim">"連絡先をインポート"</string>
     <string name="send_to_voicemail_checkbox">"ボイスメールに直接電話します。"</string>
     <string name="send_to_voicemail_view">"この番号にかけるとボイスメールに送信されます。"</string>
@@ -104,7 +104,7 @@
     <string name="listSeparatorSendIm_edit">"チャットアドレス"</string>
     <string name="listSeparatorMapAddress">"地図でみる"</string>
     <string name="listSeparatorMapAddress_edit">"住所"</string>
-    <string name="listSeparatorOrganizations">"勤務先情報"</string>
+    <string name="listSeparatorOrganizations">"所属"</string>
     <string name="listSeparatorOtherInformation">"その他の情報"</string>
     <string name="listSeparatorOtherInformation_edit">"その他のオプション"</string>
     <string name="listSeparatorMore_edit">"開く"</string>
@@ -116,7 +116,7 @@
     <string name="liveFolderFavorites">"スター付きの連絡先"</string>
     <string name="liveFolderPhone">"電話番号のある連絡先"</string>
     <string name="menu_sendTextMessage">"SMSメッセージを送信"</string>
-    <string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
+    <string name="recentCalls_callNumber">"発信 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="recentCalls_editNumberBeforeCall">"発信前に番号を編集"</string>
     <string name="recentCalls_addToContact">"連絡先に追加"</string>
     <string name="recentCalls_removeFromRecentList">"通話履歴から消去"</string>
@@ -126,15 +126,15 @@
     <string name="voicemail">"ボイスメール"</string>
     <string name="unknown">"不明"</string>
     <string name="private_num">"非通知番号"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"キーボードで番号を入力してください"</string>
     <string name="dialerDialpadHintText">"ダイヤルして追加"</string>
     <string name="simContacts_emptyLoading">"SIMカードから読み取り中..."</string>
     <string name="simContacts_title">"SIMカードの連絡先"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Googleアカウントの連絡先同期"</font>" "\n"Googleサービスで使っている連絡先をこの携帯電話でも使えるようになります。"</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"連絡先が登録されていません。"\n\n<font fgcolor="#ffffffff"><b>"MENU"</b></font>"を押して登録方法を選択してください:"\n" "\n<li><font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>": 連絡先を入力して新規登録します"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"連絡先をインポート"</b></font>": 連絡先をSIMカードから取り込みます"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"連絡先が登録されていません。"\n\n<font fgcolor="#ffffffff"><b>"MENU"</b></font>"を押して登録方法を選択してください:"\n" "\n<li><font fgcolor="#ffffffff"><b>"同期する範囲"</b></font>": Googleアカウントから連絡先を読み込んで追加します"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>": 連絡先を入力して新規登録します"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"連絡先をインポート"</b></font>": 連絡先をSIMカードから取り込みます"\n</li></string>
     <string name="seclectSyncGroups_title">"同期するグループを選択"</string>
     <string name="liveFolder_all_label">"すべての連絡先"</string>
     <string name="liveFolder_favorites_label">"スター付き"</string>
@@ -165,8 +165,12 @@
     <string name="callBack">"コールバック"</string>
     <!-- no translation found for callAgain (3197312117049874778) -->
     <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
+    <string name="returnCall">"発信"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
     <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
     <skip />
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index aafe0d0..7668dad 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"연락처 편집"</string>
     <string name="insertContactDescription">"연락처 만들기"</string>
     <string name="searchHint">"연락처 검색"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"새 연락처"</string>
     <string name="menu_viewContact">"연락처 보기"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>에게 전화걸기"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"음성메일"</string>
     <string name="unknown">"알 수 없음"</string>
     <string name="private_num">"비공개 번호"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"키보드를 사용하여 전화걸기"</string>
     <string name="dialerDialpadHintText">"통화를 추가할 전화번호 입력"</string>
     <string name="simContacts_emptyLoading">"SIM 카드에서 로드 중…"</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 3b47bac..5ff223f 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -26,6 +26,8 @@
     <string name="editContactDescription">"Rediger kontakt"</string>
     <string name="insertContactDescription">"Opprett kontakt"</string>
     <string name="searchHint">"Søk i kontakter"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Ny kontakt"</string>
     <string name="menu_viewContact">"Se på kontakt"</string>
     <string name="menu_callNumber">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -125,6 +127,8 @@
     <string name="voicemail">"Telefonsvarer"</string>
     <string name="unknown">"Ukjent"</string>
     <string name="private_num">"Skjult nummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Bruk tastaturet for å ringe"</string>
     <string name="dialerDialpadHintText">"Ring for å legge til en samtale"</string>
     <string name="simContacts_emptyLoading">"Henter fra SIM-kort…"</string>
@@ -168,4 +172,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 0d3a556..fdf85ef 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"Contactpersoon bewerken"</string>
     <string name="insertContactDescription">"Contactpersoon maken"</string>
     <string name="searchHint">"Contacten zoeken"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Nieuwe contactpersoon"</string>
     <string name="menu_viewContact">"Contactpersoon weergeven"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"Voicemail"</string>
     <string name="unknown">"Onbekend"</string>
     <string name="private_num">"Privénummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Toetsen gebruiken om te bellen"</string>
     <string name="dialerDialpadHintText">"Bellen om een oproep toe te voegen"</string>
     <string name="simContacts_emptyLoading">"Laden vanaf SIM-kaart..."</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index feb5c8b..f051c01 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"Edytuj kontakt"</string>
     <string name="insertContactDescription">"Utwórz kontakt"</string>
     <string name="searchHint">"Przeszukuj kontakty"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Nowy kontakt"</string>
     <string name="menu_viewContact">"Wyświetl kontakt"</string>
     <string name="menu_callNumber">"Zadzwoń do kontaktu <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"Poczta głosowa"</string>
     <string name="unknown">"Nieznane"</string>
     <string name="private_num">"Numer prywatny"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Wybierz numer za pomocą klawiatury"</string>
     <string name="dialerDialpadHintText">"Wybierz numer, aby dodać połączenie"</string>
     <string name="simContacts_emptyLoading">"Wczytywanie z karty SIM…"</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 398c898..27f3dd2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"Изменить контакт"</string>
     <string name="insertContactDescription">"Создать контакт"</string>
     <string name="searchHint">"Искать контакты"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Создать контакт"</string>
     <string name="menu_viewContact">"Просмотреть контакт"</string>
     <string name="menu_callNumber">"Позвонить: <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"Голосовая почта"</string>
     <string name="unknown">"Неизвестно"</string>
     <string name="private_num">"Частный номер"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Для набора воспользуйтесь клавиатурой"</string>
     <string name="dialerDialpadHintText">"Наберите номер, чтобы добавить вызов"</string>
     <string name="simContacts_emptyLoading">"Идет загрузка с SIM-карты…"</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 6ef964e..625c2b8 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"编辑联系人"</string>
     <string name="insertContactDescription">"创建联系人"</string>
     <string name="searchHint">"搜索联系人"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"添加联系人"</string>
     <string name="menu_viewContact">"查看联系人"</string>
     <string name="menu_callNumber">"呼叫<xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"语音邮件"</string>
     <string name="unknown">"未知"</string>
     <string name="private_num">"私人号码"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"使用键盘拔号"</string>
     <string name="dialerDialpadHintText">"通过拨号添加通话"</string>
     <string name="simContacts_emptyLoading">"正在从 SIM 卡中载入..."</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 91704fb..095a2de 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -27,6 +27,8 @@
     <string name="editContactDescription">"編輯連絡人"</string>
     <string name="insertContactDescription">"建立連絡人"</string>
     <string name="searchHint">"搜尋連絡人"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"新增連絡人"</string>
     <string name="menu_viewContact">"檢視連絡人"</string>
     <string name="menu_callNumber">"撥打電話給 <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,6 +128,8 @@
     <string name="voicemail">"語音信箱"</string>
     <string name="unknown">"未知的"</string>
     <string name="private_num">"私人號碼"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"使用鍵盤撥號"</string>
     <string name="dialerDialpadHintText">"撥號即可新增通話"</string>
     <string name="simContacts_emptyLoading">"從  SIM 卡讀取中…"</string>
@@ -169,4 +173,10 @@
     <skip />
     <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
     <skip />
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
+    <skip />
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
+    <skip />
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8eb1976..c4c149a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -348,6 +348,9 @@
 
     <!-- String used to display calls from private numbers in the call log -->
     <string name="private_num">Private number</string>
+    
+    <!-- String used to display calls from pay phone in the call log -->
+    <string name="payphone">Pay phone</string>
 
     <!-- Displayed in the text entry box in the dialer when in landscape mode to guide the user
          to dial using the physical keyboard -->
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 012a33e..974fc05 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -166,19 +166,19 @@
                 String callText = null;
                 switch (callType) {
                     case Calls.INCOMING_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_incoming);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_incoming_call);
                         mCallType.setText(R.string.type_incoming);
                         callText = getString(R.string.callBack);
                         break;
     
                     case Calls.OUTGOING_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_outgoing);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_outgoing_call);
                         mCallType.setText(R.string.type_outgoing);
                         callText = getString(R.string.callAgain);
                         break;
     
                     case Calls.MISSED_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_missed);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_missed_call);
                         mCallType.setText(R.string.type_missed);
                         callText = getString(R.string.returnCall);
                         break;
diff --git a/src/com/android/contacts/ContactsGroupSyncSelector.java b/src/com/android/contacts/ContactsGroupSyncSelector.java
index 80b5166..30aec94 100644
--- a/src/com/android/contacts/ContactsGroupSyncSelector.java
+++ b/src/com/android/contacts/ContactsGroupSyncSelector.java
@@ -36,6 +36,8 @@
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 
+import java.util.ArrayList;
+
 public final class ContactsGroupSyncSelector extends ListActivity implements View.OnClickListener {
 
     private static final String[] PROJECTION = new String[] {
@@ -51,12 +53,12 @@
 
     private static final int SUBACTIVITY_GET_ACCOUNT = 1;
 
-    boolean[] mChecked;
+    ArrayList<Boolean> mChecked;
+    ArrayList<Long> mGroupIds;
     boolean mSyncAllGroups;
-    long[] mGroupIds;
     
     private final class GroupsAdapter extends ArrayAdapter<CharSequence> {
-        public GroupsAdapter(CharSequence[] items) {
+        public GroupsAdapter(ArrayList<CharSequence> items) {
             super(ContactsGroupSyncSelector.this,
                     android.R.layout.simple_list_item_checked,
                     android.R.id.text1, items);
@@ -94,7 +96,7 @@
     @Override
     protected void onListItemClick(ListView list, View view, int position, long id) {
         boolean isChecked = list.isItemChecked(position);
-        mChecked[position] = isChecked;
+        mChecked.set(position, isChecked);
         if (position == 0) {
             mSyncAllGroups = isChecked;
             adjustChecks();
@@ -127,11 +129,12 @@
                     Settings.setSetting(resolver, null, Settings.SYNC_EVERYTHING, "1");
                 } else {
                     ContentValues values = new ContentValues();
-                    int count = mChecked.length;
+                    int count = mChecked.size();
                     for (int i = 1; i < count; i++) {
                         values.clear();
-                        values.put(Groups.SHOULD_SYNC, mChecked[i]);
-                        resolver.update(ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupIds[i]),
+                        values.put(Groups.SHOULD_SYNC, mChecked.get(i));
+                        resolver.update(
+                                ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupIds.get(i)),
                                 values, null, null);
                     }
                     // For now we only support a single account and the UI doesn't know what
@@ -189,33 +192,34 @@
         Cursor cursor = resolver.query(Groups.CONTENT_URI, PROJECTION, null, null, Groups.NAME);
         if (cursor != null) {
             try {
-                int count = cursor.getCount() + 1;
-                CharSequence[] items = new String[count];
-                boolean[] checked = new boolean[count];
-                long[] groupIds = new long[count];
-    
-                int i = 0;
-                items[i++] = getString(R.string.syncAllGroups);
-                items[i++] = getString(R.string.groupNameMyContacts);
-    
+                int count = cursor.getCount() + 1; // add 1 for "sync all"
+                ArrayList<CharSequence> items = new ArrayList<CharSequence>(count);
+                ArrayList<Boolean> checked = new ArrayList<Boolean>(count);
+                ArrayList<Long> groupIds = new ArrayList<Long>(count);
+
+                // The first item in the list is always "sync all"
+                items.add(getString(R.string.syncAllGroups));
+                checked.add(mSyncAllGroups);
+                groupIds.add(Long.valueOf(0)); // dummy entry
+
                 while (cursor.moveToNext()) {
                     String name = cursor.getString(COLUMN_INDEX_NAME);
                     String systemId = cursor.isNull(COLUMN_INDEX_SYSTEM_ID) ?
                             null : cursor.getString(COLUMN_INDEX_SYSTEM_ID);
                     if (systemId == null || !Groups.GROUP_MY_CONTACTS.equals(systemId)) {
-                        items[i] = name;
-                        checked[i] = cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0;
-                        groupIds[i] = cursor.getLong(COLUMN_INDEX_ID);
-                        i++;
+                        items.add(name);
+                        checked.add(cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0);
+                        groupIds.add(cursor.getLong(COLUMN_INDEX_ID));
                     } else {
-                        checked[1] = cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0;
-                        groupIds[1] = cursor.getLong(COLUMN_INDEX_ID);
+                        // If My Contacts is around it wants to be the second list entry
+                        items.add(1, getString(R.string.groupNameMyContacts));
+                        checked.add(1, cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0);
+                        groupIds.add(1, cursor.getLong(COLUMN_INDEX_ID));
                     }
                 }
                 mChecked = checked;
-                mSyncAllGroups = getShouldSyncEverything(resolver);
-                checked[0] = mSyncAllGroups;
                 mGroupIds = groupIds;
+                mSyncAllGroups = getShouldSyncEverything(resolver);
     
                 // Setup the adapter
                 setListAdapter(new GroupsAdapter(items));
@@ -233,10 +237,10 @@
                 list.setItemChecked(i, true);
             }
         } else {
-            boolean[] checked = mChecked;
+            ArrayList<Boolean> checked = mChecked;
             int count = list.getCount();
             for (int i = 0; i < count; i++) {
-                list.setItemChecked(i, checked[i]);
+                list.setItemChecked(i, checked.get(i));
             }
         }
     }
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index b9dc4f2..5ba0ec5 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -41,12 +41,12 @@
 import android.preference.PreferenceManager;
 import android.provider.Contacts;
 import android.provider.Contacts.ContactMethods;
-import android.provider.Contacts.ContactMethodsColumns;
 import android.provider.Contacts.Groups;
 import android.provider.Contacts.Intents;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.Presence;
+import android.provider.Contacts.Intents.Insert;
 import android.provider.Contacts.Intents.UI;
 import android.text.TextUtils;
 import android.util.Log;
@@ -70,6 +70,8 @@
 import android.widget.SectionIndexer;
 import android.widget.TextView;
 
+import static com.android.contacts.ShowOrCreateActivity.QUERY_KIND_EMAIL_OR_IM;
+
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -139,8 +141,8 @@
             55 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
     /** Run a search query */
     static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER;
-    /** Show all contacts matching query, or handle special cases where 0 or 1 contacts found. */
-    static final int MODE_SHOW_OR_CREATE_CONTACT = 65 | MODE_MASK_PICKER | MODE_MASK_NO_FILTER;
+    /** Run a search query in PICK mode, but that still launches to VIEW */
+    static final int MODE_QUERY_PICK_TO_VIEW = 65 | MODE_MASK_NO_FILTER | MODE_MASK_PICKER;
 
     static final int DEFAULT_MODE = MODE_ALL_CONTACTS;
 
@@ -270,27 +272,13 @@
     private Uri mGroupUri;
     private boolean mJustCreated;
     private boolean mSyncEnabled;
-    
-    /**
-     * {@link Bundle} of extras to include when launching
-     * {@link Intents.Insert#ACTION}, usually when responding to
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
-     */
-    private Bundle mCreateExtras;
-    
-    /**
-     * Title to display to user when asking if a contact should be created,
-     * usually the requested E-mail address or phone number when responding to a
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
-     */
-    private String mCreateData;
 
     /**
      * Cursor row index that holds reference back to {@link People#_ID}, such as
      * {@link ContactMethods#PERSON_ID}. Used when responding to a
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+     * {@link Intent#ACTION_SEARCH} in mode {@link #MODE_QUERY_PICK_TO_VIEW}.
      */
-    private int mCreatePersonIndex;
+    private int mQueryPersonIdIndex;
 
     /**
      * Used to keep track of the scroll state of the list.
@@ -300,7 +288,22 @@
 
     private boolean mCreateShortcut;
     private boolean mDefaultMode = false;
+    
+    /**
+     * Internal query type when in mode {@link #MODE_QUERY_PICK_TO_VIEW}.
+     */
+    private int mQueryMode = QUERY_MODE_NONE;
 
+    private static final int QUERY_MODE_NONE = -1;
+    private static final int QUERY_MODE_MAILTO = 1;
+    private static final int QUERY_MODE_TEL = 2;
+    
+    /**
+     * Data to use when in mode {@link #MODE_QUERY_PICK_TO_VIEW}. Usually
+     * provided by scheme-specific part of incoming {@link Intent#getData()}.
+     */
+    private String mQueryData;
+    
     private class DeleteClickListener implements DialogInterface.OnClickListener {
         private Uri mUri;
 
@@ -313,23 +316,6 @@
         }
     }
     
-    private class IntentClickListener implements DialogInterface.OnClickListener {
-        private Activity mParent;
-        private Intent mIntent;
-
-        public IntentClickListener(Activity parent, Intent intent) {
-            mParent = parent;
-            mIntent = intent;
-        }
-
-        public void onClick(DialogInterface dialog, int which) {
-            if (mIntent != null) {
-                mParent.startActivity(mIntent);
-            }
-            mParent.finish();
-        }
-    }
-
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -407,8 +393,20 @@
                 finish();
                 return;
             }
-            // Otherwise handle the more normal search case
-            mMode = MODE_QUERY;
+            
+            // See if search request has extras to specify query
+            if (intent.hasExtra(Insert.EMAIL)) {
+                mMode = MODE_QUERY_PICK_TO_VIEW;
+                mQueryMode = QUERY_MODE_MAILTO;
+                mQueryData = intent.getStringExtra(Insert.EMAIL);
+            } else if (intent.hasExtra(Insert.PHONE)) {
+                mMode = MODE_QUERY_PICK_TO_VIEW;
+                mQueryMode = QUERY_MODE_TEL;
+                mQueryData = intent.getStringExtra(Insert.PHONE);
+            } else {
+                // Otherwise handle the more normal search case
+                mMode = MODE_QUERY;
+            }
 
         // Since this is the filter activity it receives all intents
         // dispatched from the SearchManager for security reasons
@@ -436,8 +434,6 @@
             startActivity(newIntent);
             finish();
             return;
-        } else if (Intents.SHOW_OR_CREATE_CONTACT.equals(action)) {
-            mMode = MODE_SHOW_OR_CREATE_CONTACT;
         }
 
         if (mMode == MODE_UNKNOWN) {
@@ -492,60 +488,6 @@
         }
     }
 
-    /**
-     * Handles special cases of the {@link Intents#SHOW_OR_CREATE_CONTACT}
-     * intent. When zero results found, prompt user to create new contact. When
-     * one contact found, shortcut to viewing that contact.
-     * 
-     * @param c Valid cursor after performing query
-     */
-    private void handleShowOrCreate(final Cursor c) {
-        int count = 0;
-        long personId = 0;
-        if (c != null) {
-            count = c.getCount();
-            if (count == 1 && c.moveToFirst()) {
-                // Try reading ID for the only contact returned
-                personId = c.getLong(mCreatePersonIndex);
-            }
-        }
-        
-        if (count == 1) {
-            // If we only found one item, jump right to viewing it
-            Intent showIntent = new Intent(Intent.ACTION_VIEW,
-                    ContentUris.withAppendedId(People.CONTENT_URI, personId));
-            startActivity(showIntent);
-            finish();
-            
-        } else if (count == 0) {
-            // Insert create values coming from our request
-            Intent createIntent = new Intent(Intent.ACTION_INSERT, People.CONTENT_URI);
-            createIntent.putExtras(mCreateExtras);
-            
-            // Prompt user if they really want to start creating a new
-            // contact. Skip this step if the caller requested {@link
-            // Contacts#EXTRA_FORCE_CREATE}.
-            boolean forceCreate = getIntent().getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false);
-            
-            if (forceCreate) {
-                startActivity(createIntent);
-                finish();
-            } else {
-                CharSequence message = getResources().getString(
-                        R.string.add_contact_dlg_message_fmt, mCreateData);
-                
-                new AlertDialog.Builder(this)
-                        .setTitle(R.string.add_contact_dlg_title)
-                        .setMessage(message)
-                        .setPositiveButton(android.R.string.ok,
-                                new IntentClickListener(this, createIntent))
-                        .setNegativeButton(android.R.string.cancel,
-                                new IntentClickListener(this, null))
-                        .show();
-            }
-        }
-    }
-
     private void setEmptyText() {
         TextView empty = (TextView) findViewById(R.id.emptyText);
         // Center the text by default
@@ -1046,10 +988,10 @@
                 Intent intent = new Intent(Intent.ACTION_VIEW,
                         ContentUris.withAppendedId(People.CONTENT_URI, id));
                 startActivity(intent);
-            } else if (mMode == MODE_SHOW_OR_CREATE_CONTACT) {
-                // Figure out person ID because we might be using indirect cursor
+            } else if (mMode == MODE_QUERY_PICK_TO_VIEW) {
+                // Started with query that should launch to view contact
                 Cursor c = (Cursor) mAdapter.getItem(position);
-                long personId = c.getLong(mCreatePersonIndex);
+                long personId = c.getLong(mQueryPersonIdIndex);
                 Intent intent = new Intent(Intent.ACTION_VIEW,
                         ContentUris.withAppendedId(People.CONTENT_URI, personId));
                 startActivity(intent);
@@ -1184,52 +1126,25 @@
                 break;
             }
             
-            case MODE_SHOW_OR_CREATE_CONTACT: {
-                // Caller requested a specific E-mail address or phone number,
-                // so show only matching entries. Once the query finishes we
-                // handle edge cases of 0 or 1 items.
-                Uri data = getIntent().getData();
-                String scheme = null;
-                String ssp = null;
-                if (data != null) {
-                    scheme = data.getScheme();
-                    ssp = data.getSchemeSpecificPart();
-                    mCreateData = ssp;
-                }
-                
-                mCreateExtras = new Bundle();
-                Bundle originalExtras = getIntent().getExtras();
-                if (originalExtras != null) {
-                    mCreateExtras.putAll(originalExtras);
-                }
-
-                if ("mailto".equals(scheme)) {
-                    mCreateExtras.putString(Intents.Insert.EMAIL, ssp);
-                    mCreatePersonIndex = CONTACT_METHODS_PERSON_ID_INDEX;
-                    
+            case MODE_QUERY_PICK_TO_VIEW: {
+                if (mQueryMode == QUERY_MODE_MAILTO) {
+                    mQueryPersonIdIndex = CONTACT_METHODS_PERSON_ID_INDEX;
                     mQueryHandler.startQuery(QUERY_TOKEN, null,
                             ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION,
-                            ContactMethodsColumns.KIND + "=" + Contacts.KIND_EMAIL + " AND " +
-                            ContactMethods.DATA + "=?", new String[] { ssp },
+                            QUERY_KIND_EMAIL_OR_IM + " AND " + ContactMethods.DATA + "=?",
+                            new String[] { mQueryData },
                             getSortOrder(CONTACT_METHODS_PROJECTION));
                     
-                } else if ("tel".equals(scheme)) {
-                    mCreateExtras.putString(Intents.Insert.PHONE, ssp);
-                    mCreatePersonIndex = PHONES_PERSON_ID_INDEX;
-                    
+                } else if (mQueryMode == QUERY_MODE_TEL) {
+                    mQueryPersonIdIndex = PHONES_PERSON_ID_INDEX;
                     mQueryHandler.startQuery(QUERY_TOKEN, null,
-                            Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, ssp),
+                            Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, mQueryData),
                             PHONES_PROJECTION, null, null,
                             getSortOrder(PHONES_PROJECTION));
-                    
-                } else {
-                    Log.w(TAG, "Invalid intent:" + getIntent());
-                    finish();
                 }
-                
                 break;
             }
-
+            
             case MODE_STARRED:
                 mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI,
                         CONTACTS_PROJECTION,
@@ -1413,7 +1328,6 @@
                     getString(R.string.groupNameWithPhones));
             prefStrings.add(GROUP_WITH_PHONES);
             
-            int i = 3;
             int currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS;
             while (cursor.moveToNext()) {
                 String systemId = cursor.getString(GROUPS_COLUMN_INDEX_SYSTEM_ID);
@@ -1423,9 +1337,8 @@
                     // All groups that aren't My Contacts, since that one is localized on the phone
                     groups.add(name);
                     if (name.equals(mDisplayInfo)) {
-                        currentIndex = i;
+                        currentIndex = groups.size() - 1;
                     }
-                    i++;
                 } else {
                     // The My Contacts group
                     groups.add(DISPLAY_GROUP_INDEX_MY_CONTACTS,
@@ -1443,8 +1356,7 @@
                 currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS_WITH_PHONES;
             }
             mDisplayGroups = groups.toArray(new CharSequence[groups.size()]);
-            builder.setSingleChoiceItems(mDisplayGroups,
-                    currentIndex, this);
+            builder.setSingleChoiceItems(mDisplayGroups, currentIndex, this);
             mDisplayGroupOriginalSelection = currentIndex;
         } finally {
             cursor.close();
@@ -1467,11 +1379,6 @@
                 activity.getListView().clearTextFilter();                
                 activity.mAdapter.changeCursor(cursor);
                 
-                // Handle SHOW_OR_CREATE now that we have valid cursor
-                if (activity.mMode == MODE_SHOW_OR_CREATE_CONTACT) {
-                    activity.handleShowOrCreate(cursor);
-                }
-    
                 // Now that the cursor is populated again, it's possible to restore the list state
                 if (activity.mListState != null) {
                     activity.mList.onRestoreInstanceState(activity.mListState);
diff --git a/src/com/android/contacts/RecentCallsListActivity.java b/src/com/android/contacts/RecentCallsListActivity.java
index dbf2879..8949f6e 100644
--- a/src/com/android/contacts/RecentCallsListActivity.java
+++ b/src/com/android/contacts/RecentCallsListActivity.java
@@ -114,17 +114,11 @@
     private static final int QUERY_TOKEN = 53;
     private static final int UPDATE_TOKEN = 54;
 
-    private RecentCallsAdapter mAdapter;
+    RecentCallsAdapter mAdapter;
     private QueryHandler mQueryHandler;
-    private String mVoiceMailNumber;
+    String mVoiceMailNumber;
 
-    private CharSequence[] mLabelArray;
-
-    private Drawable mDrawableIncoming;
-    private Drawable mDrawableOutgoing;
-    private Drawable mDrawableMissed;
-
-    private static final class ContactInfo {
+    static final class ContactInfo {
         public long personId;
         public String name;
         public int type;
@@ -136,13 +130,14 @@
 
     public static final class RecentCallsListItemViews {
         TextView line1View;
-        TextView line2View;
-        TextView durationView;
+        TextView labelView;
+        TextView numberView;
         TextView dateView;
         ImageView iconView;
+        View callView;
     }
 
-    private static final class CallerInfoQuery {
+    static final class CallerInfoQuery {
         String number;
         int position;
         String name;
@@ -151,8 +146,8 @@
     }
 
     /** Adapter class to fill in data for the Call Log */
-    private final class RecentCallsAdapter extends ResourceCursorAdapter
-            implements Runnable, ViewTreeObserver.OnPreDrawListener {
+    final class RecentCallsAdapter extends ResourceCursorAdapter
+            implements Runnable, ViewTreeObserver.OnPreDrawListener, View.OnClickListener {
         HashMap<String,ContactInfo> mContactInfo;
         private final LinkedList<CallerInfoQuery> mRequests;
         private volatile boolean mDone;
@@ -163,6 +158,20 @@
         private boolean mFirst;
         private Thread mCallerIdThread;
 
+        private CharSequence[] mLabelArray;
+
+        private Drawable mDrawableIncoming;
+        private Drawable mDrawableOutgoing;
+        private Drawable mDrawableMissed;
+
+        public void onClick(View view) {
+            String number = (String) view.getTag();
+            if (!TextUtils.isEmpty(number)) {
+                Uri telUri = Uri.fromParts("tel", number, null);
+                startActivity(new Intent(Intent.ACTION_CALL_PRIVILEGED, telUri));
+            }
+        }
+
         public boolean onPreDraw() {
             if (mFirst) {
                 mHandler.sendEmptyMessageDelayed(START_THREAD, 1000);
@@ -191,6 +200,14 @@
             mContactInfo = new HashMap<String,ContactInfo>();
             mRequests = new LinkedList<CallerInfoQuery>();
             mPreDrawListener = null;
+
+            mDrawableIncoming = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_incoming_call);
+            mDrawableOutgoing = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_outgoing_call);
+            mDrawableMissed = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_missed_call);
+            mLabelArray = getResources().getTextArray(com.android.internal.R.array.phoneTypes);
         }
 
         void setLoading(boolean loading) {
@@ -331,11 +348,13 @@
             // Get the views to bind to
             RecentCallsListItemViews views = new RecentCallsListItemViews();
             views.line1View = (TextView) view.findViewById(R.id.line1);
-            views.line2View = (TextView) view.findViewById(R.id.line2);
-            views.durationView = (TextView) view.findViewById(R.id.duration);
+            views.labelView = (TextView) view.findViewById(R.id.label);
+            views.numberView = (TextView) view.findViewById(R.id.number);
             views.dateView = (TextView) view.findViewById(R.id.date);
             views.iconView = (ImageView) view.findViewById(R.id.call_type_icon);
-
+            views.callView = view.findViewById(R.id.call_icon);
+            views.callView.setOnClickListener(this);
+            
             view.setTag(views);
 
             return view;
@@ -350,6 +369,9 @@
             String callerName = c.getString(CALLER_NAME_COLUMN_INDEX);
             int callerNumberType = c.getInt(CALLER_NUMBERTYPE_COLUMN_INDEX);
             String callerNumberLabel = c.getString(CALLER_NUMBERLABEL_COLUMN_INDEX);
+            
+            // Store away the number so we can call it directly if you click on the call icon
+            views.callView.setTag(number);
 
             // Lookup contacts with this number
             ContactInfo info = mContactInfo.get(number);
@@ -387,32 +409,24 @@
             // Set the text lines
             if (!TextUtils.isEmpty(name)) {
                 views.line1View.setText(name);
+                views.labelView.setVisibility(View.VISIBLE);
                 CharSequence numberLabel = Phones.getDisplayLabel(context, ntype, label,
                         mLabelArray);
+                views.numberView.setVisibility(View.VISIBLE);
+                views.numberView.setText(number);
                 if (!TextUtils.isEmpty(numberLabel)) {
-                    views.line2View.setText(numberLabel);
+                    views.labelView.setText(numberLabel);
+                    views.labelView.setVisibility(View.VISIBLE);
                 } else {
-                    views.line2View.setText(number);
+                    views.labelView.setVisibility(View.GONE);
                 }
-
-                // Set the presence icon
-/*
-                int serverStatus;
-                if (!c.isNull(SERVER_STATUS_COLUMN_INDEX)) {
-                    serverStatus = c.getInt(SERVER_STATUS_COLUMN_INDEX);
-                    views.line2View.setCompoundDrawablesWithIntrinsicBounds(
-                            getResources().getDrawable(
-                                    Presence.getPresenceIconResourceId(serverStatus)),
-                            null, null, null);
-                } else {
-                    views.line2View.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
-                }
-*/
             } else {
                 if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
                     number = getString(R.string.unknown);
                 } else if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
                     number = getString(R.string.private_num);
+                } else if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+                    number = getString(R.string.payphone);
                 } else if (number.equals(mVoiceMailNumber)) {
                     number = getString(R.string.voicemail);
                 } else {
@@ -421,29 +435,18 @@
                 }
 
                 views.line1View.setText(number);
-                views.line2View.setText(null);
-
-                // Clear the presence icon
-//                views.line2View.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+                views.numberView.setVisibility(View.GONE);
+                views.labelView.setVisibility(View.GONE);
             }
 
             int type = c.getInt(CALL_TYPE_COLUMN_INDEX);
             long date = c.getLong(DATE_COLUMN_INDEX);
 
-            // Set the duration
-            if (type == Calls.MISSED_TYPE) {
-                views.durationView.setVisibility(View.GONE);
-            } else {
-                views.durationView.setVisibility(View.VISIBLE);
-                views.durationView.setText(DateUtils.formatElapsedTime(c.getLong(DURATION_COLUMN_INDEX)));
-            }
-
             // Set the date/time field by mixing relative and absolute times.
-            int flags = DateUtils.FORMAT_ABBREV_RELATIVE | DateUtils.FORMAT_SHOW_DATE
-                    | DateUtils.FORMAT_ABBREV_MONTH;
+            int flags = DateUtils.FORMAT_ABBREV_RELATIVE;
             
-            views.dateView.setText(DateUtils.getRelativeDateTimeString(context, date,
-                    DateUtils.MINUTE_IN_MILLIS, DateUtils.DAY_IN_MILLIS * 2, flags));
+            views.dateView.setText(DateUtils.getRelativeTimeSpanString(date,
+                    System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS, flags));
 
             // Set the icon
             switch (type) {
@@ -459,6 +462,7 @@
                     views.iconView.setImageDrawable(mDrawableMissed);
                     break;
             }
+
             // Listen for the first draw
             if (mPreDrawListener == null) {
                 mFirst = true;
@@ -496,11 +500,6 @@
 
         setContentView(R.layout.recent_calls);
 
-        mDrawableIncoming = getResources().getDrawable(android.R.drawable.sym_call_incoming);
-        mDrawableOutgoing = getResources().getDrawable(android.R.drawable.sym_call_outgoing);
-        mDrawableMissed = getResources().getDrawable(android.R.drawable.sym_call_missed);
-        mLabelArray = getResources().getTextArray(com.android.internal.R.array.phoneTypes);
-
         // Typing here goes to the dialer
         setDefaultKeyMode(DEFAULT_KEYS_DIALER);
 
@@ -616,6 +615,8 @@
             number = getString(R.string.unknown);
         } else if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
             number = getString(R.string.private_num);
+        } else if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+            number = getString(R.string.payphone);
         } else if (number.equals(mVoiceMailNumber)) {
             number = getString(R.string.voicemail);
             numberUri = Uri.parse("voicemail:x");
@@ -799,7 +800,8 @@
             String number = cursor.getString(NUMBER_COLUMN_INDEX);
             if (TextUtils.isEmpty(number)
                     || number.equals(CallerInfo.UNKNOWN_NUMBER)
-                    || number.equals(CallerInfo.PRIVATE_NUMBER)) {
+                    || number.equals(CallerInfo.PRIVATE_NUMBER)
+                    || number.equals(CallerInfo.PAYPHONE_NUMBER)) {
                 // This number can't be called, do nothing
                 return;
             }
diff --git a/src/com/android/contacts/ShowOrCreateActivity.java b/src/com/android/contacts/ShowOrCreateActivity.java
new file mode 100755
index 0000000..8d3cf0b
--- /dev/null
+++ b/src/com/android/contacts/ShowOrCreateActivity.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2009 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.contacts;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.AsyncQueryHandler;
+import android.content.ComponentName;
+import android.content.ContentUris;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Contacts;
+import android.provider.Contacts.ContactMethods;
+import android.provider.Contacts.ContactMethodsColumns;
+import android.provider.Contacts.Intents;
+import android.provider.Contacts.People;
+import android.provider.Contacts.Phones;
+import android.util.Log;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Handle several edge cases around showing or possibly creating contacts in
+ * connected with a specific E-mail address or phone number. Will search based
+ * on incoming {@link Intent#getData()} as described by
+ * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+ * <ul>
+ * <li>If no matching contacts found, will prompt user with dialog to add to a
+ * contact, then will use {@link Intent#ACTION_INSERT_OR_EDIT} to let create new
+ * contact or edit new data into an existing one.
+ * <li>If one matching contact found, directly show {@link Intent#ACTION_VIEW}
+ * that specific contact.
+ * <li>If more than one matching found, show list of matching contacts using
+ * {@link Intent#ACTION_SEARCH}.
+ * </ul>
+ */
+public final class ShowOrCreateActivity extends Activity {
+    static final String TAG = "ShowOrCreateActivity";
+    static final boolean LOGD = false;
+
+    static final String[] PHONES_PROJECTION = new String[] {
+        Phones._ID,
+        Phones.PERSON_ID,
+    };
+
+    static final String[] CONTACT_METHODS_PROJECTION = new String[] {
+        ContactMethods._ID,
+        ContactMethods.PERSON_ID,
+    };
+    
+    static final String SCHEME_MAILTO = "mailto";
+    static final String SCHEME_TEL = "tel";
+    
+    static final int ID_INDEX = 0;
+    static final int PERSON_ID_INDEX = 1;
+
+    /**
+     * Query clause to filter {@link ContactMethods#CONTENT_URI} to only search
+     * {@link Contacts#KIND_EMAIL} or {@link Contacts#KIND_IM}.
+     */
+    static final String QUERY_KIND_EMAIL_OR_IM = ContactMethodsColumns.KIND +
+            " IN (" + Contacts.KIND_EMAIL + "," + Contacts.KIND_IM + ")";
+    
+    static final int QUERY_TOKEN = 42;
+    
+    private QueryHandler mQueryHandler;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        // Create handler if doesn't exist, otherwise cancel any running
+        if (mQueryHandler == null) {
+            mQueryHandler = new QueryHandler(this);
+        } else {
+            mQueryHandler.cancelOperation(QUERY_TOKEN);
+        }
+
+        final Intent intent = getIntent();
+        final Uri data = intent.getData();
+        
+        // Unpack scheme and target data from intent
+        String scheme = null;
+        String ssp = null;
+        if (data != null) {
+            scheme = data.getScheme();
+            ssp = data.getSchemeSpecificPart();
+        }
+        
+        // Build set of extras for possible use when creating contact
+        Bundle createExtras = new Bundle();
+        Bundle originalExtras = intent.getExtras();
+        if (originalExtras != null) {
+            createExtras.putAll(originalExtras);
+        }
+        mQueryHandler.setCreateExtras(createExtras);
+        
+        // Read possible extra with specific title
+        String createDescrip = intent.getStringExtra(Intents.EXTRA_CREATE_DESCRIPTION);
+        if (createDescrip == null) {
+            createDescrip = ssp;
+        }
+        mQueryHandler.setCreateDescription(createDescrip);
+        
+        // Allow caller to bypass dialog prompt
+        boolean createForce = intent.getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false);
+        mQueryHandler.setCreateForce(createForce);
+        
+        // Handle specific query request
+        if (SCHEME_MAILTO.equals(scheme)) {
+            createExtras.putString(Intents.Insert.EMAIL, ssp);
+            mQueryHandler.startQuery(QUERY_TOKEN, null,
+                    ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION,
+                    QUERY_KIND_EMAIL_OR_IM + " AND " + ContactMethods.DATA + "=?",
+                    new String[] { ssp }, null);
+            
+        } else if (SCHEME_TEL.equals(scheme)) {
+            createExtras.putString(Intents.Insert.PHONE, ssp);
+            mQueryHandler.startQuery(QUERY_TOKEN, null,
+                    Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, ssp),
+                    PHONES_PROJECTION, null, null, null);
+            
+        } else {
+            Log.w(TAG, "Invalid intent:" + getIntent());
+            finish();
+        }
+    }
+    
+    @Override
+    protected void onStop() {
+        super.onStop();
+        if (mQueryHandler != null) {
+            mQueryHandler.cancelOperation(QUERY_TOKEN);
+        }
+    }
+    
+    /**
+     * Listener for {@link DialogInterface} that launches a given {@link Intent}
+     * when clicked. When clicked, this also closes the parent using
+     * {@link Activity#finish()}.
+     */
+    private static class IntentClickListener implements DialogInterface.OnClickListener {
+        private Activity mParent;
+        private Intent mIntent;
+
+        /**
+         * @param parent {@link Activity} to use for launching target.
+         * @param intent Target {@link Intent} to launch when clicked.
+         */
+        public IntentClickListener(Activity parent, Intent intent) {
+            mParent = parent;
+            mIntent = intent;
+        }
+
+        public void onClick(DialogInterface dialog, int which) {
+            if (mIntent != null) {
+                mParent.startActivity(mIntent);
+            }
+            mParent.finish();
+        }
+    }
+
+    /**
+     * Handle asynchronous query to find matching contacts. When query finishes,
+     * will handle based on number of matching contacts found.
+     */
+    private static final class QueryHandler extends AsyncQueryHandler {
+        private final WeakReference<Activity> mActivity;
+        private Bundle mCreateExtras;
+        private String mCreateDescrip;
+        private boolean mCreateForce;
+
+        public QueryHandler(Activity activity) {
+            super(activity.getContentResolver());
+            mActivity = new WeakReference<Activity>(activity);
+        }
+        
+        public void setCreateExtras(Bundle createExtras) {
+            mCreateExtras = createExtras;
+        }
+        
+        public void setCreateDescription(String createDescrip) {
+            mCreateDescrip = createDescrip;
+        }
+        
+        public void setCreateForce(boolean createForce) {
+            mCreateForce = createForce;
+        }
+
+        @Override
+        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
+            Activity activity = mActivity.get();
+            if (activity == null) {
+                return;
+            }
+            
+            // Count contacts found by query
+            int count = 0;
+            long personId = -1;
+            if (cursor != null) {
+                try {
+                    count = cursor.getCount();
+                    if (count == 1 && cursor.moveToFirst()) {
+                        // Try reading ID if only one contact returned
+                        personId = cursor.getLong(PERSON_ID_INDEX);
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+            
+            if (LOGD) Log.d(TAG, "onQueryComplete count=" + count);
+            
+            if (count == 1) {
+                // If we only found one item, jump right to viewing it
+                Intent viewIntent = new Intent(Intent.ACTION_VIEW,
+                        ContentUris.withAppendedId(People.CONTENT_URI, personId));
+                activity.startActivity(viewIntent);
+                activity.finish();
+                
+            } else if (count > 1) {
+                // If more than one, show pick list
+                Intent listIntent = new Intent(Intent.ACTION_SEARCH);
+                listIntent.setComponent(new ComponentName(activity, ContactsListActivity.class));
+                listIntent.putExtras(mCreateExtras);
+                activity.startActivity(listIntent);
+                activity.finish();
+                
+            } else {
+                // No matching contacts found
+                if (mCreateForce) {
+                    // Forced to create new contact
+                    Intent createIntent = new Intent(Intent.ACTION_INSERT, People.CONTENT_URI);
+                    createIntent.putExtras(mCreateExtras);
+                    createIntent.setType(People.CONTENT_TYPE);
+                    
+                    activity.startActivity(createIntent);
+                    activity.finish();
+                    
+                } else {
+                    // Prompt user to insert or edit contact 
+                    Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                    createIntent.putExtras(mCreateExtras);
+                    createIntent.setType(People.CONTENT_ITEM_TYPE);
+                    
+                    CharSequence message = activity.getResources().getString(
+                            R.string.add_contact_dlg_message_fmt, mCreateDescrip);
+                    
+                    new AlertDialog.Builder(activity)
+                            .setTitle(R.string.add_contact_dlg_title)
+                            .setMessage(message)
+                            .setPositiveButton(android.R.string.ok,
+                                    new IntentClickListener(activity, createIntent))
+                            .setNegativeButton(android.R.string.cancel,
+                                    new IntentClickListener(activity, null))
+                            .show();
+                }
+            }
+        }
+    }
+}