am 2d95d497: (-s ours) am 1527532a: Import revised translations.  DO NOT MERGE

* commit '2d95d497647708a7ce3d725378bab2337587b5e6':
  Import revised translations.  DO NOT MERGE
diff --git a/res/layout-xlarge/raw_contact_editor_view.xml b/res/layout-xlarge/raw_contact_editor_view.xml
index 044a5ea..02c0314 100644
--- a/res/layout-xlarge/raw_contact_editor_view.xml
+++ b/res/layout-xlarge/raw_contact_editor_view.xml
@@ -67,7 +67,7 @@
                     android:layout_height="1px"
                     android:background="@color/contact_detail_header_divider_color" />
 
-                <com.android.contacts.editor.TextFieldsEditorView
+                <com.android.contacts.editor.StructuredNameEditorView
                     android:id="@+id/edit_name"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -77,13 +77,19 @@
                     android:layout_marginTop="6dip"
                     android:layout_marginBottom="4dip" />
 
-                <ViewStub
-                    android:id="@+id/aggregation_suggestion_stub"
-                    android:inflatedId="@+id/aggregation_suggestion"
-                    android:layout="@layout/aggregation_suggestions"
+                <FrameLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:visibility="visible" />
+                    android:layout_marginLeft="52dip"
+                    android:layout_marginRight="48dip">
+                    <ViewStub
+                        android:id="@+id/aggregation_suggestion_stub"
+                        android:inflatedId="@+id/aggregation_suggestion"
+                        android:layout="@layout/aggregation_suggestions"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:visibility="visible" />
+                </FrameLayout>
             </LinearLayout>
         </com.android.contacts.widget.InterpolatingLayout>
 
diff --git a/res/layout/list_separator.xml b/res/layout/list_separator.xml
index 1257935..9f562cf 100644
--- a/res/layout/list_separator.xml
+++ b/res/layout/list_separator.xml
@@ -17,6 +17,5 @@
 <!-- Layout used for list separators. -->
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     style="?android:attr/listSeparatorTextViewStyle"
-    android:textColor="@*android:color/dim_foreground_dark"
     android:gravity="left|center_vertical"
 />
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml
index 62d904f..022d0b4 100644
--- a/res/layout/raw_contact_editor_view.xml
+++ b/res/layout/raw_contact_editor_view.xml
@@ -96,7 +96,7 @@
 
         </FrameLayout>
 
-        <com.android.contacts.editor.TextFieldsEditorView
+        <com.android.contacts.editor.StructuredNameEditorView
             android:id="@+id/edit_name"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
diff --git a/res/layout/social_widget.xml b/res/layout/social_widget.xml
index fb02bb7..ddcd995 100644
--- a/res/layout/social_widget.xml
+++ b/res/layout/social_widget.xml
@@ -14,75 +14,78 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="horizontal"
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="96dip"
     android:background="#00000000"
-    android:paddingLeft="12dip"
     android:paddingTop="1dip"
-    android:paddingRight="12dip"
-    android:paddingBottom="20dip"
->
-    <FrameLayout
-        android:layout_width="70dip"
-        android:layout_height="70dip"
-        android:layout_marginTop="1dip"
-        android:layout_marginLeft="1dip"
-        >
-        <ImageView
-            android:id="@+id/image"
-            android:padding="4dip"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"/>
-        <ImageButton
-            android:id="@+id/border"
-            android:background="@drawable/frame_thumbnail_contact_widget_holo"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-    </FrameLayout>
-    <RelativeLayout
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:background="@drawable/bg_status_contact_widget"
-        android:layout_marginTop="4dip"
-        android:layout_marginRight="4dip"
-        android:layout_marginBottom="7dip"
-        android:layout_marginLeft="0dip"
-        android:paddingLeft="47dip"
-        android:paddingRight="8dip"
-        android:paddingTop="3dip"
-        android:paddingBottom="6dip">
-
-        <TextView
-            android:id="@+id/name_and_snippet"
-            android:layout_width="match_parent"
+    android:paddingBottom="20dip">
+    <LinearLayout
+        android:id="@+id/widget_container"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <FrameLayout
+            android:layout_width="70dip"
+            android:layout_height="70dip"
+            android:layout_marginTop="1dip"
+            android:layout_marginLeft="13dip">
+            <ImageView
+                android:id="@+id/image"
+                android:padding="4dip"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+            <ImageButton
+                android:id="@+id/border"
+                android:background="@drawable/frame_thumbnail_contact_widget_holo"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        </FrameLayout>
+        <RelativeLayout
+            android:id="@+id/name_and_snippet_container"
+            android:layout_width="0dip"
             android:layout_height="match_parent"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentTop="true"
-            android:maxLines="3"
-            android:lineSpacingExtra="2sp"
-            android:textColor="#FFFFFFFF"
-            android:textSize="@dimen/widget_text_size_snippet" />
+            android:layout_weight="1"
+            android:background="@drawable/bg_status_contact_widget"
+            android:layout_marginTop="4dip"
+            android:layout_marginRight="16dip"
+            android:layout_marginBottom="7dip"
+            android:layout_marginLeft="0dip"
+            android:paddingLeft="47dip"
+            android:paddingRight="8dip"
+            android:paddingTop="3dip"
+            android:paddingBottom="6dip">
 
-        <TextView
-            android:id="@+id/name"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:gravity="center"
-            android:textColor="#FFFFFFFF"
-            android:textSize="@dimen/widget_text_size_name" />
+            <TextView
+                android:id="@+id/name_and_snippet"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentTop="true"
+                android:maxLines="3"
+                android:lineSpacingExtra="2sp"
+                android:textColor="#FFFFFFFF"
+                android:textSize="@dimen/widget_text_size_snippet" />
 
-        <TextView
-            android:id="@+id/status_date"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentBottom="true"
-            android:background="@drawable/statusbox_attribute_holo"
-            android:textSize="13sp"
-            android:textColor="#FF444444"
-            android:visibility="gone" />
-    </RelativeLayout>
-</LinearLayout>
+            <TextView
+                android:id="@+id/name"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center"
+                android:textColor="#FFFFFFFF"
+                android:textSize="@dimen/widget_text_size_name" />
+
+            <TextView
+                android:id="@+id/status_date"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_alignParentBottom="true"
+                android:background="@drawable/statusbox_attribute_holo"
+                android:textSize="13sp"
+                android:textColor="#FF444444"
+                android:visibility="gone" />
+        </RelativeLayout>
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 0519562..21c1f05 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"صورة جهة الاتصال"</string>
     <string name="description_minus_button" msgid="387136707700230172">"علامة الطرح"</string>
     <string name="description_plus_button" msgid="515164827856229880">"علامة زائد"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"وحدة تخزين USB غير متوفرة"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"وحدة التخزين غير متوفرة."</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"لا بطاقة SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"لم يتم اكتشاف وحدة تخزين USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"لم يتم اكتشاف أية وحدة تخزين."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"لم يتم اكتشاف بطاقة SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"البحث عن vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"استيراد من بطاقة SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"استيراد من وحدة تخزين USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"استيراد من وحدة التخزين"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"استيراد من بطاقة SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"تصدير إلى وحدة تخزين USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"تصدير إلى وحدة التخزين"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"تصدير إلى بطاقة SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"مشاركة جهات الاتصال المرئية"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"استيراد ملف vCard واحد"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"استيراد ملفات vCard متعددة"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"استيراد جميع ملفات vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"البحث عن بيانات vCard في وحدة تخزين USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"جارٍ البحث عن بيانات vCard في وحدة التخزين."</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"البحث عن بيانات vCard على بطاقة SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"أخفق فحص وحدة تخزين USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"أخفق فحص وحدة التخزين."</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"أخفق المسح الضوئي لبطاقة SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"أخفق فحص وحدة تخزين USB (السبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"أخفق فحص وحدة التخزين (السبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"أخفق المسح الضوئي لبطاقة SD (السبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"خطأ I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"الذاكرة لا تكفي (ربما يكون الملف كبير جدًا)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"أخفق تحليل vCard بسبب غير متوقع"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"التنسيق غير معتمد."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"أخفق استيراد vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"لم يتم العثور على ملف vCard على وحدة تخزين USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"لم يتم العثور على أي ملف vCard في وحدة التخزين."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"لم يتم العثور على ملف vCard على بطاقة SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"أخفق جمع معلومات وصفية عن ملفات vCard المحددة"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"أخفق استيراد ملف أو أكثر (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"أخفق تصدير بيانات جهة الاتصال"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"أخفق تصدير بيانات جهة الاتصال."\n"سبب الإخفاق: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"ليس هناك جهة اتصال قابلة للتصدير"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"هناك ملفات vCard كثيرة جدًا في وحدة تخزين USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"هناك عدد أكبر مما يجب من ملفات vCard في وحدة التخزين."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"هناك ملفات vCard كثيرة جدًا على بطاقة SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"اسم الملف المطلوب طويل جدًا (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"تم الانتهاء من تصدير <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index b07a17f..e069041 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"снимка на контакта"</string>
     <string name="description_minus_button" msgid="387136707700230172">"минус"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Не е налице USB хранилище"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Няма хранилище"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Няма SD карта"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Няма USB хранилище"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Не бе открито хранилище"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Не е открита SD карта"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Търсене на vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Импортиране от SIM карта"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Импорт. от USB хранилище"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Импорт. от хранилището"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Импортиране от SD карта"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Експорт. в USB хранилище"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Експорт. в хранилището"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Експортиране в SD карта"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Споделяне на видимите контакти"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Импортиране на един vCard файл"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Импортиране на няколко vCard файла"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Импортиране на всички vCard файлове"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Търсят се данни за vCard в USB хранилището"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Търсят се данни за vCard в хранилището"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Търсене на vCard данни в SD картата"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Сканирането на USB хранилището не бе успешно"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Сканирането на хранилището не бе успешно"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Неуспешно сканиране на SD карта"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Сканирането на USB хранилището не бе успешно (Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Сканирането на хранилището не бе успешно (Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Неуспешно сканиране на SD карта ( Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O грешка"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Няма достатъчно памет (файлът може да е твърде голям)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Неуспешен анализ на vCard по неизвестна причина"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Форматът не се поддържа."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Импортирането на vCard не бе успешно"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"В USB устройството за съхранение не бе намерен vCard файл"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"В хранилището не бе намерен vCard файл"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"На SD картата не бе намерен vCard файл"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Събирането на метаинформация от дадените vCard файлове не бе успешно."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Неуспешно импортиране на един или повече файлове (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Неуспешно експортиране на данни за контакти"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Неуспешно експортиране на данни за контакти."\n"Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Няма контакт за експортиране"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"В USB хранилището има твърде много vCard файлове"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Твърде много vCard файлове в хранилището"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Твърде много vCard файлове на SD картата"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Изисканото име на файла е твърде дълго („<xliff:g id="FILENAME">%s</xliff:g>“)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Експортирането на <xliff:g id="FILENAME">%s</xliff:g> завърши"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4b3940e..89c4d63 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto del contacte"</string>
     <string name="description_minus_button" msgid="387136707700230172">"menys"</string>
     <string name="description_plus_button" msgid="515164827856229880">"més"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Emmag. USB no disp."</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Emmagatzematge no dispon."</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No hi ha cap targeta SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Cap emmagatzematge USB detectat"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"No s\'ha detectat cap emmagatzematge"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"No s\'ha detectat cap targeta SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"S\'està cercant la vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importa des de la targeta SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importa des de l\'emmagatzematge USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importa de l\'emmagatzematge"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importa des de la targeta SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exporta a l\'emmagatzematge USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exporta a emmagatzematge"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exporta a la targeta SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Comparteix els contactes visibles"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importa un fitxer vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importa diversos fitxers vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importa tots els fitxers vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"S\'estan cercant dades de vCard a l\'emmagatzematge USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"S\'estan cercant dades de vCard a l\'emmagatzematge"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"S\'estan cercant les dades de vCard a la targeta SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"S\'ha produït un error en escanejar l\'emmagatzematge USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"S\'ha produït un error en examinar l\'emmagatzematge"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"No s\'ha pogut explorar la targeta SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"S\'ha produït un error en escanejar l\'emmagatzematge USB (motiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"S\'ha produït un error en examinar l\'emmagatzematge (Motiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"No s\'ha pogut explorar la targeta SD (motiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Error d\'E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"La memòria és insuficient (és possible que el fitxer sigui massa gran)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"No s\'ha pogut analitzar la vCard per un motiu inesperat"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"No s\'admet aquest format."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"No s\'ha pogut importar la vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"No s\'ha trobat cap fitxer vCard a l\'emmagatzematge USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"No s\'ha trobat cap fitxer vCard a l\'emmagatzematge"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"No s\'ha trobat cap fitxer vCard a la targeta SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"S\'ha produït un error en aplegar metainformació dels fitxers vCard especificats."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"No s\'ha pogut importar un o més fitxers (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"No s\'han pogut exportar les dades de contacte"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"No s\'han pogut exportar les dades de contacte."\n"Motiu de l\'error: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"No hi ha cap contacte que es pugui exportar"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Massa fitxers vCard a l\'emmagatzematge USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Hi ha massa fitxers vCard a l\'emmagatzematge"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Hi ha massa fitxers vCard a la targeta SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"El nom de fitxer obligatori és massa llarg (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Exportació de <xliff:g id="FILENAME">%s</xliff:g> finalitzada"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 18ebfd5..77b7c8a 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografie kontaktu"</string>
     <string name="description_minus_button" msgid="387136707700230172">"mínus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Úložiště USB nedostupné"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Úložiště je nedostupné"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Žádná karta SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Úložiště USB nenalezeno"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nebylo nalezeno žádné úložiště"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nebyla zjištěna žádná karta SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Vyhledávání karty vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importovat z karty SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importovat z úložiště USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importovat z úložiště"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importovat z karty SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Export do úložiště USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportovat do úložiště"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportovat na kartu SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Sdílet viditelné kontakty"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importovat jeden soubor vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importovat několik souborů vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importovat všechny soubory vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Vyhledávání dat karty vCard v úložišti USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Vyhledávání dat karty vCard v úložišti"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Vyhledávání dat karty vCard na kartě SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Vyhledávání v úložišti USB se nezdařilo"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Vyhledávání v úložišti se nezdařilo"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Vyhledávání na kartě SD se nezdařilo"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Vyhledávání v úložišti USB se nezdařilo (Důvod: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Vyhledávání v úložišti se nezdařilo (Důvod: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Vyhledávání na kartě SD se nezdařilo. (Důvod: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Chyba V/V"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Není k dispozici dostatek paměti (soubor může být příliš velký)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Analýza karty vCard se z neznámého důvodu nezdařila."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formát není podporován."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Import karty vCard se nezdařil"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"V úložišti USB nebyl nalezen žádný soubor vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"V úložišti nebyl nalezen žádný soubor vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Na kartě SD nebyl nalezen žádný soubor vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Shromáždění metainformací zadaných souborů vCard se nezdařilo."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Import jednoho nebo více souborů se nezdařil (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Export dat kontaktů se nezdařil"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Export dat kontaktů se nezdařil."\n"Příčina chyby: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Žádný kontakt nelze exportovat"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"V úložišti USB je příliš mnoho souborů vCard"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"V úložišti je příliš mnoho souborů vCard."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Na kartě SD je příliš mnoho souborů vCard"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Požadovaný název souboru (<xliff:g id="FILENAME">%s</xliff:g>) je příliš dlouhý"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Export souboru <xliff:g id="FILENAME">%s</xliff:g> byl dokončen."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 7cc317c..a8a0930 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonfoto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-lager utilgængeligt"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lager ikke tilgængeligt"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Der er intet SD-kort"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Intet USB-lager blev fundet"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Intet lager fundet"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Der blev ikke fundet noget SD-kort"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Søger efter vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importer fra SIM-kort"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importer fra USB-lager"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importer fra lager"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importer fra SD-kort"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Eksporter til USB-lager"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Eksporter til lager"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Eksporter til SD-kort"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontaktpersoner"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importer en VCard-fil"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer flere VCard-filer"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle VCard-filer"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Søger efter vCard-data i USB-lager"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Søger efter vCard-data i lager"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Søger efter vCard-kort på SD-kortet"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scanningen af USB-lager mislykkedes"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scanning af lageret mislykkedes"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Scanningen af SD-kortet mislykkedes"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scanningen af USB-lager mislykkedes (årsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scanning af lager mislykkedes (Årsag: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Scanningen af SD-kortet mislykkedes: (Årsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O-fejl"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Der er ikke nok hukommelse (filen er muligvis for stor)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"vCard kunne ikke parses pga. en uventet årsag"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formatet understøttes ikke."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard kunne ikke importeres"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Der blev ikke fundet nogen vCard-fil i USB-lageret"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Der blev ikke fundet nogen vCard-fil i lageret"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Der blev ikke fundet nogen vCard-fil på SD-kortet"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Metaoplysninger om angivne vCard-filer kunne ikke hentes."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"En eller flere filer blev ikke importeret (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Eksport af kontaktdata mislykkedes"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Eksport af kontaktpersondata mislykkedes."\n"Årsag til fejl: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Der er ingen kontakter, der kan eksporteres"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Der er for mange vCard-filer i USB-lager"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Der er for mange vCard-filer i lageret"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Der er for mange vCard-data på SD-kortet"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Det krævede filnavn er for langt (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Eksport af <xliff:g id="FILENAME">%s</xliff:g> afsluttet"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 9bedaaf..7ea17c7 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"Kontaktbild"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-Speicher nicht verfügbar"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Kein Speicher verfügbar"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Keine SD-Karte"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Keinen USB-Speicher gefunden"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Kein Speicher gefunden"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Keine SD-Karte gefunden"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCard wird gesucht."</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Von SIM-Karte importieren"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Aus USB-Speicher import."</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Aus Speicher importieren"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Von SD-Karte importieren"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"In USB-Speicher exportieren"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"In Speicher exportieren"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Auf SD-Karte exportieren"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Sichtbare Kontakte weiterleiten"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Eine VCard-Datei importieren"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Mehrere VCard-Dateien importieren"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Alle VCard-Dateien importieren"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Suche nach vCard-Daten in USB-Speicher"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Suche nach vCard-Daten im Speicher..."</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Suche nach einer vCard-Information auf der SD-Karte"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scannen des USB-Speichers fehlgeschlagen"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scannen des Speichers fehlgeschlagen"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Fehler beim Lesen der SD-Karte"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scannen des USB-Speichers fehlgeschlagen. Grund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scannen des USB-Speichers fehlgeschlagen. Grund: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Fehler beim Lesen der SD-Karte. Grund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"E/A-Fehler"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Zu wenig Speicherplatz (Datei ist eventuell zu groß)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Die vCard konnte aus einem unbekannten Grund nicht geparst werden."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Das Format wird nicht unterstützt."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard kann nicht importiert werden."</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Im USB-Speicher wurde keine vCard-Datei gefunden."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Im Speicher wurde keine vCard-Datei gefunden."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Auf der SD-Karte wurde keine vCard-Datei gefunden."</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Metainformationen konnten nicht von den angegebenen vCards abgerufen werden."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Fehler beim Import einer oder mehrerer Dateien (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Fehler beim Exportieren von Kontaktdaten"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Fehler beim Exportieren der Kontaktdaten."\n"Fehlerursache: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Es ist kein exportierbarer Kontakt vorhanden"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Zu viele vCard-Dateien im USB-Speicher"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Zu viele vCard-Dateien im Speicher"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Zu viele vCard-Dateien auf der SD-Karte"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Erforderlicher Dateiname ist zu lang (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Export von <xliff:g id="FILENAME">%s</xliff:g> abgeschlossen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index a54dd00..eb1293c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"φωτογραφία επαφής"</string>
     <string name="description_minus_button" msgid="387136707700230172">"μείον"</string>
     <string name="description_plus_button" msgid="515164827856229880">"συν"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Διαθέσ. αποθηκ. χώρος USB"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Μη διαθέσιμος χώρος αποθ."</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Δεν υπάρχει κάρτα SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Χωρίς εντοπ. αποθ. χώρου USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Δεν εντοπίστηκε χώρος αποθ."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Δεν ανιχνεύθηκε κάρτα SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Αναζήτηση κάρτας vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Εισαγωγή από κάρτα SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Εισ. από αποθ. χώρο USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Εισαγωγή από τον χώρο αποθ."</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Εισαγωγή από κάρτα SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Εξαγ. σε αποθ. χώρο USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Εξαγωγή στον χώρο αποθ."</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Εξαγωγή σε κάρτα SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Κοινή χρήση ορατών επαφών"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Εισαγωγή ενός αρχείου VCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Εισαγωγή πολλαπλών αρχείων vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Εισαγωγή όλων των αρχείων vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Αναζήτηση δεδομένων vCard στον αποθηκευτικό χώρο USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Αναζήτηση δεδομένων vCard στον χώρο αποθήκευσης"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Αναζήτηση για δεδομένα vCard στην κάρτα SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Η σάρωση του αποθηκευτικού χώρου USB απέτυχε"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Η σάρωση του χώρου αποθήκευσης απέτυχε"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Η σάρωση της κάρτας SD απέτυχε"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Η σάρωση του αποθηκευτικού χώρου USB απέτυχε (Αιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Η σάρωση του αποθηκευτικού χώρου απέτυχε (Αιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Η σάρωση της κάρτας SD απέτυχε (Αιτία:\"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Σφάλμα I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Η μνήμη είναι ανεπαρκής (το αρχείο μπορεί να είναι πολύ μεγάλο)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Η ανάλυση της κάρτας vCard απέτυχε εξαιτίας μη αναμενόμενου συμβάντος"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Η μορφή δεν υποστηρίζεται."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Αποτυχία εισαγωγής vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Δεν βρέθηκαν αρχεία vCard στον αποθηκευτικό σας χώρο USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Δεν βρέθηκαν αρχεία vCard στον χώρο αποθήκευσης"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Δεν βρέθηκε αρχείο VCard στην κάρτα SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Η συλλογή μετα-πληροφοριών του δεδομένου αρχείου(ων) vCard απέτυχε."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Η εισαγωγή ενός ή περισσοτέρων αρχείων απέτυχε (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Αποτυχία εξαγωγής δεδομένων επαφής"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Αποτυχία εξαγωγής δεδομένων επαφής."\n"Αιτία αποτυχίας: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Υπερβολικά μεγάλος όγκος αρχείων VCard στον αποθηκευτικό χώρο USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Υπερβολικά πολλά αρχεία vCard στον χώρο αποθήκευσης"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Υπερβολικά μεγάλος όγκος αρχείων VCard στην κάρτα SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Το απαιτούμενο όνομα αρχείου είναι υπερβολικά μεγάλο (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Η εξαγωγή ολοκληρώθηκε<xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index a6a58cd..523703e 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB storage unavailable"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Storage unavailable"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No SD card"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"No USB storage detected"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"No storage detected"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"No SD card detected"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Searching for vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Import from SIM card"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import from USB storage"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Import from storage"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Import from SD card"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Export to USB storage"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Export to storage"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Export to SD card"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Share visible contacts"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Import one vCard file"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Import multiple vCard files"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Import all vCard files"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Searching for vCard data in USB storage"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Searching for vCard data in storage"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Searching for vCard data on SD card"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scanning USB storage failed"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scanning storage failed"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Scanning SD card failed"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scanning USB storage failed (Reason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scanning USB storage failed (Reason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Scanning SD card failed (Reason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O Error"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memory is insufficient (the file may be too large)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Failed to parse vCard for unexpected reason"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"The format is not supported."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Failed to import vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"No vCard file found in the USB storage"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"No vCard file found in the storage"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"No vCard file found on the SD card"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Failed to collect meta information of given vCard file(s)."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"One or more files failed to be imported (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Failed to export contact data"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Failed to export contact data."\n"Reason for failure: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"There is no exportable contact"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Too many vCard files in the USB storage"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Too many vCard files in the storage"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Too many vCard files on the SD card"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Required filename is too long (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-es-rUS-xlarge/strings.xml b/res/values-es-rUS-xlarge/strings.xml
new file mode 100644
index 0000000..7586572
--- /dev/null
+++ b/res/values-es-rUS-xlarge/strings.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- XL -->
+    <string name="sharedUserLabel" msgid="6733062813475510491">"Aplicaciones del núcleo de Androide"</string>
+    <!-- XL -->
+    <string name="starredList" msgid="3934019851105368622">"Destacado"</string>
+    <!-- XL -->
+    <string name="deleteConfirmation_title" msgid="3423581820353128517">"Eliminar"</string>
+    <!-- XL -->
+    <string name="multipleContactDeleteConfirmation" msgid="3714172882797667008">"Eliminar este contacto suprimirá la información de múltiples cuentas."</string>
+    <!-- XL -->
+    <string name="menu_done" msgid="7978822668103372384">"Listo"</string>
+    <!-- XL -->
+    <string name="label_sip_address" msgid="9149168469234262919">"llamada por Internet"</string>
+    <!-- XL -->
+    <string name="emailLabelsGroup" msgid="4513376160142847138">"Dirección de correo electrónico"</string>
+    <!-- XL -->
+    <string name="photoPickerNotFoundText" product="tablet" msgid="1982682484233004829">"No hay imágenes disponibles en la tableta."</string>
+    <string name="photoPickerNotFoundText" product="default" msgid="5390095454333523517">"No hay imágenes disponibles en el teléfono."</string>
+    <!-- XL -->
+    <string name="showFilterPhones" msgid="6459420182674979308">"Solo contactos con teléfonos"</string>
+    <!-- XL -->
+    <string name="liveFolderFavorites" msgid="1365760922135657530">"Contactos destacados"</string>
+    <!-- XL -->
+    <string name="voicemail" msgid="7943319575889141725">"Buzón de voz"</string>
+    <!-- XL -->
+    <string name="dialerDialpadHintText" msgid="2997269795287604385">"Marcar para agregar llamada"</string>
+    <!-- XL -->
+    <string name="noContactsHelpTextWithSync" product="tablet" msgid="6812695978022975523">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en la tableta "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos de tu tarjeta SIM o SD"\n</li></string>
+    <string name="noContactsHelpTextWithSync" product="default" msgid="7465551569096051886">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos de tu tarjeta SIM o SD"\n</li></string>
+    <!-- XL -->
+    <string name="noContactsNoSimHelpText" product="tablet" msgid="3674879008105643715">"No tienes ningún contacto para mostrar."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar o configurar una cuenta con contactos que puedes sincronizar en la tableta"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
+    <string name="noContactsNoSimHelpText" product="default" msgid="7334546831384152525">"No tienes ningún contacto para mostrar."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar o configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
+    <!-- XL -->
+    <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="760441281982248124">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en la tableta"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
+    <string name="noContactsNoSimHelpTextWithSync" product="default" msgid="3577762280641323609">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
+    <!-- XL -->
+    <string name="noFavoritesHelpText" msgid="5044577161784268410">"No tienes ningún favorito."\n\n"Para agregar un contacto a tu lista de favoritos:"\n\n"        "<li>"toca la pestaña "<b>"Contactos"</b>" "\n</li>" "\n<li>"toca el contacto que deseas agregar a tus favoritos"\n</li>" "\n<li>"toca la estrella situada junto al nombre del contacto"\n</li></string>
+    <!-- XL -->
+    <string name="liveFolder_favorites_label" msgid="1643628386784288191">"Destacado"</string>
+    <!-- XL -->
+    <string name="dialer_addAnotherCall" msgid="8701417753662332966">"Agregar llamada"</string>
+    <!-- XL -->
+    <string name="callDetailTitle" msgid="3821868997465810986">"Detalles de la llamada"</string>
+    <!-- XL -->
+    <string name="callDetailsDurationFormat" msgid="4301453268710461198">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- XL -->
+    <string name="description_image_button_star" msgid="7658091418708665690">"estrella"</string>
+    <!-- XL -->
+    <string name="vcard_import_will_start_message_with_default_name" msgid="1059778205923280983">"El archivo se importará en unos instantes."</string>
+    <!-- XL -->
+    <string name="composer_has_no_exportable_contact" product="tablet" msgid="1102663976836995021">"No hay ningún contacto exportable. Si en realidad tienes contactos en tu tableta, es posible que algún proveedor de datos prohíba la exportación de todos los contactos."</string>
+    <string name="composer_has_no_exportable_contact" product="default" msgid="5486889176347496255">"No hay ningún contacto exportable. Si realmente tienes contactos en tu teléfono, es posible que algún proveedor de datos prohíba la exportación de todos los contactos."</string>
+    <!-- XL -->
+    <string name="make_primary" msgid="7433688640784481720">"Recuerda esta opción."</string>
+    <!-- XL -->
+    <string name="type_short_mobile" msgid="3506454482923171838">"L"</string>
+    <!-- XL -->
+    <string name="type_short_work" msgid="978682694336985355">"W"</string>
+    <!-- XL -->
+    <string name="type_short_other" msgid="496310126170531691">"O"</string>
+    <!-- XL -->
+    <string name="account_phone" product="tablet" msgid="5027478300767992017">"Sólo en tableta, sin sincronizar"</string>
+    <string name="account_phone" product="default" msgid="764379983385696833">"Sólo telefónicamente, no sincronizado"</string>
+    <!-- XL -->
+    <string name="call_home" msgid="3942399424982513961">"Llamar al hogar"</string>
+    <!-- XL -->
+    <string name="sms_assistant" msgid="2373428597266647440">"Texto <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+    <!-- XL -->
+    <string name="email_other" msgid="3400634654824783097">"Dirección de correo electrónico"</string>
+    <!-- XL -->
+    <string name="email" msgid="5824826790863445976">"Dirección de correo electrónico"</string>
+    <!-- XL -->
+    <string name="name_family" msgid="5612873815201424291">"Apellido"</string>
+    <!-- XL -->
+    <string name="display_options_sort_by_family_name" msgid="2371511783675506143">"Apellido"</string>
+    <!-- XL -->
+    <string name="take_photo" msgid="3550600054705371225">"Tomar una foto"</string>
+    <!-- XL -->
+    <string name="upgrade_out_of_memory" msgid="7007329580979074374">"La actualización de los contactos está en proceso. "\n\n"El proceso de actualización requiere de aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de almacenamiento interno en el teléfono."\n\n" Elige una de las siguientes opciones:"</string>
+    <!-- XL -->
+    <string name="menu_select_all" msgid="6071138984118728586">"Seleccionar todos"</string>
+    <!-- XL -->
+    <string name="activity_title_settings" msgid="4768746131605303318">"Configuración"</string>
+    <!-- XL -->
+    <string name="menu_settings" msgid="1215559971114481866">"Configuración"</string>
+    <!-- XL -->
+    <string name="non_phone_caption" msgid="8339220263670193331">"Número de teléfono"</string>
+    <!-- XL -->
+    <string name="delete_group_dialog_message" msgid="6739622355328278915">"¿Estás seguro de que deseas eliminar el grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Los contactos no se eliminarán)."</string>
+    <!-- XL -->
+    <string name="fail_reason_not_supported" msgid="2869697177825996431">"El formato no está admitido."</string>
+    <!-- XL -->
+    <string name="vcard_import_failed" msgid="5030663873475156120">"Falló la importación de la vCard"</string>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b0d6479..748d4ca 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"negativo"</string>
     <string name="description_plus_button" msgid="515164827856229880">"más"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Almacenamiento USB no disponible"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"No se dispone de espacio de almacenamiento."</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No hay tarjeta SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"No se detectó el almacenamiento USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"No se detectó almacenamiento alguno."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"No se ha detectado ninguna tarjeta SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importar de la tarjeta SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importar desde almacenamiento USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importar desde el almacenamiento"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importar de la tarjeta SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportar a almacenamiento USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportar al almacenamiento"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportar a la tarjeta SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importar un archivo de vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar múltiples archivos de vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Buscando datos de vCard en el almacenamiento USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Buscando datos de vCard en el almacenamiento"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Buscando datos de vCard en la tarjeta SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"No se pudo explorar el almacenamiento USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"No se pudo explorar el almacenamiento."</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"No se ha podido explorar la tarjeta SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"No se pudo explorar el almacenamiento USB (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"No se pudo explorar el almacenamiento (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"No se ha podido explorar la tarjeta SD. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Error de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memoria insuficiente (es probable que el archivo sea muy grande)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"No se ha podido analizar vCard debido a un motivo inesperado"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"El formato no es compatible."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"No se pudo importar vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"No se encontró ningún archivo vCard en el almacenamiento USB."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"No se encontró ningún archivo de vCard en el almacenamiento."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"No se ha encontrado un archivo de vCard en la Tarjeta SD."</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Error al recopilar metadatos de un archivo específico de la vCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"No se pudieron importar uno o más archivos (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"No se han podido exportar los datos de contacto"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"No se han podido exportar los datos de contacto."\n"Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"No hay ningún contacto exportable"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Demasiados archivos de vCard en el almacenamiento USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Demasiados archivos de vCard en el almacenamiento"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Demasiados archivos de vCard en la tarjeta SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"El nombre de archivo requerido es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Finalizó la exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 08e8a62..ce05ca4 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -86,7 +86,7 @@
     <item msgid="8287841928119937597">"Organización"</item>
     <item msgid="7196592230748086755">"Nota"</item>
   </string-array>
-    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay ninguna imagen disponible en el tablet."</string>
+    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay ninguna imagen disponible en la tableta."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hay ninguna imagen disponible en el teléfono."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre de etiqueta personalizada"</string>
@@ -161,13 +161,13 @@
     <string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
     <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."</string>
     <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"No tienes ningún contacto que mostrar."</string>
-    <string name="noContactsHelpText" product="tablet" msgid="6450346791169710787">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar con el tablet,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
+    <string name="noContactsHelpText" product="tablet" msgid="6450346791169710787">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar con la tableta,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
     <string name="noContactsHelpText" product="default" msgid="7633826236417884130">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
-    <string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización puede tardar."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar con el tablet,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
+    <string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización puede tardar."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar con la tableta,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
     <string name="noContactsHelpTextWithSync" product="default" msgid="3017521127042216243">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización puede tardar."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SIM o SD"\n</li>"."</string>
-    <string name="noContactsNoSimHelpText" product="tablet" msgid="6031363021287849874">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar con el tablet,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
+    <string name="noContactsNoSimHelpText" product="tablet" msgid="6031363021287849874">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar con la tableta,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
     <string name="noContactsNoSimHelpText" product="default" msgid="467658807711582876">"No tienes contactos."\n\n"Para añadir uno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
-    <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización de contactos puede tardar unos minutos."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar con el tablet,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
+    <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización de contactos puede tardar unos minutos."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar con la tableta,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
     <string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización puede tardar."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
     <string name="noFavoritesHelpText" msgid="3744655776704833277">"No tienes favoritos."\n\n"Para añadir un contacto a tu lista de favoritos, sigue estos pasos:"\n\n"        "<li>"Toca en la pestaña "<b>"Contactos"</b>"."\n</li>" "\n<li>"Selecciona el contacto que quieras añadir a tus favoritos."\n</li>" "\n<li>"Toca la estrella situada junto al nombre del contacto."\n</li></string>
     <string name="liveFolder_all_label" msgid="5961411940473276616">"Todos los contactos"</string>
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
     <string name="description_plus_button" msgid="515164827856229880">"más"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB no disponible"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Almacenamiento no disponible"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Falta la tarjeta SD."</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"USB no detectado"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Sin almacenamiento detectado"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"No se ha detectado ninguna tarjeta SD."</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importar contactos desde la tarjeta SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importar de USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importar de almacenamiento"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importar contactos desde la tarjeta SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportar a USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportar a almacenamiento"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportar contactos a la tarjeta SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importar un archivo de vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar varios archivos de vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Buscando datos de vCard en USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Buscando datos de vCard en almacenamiento"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Buscando datos de vCard en la tarjeta SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Error al analizar USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Error al analizar almacenamiento"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Error al buscar en la tarjeta SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Error al analizar USB (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Error al analizar almacenamiento (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Error al buscar en la tarjeta SD (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Error de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memoria insuficiente (el archivo puede ser demasiado grande)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"No se ha podido analizar el archivo de vCard debido a un error inesperado."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"No se admite este formato."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Se ha producido un error al importar vCard."</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"No se ha encontrado el archivo de vCard en el almacenamiento USB."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"No se han encontrado archivos de vCard en el almacenamiento."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"No se ha encontrado ningún archivo de vCard en la tarjeta SD."</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Error al recopilar metainformación de los archivos vCard"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"No ha sido posible importar uno o varios archivos (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Error al exportar los datos del contacto"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Se ha producido un error al exportar los datos del contacto."\n"Motivo del error: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"No hay contactos que exportar."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Hay demasiados archivos de vCard en el almacenamiento USB."</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Hay demasiados archivos de vCard en el almacenamiento."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Hay demasiados archivos de vCard en la tarjeta SD."</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"El nombre de archivo necesario es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Exportación de <xliff:g id="FILENAME">%s</xliff:g> finalizada"</string>
@@ -269,7 +269,7 @@
     <string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"No se ha podido inicializar el exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Se ha producido un error durante la exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Error al obtener información de la base de datos"</string>
-    <string name="composer_has_no_exportable_contact" product="tablet" msgid="5161491059051198932">"No hay contactos que exportar. Si ya tienes contactos en el tablet, es posible que algunos proveedores de datos no permitan que se exporten todos los contactos a otros dispositivos."</string>
+    <string name="composer_has_no_exportable_contact" product="tablet" msgid="5161491059051198932">"No hay contactos que exportar. Si ya tienes contactos en la tableta, es posible que algunos proveedores de datos no permitan que se exporten todos los contactos a otros dispositivos."</string>
     <string name="composer_has_no_exportable_contact" product="default" msgid="322344221706924358">"No hay contactos que exportar. Si ya tienes contactos en tu teléfono, es posible que algunos proveedores de datos no permitan que se exporten todos los contactos a otros dispositivos."</string>
     <string name="composer_not_initialized" msgid="8041534450748388843">"El redactor de vCard no se ha inicializado correctamente."</string>
     <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"No se ha podido abrir el archivo \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
@@ -317,7 +317,7 @@
     <string name="display_ungrouped" msgid="4602580795576261158">"Todos los demás contactos"</string>
     <string name="display_all_contacts" msgid="6846131371214707956">"Todos los contactos"</string>
     <string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Si eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronización, también se eliminarán todos los contactos no agrupados."</string>
-    <string name="account_phone" product="tablet" msgid="7946049152658522054">"Solo en el tablet (sin sincronizar)"</string>
+    <string name="account_phone" product="tablet" msgid="7946049152658522054">"Sólo en la tableta (sin sincronizar)"</string>
     <string name="account_phone" product="default" msgid="3682950835276226870">"Solo en el teléfono, no sincronizado"</string>
     <string name="call_custom" msgid="7756571794763171802">"Llamar a <xliff:g id="CUSTOM">%s</xliff:g>"</string>
     <string name="call_home" msgid="1990519474420545392">"Llamar a casa"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index fe2d70c..57526e9 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"عکس مخاطب"</string>
     <string name="description_minus_button" msgid="387136707700230172">"منها"</string>
     <string name="description_plus_button" msgid="515164827856229880">"به اضافه"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"حافظه USB در دسترس نیست"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"حافظه در دسترس نیست"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"کارت SD موجود نیست"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"حافظه USB یافت نشد"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"حافظه ای شناسایی نشد"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"هیچ کارت SD شناسایی نشد"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"جستجوی کارت ویزیت"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"وارد کردن از سیم کارت"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"وارد کردن از حافظه USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"وارد کردن از حافظه"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"وارد کردن از کارت SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"صادر کردن به حافظه USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"صادر کردن به حافظه"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"صدور به کارت SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"اشتراک گذاری مخاطبین قابل مشاهده"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"وارد کردن یک فایل کارت ویزیت"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"وارد کردن چند فایل کارت ویزیت"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"وارد کردن همه فایل های کارت ویزیت"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"جستجوی داده کارت ویزیت در حافظه USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"جستجوی داده کارت ویزیت در حافظه"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"جستجوی داده های کارت ویزیت در کارت SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"اسکن حافظه USB ناموفق بود"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"اسکن حافظه انجام نشد"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"اسکن کارت SD انجام نشد"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"اسکن حافظه USB ناموفق بود (دلیل: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"اسکن حافظه ناموفق بود (دلیل: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"اسکن کارت SD انجام نشد (دلیل: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"خطای ورودی/خروجی"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"حافظه کافی نیست (ممکن است فایل بسیار بزرگ باشد)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"تجزیه کارت ویزیت به دلیل پیش بینی نشده انجام نشد"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"قالب پشتیبانی نمی شود."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard وارد نشد"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"فایل کارت ویزیتی در دستگاه ذخیره USB یافت نشد"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"فایل کارت ویزیت در حافظه یافت نشد"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"فایل کارت ویزیتی در کارت SD یافت نشد"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"جمع آوری فوق اطلاعات فایل(های) کارت ویزیت موجود ناموفق بود."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"یک یا چند فایل وارد نشدند (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"صدور اطلاعات مخاطب انجام نشد"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"صدور اطلاعات مخاطب انجام نشد."\n"دلیل خطا: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"هیچ مخاطب قابل صدوری موجود نیست"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"تعداد فایل های کارت ویزیت در حافظه USB بسیار زیاد است"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"تعداد فایل های کارت ویزیت در حافظه بسیار زیاد است"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"فایل های کارت ویزیت بسیار زیادی در کارت SD وجود دارد"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"نام فایل ضروری خیلی طولانی است (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> پایان یافت"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d452d95..acf2f4d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"yhteystiedon valokuva"</string>
     <string name="description_minus_button" msgid="387136707700230172">"miinus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-tila ei käytettävissä"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Tallennustila ei käytettävissä"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Ei SD-korttia"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Ei USB-tallennustilaa"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Tallennustilaa ei havaittu"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SD-korttia ei havaittu"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Etsitään vCardia"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Tuo SIM-kortilta"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Tuo USB-tilasta"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Tuo tallennustilasta"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Tuo SD-kortilta"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Vie USB-tilaan"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Vie tallennustilaan"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Vie SD-kortille"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Jaa näkyvät yhteystiedot"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Tuo yksi vCard-tiedosto"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Tuo useita vCard-tiedostoja"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Tuo kaikki vCard-tiedostot"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Haetaan vCard-tietoja USB-tallennustilasta"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Etsitään vCard-tietoja tallennustilasta"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Etsitään vCard-tietoja SD-kortilta"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"USB-tallennustilan lukeminen epäonnistui"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Tallennustilan lukeminen epäonnistui"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"SD-kortin lukeminen epäonnistui"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"USB-tallennustilan lukeminen epäonnistui (syy: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Tallennustilan lukeminen epäonnistui (Syy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SD-kortin lukeminen epäonnistui (Syy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O-virhe"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Muisti ei riitä (tiedosto voi olla liian suuri)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"vCardin jäsennys epäonnistui tuntemattomasta syystä"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Muotoa ei tueta."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard-tietojen tuonti epäonnistui"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"USB-tallennustilasta ei löydy vCard-tiedostoa"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Tallennustilasta ei löydy vCard-tiedostoja"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SD-kortilta ei löydy vCard-tiedostoa"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Annettujen vCard-tiedostojen sisällönkuvaustietojen noutaminen epäonnistui."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Ainakin yhden tiedoston tuominen epäonnistui (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Yhteystietojen vieminen epäonnistui"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Yhteystietojen vieminen epäonnistui."\n"Virheen syy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Ei vietäviä yhteystietoja"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Liikaa vCard-tiedostoja USB-tallennustilassa"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Tallennustilassa on liian monta vCard-tiedostoa"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD-kortilla on liian monta vCard-tiedostoa"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Tarvittava tiedostonimi on liian pitkä (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti valmis"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 48e6982..a198122 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -161,12 +161,12 @@
     <string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
     <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Vous n\'avez aucun contact à afficher. Si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes."</string>
     <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Vous n\'avez aucun contact à afficher."</string>
-    <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:560 in java.io.StringReader@42b988a6)  -->
-    <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:567 in java.io.StringReader@22ba6c83)  -->
+    <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:560 in java.io.StringReader@7bd63e39)  -->
+    <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:567 in java.io.StringReader@2e8f4fb3)  -->
     <string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>", puis sur :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts vers la tablette ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier les paramètres de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SIM ou SD."\n</li></string>
     <string name="noContactsHelpTextWithSync" product="default" msgid="3017521127042216243">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SIM ou SD."\n</li></string>
-    <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:565 in java.io.StringReader@7d2a1e44)  -->
-    <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:571 in java.io.StringReader@5829428e)  -->
+    <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:565 in java.io.StringReader@7cd0a5d9)  -->
+    <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:571 in java.io.StringReader@66388993)  -->
     <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>", puis sur :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts vers la tablette ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier les paramètres de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SD."\n</li></string>
     <string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SD."\n</li></string>
     <string name="noFavoritesHelpText" msgid="3744655776704833277">"Vous ne disposez d\'aucun favoris."\n\n"Pour ajouter un contact à la liste de favoris :"\n\n"        "<li>"Appuyez sur l\'onglet "<b>"Contacts"</b>"."\n</li>" "\n<li>"Appuyez sur le contact à ajouter à vos favoris."\n</li>" "\n<li>"Appuyez sur l\'étoile en regard du nom du contact."\n</li></string>
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
     <string name="description_minus_button" msgid="387136707700230172">"moins"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Mémoire de stockage USB indisponible"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Mémoire non disponible"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Aucune carte SD trouvée"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Mémoire de stockage USB non détectée"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Aucune mémoire stockage détectée"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Aucune carte SD n\'a été détectée."</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Recherche des données VCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importer à partir de la carte SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importer depuis mémoire USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importer depuis mémoire"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importer à partir de la carte SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exporter vers mémoire USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exporter vers la mémoire"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exporter vers la carte SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Partager les contacts visibles"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importer un fichier vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer plusieurs fichiers vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importer tous les fichiers vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Recherche de données VCard sur la mémoire de stockage USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Recherche de données vCard sur la mémoire de stockage"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Recherche de données VCard sur la carte SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Impossible d\'analyser la mémoire de stockage USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Échec de la recherche dans la mémoire de stockage"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Échec de l\'analyse de la carte SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Impossible d\'analyser la mémoire de stockage USB (Raison : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Échec de la recherche dans la mémoire de stockage (Raison : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Échec de l\'analyse de la carte SD (Raison : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Erreur d\'E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Mémoire insuffisante (fichier probablement trop volumineux)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Échec de l\'analyse des données VCard pour une raison inattendue"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Le format n\'est pas compatible."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Échec de l\'importation du fichier vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Aucun fichier vCard n\'a été trouvé sur la mémoire de stockage USB."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Aucun fichier vCard trouvé sur la mémoire de stockage"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Aucun fichier vCard trouvé sur la carte SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Échec de la collecte des métadonnées contenues dans le(s) fichier(s) vCard"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Échec de l\'importation d\'un ou de plusieurs fichiers (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Échec lors de l\'exportation des données du contact"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Échec lors de l\'exportation des données du contact."\n"Motif : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Aucun contact exportable"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"La mémoire de stockage USB contient trop de fichiers VCard."</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"La mémoire de stockage contient trop de fichiers vCard."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"La carte SD contient trop de fichiers VCard."</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Le nom de fichier requis est trop long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Fichier vCard <xliff:g id="FILENAME">%s</xliff:g> exporté"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 9a09ba6..5463184 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Memorija USB nedostupna"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Prostor za pohranu nedostupan"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nema SD kartice"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Memorija USB nije otkrivena"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Pohrana nije otkrivena"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nije pronađena SD kartica"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Traženje kartice vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Uvezi sa SIM kartice"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Uvoz s USB memorije"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Uvoz iz pohrane"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Uvezi sa SD kartice"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Izvoz na USB memoriju"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Izvoz u pohranu"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Izvoz na SD karticu"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Dijeli vidljive kontakte"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Uvezi jednu vCard datoteku"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Uvoz više vCard datoteka"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Uvezi sve vCard datoteke"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Traženje vCard podataka u USB memoriji"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Traženje podataka kartice vCard u pohrani"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Traženje vCard podataka na SD kartici"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Skeniranje memorije USB nije uspjelo"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Skeniranje pohrane nije uspjelo"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Skeniranje SD kartice nije uspjelo"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Skeniranje memorije USB nije uspjelo (razlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Skeniranje pohrane nije uspjelo (razlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Skeniranje SD kartice nije uspjelo (Razlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O pogreška"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memorija je premala (datoteka je možda prevelika)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Analiza kartice vCard nije uspjela zbog neočekivanog razloga"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Format nije podržan."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Neuspješan uvoz vCarda"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"U USB pohrani nije pronađena vCard datoteka"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Datoteka kartice vCard nije pronađena u pohrani"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Na SD kartici nije pronađena datoteka vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Neuspješno prikupljanje meta informacija danih datoteka vCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Uvoz jedne ili više datoteka nije uspio (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Izvoz podataka o kontaktu nije uspio."</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Izvoz podataka o kontaktu nije uspio."\n"Razlog neuspjeha: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nema kontakta koji je moguće izvesti"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Previše datoteka vCard u USB memoriji"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Previše datoteka kartice vCard u pohrani"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Previše vCard datoteka na SD kartici"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Obavezan naziv datoteke je predug (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Završetak izvoza <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a47dff7..5fa9202 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotó a névjegyhez"</string>
     <string name="description_minus_button" msgid="387136707700230172">"mínusz"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plusz"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Az USB-tár nem érhető el"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"A tárhely nem érhető el"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Hiányzó SD-kártya"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nem észlelhető USB-tár"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nem észlelhető tárhely"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Az SD-kártya nem észlelhető"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCard keresése"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importálás a SIM-kártyáról"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importálás USB-tárról"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importálás a tárhelyről"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importálás az SD-kártyáról"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportálás USB-tárra"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportálás a tárhelyre"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportálás SD-kártyára"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Látható névjegyek megosztása"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Egyetlen vCard fájl importálása"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Több vCard fájl importálása"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Az összes vCard fájl importálása"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"vCard-adatok keresése az USB-táron"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"vCard-adatok keresése a tárhelyen"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"vCard-adatok keresése az SD-kártyán"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Az USB-tár beolvasása sikertelen volt"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Nem sikerült beolvasni a tárhelyet"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Az SD-kártya beolvasása sikertelen"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Az USB-tár beolvasása sikertelen volt (A hiba oka: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Nem sikerült beolvasni a tárhelyet (a hiba oka: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Az SD-kártya beolvasása nem sikerült (oka: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O hiba"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Nincs elég memória (lehet, hogy túl nagy a fájl)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Váratlan ok miatt nem sikerült a vCard szintaktikai elemzése"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"A formátum nem támogatott."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Nem sikerült a vCard importálása"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Nem található vCard fájl az USB-táron"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Nem található vCard fájl a tárhelyen"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Nem található vCard fájl az SD-kártyán"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Nem sikerült begyűjteni a vCard fájl(ok) metaadatait."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Egy vagy több fájlt nem sikerült importálni (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Nem sikerült exportálni a névjegyadatokat"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Nem sikerült exportálni a névjegyadatokat."\n"A hiba oka: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nincs exportálható névjegy"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Túl sok vCard-fájl van az USB-táron"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Túl sok vCard fájl van a tárhelyen"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Túl sok vCard fájl van az SD-kártyán"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"A fájlnév túl hosszú (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"A(z) <xliff:g id="FILENAME">%s</xliff:g> exportálása befejeződött"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 159be21..f9a5fd8 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto kenalan"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Penyimpanan USB tidak tersedia"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Penyimpanan tidak tersedia"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Tidak ada kartu SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Tidak ada penyimpanan USB yang terdeteksi"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Penyimpanan tidak terdeteksi"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Tidak ada kartu SD yang terdeteksi"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Menelusuri vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Impor dari kartu SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Mengimpor dari penyimpanan USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Impor dari penyimpanan"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Impor dari kartu SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Ekspor ke penyimpanan USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Ekspor ke penyimpanan"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Ekspor ke kartu SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Bagikan kenalan yang terlihat"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Impor satu berkas vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Impor beberapa berkas vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Impor semua berkas vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Menelusuri data vCard dalam penyimpanan USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Menelusuri data vCard dalam penyimpanan"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Menelusuri data vCard pada kartu SD."</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Memindai penyimpanan USB gagal"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Gagal memindai penyimpanan"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Kartu SD gagal dipindai"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Memindai penyimpanan USB gagal (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Gagal memindai penyimpanan (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Kartu SD gagal dipindai (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Galat I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memori tidak memadai (berkas mungkin terlalu besar)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Gagal melakukan parse pada vCard karena alasan yang tidak diharapkan"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Format tidak didukung."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Gagal mengimpor vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Tidak ada berkas vCard yang ditemukan pada penyimpanan USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Tidak ditemukan berkas vCard dalam penyimpanan"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Tidak ada berkas vCard yang ditemukan pada kartu SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Gagal mengumpulkan informasi meta dari berkas vCard yang diberikan."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Satu berkas atau lebih gagal diimpor (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Gagal mengekspor data kenalan"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Gagal mengekspor data kenalan."\n"Alasan kegagalan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>:"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Tidak ada kenalan yang dapat diekspor"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Terlalu banyak berkas vCard dalam penyimpanan USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Terlalu banyak berkas vCard dalam penyimpanan"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Terlalu banyak berkas vCard pada kartu SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Nama berkas yang diperlukan terlalu panjang (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Selesai mengekspor <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a9009ee..eba7f11 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto contatto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"meno"</string>
     <string name="description_plus_button" msgid="515164827856229880">"più"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Archivio USB non disponibile"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Archivio non disponibile"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nessuna scheda SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nessun archivio USB rilevato"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nessun archivio rilevato"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nessuna scheda SD rilevata"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Ricerca vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importa da scheda SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importa da archivio USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importa da archivio"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importa da scheda SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Esporta in archivio USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Esporta in archivio"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Esporta su scheda SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Condividi contatti visibili"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importa un file vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importa più file vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importa tutti i file vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Ricerca di dati vCard nell\'archivio USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Ricerca di dati vCard nell\'archivio"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Ricerca dati vCard su scheda SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scansione dell\'archivio USB non riuscita"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scansione dell\'archivio non riuscita"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Analisi scheda SD non riuscita"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scansione dell\'archivio USB non riuscita (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scansione dell\'archivio non riuscita (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Analisi scheda SD non riuscita (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Errore I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memoria insufficiente (il file potrebbe essere di dimensioni eccessive)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Impossibile analizzare la vCard per motivi imprevisti"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Il formato non è supportato."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Importazione vCard non riuscita"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Nessun file vCard trovato nell\'archivio USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Nessun file vCard trovato nell\'archivio"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Nessun file vCard trovato sulla scheda SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Raccolta dei metadati dei file vCard forniti non riuscita."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Impossibile importare uno o più file (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Esportazione dati contatti non riuscita"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Esportazione dati contatti non riuscita."\n"Motivo dell\'errore: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nessun contatto esportabile"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Troppi file vCard nell\'archivio USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Troppi file vCard nell\'archivio"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Troppi dati vCard sulla scheda SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Il nome file richiesto è troppo lungo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Esportazione di <xliff:g id="FILENAME">%s</xliff:g> terminata"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5fa32b3..3ea023b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"תמונה של איש קשר"</string>
     <string name="description_minus_button" msgid="387136707700230172">"חיסור"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ועוד"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"אמצעי אחסון מסוג USB אינו זמין"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"אמצעי אחסון אינו זמין"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"אין כרטיס SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"לא זוהה אמצעי אחסון מסוג USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"לא זוהה אמצעי אחסון"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"לא אותר כרטיס SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"מחפש vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"ייבא מכרטיס SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"ייבא מאמצעי אחסון מסוג USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"ייבא מאמצעי אחסון"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"ייבא מכרטיס SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"ייצא לאמצעי אחסון מסוג USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"ייצא לאמצעי אחסון"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"ייצא לכרטיס SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"שתף אנשי קשר גלויים"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"ייבא קובץ אחד של vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"ייבא קובצי vCard מרובים"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"ייבא את כל קובצי vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"מחפש נתוני vCard באמצעי אחסון מסוג USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"מחפש נתוני vCard באמצעי אחסון"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"מחפש נתוני vCard בכרטיס SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"סריקת אמצעי אחסון מסוג USB נכשלה"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"סריקת אמצעי אחסון נכשלה"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"נכשלה סריקת כרטיס SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"סריקת אמצעי אחסון מסוג USB נכשלה (סיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"סריקת אמצעי אחסון נכשלה (סיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"נכשלה סריקת כרטיס SD (סיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"שגיאת קלט/פלט"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"אין מספיק זיכרון (ייתכן שהקובץ גדול מדי)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"נכשל ניתוח vCard עקב סיבה לא צפויה"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"הפורמט אינו נתמך."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"נכשל ייבוא vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"לא נמצא קובץ vCard באמצעי אחסון מסוג USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"לא נמצא קובץ vCard באמצעי האחסון"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"לא נמצא קובץ vCard בכרטיס ה-SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"נכשל איסוף מידע-על מקובצי vCard נתונים."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"נכשל הייבוא של קובץ אחד או יותר (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"נכשל ייצוא הנתונים של איש הקשר"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"נכשל ייצוא הנתונים של איש קשר."\n"הסיבה לכשל: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"אין איש קשר שניתן לייצא"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"קובצי vCard רבים מדי באמצעי אחסון מסוג USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"קובצי vCard רבים מדי באמצעי האחסון"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"קובצי vCard רבים מדי בכרטיס ה-SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"שם הקובץ הדרוש ארוך מדי (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"הייצוא של <xliff:g id="FILENAME">%s</xliff:g> הסתיים"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 946b813..f0a5253 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"連絡先の写真"</string>
     <string name="description_minus_button" msgid="387136707700230172">"マイナス"</string>
     <string name="description_plus_button" msgid="515164827856229880">"プラス"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USBストレージ使用不可"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"ストレージ使用不可"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SDカードがありません"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"USBストレージがありません"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"ストレージがありません"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SDカードを検出できませんでした"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCardを検索中"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"SIMカードからインポート"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"USBストレージからインポート"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"ストレージからインポート"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"SDカードからインポート"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"USBストレージにエクスポート"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"ストレージにエクスポート"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"SDカードにエクスポート"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"表示可能な連絡先を共有"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"vCardファイルを1つインポート"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"複数のvCardファイルをインポート"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"すべてのvCardファイルをインポート"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"USBストレージ内でvCardデータを検索中"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"ストレージ内でvCardデータを検索中"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"SDカードのvCardデータを検索しています"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"USBストレージのスキャンエラー"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"ストレージのスキャンエラー"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"SDカードのスキャンに失敗しました"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"USBストレージをスキャンできませんでした(理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"ストレージをスキャンできませんでした(理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SDカードのスキャンに失敗しました(理由: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"送受信エラー"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"メモリが不足しています(ファイルが大きすぎる可能性があります)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"予期しない理由によりvCardの解析に失敗しました"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"このフォーマットはサポートされません。"</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCardをインポートできませんでした。"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"USBストレージ内にvCardファイルが見つかりません"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"ストレージ内にvCardファイルが見つかりません"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SDカード内にvCardファイルが見つかりません"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"指定されたvCardファイルのメタ情報を取得できませんでした。"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"1つ以上のファイルをインポートできませんでした(%s)。"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"連絡先データのエクスポートに失敗しました"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"連絡先データのエクスポートに失敗しました。"\n"理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"エクスポートできる連絡先がありません"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USBストレージ内のvCardファイルが多すぎます"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"ストレージ内のvCardファイルが多すぎます"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SDカードのvCardファイルが多すぎます"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"指定したファイル名が長すぎます(「<xliff:g id="FILENAME">%s</xliff:g>」)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートが終了しました"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 75ec439..f93a24f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"주소록 사진"</string>
     <string name="description_minus_button" msgid="387136707700230172">"빼기"</string>
     <string name="description_plus_button" msgid="515164827856229880">"더하기"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB 저장소 사용 불가능"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"저장장치 없음"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SD 카드 없음"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"USB 저장소가 없습니다."</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"저장장치가 없습니다."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SD 카드가 발견되지 않았습니다."</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCard 검색"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"SIM 카드에서 가져오기"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"USB 저장소에서 가져오기"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"저장장치에서 가져오기"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"SD 카드에서 가져오기"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"USB 저장소로 내보내기"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"저장공간으로 내보내기"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"SD 카드로 내보내기"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"표시되는 연락처 모두 공유"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"vCard 파일 한 개 가져오기"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"vCard 파일 여러 개 가져오기"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"모든 vCard 파일 가져오기"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"USB 저장소에서 vCard 데이터 검색 중"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"저장장치에서 vCard 데이터 검색"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"SD 카드의 vCard 데이터 검색"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"USB 저장소 스캔 실패"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"저장장치 스캔 실패"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"SD 카드 스캔 실패"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"USB 저장소 스캔 실패(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"저장장치 스캔 실패(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SD 카드 스캔 실패(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O 오류"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"메모리가 부족합니다. 파일이 너무 크기 때문일 수 있습니다."</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"예기치 못한 이유로 인해 vCard를 구문분석하지 못했습니다."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"지원되지 않는 형식입니다."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard를 가져오지 못했습니다."</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"vCard 파일이 USB 저장소에 없습니다."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"저장공간에 vCard 파일이 없습니다."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SD 카드에 VCard 파일이 없습니다."</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"지정한 vCard 파일에 대한 메타 정보를 수집하지 못했습니다."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"하나 이상의 파일을 가져오지 못했습니다(%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"연락처 데이터를 내보내지 못했습니다."</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"연락처 데이터를 내보내지 못했습니다."\n"실패 이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"내보낼 수 있는 연락처가 없습니다."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USB 저장소에 vCard 파일이 너무 많습니다."</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"저장공간에 vCard 파일이 너무 많습니다."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD 카드에 vCard 파일이 너무 많습니다."</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"필수 파일 이름이 너무 깁니다(\'<xliff:g id="FILENAME">%s</xliff:g>\')."</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기 완료됨"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 11c0912..c1a2dde 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"adresato nuotrauka"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plius"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB atmintinė nepasiekiama"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Saugykla neprieinama"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nėra SD kortelės"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Neaptikta jokia USB atmintinė"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Neaptikta jokių saugyklų"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SD kortelė neaptikta"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Ieškoma „vCard“ kortelės"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importuoti iš SIM kortelės"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import. iš USB atmintinės"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importuoti iš saugyklos"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importuoti iš SD kortelės"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Eksport. į USB atmintinę"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Eksportuoti į saugyklą"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Eksportuoti į SD kortelę"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Bendrinti matomus adresatus"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importuoti vieną „vCard“ failą"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importuoti kelis „vCard“ failus"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importuoti visus „VCard“ kortelės failus"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Ieškoma el. vizitinės kortelės duomenų USB atmintinėje"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Ieškoma el. vizitinės kortelės duomenų USB atmintinėje"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"SD kortelėje ieškoma „vCard“ duomenų"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Nepavyko nuskaityti USB atmintinės"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Nepavyko nuskaityti saugyklos"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"SD kortelės nuskaitymas nepavyko"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Nepavyko nuskaityti USB atmintinės (Priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Nepavyko nuskaityti saugyklos (priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SD kortelės nuskaitymas nepavyko (priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Įvesties / išvesties klaida"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Nepakanka atminties (failas gali būti per didelis)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Dėl netikėtos priežasties nepavyko išanalizuoti „vCard“"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formatas nepalaikomas."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Nepavyko import. el. vizitinės kortelės"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"USB atmintinėje nerasta jokių el. vizitinių kortelių failų"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Saugykloje nerasta el. vizitinės kortelės failų"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SD kortelėje nerasta jokių el. vizitinių kortelių failų"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Nepavyko surinkti nurodyto (-ų) el. vizitinės kortelės failo (-ų) metainformacijos."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Nepavyko importuoti vieno ar daugiau failų (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Nepavyko eksportuoti adresatų duomenų"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Nepavyko eksportuoti adresato duomenų."\n"Trikties priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nėra eksportuojamo adresato"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Per daug el. vizitinės kortelės failų USB atmintinėje"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Per daug el. vizitinės kortelės failų saugykloje"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Per daug „vCard“ failų SD kortelėje"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Reikalingo failo pavadinimas per ilgas („<xliff:g id="FILENAME">%s</xliff:g>“)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Baigta eksportuoti <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index b5d597a..e82f457 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonas fotoattēls"</string>
     <string name="description_minus_button" msgid="387136707700230172">"mīnuss"</string>
     <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB atmiņa nav pieejama"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"USB atmiņa nav pieejama"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nav SD kartes"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nav noteikta USB atmiņa"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nav atrasta neviena USB. atm."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SD karte nav noteikta."</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCard faila meklēšana"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importēt no SIM kartes"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import. no USB atmiņas"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importēt no USB atmiņas"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importēt no SD kartes"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Eksport. uz USB atmiņu"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Eksportēt uz USB atmiņu"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Eksportēt uz SD karti"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Kopīgot redzamās kontaktpersonas"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importēt vienu vCard failu"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importēt vairākus vCard failus"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importēt visus vCard failus"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Notiek vCard datu meklēšana USB atmiņā"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Notiek vCard datu meklēšana USB atmiņā."</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Notiek vCard datu meklēšana SD kartē"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"USB atmiņas skenēšana neizdevās"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Neizdevās skenēt USB atmiņu"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Neizdevās skenēt SD karti."</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"USB atmiņas skenēšana neizdevās (iemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"USB atmiņas skenēšana neizdevās (iemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SD kartes skenēšana neizdevās (cēlonis: “<xliff:g id="FAIL_REASON">%s</xliff:g>”)."</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Ievades/izvades kļūda"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Atmiņā nepietiek vietas (iespējams, fails ir pārāk liels)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Neparedzēta iemesla dēļ neizdevās parsēt vCard failu."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Šis formāts nav atbalstīts."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard importēšana neizdevās."</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"USB atmiņā nav atrasts neviens vCard fails."</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"USB atmiņā nav atrasts neviens vCard fails."</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SD kartē nav atrasts neviens vCard fails."</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Neizdevās iegūt meta informāciju par konkrēto(-ajiem) vCard failu(-iem)."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Neizdevās importēt vienu vai vairākus failus (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Neizdevās eksportēt kontaktpersonas datus."</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Neizdevās eksportēt kontaktpersonu datus."\n"Kļūmes cēlonis: “<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nav eksportējamu kontaktpersonas datu."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USB atmiņā ir pārāk daudz vCard failu."</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"USB atmiņā ir pārāk daudz vCard failu."</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD kartē ir pārāk daudz vCard failu."</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Faila nosaukums ir pārāk garš (“<xliff:g id="FILENAME">%s</xliff:g>”)."</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšana ir pabeigta"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f97658c..8f25d09 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -161,12 +161,12 @@
     <string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
     <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Du har ingen kontakter å vise. (Hvis du nettopp har lagt til en konto, kan det ta noen minutter å synkronisere kontaktene.)"</string>
     <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Du har ingen kontakter å vise."</string>
-    <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:292 in java.io.StringReader@3343c8b3)  -->
-    <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:293 in java.io.StringReader@272d7a10)  -->
+    <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:292 in java.io.StringReader@4d3f3045)  -->
+    <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:293 in java.io.StringReader@6f7a29a1)  -->
     <string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>", og trykk deretter på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til nettbrettet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Eksporter"</b></font>" for å importere kontakter fra SIM- eller SD-kort"\n</li></string>
     <string name="noContactsHelpTextWithSync" product="default" msgid="3017521127042216243">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/Eksportér"</b></font>" for å importere kontakter fra SIM- eller SD-kort"\n</li></string>
-    <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@1aa8c488)  -->
-    <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@3dfeca64)  -->
+    <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@3d434234)  -->
+    <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@4d125127)  -->
     <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>", og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til nettbrettet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>" for å importere kontakter fra SD-kortet"\n</li></string>
     <string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/eksportér"</b></font>" for å importere kontakter fra SD-kortet"\n</li></string>
     <string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Slik legger du til en kontakt i favorittlisten:"\n\n" "<li>"Trykk på fanen "<b>"Kontakter"</b>" "\n</li>" "\n<li>"Trykk på kontakten du vil legge til i favoritter"\n</li>" "\n<li>"Trykk på stjernen ved siden av kontaktnavnet"\n</li></string>
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"kontaktens bilde"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minusknapp"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-lagring utilgj."</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lagring utilgjengelig"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Mangler minnekort"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Finner ikke USB-lagring"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Ingen lagring oppdaget"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Fant ikke noe minnekort"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Leter etter VCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importér fra SIM-kort"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importér fra USB-lagr."</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importér fra lagring"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importér fra minnekort"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Eksportér til USB-lagr."</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Eksportér til lagring"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Eksportér til minnekort"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontakter"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importer én VCard-fil"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer flere vCard-filer"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle vCard-filer"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Søker etter vCard-data i USB-lagring"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Søker etter vCard-data i lagring"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Leter etter VCard-data på minnekort"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Skanning av USB-lagring mislyktes"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Skanning av lagring mislyktes"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Kunne ikke scanne minnekort"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Skanning av USB-lagring mislyktes (årsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Skanning av lagring mislyktes (årsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Kunne ikke skanne minnekort (grunn: «<xliff:g id="FAIL_REASON">%s</xliff:g>»)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Inn/ut-feil (årsak: «FAIL_REASON»)"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Ikke tilstrekkelig minne (filen kan være for stor)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Kan ikke analysere VCard av uventet årsak"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formatet støttes ikke."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Kunne ikke importere vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Finner ingen vCard-fil i USB-lagring"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Finner ingen vCard-fil på lagringsenheten"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Fant ingen vCard-fil på SD-kortet"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Kan ikke hente inn metainformasjon for de(n) aktuelle vCard-filen(e)."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Importeringen av én eller flere filer mislyktes (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Kunne ikke eksportere kontaktlisten"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Eksport av kontaktdata mislyktes"\n"Årsak til feil: «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Det finnes ingen eksporterbar kontakt."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"For mange vCard-filer på USB-lagring"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"For mange vCard-filer på lagringsenheten"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"For mange VCard-datafiler på minnekortet"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"For langt filnavn kreves («<xliff:g id="FILENAME">%s</xliff:g>»)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Eksport av <xliff:g id="FILENAME">%s</xliff:g> er fullført"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index d538d34..7074755 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"contactfoto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"min"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-opslag niet beschikb."</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Opslag niet beschikbaar"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Geen SD-kaart"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Geen USB-opslag gevonden"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Geen opslag gedetecteerd"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Geen SD-kaart gedetecteerd"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Zoeken naar vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importeren van SIM-kaart"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import. uit USB-opslag"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importeren uit opslag"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importeren van SD-kaart"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Export. naar USB-opslag"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exporteren naar opslag"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exporteren naar SD-kaart"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Zichtbare contacten delen"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Eén vCard-bestand importeren"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Meerdere vCard-bestanden importeren"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Alle vCard-bestanden importeren"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Zoeken naar vCard-gegevens in USB-opslag"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Zoeken naar vCard-gegevens in opslag"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Zoeken naar vCard-gegevens op SD-kaart"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scannen van USB-opslag is mislukt"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scannen van opslag is mislukt"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Scannen van SD-kaart is mislukt"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scannen van USB-opslag is mislukt (reden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scannen van USB-opslag is mislukt (reden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Scannen van SD-kaart is mislukt: (Reden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O-fout"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Onvoldoende geheugen (het bestand is mogelijk te groot)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Parseren van vCard is mislukt om onbekende reden"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"De indeling wordt niet ondersteund."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Kan vCard niet importeren"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Geen vCard-bestand gevonden in USB-opslag"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Geen vCard-bestand gevonden in opslag"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Geen vCard-bestand gevonden op SD-kaart"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Verzamelen van metagegevens van betreffende vCard-bestanden is mislukt."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Een of meer bestanden kunnen niet worden geïmporteerd (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Exporteren van contactgegevens mislukt"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Exporteren van contactgegevens mislukt."\n"Reden voor de fout: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Er is geen contact dat geëxporteerd kan worden"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Te veel vCard-bestanden in de USB-opslag"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Te veel vCard-bestanden in opslag"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Te veel vCard-gegevens op de SD-kaart"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Vereiste bestandsnaam is te lang (\'<xliff:g id="FILENAME">%s</xliff:g>\')"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Exporteren van <xliff:g id="FILENAME">%s</xliff:g> voltooid"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 40aa3b2..2563581 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"zdjęcie kontaktu"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Nośnik USB niedostępny"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Nośnik nie jest dostępny"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Brak karty SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nie wykryto nośnika USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nie wykryto nośnika"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nie wykryto karty SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Wyszukiwanie danych vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importuj z karty SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importuj z nośnika USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importuj z nośnika"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importuj z karty SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Eksportuj na nośnik USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Eksportuj na nośnik"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Eksportuj na kartę SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Udostępnij widoczne kontakty"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importuj jeden plik vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importuj wiele plików vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importuj wszystkie pliki vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Wyszukiwanie danych vCard na nośniku USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Wyszukiwanie danych vCard na nośniku"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Wyszukiwanie danych vCard na karcie SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Skanowanie nośnika USB nie powiodło się"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Skanowanie nośnika nie powiodło się"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Skanowanie karty SD nie powiodło się"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Skanowanie nośnika USB nie powiodło się (przyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Skanowanie nośnika nie powiodło się (przyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Skanowanie karty SD nie powiodło się (przyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Błąd wejścia/wyjścia"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Niewystarczająca ilość pamięci (plik może być zbyt duży)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Nie można zanalizować pliku vCard z nieoczekiwanego powodu"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Ten format nie jest obsługiwany."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Nie można zaimportować karty vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Na nośniku USB nie znaleziono żadnego pliku vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Na nośniku nie znaleziono żadnego pliku vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Na karcie SD nie znaleziono żadnego pliku vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Nie można zebrać metainformacji z podanych plików vCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Nie można zaimportować co najmniej jednego pliku (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Nie można wyeksportować danych kontaktu"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Nie można wyeksportować danych kontaktu."\n"Przyczyna niepowodzenia: „<xliff:g id="FAIL_REASON">%s</xliff:g>”."</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Brak kontaktów, które można wyeksportować"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Zbyt wiele plików vCard na nośniku USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Zbyt wiele plików vCard na nośniku"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Zbyt dużo plików vCard na karcie SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Wymagana nazwa pliku jest zbyt długa („<xliff:g id="FILENAME">%s</xliff:g>”)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Zakończono eksportowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 4d1a10c..747f120 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografia do contacto"</string>
     <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
     <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Armaz. USB não disponível"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Armazen. indisponível"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nenhum cartão SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Armaz. USB não detectado"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Não há armazenamento detectado"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Não foi detectado nenhum cartão SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"A procurar vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importar do armaz. USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importar do armazenamento"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importar do cartão SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportar para armaz. USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportar para o armazen."</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportar para cartão SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Partilhar contactos visíveis"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importar um ficheiro VCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar vários ficheiros vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os ficheiros VCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"A pesquisar dados do vCard no armazenamento USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"A pesquisar dados do vCard no armazenamento"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Procurar dados do vCard no cartão SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Falha ao analisar armazenamento USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Falha ao digitalizar armazenamento"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Falha na análise do cartão SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Falha ao analisar armazenamento USB (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Falha ao analisar o armazenamento (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Falha na análise do cartão SD (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Erro de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"A memória não é suficiente (o ficheiro pode ser demasiado grande)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Falha na análise do vCard por motivo inesperado"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"O formato não é suportado."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Falha ao importar vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Não foi encontrado nenhum ficheiro vCard no armazenamento USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Não foi encontrado nenhum ficheiro vCard no armazenamento"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Não foi encontrado nenhum ficheiro vCard no cartão SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"A recolha de meta informações de ficheiro(s) vCard específicado(s) falhou."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"A importação de um ou vários ficheiros falhou (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Falha ao exportar dados de contacto"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Falha na exportação de dados de contacto."\n"Motivo da falha: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Não existe um contacto exportável"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Existem demasiados ficheiros vCard no armazenamento USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Existem demasiados ficheiros vCard no armazenamento"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Demasiados ficheiros vCard no cartão SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Nome de ficheiro demasiado longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"A exportação do <xliff:g id="FILENAME">%s</xliff:g> terminou"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 809adb6..6aef3a6 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
     <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
     <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Armaz. USB não disponível"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Armazenamento não disponível"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nenhum cartão SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nenhum armaz. USB detectado"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nenhum armazenamento detectado"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nenhum cartão SD detectado"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Pesquisando vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importar do armaz. USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importar do armazenamento"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importar do cartão SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportar para armaz. USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportar para o armazenamento"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportar para cartão SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Compartilhar contatos visíveis"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importar um arquivo do vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar vários arquivos do vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os arquivos do vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Procurando dados do vCard no armazenamento USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Procurando dados do vCard no armazenamento"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Procurando dados do vCard no cartão SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Falha na verificação do armazenamento USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Falha na verificação do armazenamento"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Falha na verificação do cartão SD"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Falha na verificação do armazenamento USB (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Falha na verificação do armazenamento (Motivo: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Falha na verificação do cartão SD (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Erro E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memória insuficiente (o arquivo talvez seja muito grande)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Falha ao analisar o vCard por razão inesperada"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"O formato não é suportado."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Falha ao importar vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Nenhum arquivo de vCard encontrado no armazenamento USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Nenhum arquivo de vCard encontrado no armazenamento"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Nenhum arquivo de vCard encontrado no cartão SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Falha ao coletar metainformações dos arquivos de vCard fornecidos."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Falha na importação de um ou mais arquivos (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Falha ao exportar dados do contato"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Falha ao exportar dados dos contatos."\n"Motivo da falha: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Não há contatos exportáveis"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Muitos arquivos do vCard no armazenamento USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Muitos arquivos de vCard no armazenamento"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Muitos arquivos do vCard no cartão SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"O nome de arquivo exigido é muito longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Exportação concluída <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index c2ea934..4bc8ae4 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -212,25 +212,25 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"foto dal contact"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <!-- outdated translation 5911758680339949273 -->     <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Nagina carta SD"</string>
+    <!-- outdated translation 5911758680339949273 -->     <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Nagina carta SD"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nagina carta SD"</string>
-    <!-- outdated translation 6019391476490445358 -->     <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Betg chattà ina carta SD."</string>
+    <!-- outdated translation 6019391476490445358 -->     <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Betg chattà ina carta SD."</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Betg chattà ina carta SD."</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Tschertgar datas vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importar da la carta SIM"</string>
-    <!-- outdated translation 8550360976693202816 -->     <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importar da la carta SD"</string>
+    <!-- outdated translation 8550360976693202816 -->     <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importar da la carta SD"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importar da la carta SD"</string>
-    <!-- outdated translation 2597105442616166277 -->     <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportar sin la carta SD"</string>
+    <!-- outdated translation 2597105442616166277 -->     <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportar sin la carta SD"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportar sin la carta SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Cundivider ils contacts visibels"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importar ina datoteca vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar pliras datotecas vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importar tut las datotecas vCard"</string>
-    <!-- outdated translation 6917522333561434546 -->     <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Tschertgar datas vCard sin la carta SD"</string>
+    <!-- outdated translation 6917522333561434546 -->     <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Tschertgar datas vCard sin la carta SD"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Tschertgar datas vCard sin la carta SD"</string>
-    <!-- outdated translation 3506782007953167180 -->     <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Errur cun leger la carta SD"</string>
+    <!-- outdated translation 3506782007953167180 -->     <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Errur cun leger la carta SD"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Errur cun leger la carta SD"</string>
-    <!-- no translation found for scanning_sdcard_failed_message (5645544323676912703) -->
+    <!-- no translation found for scanning_sdcard_failed_message (4106156155205860626) -->
     <skip />
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Errur cun leger la carta SD. Il motiv: «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Errur I/O"</string>
@@ -240,7 +240,7 @@
     <skip />
     <!-- no translation found for vcard_import_failed (7718330063493653085) -->
     <skip />
-    <!-- no translation found for import_failure_no_vcard_file (8809370398968655782) -->
+    <!-- no translation found for import_failure_no_vcard_file (6339234836196984924) -->
     <skip />
     <!-- no translation found for import_failure_no_vcard_file (1730986357514922756) -->
     <skip />
@@ -276,7 +276,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Errur cun exportar las datas da contact"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Errur cun exportar las datas da contact. "\n"Il motiv: «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nagin contact exportabel"</string>
-    <!-- outdated translation 7084146295639672658 -->     <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"La carta SD cuntegna memia bleras datotecas vCard"</string>
+    <!-- outdated translation 7084146295639672658 -->     <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"La carta SD cuntegna memia bleras datotecas vCard"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"La carta SD cuntegna memia bleras datotecas vCard"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Il num da datoteca necessari è memia lung («<xliff:g id="FILENAME">%s</xliff:g>»)"</string>
     <!-- no translation found for exporting_vcard_finished_title (4259736138838583213) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 6726ee5..f1a2f1d 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografia persoanei din agendă"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Stoc. USB nu este disp."</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Stocare indisponibilă"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Niciun card SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Stocare USB nedetectată"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Nicio stocare detectată"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Niciun card SD detectat"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Se caută date în format vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importaţi de pe cardul SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import. din stocarea USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importaţi din stocare"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importaţi de pe cardul SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportaţi în stocarea USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportaţi în stocare"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportaţi pe cardul SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Distribuiţi persoanele vizibile din agendă"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importaţi un fişier vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importaţi fişiere multiple vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importaţi toate fişierele vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Se caută date vCard în spaţiul de stocare USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Se caută date vCard în spaţiul de stocare"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Se caută date vCard pe cardul SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Scanarea stocării USB a eşuat"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Scanarea stocării nu a reuşit"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Scanarea cardului SD a eşuat"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Scanarea stocării USB a eşuat (Motiv: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Scanarea stocării nu a reuşit (Motiv: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Scanarea cardului SD eşuată (Motiv: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Eroare I/E"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Memoria este insuficientă (probabil fişierul este prea mare)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Analiza vCard a eşuat dintr-un motiv necunoscut"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formatul nu este acceptat."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Nu a reuşit să importe vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Niciun fişier vCard găsit în stocarea USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Nu a fost găsit niciun fişier vCard în spaţiul de stocare"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Niciun fişier vCard găsit pe cardul SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Colectarea metainformaţiilor pentru fişierele vCard indicate a eşuat."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Unul sau mai multe fişiere nu s-au putut importa (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Exportul datelor persoanei din agendă a eşuat"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Exportul datelor din agendă a eşuat."\n" Motivul erorii: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nicio persoană în agendă exportabilă"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Prea multe fişiere vCard pe spaţiul de stocare USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Prea multe fişiere vCard în spaţiul de stocare"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Prea multe fişiere de tip vCard pe cardul SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Numele de fişier este prea lung („<xliff:g id="FILENAME">%s</xliff:g>”)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"S-a finalizat exportul <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 9272e68..40a1133 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"фотография контакта"</string>
     <string name="description_minus_button" msgid="387136707700230172">"минус"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-накопитель недоступен"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Накопитель недоступен"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нет SD-карты"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"USB-накопитель не найден"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Накопитель не найден"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"SD-карта не обнаружена"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Поиск vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Импортировать с SIM-карты"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Импорт с USB-накопителя"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Импорт из накопителя"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Импортировать с SD-карты"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Экспорт на USB-накопитель"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Экспорт на накопитель"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Экспортировать на SD-карту"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Передать видимые контакты"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Импорт одного файла VCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Импорт нескольких файлов vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Импорт всех файлов VCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Поиск данных vCard на USB-накопителе"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Поиск данных vCard на накопителе..."</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Поиск данных vCard на SD-карте"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Не удалось просканировать USB-накопитель"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Не удалось просканировать накопитель"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Не удалось сканировать SD-карту."</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Не удалось просканировать USB-накопитель (<xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Не удалось просканировать накопитель (<xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Не удалось просканировать SD-карту (причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Ошибка ввода-вывода"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Недостаточно памяти (возможно, файл слишком велик)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Не удалось обработать vCard по неизвестной причине."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Формат не поддерживается."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Не удалось импортировать vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"На USB-накопителе отсутствуют файлы vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"На накопителе отсутствуют файлы vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"На SD-карте не найдены файлы VCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Не удалось собрать метаинформацию файлов VCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Не удалось импортировать один или несколько файлов (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Не удалось экспортировать данные контакта."</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Не удалось экспортировать данные контакта."\n"Причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Нет контактов, которые можно экспортировать."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Слишком много файлов vCard на USB-накопителе"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Слишком много файлов vCard на накопителе"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Слишком много файлов VCard на SD-карте."</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Название файла слишком длинное (<xliff:g id="FILENAME">%s</xliff:g>)."</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Экспорт <xliff:g id="FILENAME">%s</xliff:g> завершен"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 28ce643..db2ab3e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografia kontaktu"</string>
     <string name="description_minus_button" msgid="387136707700230172">"mínus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Ukl. priestor USB nedostup."</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Uklad. pr. je nedostupný"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Žiadna karta SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Nebol rozpoznaný ukl. priestor USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Ukladací priestor sa nenašiel"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Nebola zistená žiadna karta SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Vyhľadávanie karty vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importovať z karty SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import z ukl. priestoru USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Import z ukl. priestoru"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importovať z karty SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Export do ukl. priestoru USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Export do uklad. priest."</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportovať na kartu SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Zdieľať viditeľné kontakty"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importovať jeden súbor vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importovať niekoľko súborov vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importovať všetky súbory vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Vyhľadávanie údajov karty vCard v ukladacom priestore USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Vyhľadávanie údajov karty vCard v ukladacom priestore"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Prebieha hľadanie údajov karty vCard na karte SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Vyhľadávanie v ukladacom priestore USB zlyhalo"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Skenovanie ukladacieho priestoru zlyhalo"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Vyhľadávanie na karte SD zlyhalo"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Vyhľadávanie v ukladacom priestore USB zlyhalo (Dôvod: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Vyhľadávanie v ukladacom priestore zlyhalo (Dôvod: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Vyhľadávanie na karte SD zlyhalo. (Dôvod: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Chyba I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Nie je k dispozícii dostatok pamäte (súbor môže byť príliš veľký)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Analýza karty vCard z neznámeho dôvodu zlyhala."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formát nie je podporovaný."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Importovanie vizitky vCard zlyhalo"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"V ukladacom priestore USB nebola nájdená žiadna karta vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"V ukladacom priestore sa nenašiel žiadny súbor vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Na karte SD nebol nájdený žiadny súbor vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Zhromaždenie metainformácií zadaných súborov vCard zlyhalo."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Import jedného alebo viacerých súborov zlyhal (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Export údajov kontaktov zlyhal"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Export údajov kontaktov zlyhal."\n"Príčina chyby: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nedá sa exportovať nijaký kontakt"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"V ukladacom priestore USB je príliš veľa súborov vCard"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"V ukladacom priestore je príliš veľa súborov vCard"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Na karte SD sa nachádza príliš veľa súborov vCard"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Požadovaný názov súboru (<xliff:g id="FILENAME">%s</xliff:g>) je príliš dlhý"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Export vizitky <xliff:g id="FILENAME">%s</xliff:g> bol dokončený"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b44a10e..f199e47 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"fotografija stika"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Pomnilnik USB ni na voljo"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Pomnilnik ni na voljo"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Ni kartice SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Pomnilnik USB ni zaznan"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Ni pomnilnika"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Kartica SD ni bila zaznana"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Iskanje vizitke vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Uvozi s kartice SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Uvozi iz pomnilnika USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Uvoz iz pomnilnika"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Uvozi s kartice SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Izvozi v pomnilnik USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Izvoz v pomnilnik"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Izvozi na kartico SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Vidne stike deli z drugimi"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Uvozi eno datoteko z vizitko vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Uvozi več datotek z vizitko vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Uvozi vse datoteke vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Iskanje podatkov vCard v pomnilniku USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Iskanje podatkov vCard v pomnilniku"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Iskanje podatkov vCard na kartici SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Pregledovanje pomnilnika USB ni uspelo"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Pregled pomnilnika ni uspel"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Pregledovanje kartice SD ni bilo uspešno"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Pregledovanje pomnilnika USB ni uspelo (Vzrok: »<xliff:g id="FAIL_REASON">%s</xliff:g>«)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Pregled pomnilnika ni uspel (Vzrok: »<xliff:g id="FAIL_REASON">%s</xliff:g>«)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Pregledovanje kartice SD ni bilo uspešno (Razlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Vhodno/izhodna napaka"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Ni dovolj pomnilnika (morda je datoteka prevelika)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Iz neznanega razloga razčlenjevanje vizitke vCard ni bilo uspešno"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Oblika zapisa ni podprta."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Uvoz kartice vCard ni uspel"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Na disku USB ni datotek vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"V pomnilniku ni datotek vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Na kartici SD ni datotek vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Metapodatkov datotek(e) vCard ni bilo mogoče zbrati."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Ene ali več datotek ni bilo mogoče uvoziti (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Podatkov o stiku ni bilo mogoče izvoziti"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Izvoz podatkov o stiku ni bil uspešen."\n"Razlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Ni stikov za izvoz"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Preveč datotek vCard v pomnilniku USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"V pomnilniku je preveč datotek vCard"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Preveč datotek vCard na kartici SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Zahtevano ime datoteke je predolgo (<xliff:g id="FILENAME">%s</xliff:g>)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Končan izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ace95b4..76a6406 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"фотографија контакта"</string>
     <string name="description_minus_button" msgid="387136707700230172">"минус"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плус"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB меморија је недоступна"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Меморија је недоступна"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нема SD картице"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Није откривена USB меморија"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Није откривена меморија"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Није изабрана ниједна SD картица"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Претрага дигиталне визиткарте"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Увези са SIM картице"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Увоз из USB меморије"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Увези из меморије"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Увези са SD картице"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Извези у USB меморију"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Извези у меморију"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Извези на SD картицу"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Дели видљиве контакте"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Увези једну датотеку дигиталне визиткарте"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Увези више датотека дигиталних визиткарата"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Увези све датотеке дигиталних визиткарата"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Тражење података дигиталне визиткарте у USB меморији"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Тражење vCard података у меморији"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"У току је претрага података о дигиталним визиткартама на SD картици"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Неуспешно скенирање USB меморије"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Скенирање меморије није успело"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Скенирање SD картице није успело"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Неуспешно скенирање USB меморије (Разлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Скенирање меморије није успело (разлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Скенирање SD картице није успело (разлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O грешка"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Нема довољно меморије (датотека је можда превелика)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Рашчлањивање дигиталне визиткарте није успело из неочекиваног разлога"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Формат није подржан."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Увоз vCard датотеке није успео"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"У USB меморији није пронађена ниједна vCard датотека"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"У меморији није пронађена ниједна vCard датотека"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"На SD картици није пронађена ниједна vCard датотека"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Неуспешно прикупљање мета података за дате датотеке дигиталне визиткарте."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Увоз неких датотека није успео (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Извоз података о контактима није успео"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Извоз података о контактима није успео."\n"Разлог неуспеха: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Нема контаката за извоз"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Превише датотека дигиталне визиткарте у USB меморији"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Превише је vCard датотека у меморији"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD картица садржи превише датотека дигиталних визиткарата"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Захтевани назив датотеке је предугачак („<xliff:g id="FILENAME">%s</xliff:g>“)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Извоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је завршен"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index b13bd3f..d4af9de 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbild"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB-enhet ej tillgänglig"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lagring otillgänglig"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Inget SD-kort"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Ingen USB-enhet hittades"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Ingen lagringsenhet hittades"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Inget SD-kort hittades"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Söker efter vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Importera från SIM-kort"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Importera från USB-enhet"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Importera från lagring"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Importera från SD-kort"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Exportera till USB-enhet"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Exportera till lagring"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Exportera till SD-kort"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Dela synliga kontakter"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Importera en vCard-fil"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importera flera vCard-filer"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Importera alla vCard-filer"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Söker efter vCard-data på USB-lagringsenhet"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Sökning efter vCard-data på lagringsenheten pågår"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Söker efter vCard-data på SD-kort"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Det gick inte att söka igenom USB-lagringsenheten"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Det gick inte att söka igenom lagringsenheten"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Det gick inte att läsa SD-kort"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Det gick inte att söka igenom USB-lagringsenheten (orsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Det gick inte att söka igenom lagringsenheten (orsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Det gick inte att skanna SD-kortet (orsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O-fel"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Det finns för lite minne (filen kan vara för stor)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Det gick inte att analysera vCard av okänd anledning"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Formatet stöds inte."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Det gick inte att importera vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Det finns ingen vCard-fil på USB-lagringsenheten"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Det finns ingen vCard-fil på lagringsenheten"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Det finns ingen vCard-fil på SD-kortet"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Det går inte att samla in metainformation för den eller de givna vCard-filerna."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"En eller flera filer kunde inte importeras: (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Det gick inte att exportera kontaktdata"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Det gick inte att exportera kontaktdata."\n"Orsak: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Det finns ingen kontakt som kan exporteras"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"För många vCard-filer på USB-lagringsenheten"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"För många vCard-filer på lagringsenheten"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"För många vCard-filer på SD-kortet"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Det obligatoriska filnamnet är för långt (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"<xliff:g id="FILENAME">%s</xliff:g> har exporterats"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 64e7bde..98b3869 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"ภาพของรายชื่อ"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"ที่เก็บข้อมูล USB ใช้งานไม่ได้"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"ไม่มีที่เก็บข้อมูล"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"ไม่มีการ์ด SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"ไม่พบที่เก็บข้อมูล USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"ไม่พบที่เก็บข้อมูล"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"ไม่พบการ์ด SD"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"กำลังค้นหา vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"นำเข้าจากซิมการ์ด"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"นำเข้าจากที่เก็บข้อมูล USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"นำเข้าจากที่เก็บข้อมูล"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"นำเข้าจากการ์ด SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"ส่งออกไปยังที่เก็บข้อมูล USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"ส่งออกไปยังที่เก็บข้อมูล"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"ส่งออกไปยังการ์ด SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"แบ่งปันสมุดโทรศัพท์ที่มองเห็น"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"นำเข้าไฟล์ vCard หนึ่งไฟล์"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"นำเข้าไฟล์ vCard หลายไฟล์"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"นำเข้าไฟล์ vCard ทั้งหมด"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"กำลังค้นหาข้อมูล vCard ในที่เก็บข้อมูล USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"กำลังค้นหาข้อมูล vCard ในที่เก็บข้อมูล"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"กำลังค้นหาข้อมูล vCard บนการ์ด SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"การสแกนที่เก็บข้อมูล USB ล้มเหลว"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"การสแกนที่เก็บข้อมูลล้มเหลว"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"การสแกนการ์ด SD ล้มเหลว"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"การสแกนที่เก็บข้อมูล USB ล้มเหลว (เหตุผล: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"การสแกนที่เก็บข้อมูลล้มเหลว (เหตุผล: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"การสแกนการ์ด SD ล้มเหลว (เหตุผล: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"ข้อผิดพลาด I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"หน่วยความจำไม่เพียงพอ (ไฟล์อาจใหญ่เกินไป)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"แยกวิเคราะห์ vCard ไม่สำเร็จด้วยเหตุผลที่ไม่คาดคิด"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"รูปแบบไม่ได้รับการสนับสนุน"</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"ไม่สามารถนำเข้า vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"ไม่พบไฟล์ vCard ในที่เก็บข้อมูล USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"ไม่พบไฟล์ vCard ในที่เก็บข้อมูล"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"ไม่พบไฟล์ vCard บนการ์ด SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"รวบรวมข้อมูลเมตาของไฟล์ vCard ที่ระบุไม่สำเร็จ"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"นำเข้าไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไปไม่สำเร็จ (%s)"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"ส่งออกข้อมูลรายชื่อในสมุดโทรศัพท์ไม่สำเร็จ"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"ส่งออกข้อมูลรายชื่อไม่สำเร็จ"\n"เหตุผลที่ล้มเหลว: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"ไม่มีรายชื่อในสมุดโทรศัพท์ที่สามารถส่งออกได้"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"มีไฟล์ vCard มากเกินไปในที่เก็บข้อมูล USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"มีไฟล์ vCard มากเกินไปในที่เก็บข้อมูล"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"มีไฟล์ vCard บนการ์ด SD มากเกินไป"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"ชื่อไฟล์ที่ต้องใช้ยาวเกินไป (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"ส่งออก <xliff:g id="FILENAME">%s</xliff:g> เรียบร้อยแล้ว"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index db502e9..baf53b0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"larawan ng contact"</string>
     <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Di available USB storage"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Hindi available ang imbakan"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Walang SD card"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Walang nakitang imbakan na USB"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Walang natukoy na imbakan"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Walang natukoy na SD card"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Paghahanap ng vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"I-import mula sa SIM card"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Import sa imbakan na USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"I-import mula sa imbakan"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Mag-import mula sa SD card"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Export sa imbakan na USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"I-export sa imbakan"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Mag-export sa SD card"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Magbahagi ng mga nakikitang contact"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Mag-import nang isang vCard file"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Mag-import ng maramihang vCard file"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"I-import ang lahat ng mga vCard file"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Naghahanap ng vCard data sa imbakan na USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Naghahanap para sa data ng vCard sa imbakan"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Naghahanap ng data ng vCard sa SD card"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Nabigo ang pag-scan ng imbakan na USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Nabigo ang pag-scan ng imbakan"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Nabigo ang pag-scan sa SD card"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Nabigo ang pag-scan ng imbakan na USB (Dahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Nabigo ang pag-scan ng imbakan (Dahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Nabigo ang pag-scan sa SD card (Dahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Error na I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Hindi sapat ang memorya (maaaring masyadong malaki ang file)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Nabigong i-parse ang vCard para sa di-inaasahang dahilan"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Hindi suportado ang format."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Nabigong i-import ang vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Walang nakitang vCard file sa imabakan ng USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Walang nakitang vCard file sa imbakan"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Walang nakitang vCard file sa SD card"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Nabigong kumolekta ng impormasyon na meta ng ibinigay na (mga) vCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Nabigo ang isa o higit pang file upang ma-import (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Nabigong i-export ang data ng contact"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Nabigong i-export ang data ng contact."\n"Dahilan sa pagkabigo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Walang nae-export na contact"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Masyadong maraming vCard file sa imbakan na USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Masyadong maraming vCard file sa imbakan"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Masyadong maraming vCard file sa SD card"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Ang kinakailangang filename ay masyadong mahaba (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Tapos na ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 299d36d..3c23eb2 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"kişi fotoğrafı"</string>
     <string name="description_minus_button" msgid="387136707700230172">"eksi"</string>
     <string name="description_plus_button" msgid="515164827856229880">"artı"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"USB depl birimi kullnlmyr"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Depolama birimi yok"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SD kart yok"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"USB deplm birimi algılanmadı"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Hiçbir depl birimi algılanmadı"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Hiçbir SD kart tespit edilmedi"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"vCard aranıyor"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"SIM karttan içe aktar"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"USB depl birmndn içe aktr"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Depl biriminden içe aktar"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"SD karttan içe aktar"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"USB deplm birmn dışa aktr"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Depolama birimine aktar"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"SD karta dışa aktar"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Görülebilir kişileri paylaş"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Bir vCard dosyasını içe aktar"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Birden fazla vCard dosyasını içe aktar"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Tüm vCard dosyalarını içe aktar"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"USB depolama birimindeki vCard verileri aranıyor"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Depolama birimindeki vCard verileri aranıyor"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"SD kartta vCard verileri aranıyor"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"USB depolama birimi taraması başarısız oldu"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Depolama birimi taraması başarısız oldu"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"SD kart taranamadı"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"USB depolama birimi taraması başarısız oldu (Nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Depolama birimi taraması başarısız oldu (Nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"SD kart taraması başarısız oldu (Neden: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"G/Ç Hatası"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Bellek yetersiz (dosya çok büyük olabilir)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Beklenmedik bir nedenden dolayı vCard ayrıştırılamadı"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Biçim desteklenmiyor."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"vCard içe aktarılamadı"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"USB depolama biriminde herhangi bir vCard dosyası bulunamadı"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Depolama biriminde hiçbir vCard dosyası bulunamadı"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"SD kartta hiçbir vCard dosyası bulunamadı"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Belirtilen vCard dosyalarının meta bilgileri toplanamıyor."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"İçe aktarılamayan bir veya birden fazla dosya (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Kişi verileri dışa aktarılamadı"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Kişi verileri dışa aktarılamadı."\n"Hata nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Dışa aktarılabilen hiçbir kişi yok"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USB depolama biriminde çok fazla vCard dosyası var"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Depolama biriminde çok fazla vCard dosyası var"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD kartta çok fazla vCard dosyası var"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Gereken dosya adı çok uzun (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını dışa aktarma tamamlandı"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 5cc6575..ebda338 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"фото контакту"</string>
     <string name="description_minus_button" msgid="387136707700230172">"мінус"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Носій USB недоступний"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Пам’ять недоступна"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нема карти SD"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Носій USB не виявлено"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Пам’яті не виявлено"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Карту SD не виявлено"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Пошук даних vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Імортув. з SIM-карти"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Імпортувати з носія USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Імпорт із пам’яті"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Імортув. з карти SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Експортувати на носій USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Експорт у пам’ять"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Експорт. на карту SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Надісл. видимі контакти"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Імпортув. 1 файл vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Імпортув. кілька файлів vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Імпортув. всі файли vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Пошук даних vCard на носії USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Пошук даних vCard у пам’яті"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Пошук даних vCard на карті SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Помилка сканування носія USB"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Помилка сканування пам’яті"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Помилка сканув-ня SD карти"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Помилка сканування носія USB (причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Помилка сканування пам’яті (причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Помилка сканув. SD карти (Причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Помилка I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Недостатньо пам\'яті (можливо, файл завеликий)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Не вдал. проаналіз. vCard через неочік. прич."</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Формат не підтримується."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Помилка імпорту vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"На носії USB не знайдено файлів vCard"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"У пам’яті не знайдено файли vCard"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"На карті SD не знайдено файлів vCard"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Помилка отримання мета-інформації файлів даної vCard."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Не вдалося імпорт. один чи кілька файлів (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Не вдал. експорт. контактні дані"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Не вдал. експорт. контактні дані."\n"Причина помилки: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Немає доступу до експорту конт."</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Забагато файлів vCard на носії USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Забагато файлів vCard у пам’яті"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"На карті SD забагато файлів vCard"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Потрібна назва файлу задовга (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Експорт файлу <xliff:g id="FILENAME">%s</xliff:g> завершено"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 32002de..11779ff 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"ảnh của liên hệ"</string>
     <string name="description_minus_button" msgid="387136707700230172">"trừ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"cộng"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"Bộ nhớ USB không khả dụng"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Bộ nhớ không khả dụng"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Không có thẻ SD nào"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"Không phát hiện bộ nhớ USB nào"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"Không phát hiện bộ nhớ nào"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"Không phát hiện thẻ SD nào"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"Đang tìm kiếm vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"Nhập từ thẻ SIM"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"Nhập từ bộ nhớ USB"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"Nhập từ bộ nhớ"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"Nhập từ thẻ SD"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"Xuất sang bộ nhớ USB"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"Xuất sang bộ nhớ"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"Xuất sang thẻ SD"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"Chia sẻ liên hệ hiển thị"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"Nhập một tệp vCard"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"Nhập nhiều tệp vCard"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"Nhập tất cả tệp vCard"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"Đang tìm kiếm dữ liệu vCard trong bộ nhớ USB"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"Đang tìm kiếm dữ liệu vCard trong bộ nhớ"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"Đang tìm dữ liệu vCard trên thẻ SD"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"Quét bộ nhớ USB không thành công"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"Quét bộ nhớ không thành công"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"Quét thẻ SD không thành công"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"Quét bộ nhớ USB không thành công (Lý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"Quét bộ nhớ không thành công (Lý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"Quét thẻ SD không thành công (Lý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"Lỗi I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"Bộ nhớ không đủ (tệp có thể quá lớn)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Không thể phân tích cú pháp vCard vì lý do không mong muốn"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"Định dạng không được hỗ trợ."</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"Không thể nhập vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"Không tìm thấy tệp vCard trong bộ lưu trữ USB"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"Không tìm thấy tệp vCard nào trong bộ nhớ"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"Không tìm thấy tệp vCard trên thẻ SD"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"Không thể thu thập siêu thông tin của (các) tệp vCard cho trước."</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Không thể nhập một hoặc nhiều tệp (%s)."</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"Không thể xuất dữ liệu liên hệ"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Không thể xuất dữ liệu liên hệ."\n"Lý do không thành công: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Không có liên hệ có thể xuất nào"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"Quá nhiều tệp vCard trong bộ nhớ USB"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"Quá nhiều tệp vCard trong bộ nhớ"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"Quá nhiều tệp vCard trên thẻ SD"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Tên tệp yêu cầu quá dài (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"Đã xuất xong <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values-xlarge/dimens.xml b/res/values-xlarge/dimens.xml
index 6ffbb31..d29eba2 100644
--- a/res/values-xlarge/dimens.xml
+++ b/res/values-xlarge/dimens.xml
@@ -22,4 +22,5 @@
     <dimen name="action_bar_filter_max_width">120dip</dimen>
     <dimen name="action_bar_search_max_width">300dip</dimen>
     <dimen name="action_bar_search_spacing">12dip</dimen>
+    <dimen name="shortcut_icon_size">64dip</dimen>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1bfed1d..eaebeb7 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"联系人照片"</string>
     <string name="description_minus_button" msgid="387136707700230172">"删除"</string>
     <string name="description_plus_button" msgid="515164827856229880">"添加"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"不存在 USB 存储设备"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"存储设备不存在"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"无 SD 卡"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"未检测到 USB 存储设备"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"未检测到存储设备"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"未检测到 SD 卡"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"正在搜索 vCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"从 SIM 卡导入"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"从 USB 存储设备导入"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"从存储设备导入"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"从 SD 卡导入"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"导出到 USB 存储设备"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"导出到存储设备"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"导出到 SD 卡"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"分享可见的联系人"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"导入一个 vCard 文件"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"导入多个 vCard 文件"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"导入所有 vCard 文件"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"正在 USB 存储设备中搜索 vCard 文件"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"正在存储设备中搜索 vCard 文件"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"正在 SD 卡中搜索 vCard 数据"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"扫描 USB 存储设备时失败"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"扫描存储设备时失败"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"扫描 SD 卡失败"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"扫描 USB 存储设备时失败(原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"扫描存储设备时失败(原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"扫描 SD 卡失败(原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O 错误"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"存储器空间不足(文件可能过大)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"由于意外原因而无法解析 vCard"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"不支持此格式。"</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"未能导入 vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"未在 USB 存储设备中找到 vCard 文件"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"未在存储设备中找到 vCard 文件"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"未在 SD 卡上找到 vCard 文件"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"无法收集指定的 vCard 文件的元信息。"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"一个或多个文件导入失败 (%s)。"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"导出联系人数据失败"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"导出联系人数据失败。"\n"失败原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"没有可导出的联系人"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USB 存储设备中的 vCard 文件太多"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"存储设备中的 vCard 文件过多"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD 卡中的 vCard 文件太多"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"所需文件名太长(“<xliff:g id="FILENAME">%s</xliff:g>”)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"导出 <xliff:g id="FILENAME">%s</xliff:g> 已完成"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 0341597..f562604 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -208,32 +208,32 @@
     <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
     <string name="description_minus_button" msgid="387136707700230172">"負號"</string>
     <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
-    <string name="no_sdcard_title" product="nosdcard" msgid="5362631473262100989">"沒有可用的 USB 儲存裝置"</string>
+    <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"儲存裝置無法使用"</string>
     <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"無 SD 卡"</string>
-    <string name="no_sdcard_message" product="nosdcard" msgid="8045830739790534254">"未偵測到 USB 儲存裝置"</string>
+    <string name="no_sdcard_message" product="nosdcard" msgid="1334170151822669976">"未偵測到儲存裝置"</string>
     <string name="no_sdcard_message" product="default" msgid="6019391476490445358">"未偵測到 SD 卡"</string>
     <string name="searching_vcard_title" msgid="4970508055399376813">"正在搜尋 VCard"</string>
     <string name="import_from_sim" msgid="3859272228033941659">"從 SIM 卡匯入"</string>
-    <string name="import_from_sdcard" product="nosdcard" msgid="8294728696808674154">"從 USB 儲存裝置匯入"</string>
+    <string name="import_from_sdcard" product="nosdcard" msgid="8668347930577565175">"從儲存裝置匯入"</string>
     <string name="import_from_sdcard" product="default" msgid="8550360976693202816">"從 SD 卡匯入"</string>
-    <string name="export_to_sdcard" product="nosdcard" msgid="7201274701382901259">"匯出到 USB 儲存裝置"</string>
+    <string name="export_to_sdcard" product="nosdcard" msgid="6092815580965201089">"匯出到儲存裝置"</string>
     <string name="export_to_sdcard" product="default" msgid="2597105442616166277">"匯出至 SD 卡"</string>
     <string name="share_visible_contacts" msgid="890150378880783797">"分享正常顯示的聯絡人"</string>
     <string name="import_one_vcard_string" msgid="9059163467020328433">"匯入一個 vCard 檔案"</string>
     <string name="import_multiple_vcard_string" msgid="3810226492811062392">"匯入多個 vCard 檔案"</string>
     <string name="import_all_vcard_string" msgid="5518136113853448474">"匯入所有 vCard 檔案"</string>
-    <string name="searching_vcard_message" product="nosdcard" msgid="8214795338181412751">"正在 USB 儲存裝置中搜尋 vCard 資料"</string>
+    <string name="searching_vcard_message" product="nosdcard" msgid="996170203695743981">"正在搜尋儲存裝置中的 vCard 資料"</string>
     <string name="searching_vcard_message" product="default" msgid="6917522333561434546">"在 SD 卡上搜尋 VCard 資料"</string>
-    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="7447077516493667568">"掃描 USB 儲存裝置失敗"</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="6957414493948497249">"無法掃描儲存裝置"</string>
     <string name="scanning_sdcard_failed_title" product="default" msgid="3506782007953167180">"無法掃描 SD 卡"</string>
-    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="5645544323676912703">"掃描 USB 儲存裝置失敗 (原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」)"</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard" msgid="4106156155205860626">"無法掃描儲存裝置 (原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」)"</string>
     <string name="scanning_sdcard_failed_message" product="default" msgid="3761992500690182922">"無法掃描 SD 卡 (原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」)"</string>
     <string name="fail_reason_io_error" msgid="5922864781066136340">"I/O 錯誤"</string>
     <string name="fail_reason_low_memory_during_import" msgid="7514918659342886381">"記憶體不足 (檔案可能過大)"</string>
     <string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"因未預期原因,無法剖析 VCard"</string>
     <string name="fail_reason_not_supported" msgid="294499264620201243">"不支援這種格式。"</string>
     <string name="vcard_import_failed" msgid="7718330063493653085">"無法匯入 vCard"</string>
-    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="8809370398968655782">"在 USB 儲存裝置中找不到 vCard 檔案"</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard" msgid="6339234836196984924">"在儲存裝置中找不到 vCard 檔案"</string>
     <string name="import_failure_no_vcard_file" product="default" msgid="1730986357514922756">"在 SD 卡上找不到 vCard 檔案"</string>
     <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="4154492282316067754">"無法從指定的 vCard 檔案收集中繼資料。"</string>
     <string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"無法匯入一或多個檔案 (%s)。"</string>
@@ -259,7 +259,7 @@
     <string name="exporting_contact_failed_title" msgid="585823094820602526">"無法匯出聯絡人資料"</string>
     <string name="exporting_contact_failed_message" msgid="4151348002470298092">"匯出聯絡人資料失敗。"\n"失敗原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
     <string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"沒有可匯出的聯絡人"</string>
-    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="2638638826954895225">"USB 儲存裝置中的 vCard 檔案過多"</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard" msgid="3745507837635270265">"儲存裝置中的 vCard 檔案過多"</string>
     <string name="fail_reason_too_many_vcard" product="default" msgid="7084146295639672658">"SD 卡中的 VCard 檔案過多"</string>
     <string name="fail_reason_too_long_filename" msgid="1915716071321839166">"要求的檔案名稱過長 (「<xliff:g id="FILENAME">%s</xliff:g>」)"</string>
     <string name="exporting_vcard_finished_title" msgid="4259736138838583213">"已完成匯出 <xliff:g id="FILENAME">%s</xliff:g>"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
new file mode 100644
index 0000000..6ebaa1f
--- /dev/null
+++ b/res/values/config.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+
+<resources>
+
+    <!-- Amount of memory in bytes allocated for photo cache -->
+    <integer name="config_photo_cache_max_bytes">2000000</integer>
+
+    <!-- Number of decoded photo bitmaps retained in an LRU cache -->
+    <integer name="config_photo_cache_max_bitmaps">48</integer>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0b2cffd..47150b4 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -73,4 +73,6 @@
     <!-- Spacing on the left the search field in the action bar -->
     <dimen name="action_bar_search_spacing">12dip</dimen>
 
+    <!-- Size of the shortcut icon. 0dip means: use the system default -->    
+    <dimen name="shortcut_icon_size">0dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d09904a..4c75705 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -680,13 +680,13 @@
     -->
     <string name="description_plus_button">plus</string>
 
-    <!-- Dialog title shown when USB storage does not exist [CHAR LIMIT=25] -->
-    <string name="no_sdcard_title" product="nosdcard">USB storage unavailable</string>
+    <!-- Dialog title shown when (USB) storage does not exist [CHAR LIMIT=25] -->
+    <string name="no_sdcard_title" product="nosdcard">Storage unavailable</string>
     <!-- Dialog title shown when SD Card does not exist -->
     <string name="no_sdcard_title" product="default">No SD card</string>
 
-    <!-- Dialog message shown when USB storage does not exist [CHAR LIMIT=30] -->
-    <string name="no_sdcard_message" product="nosdcard">No USB storage detected</string>
+    <!-- Dialog message shown when (USB) storage does not exist [CHAR LIMIT=30] -->
+    <string name="no_sdcard_message" product="nosdcard">No storage detected</string>
     <!-- Dialog message shown when SDcard does not exist -->
     <string name="no_sdcard_message" product="default">No SD card detected</string>
 
@@ -696,13 +696,13 @@
     <!-- Action string for selecting SIM for importing contacts -->
     <string name="import_from_sim">Import from SIM card</string>
 
-    <!-- Action string for selecting USB storage for importing contacts [CHAR LIMIT=25] -->
-    <string name="import_from_sdcard" product="nosdcard">Import from USB storage</string>
+    <!-- Action string for selecting (USB) storage for importing contacts [CHAR LIMIT=25] -->
+    <string name="import_from_sdcard" product="nosdcard">Import from storage</string>
     <!-- Action string for selecting SD Card for importing contacts -->
     <string name="import_from_sdcard" product="default">Import from SD card</string>
 
-    <!-- Action that exports all contacts to USB storage [CHAR LIMIT=25] -->
-    <string name="export_to_sdcard" product="nosdcard">Export to USB storage</string>
+    <!-- Action that exports all contacts to (USB) storage [CHAR LIMIT=25] -->
+    <string name="export_to_sdcard" product="nosdcard">Export to storage</string>
     <!-- Action that exports all contacts to SD Card -->
     <string name="export_to_sdcard" product="default">Export to SD card</string>
 
@@ -724,19 +724,19 @@
          than one vCard files available in the system. -->
     <string name="import_all_vcard_string">Import all vCard files</string>
 
-    <!-- Dialog message shown when searching VCard data from SD Card [CHAR LIMIT=NONE] -->
-    <string name="searching_vcard_message" product="nosdcard">Searching for vCard data in USB storage</string>
+    <!-- Dialog message shown when searching VCard data from (USB) storage [CHAR LIMIT=NONE] -->
+    <string name="searching_vcard_message" product="nosdcard">Searching for vCard data in storage</string>
     <!-- Dialog message shown when searching VCard data from SD Card -->
     <string name="searching_vcard_message" product="default">Searching for vCard data on SD card</string>
 
     <!-- Dialog title shown when scanning VCard data failed. [CHAR LIMIT=NONE] -->
-    <string name="scanning_sdcard_failed_title" product="nosdcard">Scanning USB storage failed</string>
+    <string name="scanning_sdcard_failed_title" product="nosdcard">Scanning storage failed</string>
     <!-- Dialog title shown when scanning VCard data failed. -->
     <string name="scanning_sdcard_failed_title" product="default">Scanning SD card failed</string>
 
     <!-- Dialog message shown when searching VCard data failed.
          An exact reason for the failure should [CHAR LIMIT=NONE] -->
-    <string name="scanning_sdcard_failed_message" product="nosdcard">Scanning USB storage failed (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
+    <string name="scanning_sdcard_failed_message" product="nosdcard">Scanning storage failed (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
     <!-- Dialog message shown when searching VCard data failed.
          An exact reason for the failure should -->
     <string name="scanning_sdcard_failed_message" product="default">Scanning SD card failed (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
@@ -762,9 +762,9 @@
     <string name="vcard_import_failed">Failed to import vCard</string>
 
     <!-- The failure message shown when the system could not find any vCard file.
-         (with extension ".vcf" in USB storage.)
+         (with extension ".vcf" in (USB) storage.)
          [CHAR LIMIT=128] -->
-    <string name="import_failure_no_vcard_file" product="nosdcard">No vCard file found in the USB storage</string>
+    <string name="import_failure_no_vcard_file" product="nosdcard">No vCard file found in the storage</string>
     <!-- The failure message shown when the system could not find any vCard file.
          (with extension ".vcf" in SDCard.)
          [CHAR LIMIT=128] -->
@@ -864,7 +864,7 @@
 
     <!-- The failed reason shown when vCard exporter could not create a file for the vCard since
          there are too many files relevant to vCard. [CHAR LIMIT=NONE] -->
-    <string name="fail_reason_too_many_vcard" product="nosdcard">Too many vCard files in the USB storage</string>
+    <string name="fail_reason_too_many_vcard" product="nosdcard">Too many vCard files in the storage</string>
     <!-- The failed reason shown when vCard exporter could not create a file for the vCard since
          there are too many files relevant to vCard. -->
     <string name="fail_reason_too_many_vcard" product="default">Too many vCard files on the SD card</string>
diff --git a/src/com/android/contacts/CallContactActivity.java b/src/com/android/contacts/CallContactActivity.java
index 38e890d..77bf20c 100644
--- a/src/com/android/contacts/CallContactActivity.java
+++ b/src/com/android/contacts/CallContactActivity.java
@@ -44,7 +44,8 @@
             finish();
         }
 
-        // If we are being invoked with a saved state, rely on Activity to restore it
+        // If this method is being invoked with a saved state, rely on Activity
+        // to restore it
         if (savedInstanceState != null) {
             return;
         }
@@ -57,6 +58,7 @@
         }
     }
 
+    @Override
     public void onDismiss(DialogInterface dialog) {
         if (!isChangingConfigurations()) {
             finish();
diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
new file mode 100644
index 0000000..914b697
--- /dev/null
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -0,0 +1,746 @@
+/*
+ * Copyright (C) 2010 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 com.android.contacts.model.AccountTypeManager;
+import com.google.android.collect.Lists;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Handler.Callback;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Contacts.Photo;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.util.Log;
+import android.util.LruCache;
+import android.widget.ImageView;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Asynchronously loads contact photos and maintains a cache of photos.
+ */
+public abstract class ContactPhotoManager {
+
+    static final String TAG = "ContactPhotoManager";
+
+    public static final String CONTACT_PHOTO_SERVICE = "contactPhotos";
+
+    /**
+     * The resource ID of the image to be used when the photo is unavailable or being
+     * loaded.
+     */
+    protected final int mDefaultResourceId = R.drawable.ic_contact_picture;
+
+    /**
+     * Requests the singleton instance of {@link AccountTypeManager} with data bound from
+     * the available authenticators. This method can safely be called from the UI thread.
+     */
+    public static ContactPhotoManager getInstance(Context context) {
+        ContactPhotoManager service =
+                (ContactPhotoManager) context.getSystemService(CONTACT_PHOTO_SERVICE);
+        if (service == null) {
+            service = createContactPhotoManager(context);
+            Log.e(TAG, "No contact photo service in context: " + context);
+        }
+        return service;
+    }
+
+    public static synchronized ContactPhotoManager createContactPhotoManager(Context context) {
+        return new ContactPhotoManagerImpl(context);
+    }
+
+    /**
+     * Load photo into the supplied image view.  If the photo is already cached,
+     * it is displayed immediately.  Otherwise a request is sent to load the photo
+     * from the database.
+     */
+    public abstract void loadPhoto(ImageView view, long photoId);
+
+    /**
+     * Load photo into the supplied image view.  If the photo is already cached,
+     * it is displayed immediately.  Otherwise a request is sent to load the photo
+     * from the location specified by the URI.
+     */
+    public abstract void loadPhoto(ImageView view, Uri photoUri);
+
+    /**
+     * Temporarily stops loading photos from the database.
+     */
+    public abstract void pause();
+
+    /**
+     * Resumes loading photos from the database.
+     */
+    public abstract void resume();
+
+    /**
+     * Marks all cached photos for reloading.  We can continue using cache but should
+     * also make sure the photos haven't changed in the background and notify the views
+     * if so.
+     */
+    public abstract void refreshCache();
+
+    /**
+     * Initiates a background process that over time will fill up cache with
+     * preload photos.
+     */
+    public abstract void preloadPhotosInBackground();
+}
+
+class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback {
+    private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
+
+    /**
+     * Type of message sent by the UI thread to itself to indicate that some photos
+     * need to be loaded.
+     */
+    private static final int MESSAGE_REQUEST_LOADING = 1;
+
+    /**
+     * Type of message sent by the loader thread to indicate that some photos have
+     * been loaded.
+     */
+    private static final int MESSAGE_PHOTOS_LOADED = 2;
+
+    private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+    private static final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
+
+    /**
+     * Maintains the state of a particular photo.
+     */
+    private static class BitmapHolder {
+        final byte[] bytes;
+
+        volatile boolean fresh;
+        Bitmap bitmap;
+        SoftReference<Bitmap> bitmapRef;
+
+        public BitmapHolder(byte[] bytes) {
+            this.bytes = bytes;
+            this.fresh = true;
+        }
+    }
+
+    private final Context mContext;
+
+    /**
+     * An LRU cache for bitmap holders. The cache contains bytes for photos just
+     * as they come from the database. Each holder has a soft reference to the
+     * actual bitmap.
+     */
+    private final LruCache<Object, BitmapHolder> mBitmapHolderCache;
+
+    /**
+     * Cache size threshold at which bitmaps will not be preloaded.
+     */
+    private final int mBitmapHolderCacheRedZoneBytes;
+
+    /**
+     * Level 2 LRU cache for bitmaps. This is a smaller cache that holds
+     * the most recently used bitmaps to save time on decoding
+     * them from bytes (the bytes are stored in {@link #mBitmapHolderCache}.
+     */
+    private final LruCache<Object, Bitmap> mBitmapCache;
+
+    /**
+     * A map from ImageView to the corresponding photo ID. Please note that this
+     * photo ID may change before the photo loading request is started.
+     */
+    private final ConcurrentHashMap<ImageView, Object> mPendingRequests =
+            new ConcurrentHashMap<ImageView, Object>();
+
+    /**
+     * Handler for messages sent to the UI thread.
+     */
+    private final Handler mMainThreadHandler = new Handler(this);
+
+    /**
+     * Thread responsible for loading photos from the database. Created upon
+     * the first request.
+     */
+    private LoaderThread mLoaderThread;
+
+    /**
+     * A gate to make sure we only send one instance of MESSAGE_PHOTOS_NEEDED at a time.
+     */
+    private boolean mLoadingRequested;
+
+    /**
+     * Flag indicating if the image loading is paused.
+     */
+    private boolean mPaused;
+
+    public ContactPhotoManagerImpl(Context context) {
+        mContext = context;
+
+        Resources resources = context.getResources();
+        mBitmapCache = new LruCache<Object, Bitmap>(
+                resources.getInteger(R.integer.config_photo_cache_max_bitmaps));
+        int maxBytes = resources.getInteger(R.integer.config_photo_cache_max_bytes);
+        mBitmapHolderCache = new LruCache<Object, BitmapHolder>(maxBytes) {
+            @Override protected int sizeOf(Object key, BitmapHolder value) {
+                return value.bytes != null ? value.bytes.length : 0;
+            }
+        };
+        mBitmapHolderCacheRedZoneBytes = (int) (maxBytes * 0.75);
+    }
+
+    @Override
+    public void preloadPhotosInBackground() {
+        ensureLoaderThread();
+        mLoaderThread.requestPreloading();
+    }
+
+    @Override
+    public void loadPhoto(ImageView view, long photoId) {
+        if (photoId == 0) {
+            // No photo is needed
+            view.setImageResource(mDefaultResourceId);
+            mPendingRequests.remove(view);
+        } else {
+            loadPhotoByIdOrUri(view, photoId);
+        }
+    }
+
+    @Override
+    public void loadPhoto(ImageView view, Uri photoUri) {
+        if (photoUri == null) {
+            // No photo is needed
+            view.setImageResource(mDefaultResourceId);
+            mPendingRequests.remove(view);
+        } else {
+            loadPhotoByIdOrUri(view, photoUri);
+        }
+    }
+
+    private void loadPhotoByIdOrUri(ImageView view, Object key) {
+        boolean loaded = loadCachedPhoto(view, key);
+        if (loaded) {
+            mPendingRequests.remove(view);
+        } else {
+            mPendingRequests.put(view, key);
+            if (!mPaused) {
+                // Send a request to start loading photos
+                requestLoading();
+            }
+        }
+    }
+
+    @Override
+    public void refreshCache() {
+        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+            holder.fresh = false;
+        }
+    }
+
+    /**
+     * Checks if the photo is present in cache.  If so, sets the photo on the view.
+     *
+     * @return false if the photo needs to be (re)loaded from the provider.
+     */
+    private boolean loadCachedPhoto(ImageView view, Object key) {
+        BitmapHolder holder = mBitmapHolderCache.get(key);
+        if (holder == null) {
+            // The bitmap has not been loaded - should display the placeholder image.
+            view.setImageResource(mDefaultResourceId);
+            return false;
+        }
+
+        if (holder.bytes == null) {
+            view.setImageResource(mDefaultResourceId);
+            return holder.fresh;
+        }
+
+        // Optionally decode bytes into a bitmap
+        inflateBitmap(holder);
+
+        view.setImageBitmap(holder.bitmap);
+
+        // Put the bitmap in the LRU cache
+        mBitmapCache.put(key, holder.bitmap);
+
+        // Soften the reference
+        holder.bitmap = null;
+
+        return holder.fresh;
+    }
+
+    /**
+     * If necessary, decodes bytes stored in the holder to Bitmap.  As long as the
+     * bitmap is held either by {@link #mBitmapCache} or by a soft reference in
+     * the holder, it will not be necessary to decode the bitmap.
+     */
+    private void inflateBitmap(BitmapHolder holder) {
+        byte[] bytes = holder.bytes;
+        if (bytes == null || bytes.length == 0) {
+            return;
+        }
+
+        // Check the soft reference.  If will be retained if the bitmap is also
+        // in the LRU cache, so we don't need to check the LRU cache explicitly.
+        if (holder.bitmapRef != null) {
+            holder.bitmap = holder.bitmapRef.get();
+            if (holder.bitmap != null) {
+                return;
+            }
+        }
+
+        try {
+            Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
+            holder.bitmap = bitmap;
+            holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+        } catch (OutOfMemoryError e) {
+            // Do nothing - the photo will appear to be missing
+        }
+    }
+
+    public void clear() {
+        mPendingRequests.clear();
+        mBitmapHolderCache.evictAll();
+    }
+
+    @Override
+    public void pause() {
+        mPaused = true;
+    }
+
+    @Override
+    public void resume() {
+        mPaused = false;
+        if (!mPendingRequests.isEmpty()) {
+            requestLoading();
+        }
+    }
+
+    /**
+     * Sends a message to this thread itself to start loading images.  If the current
+     * view contains multiple image views, all of those image views will get a chance
+     * to request their respective photos before any of those requests are executed.
+     * This allows us to load images in bulk.
+     */
+    private void requestLoading() {
+        if (!mLoadingRequested) {
+            mLoadingRequested = true;
+            mMainThreadHandler.sendEmptyMessage(MESSAGE_REQUEST_LOADING);
+        }
+    }
+
+    /**
+     * Processes requests on the main thread.
+     */
+    public boolean handleMessage(Message msg) {
+        switch (msg.what) {
+            case MESSAGE_REQUEST_LOADING: {
+                mLoadingRequested = false;
+                if (!mPaused) {
+                    ensureLoaderThread();
+                    mLoaderThread.requestLoading();
+                }
+                return true;
+            }
+
+            case MESSAGE_PHOTOS_LOADED: {
+                if (!mPaused) {
+                    processLoadedImages();
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void ensureLoaderThread() {
+        if (mLoaderThread == null) {
+            mLoaderThread = new LoaderThread(mContext.getContentResolver());
+            mLoaderThread.start();
+        }
+    }
+
+    /**
+     * Goes over pending loading requests and displays loaded photos.  If some of the
+     * photos still haven't been loaded, sends another request for image loading.
+     */
+    private void processLoadedImages() {
+        Iterator<ImageView> iterator = mPendingRequests.keySet().iterator();
+        while (iterator.hasNext()) {
+            ImageView view = iterator.next();
+            Object key = mPendingRequests.get(view);
+            boolean loaded = loadCachedPhoto(view, key);
+            if (loaded) {
+                iterator.remove();
+            }
+        }
+
+        softenCache();
+
+        if (!mPendingRequests.isEmpty()) {
+            requestLoading();
+        }
+    }
+
+    /**
+     * Removes strong references to loaded bitmaps to allow them to be garbage collected
+     * if needed.  Some of the bitmaps will still be retained by {@link #mBitmapCache}.
+     */
+    private void softenCache() {
+        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+            holder.bitmap = null;
+        }
+    }
+
+    /**
+     * Stores the supplied bitmap in cache.
+     */
+    private void cacheBitmap(Object key, byte[] bytes, boolean preloading) {
+        BitmapHolder holder = new BitmapHolder(bytes);
+        holder.fresh = true;
+
+        // Unless this image is being preloaded, decode it right away while
+        // we are still on the background thread.
+        if (!preloading) {
+            inflateBitmap(holder);
+        }
+
+        mBitmapHolderCache.put(key, holder);
+    }
+
+    /**
+     * Populates an array of photo IDs that need to be loaded.
+     */
+    private void obtainPhotoIdsAndUrisToLoad(ArrayList<Long> photoIds,
+            ArrayList<String> photoIdsAsStrings, ArrayList<Uri> uris) {
+        photoIds.clear();
+        photoIdsAsStrings.clear();
+        uris.clear();
+
+        /*
+         * Since the call is made from the loader thread, the map could be
+         * changing during the iteration. That's not really a problem:
+         * ConcurrentHashMap will allow those changes to happen without throwing
+         * exceptions. Since we may miss some requests in the situation of
+         * concurrent change, we will need to check the map again once loading
+         * is complete.
+         */
+        Iterator<Object> iterator = mPendingRequests.values().iterator();
+        while (iterator.hasNext()) {
+            Object key = iterator.next();
+            BitmapHolder holder = mBitmapHolderCache.get(key);
+            if (holder == null || !holder.fresh) {
+                if (key instanceof Long) {
+                    photoIds.add((Long)key);
+                    photoIdsAsStrings.add(key.toString());
+                } else {
+                    uris.add((Uri)key);
+                }
+            }
+        }
+    }
+
+    /**
+     * The thread that performs loading of photos from the database.
+     */
+    private class LoaderThread extends HandlerThread implements Callback {
+        private static final int BUFFER_SIZE = 1024*16;
+        private static final int MESSAGE_PRELOAD_PHOTOS = 0;
+        private static final int MESSAGE_LOAD_PHOTOS = 1;
+
+        /**
+         * A pause between preload batches that yields to the UI thread.
+         */
+        private static final int PHOTO_PRELOAD_DELAY = 50;
+
+        /**
+         * Number of photos to preload per batch.
+         */
+        private static final int PRELOAD_BATCH = 25;
+
+        /**
+         * Maximum number of photos to preload.  If the cache size is 2Mb and
+         * the expected average size of a photo is 4kb, then this number should be 2Mb/4kb = 500.
+         */
+        private static final int MAX_PHOTOS_TO_PRELOAD = 500;
+
+        private final ContentResolver mResolver;
+        private final StringBuilder mStringBuilder = new StringBuilder();
+        private final ArrayList<Long> mPhotoIds = Lists.newArrayList();
+        private final ArrayList<String> mPhotoIdsAsStrings = Lists.newArrayList();
+        private final ArrayList<Uri> mPhotoUris = Lists.newArrayList();
+        private ArrayList<Long> mPreloadPhotoIds = Lists.newArrayList();
+
+        private Handler mLoaderThreadHandler;
+        private byte mBuffer[];
+
+        private static final int PRELOAD_STATUS_NOT_STARTED = 0;
+        private static final int PRELOAD_STATUS_IN_PROGRESS = 1;
+        private static final int PRELOAD_STATUS_DONE = 2;
+
+        private int mPreloadStatus = PRELOAD_STATUS_NOT_STARTED;
+
+        public LoaderThread(ContentResolver resolver) {
+            super(LOADER_THREAD_NAME);
+            mResolver = resolver;
+        }
+
+        public void ensureHandler() {
+            if (mLoaderThreadHandler == null) {
+                mLoaderThreadHandler = new Handler(getLooper(), this);
+            }
+        }
+
+        /**
+         * Kicks off preloading of the next batch of photos on the background thread.
+         * Preloading will happen after a delay: we want to yield to the UI thread
+         * as much as possible.
+         * <p>
+         * If preloading is already complete, does nothing.
+         */
+        public void requestPreloading() {
+            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+                return;
+            }
+
+            ensureHandler();
+            if (mLoaderThreadHandler.hasMessages(MESSAGE_LOAD_PHOTOS)) {
+                return;
+            }
+
+            mLoaderThreadHandler.sendEmptyMessageDelayed(
+                    MESSAGE_PRELOAD_PHOTOS, PHOTO_PRELOAD_DELAY);
+        }
+
+        /**
+         * Sends a message to this thread to load requested photos.  Cancels a preloading
+         * request, if any: we don't want preloading to impede loading of the photos
+         * we need to display now.
+         */
+        public void requestLoading() {
+            ensureHandler();
+            mLoaderThreadHandler.removeMessages(MESSAGE_PRELOAD_PHOTOS);
+            mLoaderThreadHandler.sendEmptyMessage(MESSAGE_LOAD_PHOTOS);
+        }
+
+        /**
+         * Receives the above message, loads photos and then sends a message
+         * to the main thread to process them.
+         */
+        public boolean handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_PRELOAD_PHOTOS:
+                    preloadPhotosInBackground();
+                    break;
+                case MESSAGE_LOAD_PHOTOS:
+                    loadPhotosInBackground();
+                    break;
+            }
+            return true;
+        }
+
+        /**
+         * The first time it is called, figures out which photos need to be preloaded.
+         * Each subsequent call preloads the next batch of photos and requests
+         * another cycle of preloading after a delay.  The whole process ends when
+         * we either run out of photos to preload or fill up cache.
+         */
+        private void preloadPhotosInBackground() {
+            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+                return;
+            }
+
+            if (mPreloadStatus == PRELOAD_STATUS_NOT_STARTED) {
+                queryPhotosForPreload();
+                if (mPreloadPhotoIds.isEmpty()) {
+                    mPreloadStatus = PRELOAD_STATUS_DONE;
+                } else {
+                    mPreloadStatus = PRELOAD_STATUS_IN_PROGRESS;
+                }
+                requestPreloading();
+                return;
+            }
+
+            if (mBitmapHolderCache.size() > mBitmapHolderCacheRedZoneBytes) {
+                mPreloadStatus = PRELOAD_STATUS_DONE;
+                return;
+            }
+
+            mPhotoIds.clear();
+            mPhotoIdsAsStrings.clear();
+
+            int count = 0;
+            int preloadSize = mPreloadPhotoIds.size();
+            while(preloadSize > 0 && mPhotoIds.size() < PRELOAD_BATCH) {
+                preloadSize--;
+                count++;
+                Long photoId = mPreloadPhotoIds.get(preloadSize);
+                mPhotoIds.add(photoId);
+                mPhotoIdsAsStrings.add(photoId.toString());
+                mPreloadPhotoIds.remove(preloadSize);
+            }
+
+            loadPhotosFromDatabase(false);
+
+            if (preloadSize == 0) {
+                mPreloadStatus = PRELOAD_STATUS_DONE;
+            }
+
+            Log.v(TAG, "Preloaded " + count + " photos. Photos in cache: "
+                    + mBitmapHolderCache.size()
+                    + ". Total size: " + mBitmapHolderCache.size());
+
+            requestPreloading();
+        }
+
+        private void queryPhotosForPreload() {
+            Cursor cursor = null;
+            try {
+                Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(
+                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
+                        .build();
+                cursor = mResolver.query(uri, new String[] { Contacts.PHOTO_ID },
+                        Contacts.PHOTO_ID + " NOT NULL AND " + Contacts.PHOTO_ID + "!=0",
+                        null,
+                        Contacts.STARRED + " DESC, " + Contacts.LAST_TIME_CONTACTED + " DESC"
+                                + " LIMIT " + MAX_PHOTOS_TO_PRELOAD);
+
+                if (cursor != null) {
+                    while (cursor.moveToNext()) {
+                        // Insert them in reverse order, because we will be taking
+                        // them from the end of the list for loading.
+                        mPreloadPhotoIds.add(0, cursor.getLong(0));
+                    }
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        }
+
+        private void loadPhotosInBackground() {
+            obtainPhotoIdsAndUrisToLoad(mPhotoIds, mPhotoIdsAsStrings, mPhotoUris);
+            loadPhotosFromDatabase(true);
+            loadRemotePhotos();
+            requestPreloading();
+        }
+
+        private void loadPhotosFromDatabase(boolean preloading) {
+            int count = mPhotoIds.size();
+            if (count == 0) {
+                return;
+            }
+
+            // Remove loaded photos from the preload queue: we don't want
+            // the preloading process to load them again.
+            if (!preloading && mPreloadStatus == PRELOAD_STATUS_IN_PROGRESS) {
+                for (int i = 0; i < count; i++) {
+                    mPreloadPhotoIds.remove(mPhotoIds.get(i));
+                }
+                if (mPreloadPhotoIds.isEmpty()) {
+                    mPreloadStatus = PRELOAD_STATUS_DONE;
+                }
+            }
+
+            mStringBuilder.setLength(0);
+            mStringBuilder.append(Photo._ID + " IN(");
+            for (int i = 0; i < count; i++) {
+                if (i != 0) {
+                    mStringBuilder.append(',');
+                }
+                mStringBuilder.append('?');
+            }
+            mStringBuilder.append(')');
+
+            Cursor cursor = null;
+            try {
+                cursor = mResolver.query(Data.CONTENT_URI,
+                        COLUMNS,
+                        mStringBuilder.toString(),
+                        mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
+                        null);
+
+                if (cursor != null) {
+                    while (cursor.moveToNext()) {
+                        Long id = cursor.getLong(0);
+                        byte[] bytes = cursor.getBlob(1);
+                        cacheBitmap(id, bytes, preloading);
+                        mPhotoIds.remove(id);
+                    }
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+
+            // Remaining photos were not found in the database - mark the cache accordingly.
+            count = mPhotoIds.size();
+            for (int i = 0; i < count; i++) {
+                cacheBitmap(mPhotoIds.get(i), null, preloading);
+            }
+
+            mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+        }
+
+        private void loadRemotePhotos() {
+            int count = mPhotoUris.size();
+            for (int i = 0; i < count; i++) {
+                Uri uri = mPhotoUris.get(i);
+                if (mBuffer == null) {
+                    mBuffer = new byte[BUFFER_SIZE];
+                }
+                try {
+                    InputStream is = mResolver.openInputStream(uri);
+                    if (is != null) {
+                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                        try {
+                            int size;
+                            while ((size = is.read(mBuffer)) != -1) {
+                                baos.write(mBuffer, 0, size);
+                            }
+                        } finally {
+                            is.close();
+                        }
+                        cacheBitmap(uri, baos.toByteArray(), false);
+                        mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+                    } else {
+                        Log.v(TAG, "Cannot load photo " + uri);
+                        cacheBitmap(uri, null, false);
+                    }
+                } catch (Exception ex) {
+                    Log.v(TAG, "Cannot load photo " + uri, ex);
+                    cacheBitmap(uri, null, false);
+                }
+            }
+        }
+    }
+}
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index c07dd68..f7ede90 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -16,7 +16,9 @@
 
 package com.android.contacts;
 
-import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.EntityDeltaList;
+import com.android.contacts.model.EntityModifier;
 import com.google.android.collect.Lists;
 import com.google.android.collect.Sets;
 
@@ -35,6 +37,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.Parcelable;
 import android.os.RemoteException;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.AggregationExceptions;
@@ -63,7 +66,9 @@
     public static final String EXTRA_CONTENT_VALUES = "contentValues";
     public static final String EXTRA_CALLBACK_INTENT = "callbackIntent";
 
-    public static final String EXTRA_OPERATIONS = "Operations";
+    public static final String ACTION_SAVE_CONTACT = "saveContact";
+    public static final String EXTRA_CONTACT_STATE = "state";
+    public static final String EXTRA_SAVE_MODE = "saveMode";
 
     public static final String ACTION_CREATE_GROUP = "createGroup";
     public static final String ACTION_RENAME_GROUP = "renameGroup";
@@ -105,16 +110,30 @@
         Data.DATA15
     );
 
+    private static final int PERSIST_TRIES = 3;
+
     public ContactSaveService() {
         super(TAG);
         setIntentRedelivery(true);
     }
 
     @Override
+    public Object getSystemService(String name) {
+        Object service = super.getSystemService(name);
+        if (service != null) {
+            return service;
+        }
+
+        return getApplicationContext().getSystemService(name);
+    }
+
+    @Override
     protected void onHandleIntent(Intent intent) {
         String action = intent.getAction();
         if (ACTION_NEW_RAW_CONTACT.equals(action)) {
             createRawContact(intent);
+        } else if (ACTION_SAVE_CONTACT.equals(action)) {
+            saveContact(intent);
         } else if (ACTION_CREATE_GROUP.equals(action)) {
             createGroup(intent);
         } else if (ACTION_RENAME_GROUP.equals(action)) {
@@ -199,6 +218,121 @@
     }
 
     /**
+     * Creates an intent that can be sent to this service to create a new raw contact
+     * using data presented as a set of ContentValues.
+     */
+    public static Intent createSaveContactIntent(Context context, EntityDeltaList state,
+            String saveModeExtraKey, int saveMode, Class<?> callbackActivity,
+            String callbackAction) {
+        Intent serviceIntent = new Intent(
+                context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_SAVE_CONTACT);
+        serviceIntent.putExtra(EXTRA_CONTACT_STATE, (Parcelable) state);
+
+        // Callback intent will be invoked by the service once the contact is
+        // saved.  The service will put the URI of the new contact as "data" on
+        // the callback intent.
+        Intent callbackIntent = new Intent(context, callbackActivity);
+        callbackIntent.putExtra(saveModeExtraKey, saveMode);
+        callbackIntent.setAction(callbackAction);
+        callbackIntent.setFlags(
+                Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CALLBACK_INTENT, callbackIntent);
+        return serviceIntent;
+    }
+
+    private void saveContact(Intent intent) {
+        EntityDeltaList state = intent.getParcelableExtra(EXTRA_CONTACT_STATE);
+        Intent callbackIntent = intent.getParcelableExtra(EXTRA_CALLBACK_INTENT);
+
+        // Trim any empty fields, and RawContacts, before persisting
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+        EntityModifier.trimEmpty(state, accountTypes);
+
+        Uri lookupUri = null;
+
+        final ContentResolver resolver = getContentResolver();
+
+        // Attempt to persist changes
+        int tries = 0;
+        while (tries++ < PERSIST_TRIES) {
+            try {
+                // Build operations and try applying
+                final ArrayList<ContentProviderOperation> diff = state.buildDiff();
+                ContentProviderResult[] results = null;
+                if (!diff.isEmpty()) {
+                    results = resolver.applyBatch(ContactsContract.AUTHORITY, diff);
+                }
+
+                final long rawContactId = getRawContactId(state, diff, results);
+                if (rawContactId == -1) {
+                    throw new IllegalStateException("Could not determine RawContact ID after save");
+                }
+                final Uri rawContactUri = ContentUris.withAppendedId(
+                        RawContacts.CONTENT_URI, rawContactId);
+                lookupUri = RawContacts.getContactLookupUri(resolver, rawContactUri);
+                Log.v(TAG, "Saved contact. New URI: " + lookupUri);
+                break;
+
+            } catch (RemoteException e) {
+                // Something went wrong, bail without success
+                Log.e(TAG, "Problem persisting user edits", e);
+                break;
+
+            } catch (OperationApplicationException e) {
+                // Version consistency failed, re-parent change and try again
+                Log.w(TAG, "Version consistency failed, re-parenting: " + e.toString());
+                final StringBuilder sb = new StringBuilder(RawContacts._ID + " IN(");
+                boolean first = true;
+                final int count = state.size();
+                for (int i = 0; i < count; i++) {
+                    Long rawContactId = state.getRawContactId(i);
+                    if (rawContactId != null && rawContactId != -1) {
+                        if (!first) {
+                            sb.append(',');
+                        }
+                        sb.append(rawContactId);
+                        first = false;
+                    }
+                }
+                sb.append(")");
+
+                if (first) {
+                    throw new IllegalStateException("Version consistency failed for a new contact");
+                }
+
+                final EntityDeltaList newState = EntityDeltaList.fromQuery(resolver,
+                        sb.toString(), null, null);
+                state = EntityDeltaList.mergeAfter(newState, state);
+            }
+        }
+
+        callbackIntent.setData(lookupUri);
+
+        startActivity(callbackIntent);
+    }
+
+    private long getRawContactId(EntityDeltaList state,
+            final ArrayList<ContentProviderOperation> diff,
+            final ContentProviderResult[] results) {
+        long rawContactId = state.findRawContactId();
+        if (rawContactId != -1) {
+            return rawContactId;
+        }
+
+        final int diffSize = diff.size();
+        for (int i = 0; i < diffSize; i++) {
+            ContentProviderOperation operation = diff.get(i);
+            if (operation.getType() == ContentProviderOperation.TYPE_INSERT
+                    && operation.getUri().getEncodedPath().contains(
+                            RawContacts.CONTENT_URI.getEncodedPath())) {
+                return ContentUris.parseId(results[i].uri);
+            }
+        }
+        return -1;
+    }
+
+    /**
      * Creates an intent that can be sent to this service to create a new group.
      */
     public static Intent createNewGroupIntent(Context context, Account account, String label,
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index 8346c04..c925ec0 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -31,6 +31,7 @@
 
     private static InjectedServices sInjectedServices;
     private AccountTypeManager mAccountTypeManager;
+    private ContactPhotoManager mContactPhotoManager;
 
     /**
      * Overrides the system services with mocks for testing.
@@ -82,6 +83,14 @@
             return mAccountTypeManager;
         }
 
+        if (ContactPhotoManager.CONTACT_PHOTO_SERVICE.equals(name)) {
+            if (mContactPhotoManager == null) {
+                mContactPhotoManager = ContactPhotoManager.createContactPhotoManager(this);
+                mContactPhotoManager.preloadPhotosInBackground();
+            }
+            return mContactPhotoManager;
+        }
+
         return super.getSystemService(name);
     }
 
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 9943e2d..7ca5921 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -29,7 +29,6 @@
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnFocusChangeListener;
 import android.widget.SearchView;
 import android.widget.SearchView.OnCloseListener;
 import android.widget.SearchView.OnQueryTextListener;
@@ -38,8 +37,8 @@
 /**
  * Adapter for the action bar at the top of the Contacts activity.
  */
-public class ActionBarAdapter implements OnQueryTextListener, OnCloseListener,
-        ContactListFilterListener, OnFocusChangeListener {
+public class ActionBarAdapter
+        implements OnQueryTextListener, OnCloseListener, ContactListFilterListener {
 
     public interface Listener {
         void onAction();
@@ -95,7 +94,6 @@
 
         mSearchView.setOnQueryTextListener(this);
         mSearchView.setOnCloseListener(this);
-        mSearchView.setOnQueryTextFocusChangeListener(this);
         mSearchView.setQuery(mQueryString, false);
         mSearchView.setQueryHint(mContext.getString(R.string.hint_findContacts));
 
@@ -117,13 +115,6 @@
         mFilterController.addListener(this);
     }
 
-    @Override
-    public void onFocusChange(View v, boolean hasFocus) {
-        if (v == mSearchView && hasFocus) {
-            setSearchMode(true);
-        }
-    }
-
     public boolean isSearchMode() {
         return mSearchMode;
     }
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4c2411c..e888bc0 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -498,7 +498,7 @@
 
         @Override
         public void onDeleteContactAction(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri, false);
         }
 
         @Override
@@ -545,7 +545,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri, false);
         }
 
         @Override
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index ca26280..56e8353 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -94,7 +94,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactDetailActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactDetailActivity.this, contactUri, true);
         }
 
         @Override
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 00e0ab0..35f7413 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -50,6 +50,7 @@
     private static final String TAG = "ContactEditorActivity";
 
     public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
+    public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
 
     private ContactEditorFragment mFragment;
     private Button mDoneButton;
@@ -70,6 +71,11 @@
             return;
         }
 
+        if (ACTION_SAVE_COMPLETED.equals(action)) {
+            finish();
+            return;
+        }
+
         setContentView(R.layout.contact_editor_activity);
 
         // This Activity will always fall back to the "top" Contacts screen when touched on the
@@ -113,6 +119,10 @@
         String action = intent.getAction();
         if (Intent.ACTION_EDIT.equals(action)) {
             mFragment.setIntentExtras(intent.getExtras());
+        } else if (ACTION_SAVE_COMPLETED.equals(action)) {
+            mFragment.onSaveCompleted(true,
+                    intent.getIntExtra(ContactEditorFragment.SAVE_MODE_EXTRA_KEY, SaveMode.CLOSE),
+                    intent.getData());
         } else if (ACTION_JOIN_COMPLETED.equals(action)) {
             mFragment.onJoinCompleted(intent.getData());
         }
@@ -195,7 +205,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactEditorActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactEditorActivity.this, contactUri, true);
         }
 
         @Override
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 5dde900..42b3293 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -60,6 +60,7 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
@@ -409,7 +410,8 @@
                 if (kind == null) continue;
 
                 final ViewEntry entry = ViewEntry.fromValues(mContext, mimeType, kind, dataId,
-                        entryValues);
+                        entryValues, mContactData.isDirectoryEntry(),
+                        mContactData.getDirectoryId());
 
                 final boolean hasData = !TextUtils.isEmpty(entry.data);
                 Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
@@ -444,7 +446,6 @@
                         entry.actionIcon = -1;
                     }
 
-
                     // Remember super-primary phone
                     if (isSuperPrimary) mPrimaryPhoneUri = entry.uri;
 
@@ -463,8 +464,9 @@
                         final String imMime = Im.CONTENT_ITEM_TYPE;
                         final DataKind imKind = accountTypes.getKindOrFallback(accountType,
                                 imMime);
-                        final ViewEntry imEntry = ViewEntry.fromValues(mContext,
-                                imMime, imKind, dataId, entryValues);
+                        final ViewEntry imEntry = ViewEntry.fromValues(mContext, imMime, imKind,
+                                dataId, entryValues, mContactData.isDirectoryEntry(),
+                                mContactData.getDirectoryId());
                         buildImActions(imEntry, entryValues);
                         imEntry.applyStatus(status, false);
                         mImEntries.add(imEntry);
@@ -472,7 +474,8 @@
                 } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
                     // Build postal entries
                     entry.maxLines = 4;
-                    entry.intent = new Intent(Intent.ACTION_VIEW, entry.uri);
+                    entry.intent = new Intent(
+                            Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + Uri.encode(entry.data)));
                     mPostalEntries.add(entry);
                 } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
                     // Build IM entries
@@ -546,7 +549,8 @@
                     mRelationEntries.add(entry);
                 } else {
                     // Handle showing custom rows
-                    entry.intent = new Intent(Intent.ACTION_VIEW, entry.uri);
+                    entry.intent = new Intent(Intent.ACTION_VIEW);
+                    entry.intent.setDataAndType(entry.uri, entry.mimetype);
 
                     // Use social summary when requested by external source
                     final DataStatus status = mContactData.getStatuses().get(entry.id);
@@ -720,11 +724,15 @@
          * Build new {@link ViewEntry} and populate from the given values.
          */
         public static ViewEntry fromValues(Context context, String mimeType, DataKind kind,
-                long dataId, ContentValues values) {
+                long dataId, ContentValues values, boolean isDirectoryEntry, long directoryId) {
             final ViewEntry entry = new ViewEntry();
             entry.context = context;
             entry.id = dataId;
             entry.uri = ContentUris.withAppendedId(Data.CONTENT_URI, entry.id);
+            if (isDirectoryEntry) {
+                entry.uri = entry.uri.buildUpon().appendQueryParameter(
+                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+            }
             entry.mimetype = mimeType;
             entry.kind = (kind.titleRes == -1 || kind.titleRes == 0) ? ""
                     : context.getString(kind.titleRes);
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index 5403731..af8e7f8 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -136,7 +136,7 @@
 
     @Override
     public boolean performClick() {
-        if (mListener != null) {
+        if (mListener != null && isEnabled()) {
             if (canEditSuggestedContact()) {
                 mListener.onEditAction(Contacts.getLookupUri(mContactId, mLookupKey));
             } else {
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index b117d77..67eb564 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -31,8 +31,6 @@
 import com.android.contacts.model.EntityDeltaList;
 import com.android.contacts.model.EntityModifier;
 import com.android.contacts.model.GoogleAccountType;
-import com.android.contacts.util.EmptyService;
-import com.android.contacts.util.WeakAsyncTask;
 
 import android.accounts.Account;
 import android.app.Activity;
@@ -43,9 +41,6 @@
 import android.app.LoaderManager;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.ActivityNotFoundException;
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderResult;
-import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -54,7 +49,6 @@
 import android.content.Entity;
 import android.content.Intent;
 import android.content.Loader;
-import android.content.OperationApplicationException;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
@@ -62,22 +56,18 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
-import android.os.RemoteException;
 import android.os.SystemClock;
-import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.Note;
 import android.provider.ContactsContract.CommonDataKinds.Organization;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.MediaStore;
-import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -115,10 +105,12 @@
     private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
     private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
     private static final String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
-    private static final String KEY_QUERY_SELECTION = "queryselection";
     private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
     private static final String KEY_SHOW_JOIN_SUGGESTIONS = "showJoinSuggestions";
     private static final String KEY_ENABLED = "enabled";
+    private static final String KEY_STATUS = "status";
+
+    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
 
     /**
      * An intent extra that forces the editor to add the edited contact
@@ -168,15 +160,21 @@
         public static final int EDITING = 1;
 
         /**
-         * The data is currently being saved. This is used to prevent more auto-saves (they shouldn't
-         * overlap)
+         * The data is currently being saved. This is used to prevent more
+         * auto-saves (they shouldn't overlap)
          */
         public static final int SAVING = 2;
 
         /**
-         * Prevents any more savings (this is used if Save/Close or Revert was executed by the user)
+         * Prevents any more savings (this is used if Save/Close or Revert was
+         * executed by the user)
          */
         public static final int CLOSING = 3;
+
+        /**
+         * Prevents saving while running a child activity.
+         */
+        public static final int SUB_ACTIVITY = 4;
     }
 
     private static final int REQUEST_CODE_JOIN = 0;
@@ -215,8 +213,6 @@
     private Bundle mIntentExtras;
     private Listener mListener;
 
-    private String mQuerySelection;
-
     private long mContactIdForJoin;
 
     private LinearLayout mContent;
@@ -227,7 +223,6 @@
     private long mLoaderStartTime;
 
     private int mStatus;
-    private boolean mSaveOnStop = true;
 
     private AggregationSuggestionEngine mAggregationSuggestionEngine;
     private long mAggregationSuggestionsRawContactId;
@@ -236,6 +231,7 @@
     private boolean mAutoAddToDefaultGroup;
 
     private boolean mEnabled = true;
+    private boolean mRequestFocus;
 
     public ContactEditorFragment() {
     }
@@ -249,6 +245,7 @@
                     mContent.getChildAt(i).setEnabled(enabled);
                 }
             }
+            setAggregationSuggestionViewEnabled(enabled);
             final Activity activity = getActivity();
             if (activity != null) activity.invalidateOptionsMenu();
         }
@@ -268,7 +265,7 @@
         }
 
         // If anything was left unsaved, save it now but keep the editor open.
-        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING && mSaveOnStop) {
+        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
             save(SaveMode.RELOAD);
         }
     }
@@ -316,6 +313,8 @@
                     // Load Accounts async so that we can present them
                     selectAccountAndCreateContact();
                 }
+            } else if (ContactEditorActivity.ACTION_SAVE_COMPLETED.equals(mAction)) {
+                // do nothing
             } else throw new IllegalArgumentException("Unknown Action String " + mAction +
                     ". Only support " + Intent.ACTION_EDIT + " or " + Intent.ACTION_INSERT);
         }
@@ -323,7 +322,6 @@
 
     @Override
     public void onStart() {
-        mSaveOnStop = true;
         getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupLoaderListener);
         super.onStart();
     }
@@ -364,11 +362,10 @@
             if (fileName != null) {
                 mCurrentPhotoFile = new File(fileName);
             }
-            mQuerySelection = savedState.getString(KEY_QUERY_SELECTION);
             mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
             mAggregationSuggestionsRawContactId = savedState.getLong(KEY_SHOW_JOIN_SUGGESTIONS);
             mEnabled = savedState.getBoolean(KEY_ENABLED);
-            mStatus = Status.EDITING;
+            mStatus = savedState.getInt(KEY_STATUS);
         }
     }
 
@@ -409,22 +406,12 @@
     private void bindEditorsForExistingContact(ContactLoader.Result data) {
         setEnabled(true);
 
-        // Build Filter mQuerySelection
-        final ArrayList<Entity> entities = data.getEntities();
-        final StringBuilder sb = new StringBuilder(RawContacts._ID + " IN(");
-        final int count = entities.size();
-        for (int i = 0; i < count; i++) {
-            if (i > 0) {
-                sb.append(',');
-            }
-            sb.append(entities.get(i).getEntityValues().get(RawContacts._ID));
-        }
-        sb.append(")");
-        mQuerySelection = sb.toString();
-        mState = EntityDeltaList.fromIterator(entities.iterator());
+        mState = EntityDeltaList.fromIterator(data.getEntities().iterator());
         setIntentExtras(mIntentExtras);
         mIntentExtras = null;
 
+        mRequestFocus = true;
+
         bindEditors();
     }
 
@@ -488,6 +475,8 @@
     }
 
     private void bindEditorsForNewContact(Account account, final AccountType accountType) {
+        mStatus = Status.EDITING;
+
         final ContentValues values = new ContentValues();
         if (account != null) {
             values.put(RawContacts.ACCOUNT_NAME, account.name);
@@ -519,6 +508,8 @@
             mState.add(insert);
         }
 
+        mRequestFocus = true;
+
         bindEditors();
     }
 
@@ -563,11 +554,17 @@
             if (editor instanceof RawContactEditorView) {
                 final RawContactEditorView rawContactEditor = (RawContactEditorView) editor;
                 final TextFieldsEditorView nameEditor = rawContactEditor.getNameEditor();
+                if (mRequestFocus) {
+                    nameEditor.requestFocus();
+                    mRequestFocus = false;
+                }
                 nameEditor.setEditorListener(new EditorListener() {
 
                     @Override
                     public void onRequest(int request) {
-                        onContactNameChange(request, rawContactEditor, nameEditor);
+                        if (request == EditorListener.FIELD_CHANGED) {
+                            acquireAggregationSuggestions(rawContactEditor);
+                        }
                     }
 
                     @Override
@@ -583,6 +580,8 @@
             }
         }
 
+        mRequestFocus = false;
+
         bindGroupMetaData();
 
         // Show editor now that we've loaded state
@@ -592,6 +591,7 @@
         // Activity can be null if we have been detached from the Activity
         final Activity activity = getActivity();
         if (activity != null) activity.invalidateOptionsMenu();
+
     }
 
     private void bindGroupMetaData() {
@@ -671,14 +671,12 @@
 
         // If we just started creating a new contact and haven't added any data, it's too
         // early to do a join
-        if (mState.size() == 1 && mState.get(0).isContactInsert()) {
-            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-            EntityModifier.trimEmpty(mState, accountTypes);
-            if (mState.buildDiff().isEmpty()) {
-                Toast.makeText(getActivity(), R.string.toast_join_with_empty_contact,
-                                Toast.LENGTH_LONG).show();
-                return true;
-            }
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        if (mState.size() == 1 && mState.get(0).isContactInsert()
+                && !EntityModifier.hasChanges(mState, accountTypes)) {
+            Toast.makeText(getActivity(), R.string.toast_join_with_empty_contact,
+                            Toast.LENGTH_LONG).show();
+            return true;
         }
 
         return save(SaveMode.JOIN);
@@ -739,7 +737,7 @@
 
             // Launch gallery to crop the photo
             final Intent intent = getCropImageIntent(Uri.fromFile(f));
-            mSaveOnStop = false;
+            mStatus = Status.SUB_ACTIVITY;
             startActivityForResult(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA);
         } catch (Exception e) {
             Log.e(TAG, "Cannot crop image", e);
@@ -767,29 +765,29 @@
      * finishes the activity.
      */
     public boolean save(int saveMode) {
-        if (!hasValidState()) {
+        if (!hasValidState() || mStatus != Status.EDITING) {
             return false;
         }
 
         // If we are about to close the editor - there is no need to refresh the data
-        if (saveMode == SaveMode.CLOSE) {
+        if (saveMode == SaveMode.CLOSE || saveMode == SaveMode.SPLIT) {
             getLoaderManager().destroyLoader(LOADER_DATA);
         }
 
         mStatus = Status.SAVING;
 
-        // Trim any empty fields, and RawContacts, before persisting
         final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        EntityModifier.trimEmpty(mState, accountTypes);
-
-        if (mState.buildDiff().isEmpty()) {
-            onSaveCompleted(true, saveMode, mLookupUri);
+        if (!EntityModifier.hasChanges(mState, accountTypes)) {
+            onSaveCompleted(false, saveMode, mLookupUri);
             return true;
         }
 
-        final PersistTask task = new PersistTask(this, saveMode);
-        task.execute(mState);
+        setEnabled(false);
 
+        Intent intent = ContactSaveService.createSaveContactIntent(getActivity(), mState,
+                SAVE_MODE_EXTRA_KEY, saveMode, getActivity().getClass(),
+                ContactEditorActivity.ACTION_SAVE_COMPLETED);
+        getActivity().startService(intent);
         return true;
     }
 
@@ -822,7 +820,8 @@
     }
 
     private boolean revert() {
-        if (mState == null || mState.buildDiff().isEmpty()) {
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        if (mState == null || !EntityModifier.hasChanges(mState, accountTypes)) {
             doRevertAction();
         } else {
             CancelEditDialogFragment.show(this);
@@ -837,11 +836,21 @@
     }
 
     public void onJoinCompleted(Uri uri) {
-        onSaveCompleted(uri != null, SaveMode.RELOAD, uri);
+        onSaveCompleted(false, SaveMode.RELOAD, uri);
     }
 
-    public void onSaveCompleted(boolean success, int saveMode, Uri contactLookupUri) {
-        Log.d(TAG, "onSaveCompleted(" + success + ", " + saveMode + ", " + contactLookupUri);
+    public void onSaveCompleted(boolean hadChanges, int saveMode, Uri contactLookupUri) {
+        boolean success = contactLookupUri != null;
+        Log.d(TAG, "onSaveCompleted(" + saveMode + ", " + contactLookupUri);
+        if (hadChanges) {
+            if (success) {
+                if (saveMode != SaveMode.JOIN) {
+                    Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
+                }
+            } else {
+                Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
+            }
+        }
         switch (saveMode) {
             case SaveMode.CLOSE:
             case SaveMode.HOME:
@@ -877,6 +886,7 @@
                 if (mListener != null) mListener.onSaveFinished(resultCode, resultIntent,
                         saveMode == SaveMode.HOME);
                 break;
+
             case SaveMode.RELOAD:
             case SaveMode.JOIN:
                 if (success && contactLookupUri != null) {
@@ -893,14 +903,14 @@
                     }
                 }
                 break;
+
             case SaveMode.SPLIT:
-                setEnabled(true);
+                mStatus = Status.CLOSING;
                 if (mListener != null) {
                     mListener.onContactSplit(contactLookupUri);
                 } else {
                     Log.d(TAG, "No listener registered, can not call onSplitFinished");
                 }
-                mStatus = Status.EDITING;
                 break;
         }
     }
@@ -1096,110 +1106,6 @@
         return 0;
     }
 
-
-    private void onContactNameChange(int request, final RawContactEditorView rawContactEditor,
-            TextFieldsEditorView nameEditor) {
-
-        switch (request) {
-            case EditorListener.EDITOR_FORM_CHANGED:
-                if (nameEditor.hasShortAndLongForms()) {
-                    if (nameEditor.areOptionalFieldsVisible()) {
-                        switchFromFullNameToStructuredName(nameEditor);
-                    } else {
-                        switchFromStructuredNameToFullName(nameEditor);
-                    }
-                }
-                break;
-
-            case EditorListener.FIELD_CHANGED:
-                if (nameEditor.hasShortAndLongForms()) {
-                    if (nameEditor.areOptionalFieldsVisible()) {
-                        eraseFullName(nameEditor.getValues());
-                    } else {
-                        eraseStructuredName(nameEditor.getValues());
-                    }
-                }
-                acquireAggregationSuggestions(rawContactEditor);
-                break;
-        }
-    }
-
-    private void switchFromFullNameToStructuredName(LabeledEditorView nameEditor) {
-        ValuesDelta values = nameEditor.getValues();
-
-        String displayName = values.getAsString(StructuredName.DISPLAY_NAME);
-        if (displayName == null) {
-            displayName = "";
-        }
-
-        Uri uri = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name")
-                .appendQueryParameter(StructuredName.DISPLAY_NAME, displayName).build();
-        Cursor cursor = getActivity().getContentResolver().query(uri, new String[]{
-                StructuredName.PREFIX,
-                StructuredName.GIVEN_NAME,
-                StructuredName.MIDDLE_NAME,
-                StructuredName.FAMILY_NAME,
-                StructuredName.SUFFIX,
-        }, null, null, null);
-
-        try {
-            if (cursor.moveToFirst()) {
-                eraseFullName(values);
-                values.put(StructuredName.PREFIX, cursor.getString(0));
-                values.put(StructuredName.GIVEN_NAME, cursor.getString(1));
-                values.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
-                values.put(StructuredName.FAMILY_NAME, cursor.getString(3));
-                values.put(StructuredName.SUFFIX, cursor.getString(4));
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    private void switchFromStructuredNameToFullName(LabeledEditorView nameEditor) {
-        ValuesDelta values = nameEditor.getValues();
-
-        Uri.Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath(
-                "complete_name");
-        appendQueryParameter(builder, values, StructuredName.PREFIX);
-        appendQueryParameter(builder, values, StructuredName.GIVEN_NAME);
-        appendQueryParameter(builder, values, StructuredName.MIDDLE_NAME);
-        appendQueryParameter(builder, values, StructuredName.FAMILY_NAME);
-        appendQueryParameter(builder, values, StructuredName.SUFFIX);
-        Uri uri = builder.build();
-        Cursor cursor = getActivity().getContentResolver().query(uri, new String[]{
-                StructuredName.DISPLAY_NAME,
-        }, null, null, null);
-
-        try {
-            if (cursor.moveToFirst()) {
-                eraseStructuredName(values);
-                values.put(StructuredName.DISPLAY_NAME, cursor.getString(0));
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    private void eraseFullName(ValuesDelta values) {
-        values.putNull(StructuredName.DISPLAY_NAME);
-    }
-
-    private void eraseStructuredName(ValuesDelta values) {
-        values.putNull(StructuredName.PREFIX);
-        values.putNull(StructuredName.GIVEN_NAME);
-        values.putNull(StructuredName.MIDDLE_NAME);
-        values.putNull(StructuredName.FAMILY_NAME);
-        values.putNull(StructuredName.SUFFIX);
-    }
-
-    private void appendQueryParameter(Uri.Builder builder, ValuesDelta values, String field) {
-        String value = values.getAsString(field);
-        if (!TextUtils.isEmpty(value)) {
-            builder.appendQueryParameter(field, value);
-        }
-    }
-
     /**
      * Triggers an asynchronous search for aggregation suggestions.
      */
@@ -1228,7 +1134,7 @@
 
     @Override
     public void onAggregationSuggestionChange() {
-        if (!isAdded() || mState == null) {
+        if (!isAdded() || mState == null || mStatus != Status.EDITING) {
             return;
         }
 
@@ -1275,6 +1181,7 @@
         }
 
         adjustAggregationSuggestionViewLayout(rawContactView);
+        setAggregationSuggestionViewEnabled(mEnabled);
         mAggregationSuggestionView.setVisibility(View.VISIBLE);
 
         if (requestOnScreen) {
@@ -1351,6 +1258,10 @@
      * contacts), save all changes, and stay in the editor.
      */
     protected void doJoinSuggestedContact(long[] rawContactIds) {
+        if (!hasValidState() || mStatus != Status.EDITING) {
+            return;
+        }
+
         mState.setJoinWithRawContacts(rawContactIds);
         save(SaveMode.RELOAD);
     }
@@ -1415,6 +1326,19 @@
         mContent.requestRectangleOnScreen(rect);
     }
 
+    public void setAggregationSuggestionViewEnabled(boolean enabled) {
+        if (mAggregationSuggestionView == null) {
+            return;
+        }
+
+        LinearLayout itemList = (LinearLayout) mAggregationSuggestionView.findViewById(
+                R.id.aggregation_suggestions);
+        int count = itemList.getChildCount();
+        for (int i = 0; i < count; i++) {
+            itemList.getChildAt(i).setEnabled(enabled);
+        }
+    }
+
     /**
      * Computes bounds of the supplied view relative to its ascendant.
      */
@@ -1430,133 +1354,6 @@
         return rect;
     }
 
-    // TODO: There has to be a nicer way than this WeakAsyncTask...? Maybe call a service?
-    /**
-     * Background task for persisting edited contact data, using the changes
-     * defined by a set of {@link EntityDelta}. This task starts
-     * {@link EmptyService} to make sure the background thread can finish
-     * persisting in cases where the system wants to reclaim our process.
-     */
-    public static class PersistTask extends
-            WeakAsyncTask<EntityDeltaList, Void, Integer, ContactEditorFragment> {
-        private static final int PERSIST_TRIES = 3;
-
-        private static final int RESULT_UNCHANGED = 0;
-        private static final int RESULT_SUCCESS = 1;
-        private static final int RESULT_FAILURE = 2;
-
-        private final Context mContext;
-
-        private int mSaveMode;
-        private Uri mContactLookupUri = null;
-
-        public PersistTask(ContactEditorFragment target, int saveMode) {
-            super(target);
-            mSaveMode = saveMode;
-            mContext = target.mContext;
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected void onPreExecute(ContactEditorFragment target) {
-            target.setEnabled(false);
-
-            // Before starting this task, start an empty service to protect our
-            // process from being reclaimed by the system.
-            mContext.startService(new Intent(mContext, EmptyService.class));
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected Integer doInBackground(ContactEditorFragment target, EntityDeltaList... params) {
-            final ContentResolver resolver = mContext.getContentResolver();
-
-            EntityDeltaList state = params[0];
-
-            // Attempt to persist changes
-            int tries = 0;
-            Integer result = RESULT_FAILURE;
-            while (tries++ < PERSIST_TRIES) {
-                try {
-                    // Build operations and try applying
-                    final ArrayList<ContentProviderOperation> diff = state.buildDiff();
-                    ContentProviderResult[] results = null;
-                    if (!diff.isEmpty()) {
-                        results = resolver.applyBatch(ContactsContract.AUTHORITY, diff);
-                    }
-
-                    final long rawContactId = getRawContactId(state, diff, results);
-                    if (rawContactId != -1) {
-                        final Uri rawContactUri = ContentUris.withAppendedId(
-                                RawContacts.CONTENT_URI, rawContactId);
-
-                        // convert the raw contact URI to a contact URI
-                        mContactLookupUri = RawContacts.getContactLookupUri(resolver,
-                                rawContactUri);
-                        Log.d(TAG, "Looked up RawContact Uri " + rawContactUri +
-                                " into ContactLookupUri " + mContactLookupUri);
-                    } else {
-                        Log.w(TAG, "Could not determine RawContact ID after save");
-                    }
-                    result = (diff.size() > 0) ? RESULT_SUCCESS : RESULT_UNCHANGED;
-                    break;
-
-                } catch (RemoteException e) {
-                    // Something went wrong, bail without success
-                    Log.e(TAG, "Problem persisting user edits", e);
-                    break;
-
-                } catch (OperationApplicationException e) {
-                    // Version consistency failed, re-parent change and try again
-                    Log.w(TAG, "Version consistency failed, re-parenting: " + e.toString());
-                    final EntityDeltaList newState = EntityDeltaList.fromQuery(resolver,
-                            target.mQuerySelection, null, null);
-                    state = EntityDeltaList.mergeAfter(newState, state);
-                }
-            }
-
-            return result;
-        }
-
-        private long getRawContactId(EntityDeltaList state,
-                final ArrayList<ContentProviderOperation> diff,
-                final ContentProviderResult[] results) {
-            long rawContactId = state.findRawContactId();
-            if (rawContactId != -1) {
-                return rawContactId;
-            }
-
-
-            // we gotta do some searching for the id
-            final int diffSize = diff.size();
-            for (int i = 0; i < diffSize; i++) {
-                ContentProviderOperation operation = diff.get(i);
-                if (operation.getType() == ContentProviderOperation.TYPE_INSERT
-                        && operation.getUri().getEncodedPath().contains(
-                                RawContacts.CONTENT_URI.getEncodedPath())) {
-                    return ContentUris.parseId(results[i].uri);
-                }
-            }
-            return -1;
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected void onPostExecute(ContactEditorFragment target, Integer result) {
-            Log.d(TAG, "onPostExecute(something," + result + "). mSaveMode=" + mSaveMode);
-            if (result == RESULT_SUCCESS && mSaveMode != SaveMode.JOIN) {
-                Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
-            } else if (result == RESULT_FAILURE) {
-                Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
-            }
-
-            // Stop the service that was protecting us
-            mContext.stopService(new Intent(mContext, EmptyService.class));
-
-            target.onSaveCompleted(result != RESULT_FAILURE, mSaveMode, mContactLookupUri);
-        }
-    }
-
     @Override
     public void onSaveInstanceState(Bundle outState) {
         outState.putParcelable(KEY_URI, mLookupUri);
@@ -1572,15 +1369,19 @@
         if (mCurrentPhotoFile != null) {
             outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
         }
-        outState.putString(KEY_QUERY_SELECTION, mQuerySelection);
         outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
         outState.putLong(KEY_SHOW_JOIN_SUGGESTIONS, mAggregationSuggestionsRawContactId);
         outState.putBoolean(KEY_ENABLED, mEnabled);
+        outState.putInt(KEY_STATUS, mStatus);
         super.onSaveInstanceState(outState);
     }
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (mStatus == Status.SUB_ACTIVITY) {
+            mStatus = Status.EDITING;
+        }
+
         // Ignore failed requests
         if (resultCode != Activity.RESULT_OK) return;
         switch (requestCode) {
@@ -1825,7 +1626,7 @@
                 mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());
                 final Intent intent = getTakePickIntent(mCurrentPhotoFile);
 
-                mSaveOnStop = false;
+                mStatus = Status.SUB_ACTIVITY;
                 startActivityForResult(intent, REQUEST_CODE_CAMERA_WITH_DATA);
             } catch (ActivityNotFoundException e) {
                 Toast.makeText(mContext, R.string.photoPickerNotFoundText,
@@ -1842,7 +1643,7 @@
             try {
                 // Launch picker to choose photo for selected contact
                 final Intent intent = getPhotoPickIntent();
-                mSaveOnStop = false;
+                mStatus = Status.SUB_ACTIVITY;
                 startActivityForResult(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA);
             } catch (ActivityNotFoundException e) {
                 Toast.makeText(mContext, R.string.photoPickerNotFoundText,
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
index 4ce8dda..aaeafac 100644
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ b/src/com/android/contacts/editor/KindSectionView.java
@@ -269,7 +269,13 @@
         }
 
         final View newField = createEditorView(values);
-        newField.requestFocus();
+        post(new Runnable() {
+
+            @Override
+            public void run() {
+                newField.requestFocus();
+            }
+        });
 
         // For non-lists (e.g. Notes we can only have one field. in that case we need to disable
         // the add button
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 971a023..ebd35f9 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -35,6 +35,7 @@
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Handler;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -326,11 +327,9 @@
         }
     }
 
-    /** {@inheritDoc} */
     @Override
     public void onFieldChanged(String column, String value) {
-        String oldValue = mEntry.getAsString(column);
-        if (oldValue == null && value.equals("") || oldValue != null && oldValue.equals(value)) {
+        if (!isFieldChanged(column, value)) {
             return;
         }
 
@@ -341,6 +340,11 @@
         }
     }
 
+    protected boolean isFieldChanged(String column, String value) {
+        String oldValue = mEntry.getAsString(column);
+        return !TextUtils.equals(oldValue, value);
+    }
+
     protected void rebuildValues() {
         setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator);
     }
diff --git a/src/com/android/contacts/editor/PhotoActionPopup.java b/src/com/android/contacts/editor/PhotoActionPopup.java
index ae76afe..bc50da9 100644
--- a/src/com/android/contacts/editor/PhotoActionPopup.java
+++ b/src/com/android/contacts/editor/PhotoActionPopup.java
@@ -101,6 +101,7 @@
         listPopupWindow.setWidth(context.getResources().getDimensionPixelSize(
                 R.dimen.photo_action_popup_width));
         listPopupWindow.setModal(true);
+        listPopupWindow.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
         return listPopupWindow;
     }
 
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
new file mode 100644
index 0000000..5c9e04b
--- /dev/null
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -0,0 +1,266 @@
+/*
+ * Copyright (C) 2010 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.editor;
+
+import com.android.contacts.model.AccountType.DataKind;
+import com.android.contacts.model.EntityDelta;
+import com.android.contacts.model.EntityDelta.ValuesDelta;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+
+/**
+ * A dedicated editor for structured name.  When the user collapses/expands
+ * the structured name, it will reparse or recompose the name, but only
+ * if the user has made changes.  This distinction will be particularly
+ * obvious if the name has a non-standard structure. Consider this structure:
+ * first name="John Doe", family name="".  As long as the user does not change
+ * the full name, expand and collapse will preserve this.  However, if the user
+ * changes "John Doe" to "Jane Doe" and then expands the view, we will reparse
+ * and show first name="Jane", family name="Doe".
+ */
+public class StructuredNameEditorView extends TextFieldsEditorView {
+
+    private ContentValues mSnapshot;
+    private boolean mChanged;
+
+    public StructuredNameEditorView(Context context) {
+        super(context);
+    }
+
+    public StructuredNameEditorView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public StructuredNameEditorView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    public void setValues(DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly,
+            ViewIdGenerator vig) {
+        super.setValues(kind, entry, state, readOnly, vig);
+        if (mSnapshot == null) {
+            mSnapshot = new ContentValues(getValues().getCompleteValues());
+            mChanged = entry.isInsert();
+        } else {
+            mChanged = false;
+        }
+    }
+
+    @Override
+    public void onFieldChanged(String column, String value) {
+        if (!isFieldChanged(column, value)) {
+            return;
+        }
+
+        mChanged = true;
+
+        if (hasShortAndLongForms()) {
+            if (areOptionalFieldsVisible()) {
+                eraseFullName(getValues());
+            } else {
+                eraseStructuredName(getValues());
+            }
+        }
+
+        super.onFieldChanged(column, value);
+    }
+
+    @Override
+    protected void onOptionalFieldVisibilityChange() {
+        if (hasShortAndLongForms()) {
+            if (areOptionalFieldsVisible()) {
+                switchFromFullNameToStructuredName();
+            } else {
+                switchFromStructuredNameToFullName();
+            }
+        }
+
+        super.onOptionalFieldVisibilityChange();
+    }
+
+    private void switchFromFullNameToStructuredName() {
+        ValuesDelta values = getValues();
+
+        if (!mChanged) {
+            values.put(StructuredName.PREFIX,
+                    mSnapshot.getAsString(StructuredName.PREFIX));
+            values.put(StructuredName.GIVEN_NAME,
+                    mSnapshot.getAsString(StructuredName.GIVEN_NAME));
+            values.put(StructuredName.MIDDLE_NAME,
+                    mSnapshot.getAsString(StructuredName.MIDDLE_NAME));
+            values.put(StructuredName.FAMILY_NAME,
+                    mSnapshot.getAsString(StructuredName.FAMILY_NAME));
+            values.put(StructuredName.SUFFIX,
+                    mSnapshot.getAsString(StructuredName.SUFFIX));
+            return;
+        }
+
+        String displayName = values.getAsString(StructuredName.DISPLAY_NAME);
+        Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name");
+        appendQueryParameter(builder, StructuredName.DISPLAY_NAME, displayName);
+        Cursor cursor = getContext().getContentResolver().query(builder.build(), new String[]{
+                StructuredName.PREFIX,
+                StructuredName.GIVEN_NAME,
+                StructuredName.MIDDLE_NAME,
+                StructuredName.FAMILY_NAME,
+                StructuredName.SUFFIX,
+        }, null, null, null);
+
+        try {
+            if (cursor.moveToFirst()) {
+                eraseFullName(values);
+                values.put(StructuredName.PREFIX, cursor.getString(0));
+                values.put(StructuredName.GIVEN_NAME, cursor.getString(1));
+                values.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
+                values.put(StructuredName.FAMILY_NAME, cursor.getString(3));
+                values.put(StructuredName.SUFFIX, cursor.getString(4));
+            }
+        } finally {
+            cursor.close();
+        }
+
+        mSnapshot.clear();
+        mSnapshot.putAll(values.getCompleteValues());
+        mSnapshot.put(StructuredName.DISPLAY_NAME, displayName);
+    }
+
+    private void switchFromStructuredNameToFullName() {
+        ValuesDelta values = getValues();
+
+        if (!mChanged) {
+            values.put(StructuredName.DISPLAY_NAME,
+                    mSnapshot.getAsString(StructuredName.DISPLAY_NAME));
+            return;
+        }
+
+        String prefix = values.getAsString(StructuredName.PREFIX);
+        String givenName = values.getAsString(StructuredName.GIVEN_NAME);
+        String middleName = values.getAsString(StructuredName.MIDDLE_NAME);
+        String familyName = values.getAsString(StructuredName.FAMILY_NAME);
+        String suffix = values.getAsString(StructuredName.SUFFIX);
+
+        Uri.Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath(
+                "complete_name");
+        appendQueryParameter(builder, StructuredName.PREFIX, prefix);
+        appendQueryParameter(builder, StructuredName.GIVEN_NAME, givenName);
+        appendQueryParameter(builder, StructuredName.MIDDLE_NAME, middleName);
+        appendQueryParameter(builder, StructuredName.FAMILY_NAME, familyName);
+        appendQueryParameter(builder, StructuredName.SUFFIX, suffix);
+        Cursor cursor = getContext().getContentResolver().query(builder.build(), new String[]{
+                StructuredName.DISPLAY_NAME,
+        }, null, null, null);
+
+        try {
+            if (cursor.moveToFirst()) {
+                eraseStructuredName(values);
+                values.put(StructuredName.DISPLAY_NAME, cursor.getString(0));
+            }
+        } finally {
+            cursor.close();
+        }
+
+        mSnapshot.clear();
+        mSnapshot.put(StructuredName.DISPLAY_NAME, values.getAsString(StructuredName.DISPLAY_NAME));
+        mSnapshot.put(StructuredName.PREFIX, prefix);
+        mSnapshot.put(StructuredName.GIVEN_NAME, givenName);
+        mSnapshot.put(StructuredName.MIDDLE_NAME, middleName);
+        mSnapshot.put(StructuredName.FAMILY_NAME, familyName);
+        mSnapshot.put(StructuredName.SUFFIX, suffix);
+    }
+
+    private void eraseFullName(ValuesDelta values) {
+        values.putNull(StructuredName.DISPLAY_NAME);
+    }
+
+    private void eraseStructuredName(ValuesDelta values) {
+        values.putNull(StructuredName.PREFIX);
+        values.putNull(StructuredName.GIVEN_NAME);
+        values.putNull(StructuredName.MIDDLE_NAME);
+        values.putNull(StructuredName.FAMILY_NAME);
+        values.putNull(StructuredName.SUFFIX);
+    }
+
+    private void appendQueryParameter(Uri.Builder builder, String field, String value) {
+        if (!TextUtils.isEmpty(value)) {
+            builder.appendQueryParameter(field, value);
+        }
+    }
+
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        SavedState state = new SavedState(super.onSaveInstanceState());
+        state.mChanged = mChanged;
+        state.mSnapshot = mSnapshot;
+        return state;
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        SavedState ss = (SavedState) state;
+        super.onRestoreInstanceState(ss.getSuperState());
+
+        mChanged = ss.mChanged;
+        mSnapshot = ss.mSnapshot;
+    }
+
+    private static class SavedState extends BaseSavedState {
+        public boolean mChanged;
+        public ContentValues mSnapshot;
+
+        SavedState(Parcelable superState) {
+            super(superState);
+        }
+
+        private SavedState(Parcel in) {
+            super(in);
+            mChanged = in.readInt() != 0;
+            mSnapshot = in.readParcelable(SavedState.class.getClassLoader());
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+            out.writeInt(mChanged ? 1 : 0);
+            out.writeParcelable(mSnapshot, 0);
+        }
+
+        @SuppressWarnings({"unused", "hiding" })
+        public static final Parcelable.Creator<SavedState> CREATOR
+                = new Parcelable.Creator<SavedState>() {
+            @Override
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            @Override
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+}
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index bc78e87..08f8d00 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -50,6 +50,7 @@
 
     private static final String KEY_ACTIVE = "active";
     private static final String KEY_CONTACT_URI = "contactUri";
+    private static final String KEY_FINISH_WHEN_DONE = "finishWhenDone";
     public static final String ARG_CONTACT_URI = "contactUri";
 
     private static final String[] ENTITY_PROJECTION = new String[] {
@@ -66,6 +67,7 @@
 
     private boolean mActive;
     private Uri mContactUri;
+    private boolean mFinishActivityWhenDone;
     private Context mContext;
 
     private AlertDialog mDialog;
@@ -73,16 +75,23 @@
     // Visible for testing
     int mMessageId;
 
-    public static ContactDeletionInteraction start(Activity activity, Uri contactUri) {
+    public static ContactDeletionInteraction start(
+            Activity activity, Uri contactUri, boolean finishActivityWhenDone) {
+        if (contactUri == null) {
+            return null;
+        }
+
         FragmentManager fragmentManager = activity.getFragmentManager();
         ContactDeletionInteraction fragment =
                 (ContactDeletionInteraction) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
         if (fragment == null) {
             fragment = new ContactDeletionInteraction();
             fragment.setContactUri(contactUri);
+            fragment.setFinishActivityWhenDone(finishActivityWhenDone);
             fragmentManager.beginTransaction().add(fragment, FRAGMENT_TAG).commit();
         } else {
             fragment.setContactUri(contactUri);
+            fragment.setFinishActivityWhenDone(finishActivityWhenDone);
         }
         return fragment;
     }
@@ -93,6 +102,16 @@
         mContext = activity;
     }
 
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.setOnDismissListener(null);
+            mDialog.dismiss();
+            mDialog = null;
+        }
+    }
+
     public void setContactUri(Uri contactUri) {
         mContactUri = contactUri;
         mActive = true;
@@ -103,6 +122,11 @@
         }
     }
 
+    private void setFinishActivityWhenDone(boolean finishActivityWhenDone) {
+        this.mFinishActivityWhenDone = finishActivityWhenDone;
+
+    }
+
     /* Visible for testing */
     boolean isStarted() {
         return isAdded();
@@ -119,6 +143,14 @@
     }
 
     @Override
+    public void onStop() {
+        super.onStop();
+        if (mDialog != null) {
+            mDialog.hide();
+        }
+    }
+
+    @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
         Uri contactUri = args.getParcelable(ARG_CONTACT_URI);
         return new CursorLoader(mContext,
@@ -211,6 +243,7 @@
         super.onSaveInstanceState(outState);
         outState.putBoolean(KEY_ACTIVE, mActive);
         outState.putParcelable(KEY_CONTACT_URI, mContactUri);
+        outState.putBoolean(KEY_FINISH_WHEN_DONE, mFinishActivityWhenDone);
     }
 
     @Override
@@ -219,10 +252,14 @@
         if (savedInstanceState != null) {
             mActive = savedInstanceState.getBoolean(KEY_ACTIVE);
             mContactUri = savedInstanceState.getParcelable(KEY_CONTACT_URI);
+            mFinishActivityWhenDone = savedInstanceState.getBoolean(KEY_FINISH_WHEN_DONE);
         }
     }
 
     protected void doDeleteContact(Uri contactUri) {
         mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
+        if (isAdded() && mFinishActivityWhenDone) {
+            getActivity().finish();
+        }
     }
 }
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 9b99639..be920db 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -520,12 +520,18 @@
 
     protected void selectDefaultContact() {
         Uri contactUri = null;
+        ContactListAdapter adapter = getAdapter();
         if (mLastSelectedPosition != -1) {
-            contactUri = getAdapter().getContactUri(mLastSelectedPosition);
+            int count = adapter.getCount();
+            int pos = mLastSelectedPosition;
+            if (pos >= count && count > 0) {
+                pos = count - 1;
+            }
+            contactUri = adapter.getContactUri(pos);
         }
 
         if (contactUri == null) {
-            contactUri = getAdapter().getFirstContactUri();
+            contactUri = adapter.getFirstContactUri();
         }
 
         setSelectedContactUri(contactUri, false, mSmoothScrollRequested, false, false);
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 44e09b0..a2b264b 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.list;
 
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.R;
 import com.android.contacts.widget.IndexerListAdapter;
 import com.android.contacts.widget.TextWithHighlightingFactory;
@@ -61,7 +62,7 @@
 
     private boolean mDisplayPhotos;
     private boolean mQuickContactEnabled;
-    private ContactPhotoLoader mPhotoLoader;
+    private ContactPhotoManager mPhotoLoader;
 
     private String mQueryString;
     private char[] mUpperCaseQueryString;
@@ -225,11 +226,11 @@
         return mTextWithHighlightingFactory;
     }
 
-    public void setPhotoLoader(ContactPhotoLoader photoLoader) {
+    public void setPhotoLoader(ContactPhotoManager photoLoader) {
         mPhotoLoader = photoLoader;
     }
 
-    protected ContactPhotoLoader getPhotoLoader() {
+    protected ContactPhotoManager getPhotoLoader() {
         return mPhotoLoader;
     }
 
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 70eb0db..c85f582 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -18,6 +18,7 @@
 
 import com.android.common.widget.CompositeCursorAdapter.Partition;
 import com.android.contacts.ContactListEmptyView;
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.ContactsSearchManager;
 import com.android.contacts.R;
 import com.android.contacts.preference.ContactsPreferences;
@@ -124,7 +125,7 @@
     private int mDirectoryResultLimit = DEFAULT_DIRECTORY_RESULT_LIMIT;
 
     private ContextMenuAdapter mContextMenuAdapter;
-    private ContactPhotoLoader mPhotoLoader;
+    private ContactPhotoManager mPhotoManager;
     private ContactListEmptyView mEmptyView;
     private ProviderStatusLoader mProviderStatusLoader;
     private ContactsPreferences mContactsPrefs;
@@ -544,6 +545,7 @@
             if (mVerticalScrollbarPosition == View.SCROLLBAR_POSITION_LEFT) {
                 leftPadding = mContext.getResources().getDimensionPixelOffset(
                         R.dimen.list_visible_scrollbar_padding);
+                mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
             } else if (hasScrollbar){
                 rightPadding = mContext.getResources().getDimensionPixelOffset(
                         R.dimen.list_visible_scrollbar_padding);
@@ -711,7 +713,7 @@
         boolean searchMode = isSearchMode();
         mAdapter.setSearchMode(searchMode);
         mAdapter.configureDefaultPartition(false, searchMode);
-        mAdapter.setPhotoLoader(mPhotoLoader);
+        mAdapter.setPhotoLoader(mPhotoManager);
         mListView.setAdapter(mAdapter);
 
         if (!isSearchMode()) {
@@ -762,14 +764,14 @@
 
     protected void configurePhotoLoader() {
         if (isPhotoLoaderEnabled() && mContext != null) {
-            if (mPhotoLoader == null) {
-                mPhotoLoader = new ContactPhotoLoader(mContext, R.drawable.ic_contact_picture);
+            if (mPhotoManager == null) {
+                mPhotoManager = ContactPhotoManager.getInstance(mContext);
             }
             if (mListView != null) {
                 mListView.setOnScrollListener(this);
             }
             if (mAdapter != null) {
-                mAdapter.setPhotoLoader(mPhotoLoader);
+                mAdapter.setPhotoLoader(mPhotoManager);
             }
         }
     }
@@ -813,29 +815,12 @@
     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) {
         if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
-            mPhotoLoader.pause();
+            mPhotoManager.pause();
         } else if (isPhotoLoaderEnabled()) {
-            mPhotoLoader.resume();
+            mPhotoManager.resume();
         }
     }
 
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        if (isPhotoLoaderEnabled()) {
-            mPhotoLoader.resume();
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        if (isPhotoLoaderEnabled()) {
-            mPhotoLoader.stop();
-        }
-        super.onDestroy();
-    }
-
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         hideSoftKeyboard();
 
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index a6db641..cfacc85 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -79,9 +79,7 @@
         Contacts.LOOKUP_KEY,                    // 9
         Contacts.PHONETIC_NAME,                 // 10
         Contacts.HAS_PHONE_NUMBER,              // 11
-        SearchSnippetColumns.SNIPPET_MIMETYPE,  // 12
-        SearchSnippetColumns.SNIPPET_DATA1,     // 13
-        SearchSnippetColumns.SNIPPET_DATA4,     // 14
+        SearchSnippetColumns.SNIPPET,           // 12
     };
 
     protected static final int CONTACT_ID_COLUMN_INDEX = 0;
@@ -96,9 +94,7 @@
     protected static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 9;
     protected static final int CONTACT_PHONETIC_NAME_COLUMN_INDEX = 10;
     protected static final int CONTACT_HAS_PHONE_COLUMN_INDEX = 11;
-    protected static final int CONTACT_SNIPPET_MIMETYPE_COLUMN_INDEX = 12;
-    protected static final int CONTACT_SNIPPET_DATA1_COLUMN_INDEX = 13;
-    protected static final int CONTACT_SNIPPET_DATA4_COLUMN_INDEX = 14;
+    protected static final int CONTACT_SNIPPET_COLUMN_INDEX = 12;
 
     private CharSequence mUnknownNameText;
     private int mDisplayNameColumnIndex;
@@ -289,8 +285,7 @@
     }
 
     protected void bindSearchSnippet(final ContactListItemView view, Cursor cursor) {
-        view.showSnippet(cursor, CONTACT_SNIPPET_MIMETYPE_COLUMN_INDEX,
-                CONTACT_SNIPPET_DATA1_COLUMN_INDEX, CONTACT_SNIPPET_DATA4_COLUMN_INDEX);
+        view.showSnippet(cursor, CONTACT_SNIPPET_COLUMN_INDEX);
     }
 
     public int getSelectedContactPosition() {
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
index c943534..fe5f8e2 100644
--- a/src/com/android/contacts/list/ContactListItemView.java
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -30,10 +30,6 @@
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
 import android.text.SpannableString;
 import android.text.TextUtils;
@@ -863,36 +859,43 @@
     /**
      * Shows search snippet.
      */
-    public void showSnippet(Cursor cursor, int summarySnippetMimetypeColumnIndex,
-            int summarySnippetData1ColumnIndex, int summarySnippetData4ColumnIndex) {
-        if (cursor.getColumnCount() <= summarySnippetMimetypeColumnIndex) {
+    public void showSnippet(Cursor cursor, int summarySnippetColumnIndex) {
+        if (cursor.getColumnCount() <= summarySnippetColumnIndex) {
             setSnippet(null);
             return;
         }
 
-        String snippet = null;
-        String snippetMimeType = cursor.getString(summarySnippetMimetypeColumnIndex);
-        if (Email.CONTENT_ITEM_TYPE.equals(snippetMimeType)
-                || Nickname.CONTENT_ITEM_TYPE.equals(snippetMimeType)
-                || Phone.CONTENT_ITEM_TYPE.equals(snippetMimeType)) {
-            String value = cursor.getString(summarySnippetData1ColumnIndex);
-            if (!TextUtils.isEmpty(value)) {
-                snippet = value;
-            }
-        } else if (Organization.CONTENT_ITEM_TYPE.equals(snippetMimeType)) {
-            String company = cursor.getString(summarySnippetData1ColumnIndex);
-            String title = cursor.getString(summarySnippetData4ColumnIndex);
-            if (!TextUtils.isEmpty(company)) {
-                if (!TextUtils.isEmpty(title)) {
-                    snippet = company + " / " + title;
-                } else {
-                    snippet = company;
+        String snippet = cursor.getString(summarySnippetColumnIndex);
+        if (snippet != null) {
+            int from = 0;
+            int to = snippet.length();
+            int start = snippet.indexOf(DefaultContactListAdapter.SNIPPET_START_MATCH);
+            if (start == -1) {
+                snippet = null;
+            } else {
+                int firstNl = snippet.lastIndexOf('\n', start);
+                if (firstNl != -1) {
+                    from = firstNl + 1;
                 }
-            } else if (!TextUtils.isEmpty(title)) {
-                snippet = title;
+                int end = snippet.lastIndexOf(DefaultContactListAdapter.SNIPPET_END_MATCH);
+                if (end != -1) {
+                    int lastNl = snippet.indexOf('\n', end);
+                    if (lastNl != -1) {
+                        to = lastNl;
+                    }
+                }
+
+                StringBuilder sb = new StringBuilder();
+                for (int i = from; i < to; i++) {
+                    char c = snippet.charAt(i);
+                    if (c != DefaultContactListAdapter.SNIPPET_START_MATCH &&
+                            c != DefaultContactListAdapter.SNIPPET_END_MATCH) {
+                        sb.append(c);
+                    }
+                }
+                snippet = sb.toString();
             }
         }
-
         setSnippet(snippet);
     }
 
diff --git a/src/com/android/contacts/list/ContactPhotoLoader.java b/src/com/android/contacts/list/ContactPhotoLoader.java
deleted file mode 100644
index a6f40b6..0000000
--- a/src/com/android/contacts/list/ContactPhotoLoader.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * Copyright (C) 2010 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.list;
-
-import com.google.android.collect.Lists;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Handler.Callback;
-import android.os.HandlerThread;
-import android.os.Message;
-import android.provider.ContactsContract.Contacts.Photo;
-import android.provider.ContactsContract.Data;
-import android.util.Log;
-import android.widget.ImageView;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Asynchronously loads contact photos and maintains cache of photos.  The class is
- * mostly single-threaded.  The only two methods accessed by the loader thread are
- * {@link #cacheBitmap} and {@link #obtainPhotoIdsAndUrisToLoad}. Those methods access concurrent
- * hash maps shared with the main thread.
- */
-public class ContactPhotoLoader implements Callback {
-    private static final String TAG = "ContactPhotoLoader";
-    private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
-
-    /**
-     * Type of message sent by the UI thread to itself to indicate that some photos
-     * need to be loaded.
-     */
-    private static final int MESSAGE_REQUEST_LOADING = 1;
-
-    /**
-     * Type of message sent by the loader thread to indicate that some photos have
-     * been loaded.
-     */
-    private static final int MESSAGE_PHOTOS_LOADED = 2;
-
-    private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-    private final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
-
-    /**
-     * The resource ID of the image to be used when the photo is unavailable or being
-     * loaded.
-     */
-    private final int mDefaultResourceId;
-
-    /**
-     * Maintains the state of a particular photo.
-     */
-    private static class BitmapHolder {
-        private static final int NEEDED = 0;
-        private static final int LOADING = 1;
-        private static final int LOADED = 2;
-        private static final int LOADED_NEEDS_RELOAD = 3;
-
-        int state;
-        Bitmap bitmap;
-        SoftReference<Bitmap> bitmapRef;
-    }
-
-    /**
-     * A soft cache for photos.
-     */
-    private final ConcurrentHashMap<Object, BitmapHolder> mBitmapCache =
-            new ConcurrentHashMap<Object, BitmapHolder>();
-
-    /**
-     * A map from ImageView to the corresponding photo ID. Please note that this
-     * photo ID may change before the photo loading request is started.
-     */
-    private final ConcurrentHashMap<ImageView, Object> mPendingRequests =
-            new ConcurrentHashMap<ImageView, Object>();
-
-    /**
-     * Handler for messages sent to the UI thread.
-     */
-    private final Handler mMainThreadHandler = new Handler(this);
-
-    /**
-     * Thread responsible for loading photos from the database. Created upon
-     * the first request.
-     */
-    private LoaderThread mLoaderThread;
-
-    /**
-     * A gate to make sure we only send one instance of MESSAGE_PHOTOS_NEEDED at a time.
-     */
-    private boolean mLoadingRequested;
-
-    /**
-     * Flag indicating if the image loading is paused.
-     */
-    private boolean mPaused;
-
-    private final Context mContext;
-
-    /**
-     * Constructor.
-     *
-     * @param context content context
-     * @param defaultResourceId the image resource ID to be used when there is
-     *            no photo for a contact
-     */
-    public ContactPhotoLoader(Context context, int defaultResourceId) {
-        mDefaultResourceId = defaultResourceId;
-        mContext = context;
-    }
-
-    /**
-     * Load photo into the supplied image view.  If the photo is already cached,
-     * it is displayed immediately.  Otherwise a request is sent to load the photo
-     * from the database.
-     */
-    public void loadPhoto(ImageView view, long photoId) {
-        if (photoId == 0) {
-            // No photo is needed
-            view.setImageResource(mDefaultResourceId);
-            mPendingRequests.remove(view);
-        } else {
-            loadPhotoByIdOrUri(view, photoId);
-        }
-    }
-
-    /**
-     * Load photo into the supplied image view.  If the photo is already cached,
-     * it is displayed immediately.  Otherwise a request is sent to load the photo
-     * from the location specified by the URI.
-     */
-    public void loadPhoto(ImageView view, Uri photoUri) {
-        if (photoUri == null) {
-            // No photo is needed
-            view.setImageResource(mDefaultResourceId);
-            mPendingRequests.remove(view);
-        } else {
-            loadPhotoByIdOrUri(view, photoUri);
-        }
-    }
-
-    private void loadPhotoByIdOrUri(ImageView view, Object key) {
-        boolean loaded = loadCachedPhoto(view, key);
-        if (loaded) {
-            mPendingRequests.remove(view);
-        } else {
-            mPendingRequests.put(view, key);
-            if (!mPaused) {
-                // Send a request to start loading photos
-                requestLoading();
-            }
-        }
-    }
-
-    /**
-     * Mark all cached photos for reloading.  We can continue using cache but should
-     * also make sure the photos haven't changed in the background and notify the views
-     * if so.
-     */
-    public void refreshCache() {
-        for (BitmapHolder holder : mBitmapCache.values()) {
-            if (holder.state == BitmapHolder.LOADED) {
-                holder.state = BitmapHolder.LOADED_NEEDS_RELOAD;
-            }
-        }
-    }
-
-    /**
-     * Checks if the photo is present in cache.  If so, sets the photo on the view,
-     * otherwise sets the state of the photo to {@link BitmapHolder#NEEDED} and
-     * temporarily set the image to the default resource ID.
-     */
-    private boolean loadCachedPhoto(ImageView view, Object key) {
-        BitmapHolder holder = mBitmapCache.get(key);
-        if (holder == null) {
-            holder = new BitmapHolder();
-            mBitmapCache.put(key, holder);
-        } else {
-            boolean loaded = (holder.state == BitmapHolder.LOADED);
-            boolean loadedNeedsReload = (holder.state == BitmapHolder.LOADED_NEEDS_RELOAD);
-            if (loadedNeedsReload) {
-                holder.state = BitmapHolder.NEEDED;
-            }
-
-            // Null bitmap reference means that database contains no bytes for the photo
-            if ((loaded || loadedNeedsReload) && holder.bitmapRef == null) {
-                view.setImageResource(mDefaultResourceId);
-                return loaded;
-            }
-
-            if (holder.bitmapRef != null) {
-                Bitmap bitmap = holder.bitmapRef.get();
-                if (bitmap != null) {
-                    view.setImageBitmap(bitmap);
-                    return loaded;
-                }
-
-                // Null bitmap means that the soft reference was released by the GC
-                // and we need to reload the photo.
-                holder.bitmapRef = null;
-            }
-        }
-
-        // The bitmap has not been loaded - should display the placeholder image.
-        view.setImageResource(mDefaultResourceId);
-        holder.state = BitmapHolder.NEEDED;
-        return false;
-    }
-
-    /**
-     * Stops loading images, kills the image loader thread and clears all caches.
-     */
-    public void stop() {
-        pause();
-
-        if (mLoaderThread != null) {
-            mLoaderThread.quit();
-            mLoaderThread = null;
-        }
-
-        mPendingRequests.clear();
-        mBitmapCache.clear();
-    }
-
-    public void clear() {
-        mPendingRequests.clear();
-        mBitmapCache.clear();
-    }
-
-    /**
-     * Temporarily stops loading photos from the database.
-     */
-    public void pause() {
-        mPaused = true;
-    }
-
-    /**
-     * Resumes loading photos from the database.
-     */
-    public void resume() {
-        mPaused = false;
-        if (!mPendingRequests.isEmpty()) {
-            requestLoading();
-        }
-    }
-
-    /**
-     * Sends a message to this thread itself to start loading images.  If the current
-     * view contains multiple image views, all of those image views will get a chance
-     * to request their respective photos before any of those requests are executed.
-     * This allows us to load images in bulk.
-     */
-    private void requestLoading() {
-        if (!mLoadingRequested) {
-            mLoadingRequested = true;
-            mMainThreadHandler.sendEmptyMessage(MESSAGE_REQUEST_LOADING);
-        }
-    }
-
-    /**
-     * Processes requests on the main thread.
-     */
-    public boolean handleMessage(Message msg) {
-        switch (msg.what) {
-            case MESSAGE_REQUEST_LOADING: {
-                mLoadingRequested = false;
-                if (!mPaused) {
-                    if (mLoaderThread == null) {
-                        mLoaderThread = new LoaderThread(mContext.getContentResolver());
-                        mLoaderThread.start();
-                    }
-
-                    mLoaderThread.requestLoading();
-                }
-                return true;
-            }
-
-            case MESSAGE_PHOTOS_LOADED: {
-                if (!mPaused) {
-                    processLoadedImages();
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Goes over pending loading requests and displays loaded photos.  If some of the
-     * photos still haven't been loaded, sends another request for image loading.
-     */
-    private void processLoadedImages() {
-        Iterator<ImageView> iterator = mPendingRequests.keySet().iterator();
-        while (iterator.hasNext()) {
-            ImageView view = iterator.next();
-            Object key = mPendingRequests.get(view);
-            boolean loaded = loadCachedPhoto(view, key);
-            if (loaded) {
-                iterator.remove();
-            }
-        }
-
-        softenCache();
-
-        if (!mPendingRequests.isEmpty()) {
-            requestLoading();
-        }
-    }
-
-    /**
-     * Removes strong references to loaded bitmaps to allow them to be garbage collected
-     * if needed.
-     */
-    private void softenCache() {
-        for (BitmapHolder holder : mBitmapCache.values()) {
-            holder.bitmap = null;
-        }
-    }
-
-    /**
-     * Stores the supplied bitmap in cache.
-     */
-    private void cacheBitmap(Object key, byte[] bytes) {
-        if (mPaused) {
-            return;
-        }
-
-        BitmapHolder holder = new BitmapHolder();
-        holder.state = BitmapHolder.LOADED;
-        if (bytes != null) {
-            try {
-                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
-                holder.bitmap = bitmap;
-                holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
-            } catch (OutOfMemoryError e) {
-                // Do nothing - the photo will appear to be missing
-            }
-        }
-        mBitmapCache.put(key, holder);
-    }
-
-    /**
-     * Populates an array of photo IDs that need to be loaded.
-     */
-    private void obtainPhotoIdsAndUrisToLoad(ArrayList<Long> photoIds,
-            ArrayList<String> photoIdsAsStrings, ArrayList<Uri> uris) {
-        photoIds.clear();
-        photoIdsAsStrings.clear();
-        uris.clear();
-
-        /*
-         * Since the call is made from the loader thread, the map could be
-         * changing during the iteration. That's not really a problem:
-         * ConcurrentHashMap will allow those changes to happen without throwing
-         * exceptions. Since we may miss some requests in the situation of
-         * concurrent change, we will need to check the map again once loading
-         * is complete.
-         */
-        Iterator<Object> iterator = mPendingRequests.values().iterator();
-        while (iterator.hasNext()) {
-            Object key = iterator.next();
-            BitmapHolder holder = mBitmapCache.get(key);
-            if (holder != null && holder.state == BitmapHolder.NEEDED) {
-                // Assuming atomic behavior
-                holder.state = BitmapHolder.LOADING;
-                if (key instanceof Long) {
-                    photoIds.add((Long)key);
-                    photoIdsAsStrings.add(key.toString());
-                } else {
-                    uris.add((Uri)key);
-                }
-            }
-        }
-    }
-
-    /**
-     * The thread that performs loading of photos from the database.
-     */
-    private class LoaderThread extends HandlerThread implements Callback {
-        private static final int BUFFER_SIZE = 1024*16;
-
-        private final ContentResolver mResolver;
-        private final StringBuilder mStringBuilder = new StringBuilder();
-        private final ArrayList<Long> mPhotoIds = Lists.newArrayList();
-        private final ArrayList<String> mPhotoIdsAsStrings = Lists.newArrayList();
-        private final ArrayList<Uri> mPhotoUris = Lists.newArrayList();
-        private Handler mLoaderThreadHandler;
-        private byte mBuffer[];
-
-        public LoaderThread(ContentResolver resolver) {
-            super(LOADER_THREAD_NAME);
-            mResolver = resolver;
-        }
-
-        /**
-         * Sends a message to this thread to load requested photos.
-         */
-        public void requestLoading() {
-            if (mLoaderThreadHandler == null) {
-                mLoaderThreadHandler = new Handler(getLooper(), this);
-            }
-            mLoaderThreadHandler.sendEmptyMessage(0);
-        }
-
-        /**
-         * Receives the above message, loads photos and then sends a message
-         * to the main thread to process them.
-         */
-        public boolean handleMessage(Message msg) {
-            loadPhotosFromDatabase();
-            return true;
-        }
-
-        private void loadPhotosFromDatabase() {
-            obtainPhotoIdsAndUrisToLoad(mPhotoIds, mPhotoIdsAsStrings, mPhotoUris);
-
-            int count = mPhotoIds.size();
-            if (count != 0) {
-                mStringBuilder.setLength(0);
-                mStringBuilder.append(Photo._ID + " IN(");
-                for (int i = 0; i < count; i++) {
-                    if (i != 0) {
-                        mStringBuilder.append(',');
-                    }
-                    mStringBuilder.append('?');
-                }
-                mStringBuilder.append(')');
-
-                Cursor cursor = null;
-                try {
-                    cursor = mResolver.query(Data.CONTENT_URI,
-                            COLUMNS,
-                            mStringBuilder.toString(),
-                            mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
-                            null);
-
-                    if (cursor != null) {
-                        while (cursor.moveToNext()) {
-                            Long id = cursor.getLong(0);
-                            byte[] bytes = cursor.getBlob(1);
-                            cacheBitmap(id, bytes);
-                            mPhotoIds.remove(id);
-                        }
-                    }
-                } finally {
-                    if (cursor != null) {
-                        cursor.close();
-                    }
-                }
-
-                // Remaining photos were not found in the database - mark the cache accordingly.
-                count = mPhotoIds.size();
-                for (int i = 0; i < count; i++) {
-                    cacheBitmap(mPhotoIds.get(i), null);
-                }
-                mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
-            }
-
-            count = mPhotoUris.size();
-            for (int i = 0; i < count; i++) {
-                Uri uri = mPhotoUris.get(i);
-                if (mBuffer == null) {
-                    mBuffer = new byte[BUFFER_SIZE];
-                }
-                try {
-                    InputStream is = mResolver.openInputStream(uri);
-                    if (is != null) {
-                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                        try {
-                            int size;
-                            while ((size = is.read(mBuffer)) != -1) {
-                                baos.write(mBuffer, 0, size);
-                            }
-                        } finally {
-                            is.close();
-                        }
-                        cacheBitmap(uri, baos.toByteArray());
-                        mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
-                    } else {
-                        Log.v(TAG, "Cannot load photo " + uri);
-                        cacheBitmap(uri, null);
-                    }
-                } catch (Exception ex) {
-                    Log.v(TAG, "Cannot load photo " + uri, ex);
-                    cacheBitmap(uri, null);
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/contacts/list/CustomContactListFilterActivity.java b/src/com/android/contacts/list/CustomContactListFilterActivity.java
index 0f3fafd..dae7233 100644
--- a/src/com/android/contacts/list/CustomContactListFilterActivity.java
+++ b/src/com/android/contacts/list/CustomContactListFilterActivity.java
@@ -26,6 +26,7 @@
 import com.android.contacts.preference.ContactsPreferences;
 import com.android.contacts.util.EmptyService;
 import com.android.contacts.util.LocalizedNameResolver;
+import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.WeakAsyncTask;
 import com.google.android.collect.Lists;
 
@@ -113,8 +114,10 @@
         createWithPhonesOnlyPreferenceView(inflater);
         createDisplayGroupHeader(inflater);
 
-        mList.addHeaderView(mHeaderPhones, null, true);
-        mList.addHeaderView(mHeaderSeparator, null, false);
+        if (mHeaderPhones != null) {
+            mList.addHeaderView(mHeaderPhones, null, true);
+            mList.addHeaderView(mHeaderSeparator, null, false);
+        }
 
         findViewById(R.id.btn_done).setOnClickListener(this);
         findViewById(R.id.btn_discard).setOnClickListener(this);
@@ -127,12 +130,18 @@
     }
 
     private void createWithPhonesOnlyPreferenceView(LayoutInflater inflater) {
+        boolean optionSelected = mPrefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
+                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
+
+        if (!optionSelected && !PhoneCapabilityTester.isPhone(this)) {
+            return;
+        }
+
         // Add the "Only contacts with phones" header modifier.
         mHeaderPhones = inflater.inflate(R.layout.contact_list_filter_phones_only, mList, false);
         mHeaderPhones.setId(R.id.header_phones);
         mDisplayPhones = (CheckBox) mHeaderPhones.findViewById(android.R.id.checkbox);
-        mDisplayPhones.setChecked(mPrefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
-                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT));
+        mDisplayPhones.setChecked(optionSelected);
         final TextView text1 = (TextView) mHeaderPhones.findViewById(android.R.id.text1);
         text1.setText(R.string.showFilterPhones);
         final TextView text2 = (TextView) mHeaderPhones.findViewById(android.R.id.text2);
@@ -871,7 +880,10 @@
             return;
         }
 
-        setDisplayOnlyPhones(mDisplayPhones.isChecked());
+        if (mDisplayPhones != null) {
+            setDisplayOnlyPhones(mDisplayPhones.isChecked());
+        }
+
         setResult(RESULT_OK);
 
         final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 164a2cd..3e8c6f1 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -31,6 +31,7 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.SearchSnippetColumns;
 import android.text.TextUtils;
 import android.view.View;
 
@@ -42,6 +43,14 @@
  */
 public class DefaultContactListAdapter extends ContactListAdapter {
 
+    public static final char SNIPPET_START_MATCH = '\u0001';
+    public static final char SNIPPET_END_MATCH = '\u0001';
+    public static final String SNIPPET_ELLIPSIS = "\u2026";
+    public static final int SNIPPET_MAX_TOKENS = 5;
+
+    public static final String SNIPPET_ARGS = SNIPPET_START_MATCH + "," + SNIPPET_END_MATCH + ","
+            + SNIPPET_ELLIPSIS + "," + SNIPPET_MAX_TOKENS;
+
     public DefaultContactListAdapter(Context context) {
         super(context);
     }
@@ -71,6 +80,8 @@
                     builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
                             String.valueOf(getDirectoryResultLimit()));
                 }
+                builder.appendQueryParameter(SearchSnippetColumns.SNIPPET_ARGS_PARAM_KEY,
+                        SNIPPET_ARGS);
                 applyDataRestriction(builder);
                 loader.setUri(builder.build());
                 loader.setProjection(FILTER_PROJECTION);
diff --git a/src/com/android/contacts/list/ShortcutIntentBuilder.java b/src/com/android/contacts/list/ShortcutIntentBuilder.java
index 101b6d5..43a6c1e 100644
--- a/src/com/android/contacts/list/ShortcutIntentBuilder.java
+++ b/src/com/android/contacts/list/ShortcutIntentBuilder.java
@@ -75,7 +75,7 @@
 
     private final OnShortcutIntentCreatedListener mListener;
     private final Context mContext;
-    private final int mIconSize;
+    private int mIconSize;
     private final int mIconDensity;
 
     /**
@@ -99,7 +99,10 @@
 
         final ActivityManager am = (ActivityManager) context
                 .getSystemService(Context.ACTIVITY_SERVICE);
-        mIconSize = am.getLauncherLargeIconSize();
+        mIconSize = context.getResources().getDimensionPixelSize(R.dimen.shortcut_icon_size);
+        if (mIconSize == 0) {
+            mIconSize = am.getLauncherLargeIconSize();
+        }
         mIconDensity = am.getLauncherLargeIconDensity();
     }
 
diff --git a/src/com/android/contacts/model/BaseAccountType.java b/src/com/android/contacts/model/BaseAccountType.java
index dbfeae4..70cfa55 100644
--- a/src/com/android/contacts/model/BaseAccountType.java
+++ b/src/com/android/contacts/model/BaseAccountType.java
@@ -121,12 +121,6 @@
                     FLAGS_PERSON_NAME).setLongForm(true));
             kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
                     FLAGS_PERSON_NAME).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                    R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
         } else {
             kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
                     FLAGS_PERSON_NAME).setLongForm(true));
@@ -138,13 +132,13 @@
                     FLAGS_PERSON_NAME).setLongForm(true));
             kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
                     FLAGS_PERSON_NAME).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                    R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
         }
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+                R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
 
         return kind;
     }
diff --git a/src/com/android/contacts/model/EntityDeltaList.java b/src/com/android/contacts/model/EntityDeltaList.java
index a998a37..9b7bdc6 100644
--- a/src/com/android/contacts/model/EntityDeltaList.java
+++ b/src/com/android/contacts/model/EntityDeltaList.java
@@ -340,10 +340,18 @@
         mSplitRawContacts = true;
     }
 
+    public boolean isMarkedForSplitting() {
+        return mSplitRawContacts;
+    }
+
     public void setJoinWithRawContacts(long[] rawContactIds) {
         mJoinWithRawContactIds = rawContactIds;
     }
 
+    public boolean isMarkedForJoining() {
+        return mJoinWithRawContactIds != null && mJoinWithRawContactIds.length > 0;
+    }
+
     /** {@inheritDoc} */
     public int describeContents() {
         // Nothing special about this parcel
@@ -358,6 +366,7 @@
             dest.writeParcelable(delta, flags);
         }
         dest.writeLongArray(mJoinWithRawContactIds);
+        dest.writeInt(mSplitRawContacts ? 1 : 0);
     }
 
     @SuppressWarnings("unchecked")
@@ -368,6 +377,7 @@
             this.add(source.<EntityDelta> readParcelable(loader));
         }
         mJoinWithRawContactIds = source.createLongArray();
+        mSplitRawContacts = source.readInt() != 0;
     }
 
     public static final Parcelable.Creator<EntityDeltaList> CREATOR =
diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java
index c58d813..ab19a35 100644
--- a/src/com/android/contacts/model/EntityModifier.java
+++ b/src/com/android/contacts/model/EntityModifier.java
@@ -26,13 +26,12 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
+import android.net.Uri;
 import android.os.Bundle;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
 import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Note;
 import android.provider.ContactsContract.CommonDataKinds.Organization;
@@ -40,7 +39,10 @@
 import android.provider.ContactsContract.CommonDataKinds.Photo;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.Intents.Insert;
+import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.SparseIntArray;
@@ -344,7 +346,7 @@
         }
 
         final ValuesDelta child = ValuesDelta.fromAfter(after);
-	state.addEntry(child);
+        state.addEntry(child);
         return child;
     }
 
@@ -357,11 +359,26 @@
     public static void trimEmpty(EntityDeltaList set, AccountTypeManager accountTypes) {
         for (EntityDelta state : set) {
             final String accountType = state.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
-            final AccountType source = accountTypes.getAccountType(accountType);
-            trimEmpty(state, source);
+            final AccountType type = accountTypes.getAccountType(accountType);
+            trimEmpty(state, type);
         }
     }
 
+    public static boolean hasChanges(EntityDeltaList set, AccountTypeManager accountTypes) {
+        if (set.isMarkedForSplitting() || set.isMarkedForJoining()) {
+            return true;
+        }
+
+        for (EntityDelta state : set) {
+            final String accountType = state.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+            final AccountType type = accountTypes.getAccountType(accountType);
+            if (hasChanges(state, type)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Processing to trim any empty {@link ValuesDelta} rows from the given
      * {@link EntityDelta}, assuming the given {@link AccountType} dictates
@@ -406,24 +423,43 @@
         }
     }
 
+    private static boolean hasChanges(EntityDelta state, AccountType accountType) {
+        for (DataKind kind : accountType.getSortedDataKinds()) {
+            final String mimeType = kind.mimeType;
+            final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+            if (entries == null) continue;
+
+            for (ValuesDelta entry : entries) {
+                if ((entry.isInsert() || entry.isUpdate() || entry.isDelete())
+                        && !isEmpty(entry, kind)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     /**
      * Test if the given {@link ValuesDelta} would be considered "empty" in
      * terms of {@link DataKind#fieldList}.
      */
     public static boolean isEmpty(ValuesDelta values, DataKind kind) {
+        if (Photo.CONTENT_ITEM_TYPE.equals(kind.mimeType)) {
+            return values.isInsert() && values.getAsByteArray(Photo.PHOTO) == null;
+        }
+
         // No defined fields mean this row is always empty
         if (kind.fieldList == null) return true;
 
-        boolean hasValues = false;
         for (EditField field : kind.fieldList) {
             // If any field has values, we're not empty
             final String value = values.getAsString(field.column);
             if (ContactsUtils.isGraphic(value)) {
-                hasValues = true;
+                return false;
             }
         }
 
-        return !hasValues;
+        return true;
     }
 
     /**
@@ -455,28 +491,8 @@
             return;
         }
 
-        {
-            // StructuredName
-            EntityModifier.ensureKindExists(state, accountType, StructuredName.CONTENT_ITEM_TYPE);
-            final ValuesDelta child = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
-
-            final String name = extras.getString(Insert.NAME);
-            if (ContactsUtils.isGraphic(name)) {
-                child.put(StructuredName.DISPLAY_NAME, name);
-            }
-
-            final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
-            if (ContactsUtils.isGraphic(phoneticName)) {
-                child.put(StructuredName.PHONETIC_GIVEN_NAME, phoneticName);
-            }
-        }
-
-        {
-            // StructuredPostal
-            final DataKind kind = accountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
-            parseExtras(state, kind, extras, Insert.POSTAL_TYPE, Insert.POSTAL,
-                    StructuredPostal.FORMATTED_ADDRESS);
-        }
+        parseStructuredNameExtra(context, accountType, state, extras);
+        parseStructuredPostalExtra(accountType, state, extras);
 
         {
             // Phone
@@ -542,6 +558,87 @@
         }
     }
 
+    private static void parseStructuredNameExtra(
+            Context context, AccountType accountType, EntityDelta state, Bundle extras) {
+        // StructuredName
+        EntityModifier.ensureKindExists(state, accountType, StructuredName.CONTENT_ITEM_TYPE);
+        final ValuesDelta child = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+
+        final String name = extras.getString(Insert.NAME);
+        if (ContactsUtils.isGraphic(name)) {
+            final DataKind kind = accountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+            boolean supportsDisplayName = false;
+            if (kind.fieldList != null) {
+                for (EditField field : kind.fieldList) {
+                    if (StructuredName.DISPLAY_NAME.equals(field.column)) {
+                        supportsDisplayName = true;
+                        break;
+                    }
+                }
+            }
+
+            if (supportsDisplayName) {
+                child.put(StructuredName.DISPLAY_NAME, name);
+            } else {
+                Uri uri = ContactsContract.AUTHORITY_URI.buildUpon()
+                        .appendPath("complete_name")
+                        .appendQueryParameter(StructuredName.DISPLAY_NAME, name)
+                        .build();
+                Cursor cursor = context.getContentResolver().query(uri,
+                        new String[]{
+                                StructuredName.PREFIX,
+                                StructuredName.GIVEN_NAME,
+                                StructuredName.MIDDLE_NAME,
+                                StructuredName.FAMILY_NAME,
+                                StructuredName.SUFFIX,
+                        }, null, null, null);
+
+                try {
+                    if (cursor.moveToFirst()) {
+                        child.put(StructuredName.PREFIX, cursor.getString(0));
+                        child.put(StructuredName.GIVEN_NAME, cursor.getString(1));
+                        child.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
+                        child.put(StructuredName.FAMILY_NAME, cursor.getString(3));
+                        child.put(StructuredName.SUFFIX, cursor.getString(4));
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+        }
+
+        final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
+        if (ContactsUtils.isGraphic(phoneticName)) {
+            child.put(StructuredName.PHONETIC_GIVEN_NAME, phoneticName);
+        }
+    }
+
+    private static void parseStructuredPostalExtra(
+            AccountType accountType, EntityDelta state, Bundle extras) {
+        // StructuredPostal
+        final DataKind kind = accountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+        final ValuesDelta child = parseExtras(state, kind, extras, Insert.POSTAL_TYPE,
+                Insert.POSTAL, StructuredPostal.FORMATTED_ADDRESS);
+        String address = child == null ? null
+                : child.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+        if (!TextUtils.isEmpty(address)) {
+            boolean supportsFormatted = false;
+            if (kind.fieldList != null) {
+                for (EditField field : kind.fieldList) {
+                    if (StructuredPostal.FORMATTED_ADDRESS.equals(field.column)) {
+                        supportsFormatted = true;
+                        break;
+                    }
+                }
+            }
+
+            if (!supportsFormatted) {
+                child.put(StructuredPostal.STREET, address);
+                child.putNull(StructuredPostal.FORMATTED_ADDRESS);
+            }
+        }
+    }
+
     private static void parseValues(
             EntityDelta state, AccountType accountType, ArrayList<ContentValues> dataValueList) {
         for (ContentValues values : dataValueList) {
@@ -721,6 +818,7 @@
      * Attempt to parse legacy {@link Insert#IM_PROTOCOL} values, replacing them
      * with updated values.
      */
+    @SuppressWarnings("deprecation")
     private static void fixupLegacyImType(Bundle bundle) {
         final String encodedString = bundle.getString(Insert.IM_PROTOCOL);
         if (encodedString == null) return;
@@ -748,17 +846,17 @@
      * @param valueExtra {@link Bundle} key that holds the incoming value.
      * @param valueColumn Column to write value into {@link ValuesDelta}.
      */
-    public static void parseExtras(EntityDelta state, DataKind kind, Bundle extras,
+    public static ValuesDelta parseExtras(EntityDelta state, DataKind kind, Bundle extras,
             String typeExtra, String valueExtra, String valueColumn) {
         final CharSequence value = extras.getCharSequence(valueExtra);
 
         // Bail early if account type doesn't handle this MIME type
-        if (kind == null) return;
+        if (kind == null) return null;
 
         // Bail when can't insert type, or value missing
         final boolean canInsert = EntityModifier.canInsert(state, kind);
         final boolean validValue = (value != null && TextUtils.isGraphic(value));
-        if (!validValue || !canInsert) return;
+        if (!validValue || !canInsert) return null;
 
         // Find exact type when requested, otherwise best available type
         final boolean hasType = extras.containsKey(typeExtra);
@@ -775,5 +873,7 @@
             final String customType = extras.getString(typeExtra);
             child.put(editType.customColumn, customType);
         }
+
+        return child;
     }
 }
diff --git a/src/com/android/contacts/model/ExchangeAccountType.java b/src/com/android/contacts/model/ExchangeAccountType.java
index 4442a70..9779e70 100644
--- a/src/com/android/contacts/model/ExchangeAccountType.java
+++ b/src/com/android/contacts/model/ExchangeAccountType.java
@@ -80,10 +80,6 @@
                     R.string.name_given, FLAGS_PERSON_NAME));
             kind.fieldList.add(new EditField(StructuredName.SUFFIX,
                     R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
         } else {
             kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
                     R.string.name_given, FLAGS_PERSON_NAME));
@@ -93,12 +89,13 @@
                     R.string.name_family, FLAGS_PERSON_NAME));
             kind.fieldList.add(new EditField(StructuredName.SUFFIX,
                     R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
         }
 
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
+
         return kind;
     }
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactWindow.java b/src/com/android/contacts/quickcontact/QuickContactWindow.java
index 063d446..147e364 100644
--- a/src/com/android/contacts/quickcontact/QuickContactWindow.java
+++ b/src/com/android/contacts/quickcontact/QuickContactWindow.java
@@ -32,7 +32,6 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.content.ActivityNotFoundException;
-import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -100,6 +99,7 @@
         NotifyingAsyncQueryHandler.AsyncQueryListener, View.OnClickListener,
         AbsListView.OnItemClickListener, KeyEvent.Callback, OnGlobalLayoutListener,
         QuickContactRootLayout.Listener {
+
     private static final String TAG = "QuickContactWindow";
 
     /**
@@ -115,6 +115,12 @@
     private final static int ANIMATION_EXPAND_TIME = 100;
     private final static int ANIMATION_COLLAPSE_TIME = 100;
 
+    /**
+     * If the anchor is wider than (quick contact width * this constant) then
+     * center quick contact.  Otherwise, left-align.
+     */
+    private static final double MIN_RELATIVE_ANCHOR_WIDTH_TO_CENTER = 0.5;
+
     private final Context mContext;
     private final LayoutInflater mInflater;
     private final WindowManager mWindowManager;
@@ -379,20 +385,7 @@
      * {@link Contacts#CONTENT_LOOKUP_URI} style {@link Uri}.
      */
     private Uri getDataUri(Uri lookupUri) {
-        // TODO: Formalize method of extracting LOOKUP_KEY
-        final List<String> path = lookupUri.getPathSegments();
-        final boolean validLookup = path.size() >= 3 && "lookup".equals(path.get(1));
-        if (!validLookup) {
-            // We only accept valid lookup-style Uris
-            throw new IllegalArgumentException("Expecting lookup-style Uri");
-        } else if (path.size() == 3) {
-            // No direct _ID provided, so force a lookup
-            lookupUri = Contacts.lookupContact(mContext.getContentResolver(), lookupUri);
-        }
-
-        final long contactId = ContentUris.parseId(lookupUri);
-        return Uri.withAppendedPath(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId),
-                Contacts.Data.CONTENT_DIRECTORY);
+        return Uri.withAppendedPath(lookupUri, Contacts.Data.CONTENT_DIRECTORY);
     }
 
     /**
@@ -415,9 +408,13 @@
                 R.dimen.quick_contact_width);
         layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
 
-        // Try to left align with the anchor control
+        // Try to left align with the anchor control or center if the anchor is wide
         if (mAnchor.left + layoutParams.width <= mScreenWidth) {
-            layoutParams.x = mAnchor.left;
+            if (mAnchor.width() > layoutParams.width * MIN_RELATIVE_ANCHOR_WIDTH_TO_CENTER) {
+                layoutParams.x = mAnchor.left + (mAnchor.width() - layoutParams.width) / 2;
+            } else {
+                layoutParams.x = mAnchor.left;
+            }
         } else {
             // Not enough space. Try to right align to the anchor
             if (mAnchor.right - layoutParams.width >= 0) {
@@ -637,7 +634,7 @@
      * Handle the result from the {@link #TOKEN_DATA} query.
      */
     private void handleData(Cursor cursor) {
-        final ResolveCache cache = ResolveCache.getInstance(mContext.getPackageManager());
+        final ResolveCache cache = ResolveCache.getInstance(mContext);
         if (cursor == null) return;
         if (cursor.getCount() == 0) {
             Toast.makeText(mContext, R.string.invalidContactMessage, Toast.LENGTH_LONG).show();
@@ -733,7 +730,17 @@
             }
         }
 
-        if (mDefaultsMap.size() != 0) {
+        // Make sure that we only display the "clear default" action if there
+        // are actually several items to chose from
+        boolean shouldDisplayClearDefaults = false;
+        for (String mimetype : mDefaultsMap.keySet()) {
+            if (mActions.get(mimetype).size() > 1) {
+                shouldDisplayClearDefaults = true;
+                break;
+            }
+        }
+
+        if (shouldDisplayClearDefaults) {
             final Action action = new ClearDefaultsAction();
             mActions.put(action.getMimeType(), action);
         }
@@ -1303,6 +1310,12 @@
 
     /** {@inheritDoc} */
     @Override
+    public boolean dispatchGenericMotionEvent(MotionEvent event) {
+        return mWindow.superDispatchGenericMotionEvent(event);
+    }
+
+    /** {@inheritDoc} */
+    @Override
     public void onContentChanged() {
     }
 
diff --git a/src/com/android/contacts/quickcontact/ResolveCache.java b/src/com/android/contacts/quickcontact/ResolveCache.java
index 5d84253..2b9e92f 100644
--- a/src/com/android/contacts/quickcontact/ResolveCache.java
+++ b/src/com/android/contacts/quickcontact/ResolveCache.java
@@ -16,14 +16,17 @@
 
 package com.android.contacts.quickcontact;
 
+import com.android.contacts.util.PhoneCapabilityTester;
 import com.google.android.collect.Sets;
 
+import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
 import android.text.TextUtils;
 
 import java.lang.ref.SoftReference;
@@ -51,6 +54,7 @@
             "com.android.phone",
             "com.android.browser");
 
+    private final Context mContext;
     private final PackageManager mPackageManager;
 
     private static ResolveCache sInstance;
@@ -59,9 +63,9 @@
      * Returns an instance of the ResolveCache. Only one internal instance is kept, so
      * the argument packageManagers is ignored for all but the first call
      */
-    public synchronized static ResolveCache getInstance(PackageManager packageManager) {
+    public synchronized static ResolveCache getInstance(Context context) {
         if (sInstance == null) {
-            return sInstance = new ResolveCache(packageManager);
+            return sInstance = new ResolveCache(context.getApplicationContext());
         }
         return sInstance;
     }
@@ -81,8 +85,10 @@
 
     private HashMap<String, Entry> mCache = new HashMap<String, Entry>();
 
-    private ResolveCache(PackageManager packageManager) {
-        mPackageManager = packageManager;
+
+    private ResolveCache(Context context) {
+        mContext = context;
+        mPackageManager = context.getPackageManager();
     }
 
     /**
@@ -95,7 +101,12 @@
         if (entry != null) return entry;
         entry = new Entry();
 
-        final Intent intent = action.getIntent();
+        Intent intent = action.getIntent();
+        if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)
+                && !PhoneCapabilityTester.isSipPhone(mContext)) {
+            intent = null;
+        }
+
         if (intent != null) {
             final List<ResolveInfo> matches = mPackageManager.queryIntentActivities(intent,
                     PackageManager.MATCH_DEFAULT_ONLY);
diff --git a/src/com/android/contacts/socialwidget/SocialWidgetConfigureActivity.java b/src/com/android/contacts/socialwidget/SocialWidgetConfigureActivity.java
index 4201cee..98812d9 100644
--- a/src/com/android/contacts/socialwidget/SocialWidgetConfigureActivity.java
+++ b/src/com/android/contacts/socialwidget/SocialWidgetConfigureActivity.java
@@ -51,7 +51,7 @@
 
             // Update the widget
             SocialWidgetProvider.loadWidgetData(
-                    context, AppWidgetManager.getInstance(this), widgetId);
+                    context, AppWidgetManager.getInstance(this), widgetId, true);
 
             // Return OK so that the system won't remove the widget
             final Intent resultValue = new Intent();
diff --git a/src/com/android/contacts/socialwidget/SocialWidgetProvider.java b/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
index 0330c89..92118c0 100644
--- a/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
+++ b/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
@@ -19,10 +19,12 @@
 import com.android.contacts.ContactLoader;
 import com.android.contacts.R;
 import com.android.contacts.util.ContactBadgeUtil;
+import com.android.contacts.util.DataStatus;
 
 import android.app.PendingIntent;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProvider;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
 import android.content.Loader;
@@ -30,6 +32,7 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Typeface;
 import android.net.Uri;
+import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.QuickContact;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
@@ -40,6 +43,8 @@
 import android.view.View;
 import android.widget.RemoteViews;
 
+import java.util.HashMap;
+
 public class SocialWidgetProvider extends AppWidgetProvider {
     private static final String TAG = "SocialWidgetProvider";
 
@@ -58,7 +63,7 @@
         }
 
         for (int appWidgetId : appWidgetIds) {
-            loadWidgetData(context, appWidgetManager, appWidgetId);
+            loadWidgetData(context, appWidgetManager, appWidgetId, false);
         }
     }
 
@@ -75,41 +80,46 @@
         SocialWidgetSettings.getInstance().remove(context, appWidgetIds);
     }
 
-    public static void loadWidgetData(
-            final Context context, final AppWidgetManager appWidgetManager, final int widgetId) {
-        final ContactLoader previousLoader = sLoaders.get(widgetId);
+    public static void loadWidgetData(final Context context,
+            final AppWidgetManager appWidgetManager, final int widgetId, boolean forceLoad) {
+        ContactLoader previousLoader = sLoaders.get(widgetId);
+
+        if (previousLoader != null && !forceLoad) {
+            previousLoader.startLoading();
+            return;
+        }
 
         if (previousLoader != null) {
-            previousLoader.startLoading();
-        } else {
-            // Show that we are loading
-            final RemoteViews loadingViews =
-                    new RemoteViews(context.getPackageName(), R.layout.social_widget);
-            loadingViews.setTextViewText(R.id.name,
-                    context.getString(R.string.social_widget_loading));
-            loadingViews.setViewVisibility(R.id.name, View.VISIBLE);
-            loadingViews.setViewVisibility(R.id.name_and_snippet, View.GONE);
-            appWidgetManager.updateAppWidget(widgetId, loadingViews);
-
-            // Load
-            final Uri contactUri =
-                    SocialWidgetSettings.getInstance().getContactUri(context, widgetId);
-            if (contactUri == null) {
-                // Not yet set-up (this can happen while the Configuration activity is visible)
-                return;
-            }
-            final ContactLoader contactLoader = new ContactLoader(context, contactUri);
-            contactLoader.registerListener(0,
-                    new ContactLoader.OnLoadCompleteListener<ContactLoader.Result>() {
-                        @Override
-                        public void onLoadComplete(Loader<ContactLoader.Result> loader,
-                                ContactLoader.Result contactData) {
-                            bindRemoteViews(context, widgetId, appWidgetManager, contactData);
-                        }
-                    });
-            contactLoader.startLoading();
-            sLoaders.append(widgetId, contactLoader);
+            previousLoader.reset();
         }
+
+        // Show that we are loading
+        final RemoteViews loadingViews =
+                new RemoteViews(context.getPackageName(), R.layout.social_widget);
+        loadingViews.setTextViewText(R.id.name,
+                context.getString(R.string.social_widget_loading));
+        loadingViews.setViewVisibility(R.id.name, View.VISIBLE);
+        loadingViews.setViewVisibility(R.id.name_and_snippet, View.GONE);
+        appWidgetManager.updateAppWidget(widgetId, loadingViews);
+
+        // Load
+        final Uri contactUri =
+                SocialWidgetSettings.getInstance().getContactUri(context, widgetId);
+        if (contactUri == null) {
+            // Not yet set-up (this can happen while the Configuration activity is visible)
+            return;
+        }
+        final ContactLoader contactLoader = new ContactLoader(context, contactUri);
+        contactLoader.registerListener(0,
+                new ContactLoader.OnLoadCompleteListener<ContactLoader.Result>() {
+                    @Override
+                    public void onLoadComplete(Loader<ContactLoader.Result> loader,
+                            ContactLoader.Result contactData) {
+                        bindRemoteViews(context, widgetId, appWidgetManager, contactData);
+                    }
+                });
+        contactLoader.startLoading();
+        sLoaders.append(widgetId, contactLoader);
     }
 
     private static void bindRemoteViews(final Context context, final int widgetId,
@@ -122,13 +132,10 @@
         if (contactData == ContactLoader.Result.ERROR ||
                 contactData == ContactLoader.Result.NOT_FOUND) {
             setDisplayNameAndSnippet(context, views,
-                    context.getString(R.string.invalidContactMessage), null, null);
+                    context.getString(R.string.invalidContactMessage), null, null, null);
             setPhoto(views, ContactBadgeUtil.loadPlaceholderPhoto(context));
             setStatusAttribution(views, null);
         } else {
-            setDisplayNameAndSnippet(context, views, contactData.getDisplayName(),
-                    contactData.getPhoneticName(), contactData.getSocialSnippet());
-
             byte[] photo = contactData.getPhotoBinaryData();
             setPhoto(views, photo != null
                     ? BitmapFactory.decodeByteArray(photo, 0, photo.length)
@@ -148,6 +155,9 @@
             final PendingIntent pendingIntent = PendingIntent.getActivity(context,
                     0, intent, 0);
             views.setOnClickPendingIntent(R.id.border, pendingIntent);
+
+            setDisplayNameAndSnippet(context, views, contactData.getDisplayName(),
+                    contactData.getPhoneticName(), contactData.getStatuses(), pendingIntent);
         }
 
         // Configure UI
@@ -164,7 +174,7 @@
      */
     private static void setDisplayNameAndSnippet(Context context, RemoteViews views,
             CharSequence displayName, CharSequence phoneticName,
-            CharSequence snippet) {
+            HashMap<Long, DataStatus> statuses, PendingIntent defaultIntent) {
         SpannableStringBuilder sb = new SpannableStringBuilder();
 
         CharSequence name = displayName;
@@ -180,20 +190,41 @@
         sb.setSpan(sizeSpan, 0, name.length(), 0);
         sb.setSpan(styleSpan, 0, name.length(), 0);
 
-        if (TextUtils.isEmpty(snippet)) {
+        long latestStatusId = 0;
+        DataStatus latestStatus = null;
+        if (statuses != null) {
+            for (HashMap.Entry<Long, DataStatus> entry : statuses.entrySet()) {
+                DataStatus status = entry.getValue();
+                if (!TextUtils.isEmpty(status.getStatus())
+                        && (latestStatus == null
+                                || latestStatus.getTimestamp() < status.getTimestamp())) {
+                    latestStatusId = entry.getKey();
+                    latestStatus = status;
+                }
+            }
+        }
+
+        if (latestStatus == null) {
             views.setTextViewText(R.id.name, sb);
             views.setViewVisibility(R.id.name, View.VISIBLE);
             views.setViewVisibility(R.id.name_and_snippet, View.GONE);
+            views.setOnClickPendingIntent(R.id.widget_container, defaultIntent);
         } else {
-            if (snippet.length() <= SHORT_SNIPPET_LENGTH) {
+            CharSequence status = latestStatus.getStatus();
+            if (status.length() <= SHORT_SNIPPET_LENGTH) {
                 sb.append("\n");
             } else {
                 sb.append("  ");
             }
-            sb.append(snippet);
+            sb.append(status);
             views.setTextViewText(R.id.name_and_snippet, sb);
             views.setViewVisibility(R.id.name, View.GONE);
             views.setViewVisibility(R.id.name_and_snippet, View.VISIBLE);
+            final Intent intent = new Intent(Intent.ACTION_VIEW,
+                    ContentUris.withAppendedId(Data.CONTENT_URI, latestStatusId));
+
+            views.setOnClickPendingIntent(R.id.name_and_snippet_container,
+                    PendingIntent.getActivity(context, 0, intent, 0));
         }
     }
 
diff --git a/src/com/android/contacts/util/DataStatus.java b/src/com/android/contacts/util/DataStatus.java
index ec3c1e5..f267615 100644
--- a/src/com/android/contacts/util/DataStatus.java
+++ b/src/com/android/contacts/util/DataStatus.java
@@ -94,6 +94,10 @@
         return mStatus;
     }
 
+    public long getTimestamp() {
+        return mTimestamp;
+    }
+
     /**
      * Build any timestamp and label into a single string.
      */
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index 961e3c9..23319aa 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -58,7 +58,7 @@
     private static void initialize(Context context) {
         final TelephonyManager telephonyManager = new TelephonyManager(context);
         sIsPhone = telephonyManager.isVoiceCapable();
-        sIsSipPhone = SipManager.isVoipSupported(context);
+        sIsSipPhone = sIsPhone && SipManager.isVoipSupported(context);
         sIsInitialized = true;
     }
 
diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
index c5f293b..67c9c4a 100644
--- a/src/com/android/contacts/vcard/ExportProcessor.java
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -109,7 +109,7 @@
                 final String errorReason =
                     mService.getString(R.string.fail_reason_could_not_open_file,
                             uri, e.getMessage());
-                doFinishNotification(errorReason, "");
+                doFinishNotification(errorReason, null);
                 return;
             }
 
@@ -139,7 +139,7 @@
                 final String title =
                         mService.getString(R.string.fail_reason_could_not_initialize_exporter,
                                 translatedErrorReason);
-                doFinishNotification(title, "");
+                doFinishNotification(title, null);
                 return;
             }
 
@@ -147,7 +147,7 @@
             if (total == 0) {
                 final String title =
                         mService.getString(R.string.fail_reason_no_exportable_contact);
-                doFinishNotification(title, "");
+                doFinishNotification(title, null);
                 return;
             }
 
@@ -165,7 +165,7 @@
                     final String title =
                             mService.getString(R.string.fail_reason_error_occurred_during_export,
                                     translatedErrorReason);
-                    doFinishNotification(title, "");
+                    doFinishNotification(title, null);
                     return;
                 }
 
@@ -178,11 +178,16 @@
             }
             Log.i(LOG_TAG, "Successfully finished exporting vCard " + request.destUri);
 
+            if (DEBUG) {
+                Log.d(LOG_TAG, "Ask MediaScanner to scan the file: " + request.destUri.getPath());
+            }
+            mService.updateMediaScanner(request.destUri.getPath());
+
             successful = true;
             final String filename = uri.getLastPathSegment();
             final String title = mService.getString(R.string.exporting_vcard_finished_title,
                     filename);
-            doFinishNotification(title, "");
+            doFinishNotification(title, null);
         } finally {
             if (composer != null) {
                 composer.terminate();
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index 1b70025..4ea1ead 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -198,7 +198,7 @@
         }
         final Notification notification =
                    VCardService.constructFinishNotification(mService,
-                           description, description, intent);
+                           description, null, intent);
         mNotificationManager.notify(mJobId, notification);
     }
 
diff --git a/src/com/android/contacts/vcard/ProcessorBase.java b/src/com/android/contacts/vcard/ProcessorBase.java
index 833090d..073bcbb 100644
--- a/src/com/android/contacts/vcard/ProcessorBase.java
+++ b/src/com/android/contacts/vcard/ProcessorBase.java
@@ -39,6 +39,7 @@
      */
     public abstract int getType();
 
+    @Override
     public abstract void run();
 
     /**
@@ -49,8 +50,11 @@
      *
      * @see Future#cancel(boolean)
      */
+    @Override
     public abstract boolean cancel(boolean mayInterruptIfRunning);
+    @Override
     public abstract boolean isCancelled();
+    @Override
     public abstract boolean isDone();
 
     /**
diff --git a/src/com/android/contacts/vcard/VCardService.java b/src/com/android/contacts/vcard/VCardService.java
index 6422163..a4c0480 100644
--- a/src/com/android/contacts/vcard/VCardService.java
+++ b/src/com/android/contacts/vcard/VCardService.java
@@ -24,6 +24,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
+import android.media.MediaScannerConnection;
+import android.media.MediaScannerConnection.MediaScannerConnectionClient;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.IBinder;
@@ -36,8 +38,10 @@
 import android.widget.Toast;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
@@ -101,6 +105,33 @@
         }
     });
 
+    private class CustomMediaScannerConnectionClient implements MediaScannerConnectionClient {
+        final MediaScannerConnection mConnection;
+        final String mPath;
+
+        public CustomMediaScannerConnectionClient(String path) {
+            mConnection = new MediaScannerConnection(VCardService.this, this);
+            mPath = path;
+        }
+
+        public void start() {
+            mConnection.connect();
+        }
+
+        @Override
+        public void onMediaScannerConnected() {
+            if (DEBUG) { Log.d(LOG_TAG, "Connected to MediaScanner. Start scanning."); }
+            mConnection.scanFile(mPath, null);
+        }
+
+        @Override
+        public void onScanCompleted(String path, Uri uri) {
+            if (DEBUG) { Log.d(LOG_TAG, "scan completed: " + path); }
+            mConnection.disconnect();
+            removeConnectionClient(this);
+        }
+    }
+
     private NotificationManager mNotificationManager;
 
     // Should be single thread, as we don't want to simultaneously handle import and export
@@ -113,6 +144,11 @@
     // Key is jobId.
     private final Map<Integer, ProcessorBase> mRunningJobMap =
             new HashMap<Integer, ProcessorBase>();
+    // Stores ScannerConnectionClient objects until they finish scanning requested files.
+    // Uses List class for simplicity. It's not costly as we won't have multiple objects in
+    // almost all cases.
+    private final List<CustomMediaScannerConnectionClient> mRemainingScannerConnections =
+            new ArrayList<CustomMediaScannerConnectionClient>();
 
     /* ** vCard exporter params ** */
     // If true, VCardExporter is able to emits files longer than 8.3 format.
@@ -286,7 +322,7 @@
         } else {
             Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
         }
-        stopServiceWhenNoJob();
+        stopServiceIfAppropriate();
     }
 
     private synchronized void handleRequestAvailableExportDestination(Message msg) {
@@ -310,10 +346,11 @@
     }
 
     /**
-     * Checks job list and call {@link #stopSelf()} when there's no job now.
-     * A new job cannot be submitted any more after this call.
+     * Checks job list and call {@link #stopSelf()} when there's no job and no scanner connection
+     * is remaining.
+     * A new job (import/export) cannot be submitted any more after this call.
      */
-    private synchronized void stopServiceWhenNoJob() {
+    private synchronized void stopServiceIfAppropriate() {
         if (mRunningJobMap.size() > 0) {
             for (final Map.Entry<Integer, ProcessorBase> entry : mRunningJobMap.entrySet()) {
                 final int jobId = entry.getKey();
@@ -327,11 +364,41 @@
             }
         }
 
+        if (!mRemainingScannerConnections.isEmpty()) {
+            Log.i(LOG_TAG, "MediaScanner update is in progress.");
+            return;
+        }
+
         Log.i(LOG_TAG, "No unfinished job. Stop this service.");
         mExecutorService.shutdown();
         stopSelf();
     }
 
+    /* package */ synchronized void updateMediaScanner(String path) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "MediaScanner is being updated: " + path);
+        }
+
+        if (mExecutorService.isShutdown()) {
+            Log.w(LOG_TAG, "MediaScanner update is requested after executor's being shut down. " +
+                    "Ignoring the update request");
+            return;
+        }
+        final CustomMediaScannerConnectionClient client =
+                new CustomMediaScannerConnectionClient(path);
+        mRemainingScannerConnections.add(client);
+        client.start();
+    }
+
+    private synchronized void removeConnectionClient(
+            CustomMediaScannerConnectionClient client) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "Removing custom MediaScannerConnectionClient.");
+        }
+        mRemainingScannerConnections.remove(client);
+        stopServiceIfAppropriate();
+    }
+
     /* package */ synchronized void handleFinishImportNotification(
             int jobId, boolean successful) {
         if (DEBUG) {
@@ -341,7 +408,7 @@
         if (mRunningJobMap.remove(jobId) == null) {
             Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
         }
-        stopServiceWhenNoJob();
+        stopServiceIfAppropriate();
     }
 
     /* package */ synchronized void handleFinishExportNotification(
@@ -362,7 +429,7 @@
             mReservedDestination.remove(path);
         }
 
-        stopServiceWhenNoJob();
+        stopServiceIfAppropriate();
     }
 
     /**
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index 4514e1e..1db0f4c 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -132,7 +132,7 @@
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mFragment = ContactDeletionInteraction.start(activity, CONTACT_URI);
+                mFragment = ContactDeletionInteraction.start(activity, CONTACT_URI, false);
             }
         });