am 463d599b: (-s ours) am 27535d19: DO NOT MERGE Prevent loading javascript: uris in existing tabs

* commit '463d599b6bfd79b6addeee53dec1de52f1b54eb8':
  DO NOT MERGE Prevent loading javascript: uris in existing tabs
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0f6cb13..c76cb92 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,7 @@
     <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
     <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.NFC" />
     <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
     <uses-permission android:name="android.permission.SET_WALLPAPER" />
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
@@ -102,6 +103,13 @@
                 <data android:scheme="file" />
                 <data android:mimeType="application/x-webarchive-xml"/>
             </intent-filter>
+            <!-- Accept inbound NFC URLs at a low priority -->
+            <intent-filter android:priority="-101">
+                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:scheme="http" />
+                <data android:scheme="https" />
+            </intent-filter>
             <!-- We are also the main entry point of the browser. -->
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -197,6 +205,12 @@
         <receiver
             android:name=".widget.BookmarkWidgetProxy"
             android:exported="false" />
+        <activity android:name=".widget.BookmarkWidgetConfigure"
+            android:theme="@android:style/Theme.Holo.DialogWhenLarge">
+            <intent-filter>
+                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
+            </intent-filter>
+        </activity>
 
         <!-- Makes .BrowserActivity the search target for any activity in Browser -->
         <meta-data android:name="android.app.default_searchable" android:value=".BrowserActivity" />
@@ -208,11 +222,6 @@
              This value signifies to the RLZ client that this application uses RLZ tracking. -->
         <meta-data android:name="com.google.android.partnersetup.RLZ_ACCESS_POINT"
                    android:value="@string/rlz_access_point" />
-        <receiver android:name=".RlzReceiver">
-            <intent-filter>
-                <action android:name="android.intent.action.RLZ_VALUES_UPDATED"/>
-            </intent-filter>
-        </receiver>
 
         <receiver android:name=".OpenDownloadReceiver">
             <intent-filter>
@@ -232,6 +241,7 @@
                 <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
             </intent-filter>
         </receiver>
+
     </application>
 
 </manifest>
diff --git a/res/drawable-hdpi/arcs.png b/res/drawable-hdpi/arcs.png
deleted file mode 100644
index 9555a9f..0000000
--- a/res/drawable-hdpi/arcs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/bg_bookmark_widget_holo.9.png b/res/drawable-hdpi/bg_bookmark_widget_holo.9.png
deleted file mode 100644
index adb57a4..0000000
--- a/res/drawable-hdpi/bg_bookmark_widget_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/bg_bookmarks_widget_holo.9.png b/res/drawable-hdpi/bg_bookmarks_widget_holo.9.png
new file mode 100644
index 0000000..4fd263f
--- /dev/null
+++ b/res/drawable-hdpi/bg_bookmarks_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/browser_widget_preview.png b/res/drawable-hdpi/browser_widget_preview.png
new file mode 100644
index 0000000..4ee806b
--- /dev/null
+++ b/res/drawable-hdpi/browser_widget_preview.png
Binary files differ
diff --git a/res/drawable-hdpi/browsertab_add_focused.png b/res/drawable-hdpi/browsertab_add_focused.png
new file mode 100644
index 0000000..1490a61
--- /dev/null
+++ b/res/drawable-hdpi/browsertab_add_focused.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_close_window.png b/res/drawable-hdpi/btn_close_window.png
deleted file mode 100644
index 12e5c55..0000000
--- a/res/drawable-hdpi/btn_close_window.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png b/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png
deleted file mode 100644
index 5f975e5..0000000
--- a/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png b/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
deleted file mode 100644
index 722f3b8..0000000
--- a/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/crumb_divider.9.png b/res/drawable-hdpi/crumb_divider.9.png
deleted file mode 100644
index f748ffa..0000000
--- a/res/drawable-hdpi/crumb_divider.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/fav_icn_background.png b/res/drawable-hdpi/fav_icn_background.png
deleted file mode 100644
index a4ee08a..0000000
--- a/res/drawable-hdpi/fav_icn_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png b/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png
deleted file mode 100644
index e583acd..0000000
--- a/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_copy.png b/res/drawable-hdpi/ic_btn_copy.png
deleted file mode 100644
index 847cf7e..0000000
--- a/res/drawable-hdpi/ic_btn_copy.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_find.png b/res/drawable-hdpi/ic_btn_find.png
deleted file mode 100644
index 0da38a1..0000000
--- a/res/drawable-hdpi/ic_btn_find.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_select_all.png b/res/drawable-hdpi/ic_btn_select_all.png
deleted file mode 100644
index 9545a53..0000000
--- a/res/drawable-hdpi/ic_btn_select_all.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_stop_v2.png b/res/drawable-hdpi/ic_btn_stop_v2.png
deleted file mode 100644
index 2c97223..0000000
--- a/res/drawable-hdpi/ic_btn_stop_v2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_clear_search.png b/res/drawable-hdpi/ic_clear_search.png
deleted file mode 100644
index e8e67b4..0000000
--- a/res/drawable-hdpi/ic_clear_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_history_holo_dark.png b/res/drawable-hdpi/ic_history_holo_dark.png
deleted file mode 100644
index 7972a81..0000000
--- a/res/drawable-hdpi/ic_history_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_home_info_holo_dark.png b/res/drawable-hdpi/ic_home_info_holo_dark.png
new file mode 100644
index 0000000..02df4e1
--- /dev/null
+++ b/res/drawable-hdpi/ic_home_info_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_most_visited_holo_dark.png b/res/drawable-hdpi/ic_most_visited_holo_dark.png
deleted file mode 100644
index bbb0bf6..0000000
--- a/res/drawable-hdpi/ic_most_visited_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_new_incognito_holo_dark.png b/res/drawable-hdpi/ic_new_incognito_holo_dark.png
new file mode 100644
index 0000000..dbd2c3c
--- /dev/null
+++ b/res/drawable-hdpi/ic_new_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_back.png b/res/drawable-hdpi/ic_pie_back.png
deleted file mode 100644
index 32b3ea7..0000000
--- a/res/drawable-hdpi/ic_pie_back.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_bookmarks.png b/res/drawable-hdpi/ic_pie_bookmarks.png
deleted file mode 100644
index 2536856..0000000
--- a/res/drawable-hdpi/ic_pie_bookmarks.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_close_tab.png b/res/drawable-hdpi/ic_pie_close_tab.png
deleted file mode 100644
index 108f8da..0000000
--- a/res/drawable-hdpi/ic_pie_close_tab.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_forward.png b/res/drawable-hdpi/ic_pie_forward.png
deleted file mode 100644
index 4e5f08e..0000000
--- a/res/drawable-hdpi/ic_pie_forward.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_more.png b/res/drawable-hdpi/ic_pie_more.png
deleted file mode 100644
index 0833ee2..0000000
--- a/res/drawable-hdpi/ic_pie_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_new_tab.png b/res/drawable-hdpi/ic_pie_new_tab.png
deleted file mode 100644
index 18f49ef..0000000
--- a/res/drawable-hdpi/ic_pie_new_tab.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_refresh.png b/res/drawable-hdpi/ic_pie_refresh.png
deleted file mode 100644
index f0a5d7a..0000000
--- a/res/drawable-hdpi/ic_pie_refresh.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_search.png b/res/drawable-hdpi/ic_pie_search.png
deleted file mode 100644
index f1c8825..0000000
--- a/res/drawable-hdpi/ic_pie_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pie_tabs.png b/res/drawable-hdpi/ic_pie_tabs.png
deleted file mode 100644
index b941285..0000000
--- a/res/drawable-hdpi/ic_pie_tabs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_category_bookmark.png b/res/drawable-hdpi/ic_search_category_bookmark.png
index f94776a..017df48 100644
--- a/res/drawable-hdpi/ic_search_category_bookmark.png
+++ b/res/drawable-hdpi/ic_search_category_bookmark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_category_browser.png b/res/drawable-hdpi/ic_search_category_browser.png
index fbafafb..05b3324 100644
--- a/res/drawable-hdpi/ic_search_category_browser.png
+++ b/res/drawable-hdpi/ic_search_category_browser.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_category_history.png b/res/drawable-hdpi/ic_search_category_history.png
index 8ca6089..6eac1c5 100644
--- a/res/drawable-hdpi/ic_search_category_history.png
+++ b/res/drawable-hdpi/ic_search_category_history.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_category_suggest.png b/res/drawable-hdpi/ic_search_category_suggest.png
index 8e96638..54ef717 100644
--- a/res/drawable-hdpi/ic_search_category_suggest.png
+++ b/res/drawable-hdpi/ic_search_category_suggest.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_snapshot.png b/res/drawable-hdpi/ic_snapshot.png
new file mode 100644
index 0000000..a621cb4
--- /dev/null
+++ b/res/drawable-hdpi/ic_snapshot.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png
new file mode 100644
index 0000000..514b7dc
--- /dev/null
+++ b/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/list_divider_vert.9.png b/res/drawable-hdpi/list_divider_vert.9.png
deleted file mode 100644
index d99730a..0000000
--- a/res/drawable-hdpi/list_divider_vert.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/page_indicator.png b/res/drawable-hdpi/page_indicator.png
deleted file mode 100644
index d00b900..0000000
--- a/res/drawable-hdpi/page_indicator.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/page_indicator_unselected2.png b/res/drawable-hdpi/page_indicator_unselected2.png
deleted file mode 100644
index a34fd2e..0000000
--- a/res/drawable-hdpi/page_indicator_unselected2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/progress.9.png b/res/drawable-hdpi/progress.9.png
index 398bee4..2bfc699 100644
--- a/res/drawable-hdpi/progress.9.png
+++ b/res/drawable-hdpi/progress.9.png
Binary files differ
diff --git a/res/drawable-hdpi/qc_background_normal.png b/res/drawable-hdpi/qc_background_normal.png
new file mode 100644
index 0000000..fec04f2
--- /dev/null
+++ b/res/drawable-hdpi/qc_background_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/search_plate_browser.9.png b/res/drawable-hdpi/search_plate_browser.9.png
deleted file mode 100644
index cf0567b..0000000
--- a/res/drawable-hdpi/search_plate_browser.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_nr.png b/res/drawable-hdpi/tab_nr.png
new file mode 100644
index 0000000..d9e74d5
--- /dev/null
+++ b/res/drawable-hdpi/tab_nr.png
Binary files differ
diff --git a/res/drawable-hdpi/text_field_results.9.png b/res/drawable-hdpi/text_field_results.9.png
deleted file mode 100644
index bd4bcc5..0000000
--- a/res/drawable-hdpi/text_field_results.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/textfield_voice_search.9.png b/res/drawable-hdpi/textfield_voice_search.9.png
deleted file mode 100644
index 5d3f281..0000000
--- a/res/drawable-hdpi/textfield_voice_search.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png b/res/drawable-hdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png
new file mode 100644
index 0000000..9d55e98
--- /dev/null
+++ b/res/drawable-hdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/urlbar_bg.9.png b/res/drawable-hdpi/urlbar_bg.9.png
deleted file mode 100644
index c35383e..0000000
--- a/res/drawable-hdpi/urlbar_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/arcs.png b/res/drawable-mdpi/arcs.png
deleted file mode 100644
index 5e0d949..0000000
--- a/res/drawable-mdpi/arcs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/bg_bookmark_widget_holo.9.png b/res/drawable-mdpi/bg_bookmark_widget_holo.9.png
deleted file mode 100644
index d95f8d3..0000000
--- a/res/drawable-mdpi/bg_bookmark_widget_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/browser_widget_preview.png b/res/drawable-mdpi/browser_widget_preview.png
similarity index 100%
rename from res/drawable/browser_widget_preview.png
rename to res/drawable-mdpi/browser_widget_preview.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_close_window.png b/res/drawable-mdpi/btn_close_window.png
deleted file mode 100644
index 53f878b..0000000
--- a/res/drawable-mdpi/btn_close_window.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png b/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png
deleted file mode 100644
index d8697b8..0000000
--- a/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png b/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
deleted file mode 100644
index 21a2cc3..0000000
--- a/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/crumb_divider.9.png b/res/drawable-mdpi/crumb_divider.9.png
deleted file mode 100644
index 8c8fd43..0000000
--- a/res/drawable-mdpi/crumb_divider.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/fav_icn_background.png b/res/drawable-mdpi/fav_icn_background.png
deleted file mode 100755
index 9275ff3..0000000
--- a/res/drawable-mdpi/fav_icn_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png b/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png
deleted file mode 100644
index 0d9e49d..0000000
--- a/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_copy.png b/res/drawable-mdpi/ic_btn_copy.png
deleted file mode 100644
index 2174368..0000000
--- a/res/drawable-mdpi/ic_btn_copy.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_find.png b/res/drawable-mdpi/ic_btn_find.png
deleted file mode 100644
index 71bc61a..0000000
--- a/res/drawable-mdpi/ic_btn_find.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_select_all.png b/res/drawable-mdpi/ic_btn_select_all.png
deleted file mode 100644
index 8ce8c8f..0000000
--- a/res/drawable-mdpi/ic_btn_select_all.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_stop_v2.png b/res/drawable-mdpi/ic_btn_stop_v2.png
deleted file mode 100644
index 89f01e7..0000000
--- a/res/drawable-mdpi/ic_btn_stop_v2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_clear_search.png b/res/drawable-mdpi/ic_clear_search.png
deleted file mode 100644
index e8e67b4..0000000
--- a/res/drawable-mdpi/ic_clear_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_history_holo_dark.png b/res/drawable-mdpi/ic_history_holo_dark.png
deleted file mode 100644
index 44f2245..0000000
--- a/res/drawable-mdpi/ic_history_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_home_info_holo_dark.png b/res/drawable-mdpi/ic_home_info_holo_dark.png
new file mode 100644
index 0000000..c34f443
--- /dev/null
+++ b/res/drawable-mdpi/ic_home_info_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_most_visited_holo_dark.png b/res/drawable-mdpi/ic_most_visited_holo_dark.png
deleted file mode 100644
index 52082bd..0000000
--- a/res/drawable-mdpi/ic_most_visited_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_new_incognito_holo_dark.png b/res/drawable-mdpi/ic_new_incognito_holo_dark.png
new file mode 100644
index 0000000..315fe46
--- /dev/null
+++ b/res/drawable-mdpi/ic_new_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_back.png b/res/drawable-mdpi/ic_pie_back.png
deleted file mode 100644
index daddaea..0000000
--- a/res/drawable-mdpi/ic_pie_back.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_bookmarks.png b/res/drawable-mdpi/ic_pie_bookmarks.png
deleted file mode 100644
index ffa430d..0000000
--- a/res/drawable-mdpi/ic_pie_bookmarks.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_close_tab.png b/res/drawable-mdpi/ic_pie_close_tab.png
deleted file mode 100644
index 62396f4..0000000
--- a/res/drawable-mdpi/ic_pie_close_tab.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_forward.png b/res/drawable-mdpi/ic_pie_forward.png
deleted file mode 100644
index bd8dcac..0000000
--- a/res/drawable-mdpi/ic_pie_forward.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_more.png b/res/drawable-mdpi/ic_pie_more.png
deleted file mode 100644
index c96c6a4..0000000
--- a/res/drawable-mdpi/ic_pie_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_new_tab.png b/res/drawable-mdpi/ic_pie_new_tab.png
deleted file mode 100644
index 206675a..0000000
--- a/res/drawable-mdpi/ic_pie_new_tab.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_refresh.png b/res/drawable-mdpi/ic_pie_refresh.png
deleted file mode 100644
index 5980f8b..0000000
--- a/res/drawable-mdpi/ic_pie_refresh.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_search.png b/res/drawable-mdpi/ic_pie_search.png
deleted file mode 100644
index 6981697..0000000
--- a/res/drawable-mdpi/ic_pie_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_tabs.png b/res/drawable-mdpi/ic_pie_tabs.png
deleted file mode 100644
index fda262a..0000000
--- a/res/drawable-mdpi/ic_pie_tabs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_web.png b/res/drawable-mdpi/ic_pie_web.png
deleted file mode 100644
index 86e41ff..0000000
--- a/res/drawable-mdpi/ic_pie_web.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_snapshot.png b/res/drawable-mdpi/ic_snapshot.png
new file mode 100644
index 0000000..6054acb
--- /dev/null
+++ b/res/drawable-mdpi/ic_snapshot.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png
new file mode 100644
index 0000000..95c674d
--- /dev/null
+++ b/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/list_divider_vert.9.png b/res/drawable-mdpi/list_divider_vert.9.png
deleted file mode 100644
index d99730a..0000000
--- a/res/drawable-mdpi/list_divider_vert.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/page_indicator.png b/res/drawable-mdpi/page_indicator.png
deleted file mode 100644
index 73c030a..0000000
--- a/res/drawable-mdpi/page_indicator.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/page_indicator_unselected2.png b/res/drawable-mdpi/page_indicator_unselected2.png
deleted file mode 100644
index 70818ee..0000000
--- a/res/drawable-mdpi/page_indicator_unselected2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/search_plate_browser.9.png b/res/drawable-mdpi/search_plate_browser.9.png
deleted file mode 100644
index 2370d9c..0000000
--- a/res/drawable-mdpi/search_plate_browser.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/text_field_results.9.png b/res/drawable-mdpi/text_field_results.9.png
deleted file mode 100644
index 167c42d..0000000
--- a/res/drawable-mdpi/text_field_results.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/textfield_voice_search.9.png b/res/drawable-mdpi/textfield_voice_search.9.png
deleted file mode 100644
index e7baba0..0000000
--- a/res/drawable-mdpi/textfield_voice_search.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/urlbar_bg.9.png b/res/drawable-mdpi/urlbar_bg.9.png
deleted file mode 100644
index 18b49e7..0000000
--- a/res/drawable-mdpi/urlbar_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/blank.xml b/res/drawable/blank.xml
deleted file mode 100644
index 724f5e7..0000000
--- a/res/drawable/blank.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
-        <shape>
-            <corners android:radius="5dip"/>
-            <solid android:color="@color/white"/>
-        </shape>
-    </item>
-</layer-list>
diff --git a/res/drawable/bookmark_thumb_selector.xml b/res/drawable/bookmark_thumb_selector.xml
index d4a12a3..5509aba 100644
--- a/res/drawable/bookmark_thumb_selector.xml
+++ b/res/drawable/bookmark_thumb_selector.xml
@@ -14,8 +14,7 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/bookmarks_widget_thumb_selector_focused" />
     <item android:state_pressed="true" android:drawable="@drawable/bookmark_thumb_selector_transition" />
     <item android:drawable="@android:color/transparent" />
diff --git a/res/drawable/btn_bookmark.xml b/res/drawable/btn_bookmark.xml
deleted file mode 100644
index ce169d0..0000000
--- a/res/drawable/btn_bookmark.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Custom layout file which mimics the btn_search_dialog_voice look, but draws
-        the pressed state even without window focus -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"
-        android:drawable="@*android:drawable/btn_search_dialog_voice_pressed" />
-    <item android:state_pressed="false"
-        android:drawable="@*android:drawable/btn_search_dialog_voice_default" />
-</selector>
diff --git a/res/drawable/button_bg_selected.xml b/res/drawable/button_bg_selected.xml
deleted file mode 100644
index d0c677b..0000000
--- a/res/drawable/button_bg_selected.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-    <!--
-        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.
-    -->
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid
-        android:color="#ff4d83ba" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/close_background.xml b/res/drawable/close_background.xml
deleted file mode 100644
index 627712f..0000000
--- a/res/drawable/close_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_window_focused="false"
-        android:drawable="@android:color/transparent" />
-    <item android:state_focused="false" android:state_pressed="true"
-        android:drawable="@*android:drawable/list_selector_background_transition" />
-    <item android:state_focused="false" android:state_pressed="false"
-        android:drawable="@color/black"/>
-</selector>
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/drawable/nav_screen_bg.xml
similarity index 68%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/drawable/nav_screen_bg.xml
index 14edecf..7ca4e78 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/drawable/nav_screen_bg.xml
@@ -14,12 +14,13 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
-
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:type="linear"
+        android:startColor="#ff000000"
+        android:centerColor="#ff808080"
+        android:endColor="#ff000000"
+        android:centerY="0.2"
+        android:angle="90" />
+</shape>
diff --git a/res/drawable/nav_tab_bg.9.png b/res/drawable/nav_tab_bg.9.png
new file mode 100644
index 0000000..9e0a23d
--- /dev/null
+++ b/res/drawable/nav_tab_bg.9.png
Binary files differ
diff --git a/res/drawable/title_voice.xml b/res/drawable/navtab_close_background.xml
similarity index 71%
rename from res/drawable/title_voice.xml
rename to res/drawable/navtab_close_background.xml
index e96eb94..e20cc5c 100644
--- a/res/drawable/title_voice.xml
+++ b/res/drawable/navtab_close_background.xml
@@ -15,8 +15,8 @@
 -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"
-            android:drawable="@*android:drawable/textfield_search_empty_pressed" />
-    <item android:state_pressed="false"
-            android:drawable="@drawable/textfield_voice_search" />
+    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/bookmarks_widget_thumb_selector_focused" />
+    <item android:state_pressed="true" android:drawable="@drawable/bookmark_thumb_selector_transition" />
+    <item android:drawable="@color/navtab_bg" />
 </selector>
+
diff --git a/res/drawable/stop_background.xml b/res/drawable/stop_background.xml
deleted file mode 100644
index a9a4dd4..0000000
--- a/res/drawable/stop_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Custom background for the stop button which mimics btn_search_dialog
-        but draws in a pressed state even if it is in an unfocused window -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true"
-        android:drawable="@*android:drawable/btn_search_dialog_pressed" />
-    <item android:state_pressed="false"
-         android:drawable="@*android:drawable/btn_search_dialog_default" />
-</selector>
diff --git a/res/drawable/title_loading.xml b/res/drawable/title_loading.xml
deleted file mode 100644
index 7f145d3..0000000
--- a/res/drawable/title_loading.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Custom layout file which mimics the textfield_search look, but draws the
-        pressed state even without window focus -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true"
-        android:drawable="@*android:drawable/textfield_search_pressed" />
-
-    <item android:state_enabled="true" android:state_focused="true"
-        android:drawable="@*android:drawable/textfield_search_selected" />
-
-    <item android:drawable="@*android:drawable/textfield_search_default" />
-
-</selector>
-
diff --git a/res/drawable/title_text.xml b/res/drawable/title_text.xml
deleted file mode 100644
index b435e4d..0000000
--- a/res/drawable/title_text.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<!-- Custom layout file which mimics the standard edit_text look, but draws the
-        pressed state even without window focus -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"
-            android:drawable="@*android:drawable/textfield_search_empty_pressed" />
-    <item android:state_pressed="false"
-            android:drawable="@*android:drawable/textfield_search_empty_default" />
-</selector>
diff --git a/res/layout-land/nav_screen.xml b/res/layout-land/nav_screen.xml
new file mode 100644
index 0000000..d2424ea
--- /dev/null
+++ b/res/layout-land/nav_screen.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/nav_screen"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/nav_screen_bg" >
+    <LinearLayout
+        android:id="@+id/tabbar"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="44dip"
+        android:layout_alignParentBottom="true"
+        android:gravity="right"
+        android:background="#C0404040">
+        <ImageButton
+            android:id="@+id/newtab"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@drawable/ic_new_window_holo_dark" />
+        <ImageButton
+            android:id="@+id/newincognito"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@drawable/ic_new_incognito_holo_dark" />
+        <ImageButton
+            android:id="@+id/bookmarks"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            android:src="@drawable/ic_bookmarks_history_holo_dark"
+            style="@style/HoloButton" />
+        <ImageButton
+            android:id="@+id/more"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@*android:drawable/ic_menu_moreoverflow_normal_holo_dark" />
+    </LinearLayout>
+    <com.android.browser.NavTabGallery
+        android:id="@+id/scroller"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/tabbar" />
+</RelativeLayout>
diff --git a/res/layout-port/autofill_settings_fragment.xml b/res/layout-port/autofill_settings_fragment.xml
new file mode 100644
index 0000000..63dba4d
--- /dev/null
+++ b/res/layout-port/autofill_settings_fragment.xml
@@ -0,0 +1,231 @@
+<?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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="0px"
+        android:layout_weight="1">
+
+        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <View
+                android:layout_height="10dip"
+                android:layout_width="match_parent" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_heading" />
+
+            <View
+                android:layout_height="12dip"
+                android:layout_width="match_parent" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_name" />
+            <EditText android:id="@+id/autofill_profile_editor_name_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:inputType="textPersonName|textCapWords"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_company_name" />
+            <EditText android:id="@+id/autofill_profile_editor_company_name_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:inputType="textCapWords"
+                android:singleLine="true" />
+            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="2dip"
+                android:orientation="vertical">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:text="@string/autofill_profile_editor_address_line_1" />
+                 <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:text="@string/autofill_profile_editor_address_line_1_hint" />
+            </LinearLayout>
+            <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:inputType="textCapWords"
+                android:singleLine="true" />
+            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="2dip"
+                android:orientation="vertical">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:text="@string/autofill_profile_editor_address_line_2" />
+                 <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:text="@string/autofill_profile_editor_address_line_2_hint" />
+            </LinearLayout>
+            <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="bottom"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:inputType="textCapWords"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_city" />
+            <EditText android:id="@+id/autofill_profile_editor_city_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:inputType="textCapWords"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_state" />
+            <EditText android:id="@+id/autofill_profile_editor_state_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:inputType="textCapWords"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_zip_code" />
+            <EditText android:id="@+id/autofill_profile_editor_zip_code_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:inputType="textCapCharacters"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_country" />
+            <EditText android:id="@+id/autofill_profile_editor_country_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:inputType="textCapWords"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:singleLine="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_phone_number" />
+            <EditText android:id="@+id/autofill_profile_editor_phone_number_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:singleLine="true"
+                android:phoneNumber="true" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_email_address" />
+            <EditText android:id="@+id/autofill_profile_editor_email_address_edit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:layout_margin="2dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:inputType="textEmailAddress"
+                android:singleLine="true" />
+        </LinearLayout>
+    </ScrollView>
+
+    <View
+        android:layout_height="12dip"
+        android:layout_width="match_parent" />
+
+    <Button
+        android:id="@+id/autofill_profile_editor_save_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/autofill_profile_editor_save_profile"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+</LinearLayout>
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/layout-sw600dp/bookmarks_history.xml
similarity index 69%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/layout-sw600dp/bookmarks_history.xml
index 14edecf..ae5e19b 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/layout-sw600dp/bookmarks_history.xml
@@ -13,13 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
-
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/bg_browser" />
diff --git a/res/layout-sw600dp/history.xml b/res/layout-sw600dp/history.xml
new file mode 100644
index 0000000..2d949e1
--- /dev/null
+++ b/res/layout-sw600dp/history.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+>
+
+    <ViewStub
+        android:id="@+id/pref_stub"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:inflatedId="@+id/history" />
+
+    <TextView android:id="@android:id/empty"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:text="@string/empty_history"
+        android:visibility="gone"
+    />
+
+</FrameLayout>
diff --git a/res/layout/active_tabs.xml b/res/layout/active_tabs.xml
index 8b5fe9e..f9bd6b0 100644
--- a/res/layout/active_tabs.xml
+++ b/res/layout/active_tabs.xml
@@ -14,31 +14,41 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:orientation="vertical"
-    android:background="@color/black"
-    >
-    <RelativeLayout
-        style="?android:attr/windowTitleBackgroundStyle"
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+
+        <Button
+            android:id="@+id/new_tab"
+            android:text="@string/new_tab"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <Button
+            android:id="@+id/new_incognito_tab"
+            android:text="@string/new_incognito_tab"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:paddingLeft="0dip"
+            android:paddingRight="0dip" />
+
+    </LinearLayout>
+
+    <ListView
+        android:id="@android:id/list"
         android:layout_width="match_parent"
-        android:layout_height="?android:attr/windowTitleSize"
-        >
-        <TextView android:id="@android:id/title"
-            style="?android:attr/windowTitleStyle"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@null"
-            android:fadingEdge="horizontal"
-            android:gravity="center_vertical"
-            android:text="@string/active_tabs"
-            />
-    </RelativeLayout>
-    <ListView android:id="@+id/list"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1"
-        android:cacheColorHint="@color/black"
-        />
-</LinearLayout>
+        android:layout_height="match_parent"
+        android:listSelector="@drawable/bookmark_thumb_selector"
+        android:drawSelectorOnTop="true"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
+
+</merge>
diff --git a/res/layout/autofill_settings_fragment.xml b/res/layout/autofill_settings_fragment.xml
index b92c149..8c90dd7 100644
--- a/res/layout/autofill_settings_fragment.xml
+++ b/res/layout/autofill_settings_fragment.xml
@@ -13,256 +13,246 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:orientation="vertical">
 
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-        <View
-            android:layout_height="10dip"
-            android:layout_width="match_parent" />
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:text="@string/autofill_profile_editor_heading" />
-
-        <View
-            android:layout_height="12dip"
-            android:layout_width="match_parent" />
-
-        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:shrinkColumns="1"
-            android:stretchColumns="1">
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_name" />
-                <EditText android:id="@+id/autofill_profile_editor_name_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:inputType="textPersonName|textCapWords"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_company_name" />
-                <EditText android:id="@+id/autofill_profile_editor_company_name_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:inputType="textCapWords"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="2dip"
-                    android:orientation="vertical">
-                    <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:text="@string/autofill_profile_editor_address_line_1" />
-                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:textAppearance="?android:attr/textAppearanceSmall"
-                        android:text="@string/autofill_profile_editor_address_line_1_hint" />
-                </LinearLayout>
-                <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:inputType="textCapWords"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="2dip"
-                    android:orientation="vertical">
-                    <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:text="@string/autofill_profile_editor_address_line_2" />
-                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:textAppearance="?android:attr/textAppearanceSmall"
-                        android:text="@string/autofill_profile_editor_address_line_2_hint" />
-                </LinearLayout>
-                <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="bottom"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:inputType="textCapWords"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_city" />
-                <EditText android:id="@+id/autofill_profile_editor_city_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:inputType="textCapWords"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_state" />
-                <EditText android:id="@+id/autofill_profile_editor_state_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:inputType="textCapWords"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_zip_code" />
-                <EditText android:id="@+id/autofill_profile_editor_zip_code_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:inputType="textCapCharacters"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_country" />
-                <EditText android:id="@+id/autofill_profile_editor_country_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:inputType="textCapWords"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:singleLine="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_phone_number" />
-                <EditText android:id="@+id/autofill_profile_editor_phone_number_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:singleLine="true"
-                    android:phoneNumber="true" />
-            </TableRow>
-            <TableRow>
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/autofill_profile_editor_email_address" />
-                <EditText android:id="@+id/autofill_profile_editor_email_address_edit"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_vertical"
-                    android:layout_margin="2dip"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:inputType="textEmailAddress"
-                    android:singleLine="true" />
-            </TableRow>
-        </TableLayout>
-
-        <View
-            android:layout_height="12dip"
-            android:layout_width="match_parent" />
+        android:layout_height="0px"
+        android:layout_weight="1">
 
         <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:gravity="center">
-            <Button
-                android:id="@+id/autofill_profile_editor_save_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/autofill_profile_editor_save_profile"
-                android:textAppearance="?android:attr/textAppearanceMedium" />
+            android:layout_height="match_parent"
+            android:orientation="vertical">
 
-            <Button
-                android:id="@+id/autofill_profile_editor_cancel_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/cancel"
-                android:textAppearance="?android:attr/textAppearanceMedium" />
+            <View
+                android:layout_height="10dip"
+                android:layout_width="match_parent" />
 
-            <Button
-                android:id="@+id/autofill_profile_editor_delete_button"
+            <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="@string/autofill_profile_editor_delete_profile"
-                android:textAppearance="?android:attr/textAppearanceMedium" />
-        </LinearLayout>
-    </LinearLayout>
-</ScrollView>
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/autofill_profile_editor_heading" />
+
+            <View
+                android:layout_height="12dip"
+                android:layout_width="match_parent" />
+
+            <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:shrinkColumns="1"
+                android:stretchColumns="1">
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_name" />
+                    <EditText android:id="@+id/autofill_profile_editor_name_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:inputType="textPersonName|textCapWords"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_company_name" />
+                    <EditText android:id="@+id/autofill_profile_editor_company_name_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:inputType="textCapWords"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_margin="2dip"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center_vertical"
+                            android:textAppearance="?android:attr/textAppearanceMedium"
+                            android:text="@string/autofill_profile_editor_address_line_1" />
+                         <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center_vertical"
+                            android:textAppearance="?android:attr/textAppearanceSmall"
+                            android:text="@string/autofill_profile_editor_address_line_1_hint" />
+                    </LinearLayout>
+                    <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:inputType="textCapWords"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_margin="2dip"
+                        android:orientation="vertical">
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center_vertical"
+                            android:textAppearance="?android:attr/textAppearanceMedium"
+                            android:text="@string/autofill_profile_editor_address_line_2" />
+                         <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center_vertical"
+                            android:textAppearance="?android:attr/textAppearanceSmall"
+                            android:text="@string/autofill_profile_editor_address_line_2_hint" />
+                    </LinearLayout>
+                    <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="bottom"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:inputType="textCapWords"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_city" />
+                    <EditText android:id="@+id/autofill_profile_editor_city_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:inputType="textCapWords"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_state" />
+                    <EditText android:id="@+id/autofill_profile_editor_state_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:inputType="textCapWords"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_zip_code" />
+                    <EditText android:id="@+id/autofill_profile_editor_zip_code_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:inputType="textCapCharacters"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_country" />
+                    <EditText android:id="@+id/autofill_profile_editor_country_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:inputType="textCapWords"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:singleLine="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_phone_number" />
+                    <EditText android:id="@+id/autofill_profile_editor_phone_number_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:singleLine="true"
+                        android:phoneNumber="true" />
+                </TableRow>
+                <TableRow>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:text="@string/autofill_profile_editor_email_address" />
+                    <EditText android:id="@+id/autofill_profile_editor_email_address_edit"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:layout_margin="2dip"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:inputType="textEmailAddress"
+                        android:singleLine="true" />
+                </TableRow>
+            </TableLayout>
+       </LinearLayout>
+    </ScrollView>
+
+    <View
+        android:layout_height="12dip"
+        android:layout_width="match_parent" />
+
+    <Button
+        android:id="@+id/autofill_profile_editor_save_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/autofill_profile_editor_save_profile"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+</LinearLayout>
+
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/layout/bookmark_grid_row.xml
similarity index 71%
rename from res/layout-sw600dp/browser_add_bookmark.xml
rename to res/layout/bookmark_grid_row.xml
index 14edecf..7955ad7 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/layout/bookmark_grid_row.xml
@@ -14,12 +14,9 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
-
-    <include layout="@layout/browser_add_bookmark_content" />
-
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 </LinearLayout>
+
diff --git a/res/layout/bookmark_group_view.xml b/res/layout/bookmark_group_view.xml
new file mode 100644
index 0000000..e6c9628
--- /dev/null
+++ b/res/layout/bookmark_group_view.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="?android:attr/listPreferredItemHeight"
+    android:orientation="horizontal"
+    android:background="?android:attr/listChoiceBackgroundIndicator">
+
+    <TextView
+        android:id="@+id/group_name"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="50dp"
+        android:gravity="center_vertical" />
+
+    <FrameLayout
+        android:id="@+id/crumb_holder"
+        android:paddingLeft="16dp"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>
+
diff --git a/res/layout/bookmark_list.xml b/res/layout/bookmark_list.xml
index 7413ca8..4425a26 100644
--- a/res/layout/bookmark_list.xml
+++ b/res/layout/bookmark_list.xml
@@ -14,29 +14,30 @@
      limitations under the License.
 -->
 
-<LinearLayout
+<com.android.browser.view.BookmarkContainer
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/list_item"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:minHeight="@dimen/widgetItemMinHeight"
-    android:orientation="horizontal"
-    android:paddingLeft="16dip">
+    android:paddingLeft="16dip"
+    android:background="@drawable/bookmark_thumb_selector">
     <ImageView
         android:id="@+id/favicon"
         android:layout_height="32dip"
         android:layout_width="32dip"
-        android:layout_gravity="center_vertical"
+        android:layout_centerVertical="true"
         android:background="@drawable/bookmark_list_favicon_bg"
         android:scaleType="fitXY" />
     <TextView
         android:id="@+id/label"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
+        android:layout_centerVertical="true"
+        android:layout_toRightOf="@id/favicon"
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:paddingLeft="16dip"
         android:maxLines="1"
         android:scrollHorizontally="true"
         android:ellipsize="marquee"/>
-</LinearLayout>
+</com.android.browser.view.BookmarkContainer>
diff --git a/res/layout/bookmark_thumbnail.xml b/res/layout/bookmark_thumbnail.xml
index c545fa4..cd7b9be 100644
--- a/res/layout/bookmark_thumbnail.xml
+++ b/res/layout/bookmark_thumbnail.xml
@@ -14,11 +14,12 @@
      limitations under the License.
 -->
 
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
+<com.android.browser.view.BookmarkContainer xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
     android:orientation="vertical"
-    android:padding="0dip"
+    android:padding="@dimen/combo_horizontalSpacing"
+    android:background="@drawable/bookmark_thumb_selector"
     >
 
     <ImageView
@@ -59,4 +60,4 @@
         android:textColor="#AAAAAA"
         />
 
-</RelativeLayout>
+</com.android.browser.view.BookmarkContainer>
diff --git a/res/layout/bookmarks.xml b/res/layout/bookmarks.xml
index 81327e4..e02e2ff 100644
--- a/res/layout/bookmarks.xml
+++ b/res/layout/bookmarks.xml
@@ -20,9 +20,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    android:paddingTop="@dimen/combo_paddingTop"
-    android:paddingLeft="@dimen/combo_paddingLeftRight"
-    android:paddingRight="@dimen/combo_paddingLeftRight">
+    android:paddingTop="@dimen/combo_paddingTop">
 
     <FrameLayout
         android:id="@+id/header_container"
@@ -33,29 +31,14 @@
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-        <GridView
+        <com.android.browser.view.BookmarkExpandableView
             android:id="@+id/grid"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_gravity="center_horizontal"
-            android:horizontalSpacing="@dimen/combo_horizontalSpacing"
-            android:verticalSpacing="40dip"
-            android:scrollbarStyle="insideInset"
-            android:listSelector="@drawable/bookmark_thumb_selector"
-            android:drawSelectorOnTop="true"
-            android:focusable="true"
-            android:focusableInTouchMode="true"
-            android:numColumns="auto_fit"
-            android:stretchMode="spacingWidth" />
-        <ListView
-            android:id="@+id/list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:listSelector="@drawable/bookmark_thumb_selector"
-            android:drawSelectorOnTop="true"
-            android:focusable="true"
-            android:focusableInTouchMode="true"
-            android:visibility="gone"/>
+            android:layout_gravity="center_horizontal"
+            android:childDivider="@android:color/transparent"
+            android:divider="@android:color/transparent"
+            android:dividerHeight="0dp" />
         <TextView
             android:id="@android:id/empty"
             android:layout_width="wrap_content"
diff --git a/res/layout/bookmarks_drag_actionmode.xml b/res/layout/bookmarks_drag_actionmode.xml
new file mode 100644
index 0000000..64b1042
--- /dev/null
+++ b/res/layout/bookmarks_drag_actionmode.xml
@@ -0,0 +1,48 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    android:divider="?android:attr/dividerVertical"
+    android:dividerPadding="12dp"
+    android:showDividers="middle"
+    android:gravity="right"
+    android:minHeight="?android:attr/actionBarSize">
+    <ImageView
+        android:id="@+id/open_context_menu_id"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:src="@drawable/ic_web_holo_dark" />
+    <ImageView
+        android:id="@+id/new_window_context_menu_id"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:src="@drawable/ic_new_window_holo_dark" />
+    <ImageView
+        android:id="@+id/info"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:src="@drawable/ic_home_info_holo_dark" />
+</LinearLayout>
diff --git a/res/layout/bookmarks_history.xml b/res/layout/bookmarks_history.xml
index 5622917..826fe49 100644
--- a/res/layout/bookmarks_history.xml
+++ b/res/layout/bookmarks_history.xml
@@ -4,9 +4,9 @@
      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.
@@ -18,4 +18,5 @@
     android:id="@+id/fragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@drawable/bg_browser" />
+    android:background="@drawable/bg_browser"
+    android:paddingTop="?android:attr/actionBarSize" />
diff --git a/res/layout/browser_add_bookmark_content.xml b/res/layout/browser_add_bookmark_content.xml
index 6ee7a5a..6287ef8 100644
--- a/res/layout/browser_add_bookmark_content.xml
+++ b/res/layout/browser_add_bookmark_content.xml
@@ -15,51 +15,39 @@
 -->
 
 <merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <RelativeLayout android:id="@+id/crumb_holder"
+    <LinearLayout android:id="@+id/crumb_holder"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?android:attr/listPreferredItemHeight"
-        android:gravity="center_vertical"
+        android:layout_height="?android:attr/listPreferredItemHeight"
         android:visibility="gone"
         android:paddingLeft="5dip"
         android:paddingRight="5dip"
+        android:orientation="horizontal"
         >
         <com.android.browser.BreadCrumbView android:id="@+id/crumbs"
-            android:layout_width="wrap_content"
-            android:layout_height="?android:attr/listPreferredItemHeight"
-            android:layout_alignParentLeft="true"
-            android:layout_toLeftOf="@+id/add_divider"
-            android:layout_centerVertical="true"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:layout_height="match_parent" />
+        <View android:id="@+id/add_divider"
+            android:layout_width="1dip"
+            android:layout_height="match_parent"
+            android:background="?android:attr/dividerVertical"
             />
         <TextView
             android:id="@+id/add_new_folder"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"
-            android:layout_alignBaseline="@+id/crumbs"
+            android:layout_height="match_parent"
             android:drawableLeft="@drawable/ic_add_string"
-            android:gravity="center_vertical"
             android:text="@string/new_folder"
             android:visibility="gone"
-            android:layout_centerVertical="true"
-            android:layout_alignTop="@+id/crumbs"
-            android:layout_alignBottom="@+id/crumbs"
             android:focusable="true"
             android:background="?android:attr/selectableItemBackground"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
-        <ImageView android:id="@+id/add_divider"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_toLeftOf="@+id/add_new_folder"
-            android:src="@drawable/crumb_divider"
-            android:layout_centerVertical="true"
-            />
-    </RelativeLayout>
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:gravity="center_vertical" />
+    </LinearLayout>
     <LinearLayout android:id="@+id/title_holder"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="?android:attr/listPreferredItemHeight"
         android:orientation="horizontal"
-        android:minHeight="?android:attr/listPreferredItemHeight"
         android:paddingLeft="5dip"
         android:paddingRight="5dip"
         >
@@ -72,12 +60,10 @@
             android:drawableLeft="@drawable/ic_bookmark_on_holo_dark"
             android:text="@string/bookmark_this_page"
             android:textAppearance="?android:attr/textAppearanceMedium" />
-        <ImageView android:id="@+id/remove_divider"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:src="@drawable/crumb_divider"
-            android:layout_centerVertical="true"
+        <View android:id="@+id/remove_divider"
+            android:layout_width="1dip"
+            android:layout_height="match_parent"
+            android:background="?android:attr/dividerVertical"
             android:visibility="gone"
             />
         <TextView android:id="@+id/remove"
@@ -90,11 +76,9 @@
             android:visibility="gone"
             android:textAppearance="?android:attr/textAppearanceMedium" />
     </LinearLayout>
-    <View android:id="@+id/titleDivider"
-        android:layout_width="match_parent"
+    <View android:layout_width="match_parent"
         android:layout_height="1dip"
-        android:gravity="fill_horizontal"
-        android:background="?android:attr/colorForeground"
+        android:background="?android:attr/dividerHorizontal"
         />
 
     <TableLayout android:id="@+id/default_view"
@@ -105,12 +89,12 @@
         android:paddingTop="10dip"
         android:paddingLeft="20dip"
         android:paddingRight="20dip" >
-      <TableRow>
+      <TableRow android:layout_marginBottom="10dip">
         <TextView
             android:id="@+id/titleText"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_marginBottom="30dip"
+            android:layout_gravity="center_vertical"
             android:text="@string/name"
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
@@ -118,42 +102,54 @@
             android:id="@+id/title"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_marginRight="20dip"
             android:layout_marginLeft="20dip"
-            android:gravity="fill_horizontal"
             android:inputType="textCapSentences"
             android:ellipsize="end"
             android:textAppearance="?android:attr/textAppearanceMedium" />
       </TableRow>
 
       <TableRow
+          android:layout_marginBottom="10dip"
           android:id="@+id/row_address">
         <TextView
             android:id="@+id/addressText"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
+            android:layout_gravity="center_vertical"
             android:text="@string/location"
-            android:gravity="left"
-            android:layout_marginBottom="20dip"
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
         <EditText
             android:id="@+id/address"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_marginRight="20dip"
             android:layout_marginLeft="20dip"
             android:hint="@string/http"
-            android:gravity="fill_horizontal"
             android:inputType="textUri"
             android:ellipsize="end"
             android:textAppearance="?android:attr/textAppearanceMedium" />
       </TableRow>
-      <TableRow>
+      <TableRow android:layout_marginBottom="10dip">
         <TextView
-            android:id="@+id/add_to"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:text="@string/account"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <Spinner
+            android:id="@+id/accounts"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginLeft="20dip"
+            android:spinnerMode="dropdown"
+            />
+      </TableRow>
+      <TableRow android:layout_marginBottom="10dip">
+        <TextView
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_gravity="center_vertical"
             android:text="@string/containing_folder"
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
@@ -161,10 +157,8 @@
             android:id="@+id/folder"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_marginRight="20dip"
             android:layout_marginLeft="20dip"
             android:spinnerMode="dropdown"
-            android:gravity="center_vertical"
             />
       </TableRow>
     </TableLayout>
diff --git a/res/layout/custom_screen.xml b/res/layout/custom_screen.xml
index 525f30c..2105501 100644
--- a/res/layout/custom_screen.xml
+++ b/res/layout/custom_screen.xml
@@ -37,3 +37,4 @@
         />
     </LinearLayout>
 </FrameLayout>
+
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/layout/font_size_widget.xml
similarity index 67%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/layout/font_size_widget.xml
index 14edecf..296f5bf 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/layout/font_size_widget.xml
@@ -14,12 +14,13 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/text"
+    android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
+    android:minWidth="50sp"
+    android:textAppearance="?android:attr/textAppearanceSmall"
+    android:textColor="?android:attr/textColorSecondary"
+    android:layout_gravity="center_vertical"
+/>
 
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
diff --git a/res/layout/history.xml b/res/layout/history.xml
index f7d2c7c..f3adb51 100644
--- a/res/layout/history.xml
+++ b/res/layout/history.xml
@@ -19,11 +19,10 @@
     android:layout_height="match_parent"
 >
 
-    <ViewStub
-        android:id="@+id/pref_stub"
+    <ExpandableListView
+        android:id="@+id/history"
         android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:inflatedId="@+id/history" />
+        android:layout_width="match_parent" />
 
     <TextView android:id="@android:id/empty"
         android:layout_width="wrap_content"
diff --git a/res/layout/history_item.xml b/res/layout/history_item.xml
index 3b3dd7a..f6076a0 100644
--- a/res/layout/history_item.xml
+++ b/res/layout/history_item.xml
@@ -42,7 +42,8 @@
                 android:layout_width="wrap_content" 
                 android:layout_height="wrap_content"
                 android:singleLine="true"
-                android:ellipsize="end"
+                android:ellipsize="marquee"
+                android:marqueeRepeatLimit="marquee_forever"
                 />
         <TextView android:id="@+id/url" 
                 android:textAppearance="?android:attr/textAppearanceSmall"
@@ -50,7 +51,8 @@
                 android:layout_width="wrap_content" 
                 android:layout_height="wrap_content"
                 android:singleLine="true"
-                android:ellipsize="end"
+                android:ellipsize="marquee"
+                android:marqueeRepeatLimit="marquee_forever"
                 />
     </LinearLayout>
     <CheckBox android:id="@+id/star"
diff --git a/res/layout/nav_screen.xml b/res/layout/nav_screen.xml
new file mode 100644
index 0000000..b4e1f15
--- /dev/null
+++ b/res/layout/nav_screen.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/nav_screen"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="@drawable/nav_screen_bg">
+    <com.android.browser.NavTabGallery
+        android:id="@+id/scroller"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" />
+    <LinearLayout
+        android:id="@+id/tabbar"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="44dip"
+        android:gravity="right"
+        android:background="#C0404040">
+        <ImageButton
+            android:id="@+id/newtab"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@drawable/ic_new_window_holo_dark" />
+        <ImageButton
+            android:id="@+id/newincognito"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@drawable/ic_new_incognito_holo_dark" />
+        <ImageButton
+            android:id="@+id/bookmarks"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            android:src="@drawable/ic_bookmarks_history_holo_dark"
+            style="@style/HoloButton" />
+        <ImageButton
+            android:id="@+id/more"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="16dip"
+            android:paddingRight="16dip"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@*android:drawable/ic_menu_moreoverflow_normal_holo_dark" />
+    </LinearLayout>
+</RelativeLayout>
diff --git a/res/layout/nav_tab_view.xml b/res/layout/nav_tab_view.xml
new file mode 100644
index 0000000..543c26e
--- /dev/null
+++ b/res/layout/nav_tab_view.xml
@@ -0,0 +1,58 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/nav_tab_bg"
+    android:focusable="false">
+    <LinearLayout
+        android:id="@+id/titlebar"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="48dip"
+        android:layout_gravity="center_horizontal"
+        android:paddingLeft="32dip"
+        android:paddingRight="24dip">
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="0dip"
+            android:layout_height="match_parent"
+            android:layout_weight="1.0"
+            android:gravity="center_vertical"
+            android:singleLine="true"
+            android:ellipsize="end"
+            android:lines="1"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:scrollHorizontally="true" />
+        <ImageView
+            android:id="@+id/closetab"
+            android:src="@drawable/ic_stop_holo_dark"
+            android:layout_gravity="center_vertical"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </LinearLayout>
+    <FrameLayout
+        android:id="@+id/tab_view"
+        android:layout_width="@dimen/nav_tab_width"
+        android:layout_height="@dimen/nav_tab_height"
+        android:layout_gravity="center_horizontal"
+        android:focusable="false">
+    </FrameLayout>
+</LinearLayout>
diff --git a/res/layout/preference_list_content.xml b/res/layout/preference_list_content.xml
index 0cf0b7e..ad3d64e 100644
--- a/res/layout/preference_list_content.xml
+++ b/res/layout/preference_list_content.xml
@@ -15,11 +15,13 @@
     android:orientation="vertical"
     android:layout_height="match_parent"
     android:layout_width="match_parent">
+
     <LinearLayout
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="0px"
         android:layout_weight="1">
+
         <LinearLayout
             android:id="@+id/headers"
             android:orientation="vertical"
@@ -30,6 +32,7 @@
             android:layout_marginTop="32dp"
             android:layout_marginBottom="32dp"
             android:layout_weight="10">
+
             <ListView android:id="@android:id/list"
                 android:layout_width="match_parent"
                 android:layout_height="0px"
@@ -38,11 +41,14 @@
                 android:cacheColorHint="@android:color/transparent"
                 android:listPreferredItemHeight="48dp"
                 android:scrollbarAlwaysDrawVerticalTrack="true" />
+
             <FrameLayout android:id="@+id/list_footer"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_weight="0" />
+
         </LinearLayout>
+
         <LinearLayout
                 android:id="@+id/prefs_frame"
                 android:layout_width="0px"
@@ -55,6 +61,7 @@
                 android:background="?android:attr/detailsElementBackground"
                 android:orientation="vertical"
                 android:visibility="gone" >
+
             <!-- Breadcrumb inserted here -->
             <android.app.FragmentBreadCrumbs
                 android:id="@android:id/title"
@@ -64,18 +71,22 @@
                 android:paddingBottom="8dip"
                 android:gravity="center_vertical|left"
                 android:layout_marginLeft="48dip"
-                android:layout_marginRight="48dip" />
+                android:layout_marginRight="48dip"
+                />
+
             <ImageView
                     android:layout_width="match_parent"
                     android:layout_height="1dip"
                     android:paddingLeft="32dip"
                     android:paddingRight="32dip"
-                    android:src="#404040" />
+                    android:src="#404040"
+                />
             <android.preference.PreferenceFrameLayout android:id="@+id/prefs"
                     android:layout_width="match_parent"
                     android:layout_height="0dip"
                     android:layout_weight="1"
-                    android:layout_marginTop="-1dip" />
+                    android:layout_marginTop="-1dip"
+                />
         </LinearLayout>
     </LinearLayout>
 </LinearLayout>
diff --git a/res/layout/suggestion_item.xml b/res/layout/suggestion_item.xml
index c08ba84..17b01ba 100644
--- a/res/layout/suggestion_item.xml
+++ b/res/layout/suggestion_item.xml
@@ -32,14 +32,15 @@
         android:layout_height="match_parent"
         android:layout_weight="1"
         android:orientation="horizontal"
-        android:background="@drawable/suggest_item_selector">
+        android:background="@drawable/suggest_item_selector"
+        android:padding="0dp">
         <ImageView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/icon1"
             android:layout_gravity="center_vertical"
-            style="@style/HoloIcon"
-            android:layout_marginRight="16dip" />
+            android:layout_marginLeft="@dimen/suggest_item_padding"
+            android:layout_marginRight="@dimen/suggest_item_padding" />
         <LinearLayout
             android:layout_width="0dip"
             android:layout_height="wrap_content"
@@ -69,12 +70,12 @@
         />
     <ImageView
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_height="match_parent"
         android:id="@+id/icon2"
         android:scaleType="center"
         android:src="@drawable/ic_add_string"
-        android:background="?android:attr/activatedBackgroundIndicator"
-        style="@style/HoloButton"
-        android:layout_marginRight="16dip"
+        android:background="@drawable/suggest_item_selector"
+        android:paddingRight="@dimen/suggest_item_padding"
+        android:paddingLeft="@dimen/suggest_item_padding"
          />
 </LinearLayout>
diff --git a/res/layout/tab_title.xml b/res/layout/tab_title.xml
index e2c6d0a..fcae2bc 100644
--- a/res/layout/tab_title.xml
+++ b/res/layout/tab_title.xml
@@ -31,6 +31,13 @@
         android:src="@drawable/ic_incognito_holo_dark"
         android:visibility="gone" />
     <ImageView
+        android:id="@+id/snapshot"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        android:src="@drawable/ic_snapshot"
+        android:visibility="gone" />
+    <ImageView
         android:id="@+id/favicon"
         android:layout_width="20dip"
         android:layout_height="20dip"
diff --git a/res/layout/tab_view.xml b/res/layout/tab_view.xml
index 885f4cf..8ffb73d 100644
--- a/res/layout/tab_view.xml
+++ b/res/layout/tab_view.xml
@@ -20,42 +20,54 @@
     android:layout_width="match_parent"
     android:orientation="horizontal"
     android:gravity="center_vertical"
+    android:paddingLeft="8dip"
+    android:paddingTop="4dip"
+    android:paddingBottom="4dip"
     >
-    <!-- This ImageView has the same width as the ImageView in
-         tab_view_add_tab.xml. -->
-    <ImageView android:id="@+id/favicon"
-        android:layout_width="20dip"
-        android:layout_height="20dip"
-        android:layout_marginLeft="18dip"
-        android:layout_marginRight="18dip"
-        android:background="@drawable/fav_icn_background"
-        android:padding="2dip"/>
-    <LinearLayout
+    <RelativeLayout
+        android:id="@+id/list_item"
         android:layout_width="0dip"
-        android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:orientation="vertical"
-        >
-        <TextView android:id="@+id/title"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bookmark_list_favicon_bg">
+        <ImageView
+            android:id="@+id/thumb"
+            android:src="@drawable/thumbnail_bookmarks_widget_no_bookmark_holo"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/tab_view_thumbnail_height"
+            android:scaleType="fitXY"
+            android:cropToPadding="true" />
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:maxLines="1"
-            android:singleLine="true"
-            android:ellipsize="end"
-            />
-        <TextView android:id="@+id/url"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:maxLines="1"
-            android:singleLine="true"
-            android:ellipsize="end"
-            />
-    </LinearLayout>
+            android:layout_alignBottom="@id/thumb"
+            android:background="@color/tabViewTitleBackground">
+            <ImageView
+                android:id="@+id/favicon"
+                android:src="@drawable/app_web_browser_sm"
+                android:layout_width="@dimen/favicon_size"
+                android:layout_height="@dimen/favicon_size"
+                android:layout_gravity="center_vertical"
+                android:layout_marginLeft="4dip"
+                android:layout_marginRight="8dip"
+                android:layout_marginTop="4dip"
+                android:layout_marginBottom="4dip"
+                android:scaleType="fitXY" />
+            <TextView
+                android:id="@+id/label"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:textSize="12sp"
+                android:typeface="sans"
+                android:textColor="@android:color/white" />
+        </LinearLayout>
+    </RelativeLayout>
     <View android:id="@+id/divider"
-        android:background="#ff313431"
-        android:layout_width="1dip"
+        android:background="?android:attr/dividerVertical"
+        android:layout_width="1dp"
         android:layout_height="match_parent"
         android:layout_marginLeft="8dip"
         android:layout_marginTop="5dip"
@@ -64,10 +76,10 @@
     <view class="com.android.browser.ActiveTabsPage$CloseHolder" android:id="@+id/close"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
-        android:paddingLeft="18dip"
-        android:paddingRight="18dip"
-        android:background="@drawable/close_background"
-        android:src="@drawable/btn_close_window"
+        android:paddingLeft="12dip"
+        android:paddingRight="12dip"
+        android:background="@drawable/bookmark_thumb_selector"
+        android:src="@drawable/ic_close_window_holo_dark"
         android:scaleType="center"
         />
 </LinearLayout>
diff --git a/res/layout/tab_view_add_incognito_tab.xml b/res/layout/tab_view_add_incognito_tab.xml
deleted file mode 100644
index 43fcb43..0000000
--- a/res/layout/tab_view_add_incognito_tab.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:layout_width="match_parent"
-    android:orientation="horizontal"
-    android:gravity="center_vertical"
-    >
-    <ImageView
-        android:layout_width="40dip"
-        android:layout_height="40dip"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="8dip"
-        android:src="@drawable/ic_new_window_holo_dark"/>
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:maxLines="1"
-        android:singleLine="true"
-        android:ellipsize="end"
-        android:text="@string/new_incognito_tab"
-        />
-</LinearLayout>
diff --git a/res/layout/tab_view_add_tab.xml b/res/layout/tab_view_add_tab.xml
deleted file mode 100644
index f4e0f02..0000000
--- a/res/layout/tab_view_add_tab.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:layout_width="match_parent"
-    android:orientation="horizontal"
-    android:gravity="center_vertical"
-    >
-    <ImageView
-        android:layout_width="40dip"
-        android:layout_height="40dip"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="8dip"
-        android:src="@drawable/ic_new_window_holo_dark"/>
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:maxLines="1"
-        android:singleLine="true"
-        android:ellipsize="end"
-        android:text="@string/new_tab"
-        />
-</LinearLayout>
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index 99ac04d..649a4a0 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-   Copyright 2009, The Android Open Source Project
+   Copyright 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.
@@ -14,85 +14,148 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/titlebar"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical" >
-
+    android:layout_height="wrap_content">
     <LinearLayout
+        android:id="@+id/taburlbar"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="@dimen/toolbar_height"
         android:orientation="horizontal"
         android:background="@drawable/bg_urlbar"
         android:paddingLeft="4dip"
         android:paddingRight="4dip"
         android:paddingTop="2dip"
-        android:paddingBottom="1dip"
-        >
-
-        <LinearLayout android:id="@+id/title_bg"
+        android:paddingBottom="2dip">
+        <LinearLayout
+            android:id="@+id/title_bg"
             android:layout_width="0dip"
             android:layout_weight="1.0"
-            android:layout_height="48dip"
-            android:layout_marginBottom="4dip"
+            android:layout_height="match_parent"
             android:gravity="center_vertical"
-            android:orientation="horizontal"
-            android:background="@drawable/url_background"
-            >
-                <ImageView android:id="@+id/favicon"
-                    android:layout_width="20dip"
-                    android:layout_height="20dip"
-                    />
-                <ImageView android:id="@+id/lock"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginLeft="3dip"
-                    android:visibility="gone"
-                    />
-                <com.android.browser.UrlInputView
-                    android:id="@+id/url_input"
-                    android:focusable="true"
-                    android:layout_width="0dip"
-                    android:layout_weight="1.0"
-                    android:layout_height="match_parent"
-                    android:layout_marginLeft="3dip"
-                    android:paddingLeft="0dip"
-                    android:paddingRight="0dip"
-                    android:background="@null"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:hint="@string/search_hint"
-                    android:singleLine="true"
-                    android:ellipsize="end"
-                    android:lines="1"
-                    android:scrollHorizontally="true"
-                    android:inputType="textUri"
-                    android:imeOptions="actionGo"
-                    style="@style/Suggestions" />
+            android:orientation="horizontal">
+            <ImageView
+                android:id="@+id/favicon"
+                android:layout_width="20dip"
+                android:layout_height="20dip" />
+            <ImageView
+                android:id="@+id/lock"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="2dip"
+                android:visibility="gone" />
+            <com.android.browser.UrlInputView
+                android:id="@+id/url"
+                android:focusable="true"
+                android:layout_width="0dip"
+                android:layout_weight="1.0"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="2dip"
+                android:paddingLeft="4dip"
+                android:paddingRight="4dip"
+                android:background="@*android:drawable/edit_text_holo_dark"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:hint="@string/search_hint"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:lines="1"
+                android:scrollHorizontally="true"
+                android:inputType="textUri"
+                android:imeOptions="actionGo"
+                style="@style/Suggestions" />
         </LinearLayout>
-        <ImageButton
+        <ImageView
+            android:id="@+id/voice"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:src="@drawable/ic_voice_search_holo_dark"
+            android:visibility="gone" />
+        <ImageView
             android:id="@+id/stop"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            style="@style/HoloButton"
-            android:src="@drawable/ic_stop_holo_dark"
-            android:visibility="gone"
-        />
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:src="@drawable/ic_stop_holo_dark" />
         <ImageButton
-            android:id="@+id/bookmark"
+            android:id="@+id/forward"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
-            style="@style/HoloButton"
-            android:src="@drawable/btn_imageview_star"
-        />
+            android:src="@drawable/ic_forward_holo_dark"
+            style="@style/HoloButton" />
     </LinearLayout>
-
-    <com.android.browser.PageProgressView
-        android:id="@+id/progress_horizontal"
+    <LinearLayout
+        android:id="@+id/autologin"
+        android:background="#FBF0A0"
+        android:gravity="center_vertical"
+        android:paddingTop="3dip"
+        android:visibility="gone"
+        android:layout_below="@+id/taburlbar"
         android:layout_width="match_parent"
-        android:layout_height="22dip"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="8dip"
+            android:paddingRight="8dip">
+            <TextView
+                android:text="@string/autologin_bar_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@android:color/primary_text_light"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+            <Spinner
+                android:id="@+id/autologin_account"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:paddingLeft="8dp"
+                android:paddingRight="24dp"
+                style="@android:style/Widget.Holo.Light.Spinner" />
+        </LinearLayout>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="8dip"
+            android:paddingRight="8dip">
+            <Button
+                android:id="@+id/autologin_close"
+                android:layout_width="0dip"
+                android:layout_weight="1"
+                android:layout_height="wrap_content"
+                android:text="@string/autologin_bar_hide_text"
+                style="@android:style/Widget.Holo.Light.Button" />
+            <ProgressBar
+                android:id="@+id/autologin_progress"
+                android:indeterminateOnly="true"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:visibility="invisible" />
+            <Button
+                android:id="@+id/autologin_login"
+                android:text="@string/autologin_bar_login_text"
+                style="@android:style/Widget.Holo.Light.Button"
+                android:layout_height="wrap_content"
+                android:layout_width="0dip"
+                android:layout_weight="1" />
+        </LinearLayout>
+        <TextView
+            android:id="@+id/autologin_error"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textColor="#dd6826"
+            android:text="@string/autologin_bar_error"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:visibility="gone" />
+    </LinearLayout>
+    <com.android.browser.PageProgressView
+        android:id="@+id/progress"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
         android:background="@null"
+        android:layout_below="@+id/taburlbar"
         android:src="@drawable/progress"
-        android:layout_marginTop="-11dip"
+        android:layout_marginTop="-8dip"
         android:visibility="gone" />
-</LinearLayout>
+</RelativeLayout>
diff --git a/res/layout/url_bar.xml b/res/layout/url_bar.xml
index 43bbdcd..3864b7d 100644
--- a/res/layout/url_bar.xml
+++ b/res/layout/url_bar.xml
@@ -76,32 +76,26 @@
         android:layout_height="48dip"
         android:orientation="horizontal"
         android:background="@drawable/bg_urlbar">
-        <LinearLayout
-            android:id="@+id/navbuttons"
+        <ImageButton
+            android:id="@+id/back"
+            android:src="@drawable/ic_back_holo_dark"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
-            android:orientation="horizontal">
-            <ImageButton
-                android:id="@+id/back"
-                android:src="@drawable/ic_back_holo_dark"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:paddingLeft="16dip"
-                style="@style/HoloButton" />
-            <ImageButton
-                android:id="@+id/forward"
-                android:src="@drawable/ic_forward_holo_dark"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                style="@style/HoloButton" />
-            <ImageButton
-                android:id="@+id/stop"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                style="@style/HoloButton"
-                android:gravity="center_vertical"
-                android:src="@drawable/ic_stop_holo_dark" />
-        </LinearLayout>
+            android:paddingLeft="16dip"
+            style="@style/HoloButton" />
+        <ImageButton
+            android:id="@+id/forward"
+            android:src="@drawable/ic_forward_holo_dark"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/HoloButton" />
+        <ImageButton
+            android:id="@+id/stop"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/HoloButton"
+            android:gravity="center_vertical"
+            android:src="@drawable/ic_stop_holo_dark" />
         <LinearLayout
             android:id="@+id/urlbar_focused"
             android:layout_width="0dip"
@@ -124,7 +118,7 @@
                 style="@style/HoloIcon"
                 android:visibility="gone" />
             <com.android.browser.UrlInputView
-                android:id="@+id/url_focused"
+                android:id="@+id/url"
                 android:layout_width="0dip"
                 android:layout_weight="1.0"
                 android:layout_height="match_parent"
diff --git a/res/layout/website_settings_row.xml b/res/layout/website_settings_row.xml
index 6308035..3df63e2 100644
--- a/res/layout/website_settings_row.xml
+++ b/res/layout/website_settings_row.xml
@@ -27,7 +27,7 @@
     android:layout_marginLeft="18dip"
     android:layout_marginRight="18dip"
     android:layout_centerVertical="true"
-    android:background="@drawable/fav_icn_background"
+    android:background="@drawable/bookmark_list_favicon_bg"
     android:padding="2dip" />
 
   <LinearLayout android:id="@+id/features"
diff --git a/res/layout/webview_preview.xml b/res/layout/webview_preview.xml
new file mode 100644
index 0000000..8f8d810
--- /dev/null
+++ b/res/layout/webview_preview.xml
@@ -0,0 +1,86 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingRight="?android:attr/scrollbarSize">
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:minWidth="@*android:dimen/preference_icon_minWidth"
+        android:orientation="horizontal">
+        <ImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:minWidth="48dp"
+            />
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="16dip"
+        android:layout_marginRight="8dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1">
+
+        <TextView android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal" />
+
+        <TextView android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignLeft="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="4" />
+
+        <!-- Preference should place its actual preference widget here. -->
+        <LinearLayout android:id="@android:id/widget_frame"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_below="@android:id/summary"
+            android:layout_alignLeft="@android:id/title"
+            android:minWidth="@dimen/preference_widget_width"
+            android:gravity="center"
+            android:orientation="vertical" />
+
+        <WebView
+            android:id="@+id/webview"
+            android:layout_width="match_parent"
+            android:layout_height="180dp"
+            android:layout_below="@android:id/summary"
+            android:layout_toRightOf="@android:id/widget_frame"
+            android:layout_alignParentRight="true" />
+
+    </RelativeLayout>
+
+</LinearLayout>
+
diff --git a/res/layout/widget_account_selection.xml b/res/layout/widget_account_selection.xml
new file mode 100644
index 0000000..5dcd210
--- /dev/null
+++ b/res/layout/widget_account_selection.xml
@@ -0,0 +1,57 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <ListView
+        android:id="@android:id/list"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:fadingEdgeLength="16dip" />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:divider="?android:attr/dividerHorizontal"
+        android:showDividers="beginning"
+        android:dividerPadding="16dip"
+        android:background="@null">
+        <LinearLayout
+            style="?android:attr/buttonBarStyle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:paddingLeft="2dip"
+            android:paddingRight="2dip"
+            android:measureWithLargestChild="true"
+            android:background="@null">
+            <Button
+                android:id="@+id/cancel"
+                style="?android:attr/buttonBarButtonStyle"
+                android:layout_weight="1"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:text="@string/cancel" />
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
+
diff --git a/res/menu-sw600dp/browser.xml b/res/menu-sw600dp/browser.xml
index be4a521..23366e7 100644
--- a/res/menu-sw600dp/browser.xml
+++ b/res/menu-sw600dp/browser.xml
@@ -34,6 +34,9 @@
             android:alphabeticShortcut="s" />
         <item android:id="@+id/save_webarchive_menu_id"
             android:title="@string/menu_save_webarchive" />
+        <item
+            android:id="@+id/freeze_tab_menu_id"
+            android:title="@string/menu_freeze_tab" />
         <item android:id="@+id/page_info_menu_id"
             android:title="@string/page_info"
             android:icon="@drawable/ic_pageinfo_holo_dark"
diff --git a/res/menu-w500dp/bookmark.xml b/res/menu-w500dp/bookmark.xml
new file mode 100644
index 0000000..a951373
--- /dev/null
+++ b/res/menu-w500dp/bookmark.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/add_bookmark"
+        android:icon="@drawable/ic_bookmark_off_holo_dark"
+        android:title="@string/add_new_bookmark"
+        android:showAsAction="always" />
+    <item
+        android:id="@+id/go_home"
+        android:icon="@drawable/ic_home_holo_dark"
+        android:showAsAction="always" />
+    <item
+        android:id="@+id/thumbnail_view"
+        android:title="@string/bookmark_thumbnail_view"
+        android:icon="@drawable/ic_thumbnail_view_holo_dark" />
+    <item
+        android:id="@+id/list_view"
+        android:title="@string/bookmark_list_view"
+        android:icon="@drawable/ic_list_view_holo_dark" />
+    <item
+        android:id="@+id/preferences_menu_id"
+        android:title="@string/menu_preferences"
+        android:icon="@drawable/ic_settings_holo_dark"
+        android:alphabeticShortcut="p" />
+</menu>
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/menu/autofill_profile_editor.xml
similarity index 66%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/menu/autofill_profile_editor.xml
index 14edecf..4e746e5 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/menu/autofill_profile_editor.xml
@@ -14,12 +14,9 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
-
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/autofill_profile_editor_delete_profile_menu_id"
+        android:title="@string/autofill_profile_editor_delete_profile"
+        android:icon="@android:drawable/ic_menu_delete"
+        android:showAsAction="ifRoom|withText" />
+</menu>
diff --git a/res/menu/bookmark.xml b/res/menu/bookmark.xml
index 3305c70..eee1706 100644
--- a/res/menu/bookmark.xml
+++ b/res/menu/bookmark.xml
@@ -18,20 +18,22 @@
     <item
         android:id="@+id/add_bookmark"
         android:icon="@drawable/ic_bookmark_off_holo_dark"
-        android:title="@string/add_new_bookmark"
-        android:showAsAction="always" />
+        android:title="@string/add_new_bookmark" />
     <item
         android:id="@+id/go_home"
-        android:icon="@drawable/ic_home_holo_dark"
-        android:showAsAction="always" />
+        android:title="@string/go_home"
+        android:icon="@drawable/ic_home_holo_dark" />
     <item
         android:id="@+id/thumbnail_view"
-        android:title="@string/bookmark_thumbnail_view"/>
+        android:title="@string/bookmark_thumbnail_view"
+        android:icon="@drawable/ic_thumbnail_view_holo_dark" />
     <item
         android:id="@+id/list_view"
-        android:title="@string/bookmark_list_view"/>
+        android:title="@string/bookmark_list_view"
+        android:icon="@drawable/ic_list_view_holo_dark" />
     <item
         android:id="@+id/preferences_menu_id"
         android:title="@string/menu_preferences"
+        android:icon="@drawable/ic_settings_holo_dark"
         android:alphabeticShortcut="p" />
 </menu>
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index abe3716..6eadcba 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -15,55 +15,80 @@
 -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <group android:id="@+id/MAIN_MENU">
-        <item android:id="@+id/new_tab_menu_id"
-            android:title="@string/new_tab"
-            android:icon="@drawable/ic_menu_new_window"
-            android:alphabeticShortcut="n" />
-        <item android:id="@+id/bookmarks_menu_id"
-            android:title="@string/bookmarks"
-            android:alphabeticShortcut="b"
-            android:icon="@drawable/ic_bookmarks_holo_dark" />
-        <item android:id="@+id/active_tabs_menu_id"
-            android:title="@string/active_tabs"
-            android:icon="@drawable/ic_windows_holo_dark"
-            android:alphabeticShortcut="t" />
-        <item android:id="@+id/stop_reload_menu_id"
-            android:alphabeticShortcut="r" />
-        <item android:id="@+id/forward_menu_id"
-            android:title="@string/forward"
-            android:icon="@*android:drawable/ic_menu_forward" />
-        <item android:id="@+id/add_bookmark_menu_id"
+    <group
+        android:id="@+id/MAIN_MENU">
+        <group
+            android:id="@+id/NAV_MENU">
+            <item
+                android:id="@+id/new_tab_menu_id"
+                android:title="@string/new_tab"
+                android:icon="@drawable/ic_menu_new_window"
+                android:alphabeticShortcut="n" />
+            <item
+                android:id="@+id/bookmarks_menu_id"
+                android:title="@string/bookmarks"
+                android:alphabeticShortcut="b"
+                android:icon="@drawable/ic_bookmarks_holo_dark" />
+            <item
+                android:id="@+id/active_tabs_menu_id"
+                android:title="@string/active_tabs"
+                android:icon="@drawable/ic_windows_holo_dark"
+                android:alphabeticShortcut="t" />
+            <item
+                android:id="@+id/stop_reload_menu_id"
+                android:alphabeticShortcut="r" />
+            <item
+                android:id="@+id/forward_menu_id"
+                android:title="@string/forward"
+                android:icon="@*android:drawable/ic_menu_forward" />
+        </group>
+        <item
+            android:id="@+id/incognito_menu_id"
+            android:title="@string/incognito_tab"
+            android:icon="@drawable/ic_new_incognito_holo_dark" />
+        <item
+            android:id="@+id/add_bookmark_menu_id"
             android:title="@string/save_to_bookmarks"
             android:icon="@drawable/ic_bookmark_on_holo_dark"
             android:alphabeticShortcut="d" />
-        <item android:id="@+id/find_menu_id"
+        <item
+            android:id="@+id/find_menu_id"
             android:title="@*android:string/find_on_page"
             android:icon="@*android:drawable/ic_menu_find"
             android:alphabeticShortcut="f" />
-        <item android:id="@+id/share_page_menu_id"
+        <item
+            android:id="@+id/share_page_menu_id"
             android:title="@string/share_page"
             android:icon="@drawable/ic_share_holo_dark"
             android:alphabeticShortcut="s" />
-        <item android:id="@+id/save_webarchive_menu_id"
+        <item
+            android:id="@+id/save_webarchive_menu_id"
             android:title="@string/menu_save_webarchive" />
-        <item android:id="@+id/page_info_menu_id"
+        <item
+            android:id="@+id/freeze_tab_menu_id"
+            android:title="@string/menu_freeze_tab" />
+        <item
+            android:id="@+id/page_info_menu_id"
             android:title="@string/page_info"
             android:icon="@drawable/ic_pageinfo_holo_dark"
             android:alphabeticShortcut="g" />
-        <item android:id="@+id/view_downloads_menu_id"
+        <item
+            android:id="@+id/view_downloads_menu_id"
             android:title="@string/menu_view_download"
             android:icon="@drawable/ic_downloads_holo_dark"
             android:alphabeticShortcut="j" />
-        <item android:id="@+id/preferences_menu_id"
+        <item
+            android:id="@+id/preferences_menu_id"
             android:title="@string/menu_preferences"
             android:icon="@drawable/ic_settings_holo_dark"
             android:alphabeticShortcut="p" />
         <!-- followings are debug only -->
-        <item android:id="@+id/dump_nav_menu_id"
+        <item
+            android:id="@+id/dump_nav_menu_id"
             android:title="@string/dump_nav"
             android:visible="false" />
-        <item android:id="@+id/dump_counters_menu_id"
+        <item
+            android:id="@+id/dump_counters_menu_id"
             android:title="@string/dump_counters"
             android:visible="false" />
     </group>
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/menu/ua_switcher.xml
similarity index 64%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/menu/ua_switcher.xml
index 14edecf..5076fb2 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/menu/ua_switcher.xml
@@ -14,12 +14,14 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/ua_mobile_menu_id"
+        android:checkable="true"
+        android:title="@string/ua_switcher_mobile" />
+    <item
+        android:id="@+id/ua_desktop_menu_id"
+        android:checkable="true"
+        android:title="@string/ua_switcher_desktop" />
+</menu>
 
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
diff --git a/res/raw/most_visited.ktpl b/res/raw/most_visited.ktpl
index 04b9eee..9a6e1b8 100644
--- a/res/raw/most_visited.ktpl
+++ b/res/raw/most_visited.ktpl
@@ -3,7 +3,7 @@
 <html>

 <head>

 <title><%@ string/new_tab %></title>

-<meta name="viewport" content="width=device-width; initial-scale=1.0;" />

+<meta name="viewport" content="width=device-width; initial-scale=1.0; user-scalable=0" />

 

 <style type="text/css">

 

@@ -14,20 +14,19 @@
 

 body {

     text-align: center;

-    margin: 16px auto;

+    margin: 0px auto;

     padding: 0 8px 0 8px;

     max-width: <%@ dimen/mv_max_width %>px;

 }

 

-#most_visited h3 {

+h3 {

     text-align: center;

-    padding: 0;

-    margin: 5px 0 5px 0px;

+    margin: 5px 0 5px 0;

 }

 

 .thumbwrap li {

     display: inline-block;

-    margin: 0 7px 15px 7px;

+    margin: 0 7px 12px 7px;

     padding: 0;

 }

 

diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
new file mode 100644
index 0000000..d562fe7
--- /dev/null
+++ b/res/values-af/strings.xml
@@ -0,0 +1,647 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for application_name (1935869255545976415) -->
+    <skip />
+    <string name="choose_upload" msgid="3649366287575002063">"Kies lêer vir oplaai"</string>
+    <!-- no translation found for uploads_disabled (463761197575372994) -->
+    <skip />
+    <!-- no translation found for new_tab (4505722538297295141) -->
+    <skip />
+    <string name="new_incognito_tab" msgid="5821404839654751753">"Nuwe incognito-venster"</string>
+    <!-- no translation found for active_tabs (3050623868203544623) -->
+    <skip />
+    <!-- no translation found for tab_bookmarks (2305793036003473653) -->
+    <skip />
+    <!-- no translation found for tab_most_visited (1077402532455000703) -->
+    <skip />
+    <!-- no translation found for tab_history (1979267558744613746) -->
+    <skip />
+    <!-- no translation found for added_to_bookmarks (1020224130695956728) -->
+    <skip />
+    <!-- no translation found for removed_from_bookmarks (6063705902028438800) -->
+    <skip />
+    <!-- no translation found for sign_in_to (5939425800148759165) -->
+    <skip />
+    <!-- no translation found for username (5057566336518215922) -->
+    <skip />
+    <!-- no translation found for password (1177138552305184404) -->
+    <skip />
+    <!-- no translation found for action (183105774472071343) -->
+    <skip />
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <!-- no translation found for cancel (3017274947407233702) -->
+    <skip />
+    <!-- no translation found for ok (1509280796718850364) -->
+    <skip />
+    <!-- no translation found for title_bar_loading (7438217780834640678) -->
+    <skip />
+    <!-- no translation found for page_info (4048529256302257195) -->
+    <skip />
+    <!-- no translation found for page_info_view (5303490449842635158) -->
+    <skip />
+    <!-- no translation found for page_info_address (2222306609532903254) -->
+    <skip />
+    <!-- no translation found for ssl_warnings_header (79744901983636370) -->
+    <skip />
+    <!-- no translation found for ssl_continue (8031515015829358457) -->
+    <skip />
+    <!-- no translation found for security_warning (6607795404322797541) -->
+    <skip />
+    <!-- no translation found for view_certificate (1472768887529093862) -->
+    <skip />
+    <string name="ssl_go_back" msgid="4598951822061593819">"Gaan terug"</string>
+    <!-- no translation found for ssl_untrusted (5369967226521102194) -->
+    <skip />
+    <!-- no translation found for ssl_mismatch (558688832420069896) -->
+    <skip />
+    <!-- no translation found for ssl_expired (5739349389499575559) -->
+    <skip />
+    <!-- no translation found for ssl_not_yet_valid (2893167846212645846) -->
+    <skip />
+    <!-- no translation found for ssl_certificate (5226747157992111668) -->
+    <skip />
+    <!-- no translation found for ssl_certificate_is_valid (7096160815933145579) -->
+    <skip />
+    <!-- no translation found for issued_to (9032338008819841339) -->
+    <skip />
+    <!-- no translation found for common_name (5745530093500062357) -->
+    <skip />
+    <!-- no translation found for org_name (8868889052889991293) -->
+    <skip />
+    <!-- no translation found for org_unit (4489056376307768196) -->
+    <skip />
+    <!-- no translation found for issued_by (6959484326943152487) -->
+    <skip />
+    <!-- no translation found for validity_period (57988851973181309) -->
+    <skip />
+    <!-- no translation found for issued_on (2082890654801808368) -->
+    <skip />
+    <!-- no translation found for expires_on (8061200430557020704) -->
+    <skip />
+    <!-- no translation found for stopping (4839698519340302982) -->
+    <skip />
+    <!-- no translation found for stop (5687251076030630074) -->
+    <skip />
+    <!-- no translation found for reload (8585220783228408062) -->
+    <skip />
+    <!-- no translation found for back (8414603107175713668) -->
+    <skip />
+    <!-- no translation found for forward (4288210890526641577) -->
+    <skip />
+    <!-- no translation found for save (5922311934992468496) -->
+    <skip />
+    <!-- no translation found for do_not_save (6777633870113477714) -->
+    <skip />
+    <string name="location" msgid="3411848697912600125">"Adres"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
+    <string name="containing_folder" msgid="6771180232953030479">"Voeg by"</string>
+    <string name="new_folder" msgid="7743540149088867917">"Nuwe vouer"</string>
+    <string name="edit_folder" msgid="621817453133656156">"Redigeer vouer"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"Vee vouer uit"</string>
+    <string name="no_subfolders" msgid="5880411440592452802">"Geen subvouers nie"</string>
+    <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Boekmerke"</string>
+    <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Tuisskerm"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5450890093372998187">"Ander vouer…"</string>
+    <string name="name" msgid="5462672162695365387">"Etiket"</string>
+    <!-- no translation found for http (2163722670597250102) -->
+    <skip />
+    <string name="save_to_bookmarks" msgid="6101482434920313244">"Voeg by boekmerke"</string>
+    <string name="bookmark_this_page" msgid="7530739804320811054">"Boekmerk hierdie bladsy"</string>
+    <!-- no translation found for remove (7820112494467011374) -->
+    <skip />
+    <!-- no translation found for edit_bookmark (5024089053490231905) -->
+    <skip />
+    <string name="create_shortcut_bookmark" msgid="1995095662095484289">"Voeg kortpad by tuis"</string>
+    <!-- no translation found for open_bookmark (8473581305759935790) -->
+    <skip />
+    <!-- no translation found for remove_bookmark (8407495852801410891) -->
+    <skip />
+    <!-- no translation found for remove_from_bookmarks (4374080666576982775) -->
+    <skip />
+    <!-- no translation found for remove_history_item (5021424935726728618) -->
+    <skip />
+    <!-- no translation found for set_as_homepage (4752937379414905560) -->
+    <skip />
+    <!-- no translation found for bookmark_saved (2766434679871317557) -->
+    <skip />
+    <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+    <skip />
+    <!-- no translation found for homepage_set (8768087280310966395) -->
+    <skip />
+    <!-- no translation found for bookmark_needs_title (6245900436119218187) -->
+    <skip />
+    <!-- no translation found for bookmark_needs_url (7809876865972755158) -->
+    <skip />
+    <!-- no translation found for bookmark_url_not_valid (6719785633980202419) -->
+    <skip />
+    <string name="bookmark_cannot_save_url" msgid="791722768778386941">"Kan nie hierdie URL boekmerk nie."</string>
+    <!-- no translation found for delete_bookmark (2422989994934201992) -->
+    <skip />
+    <!-- no translation found for bookmark_page (6845189305130307274) -->
+    <skip />
+    <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Kleinkiekies"</string>
+    <string name="bookmark_list_view" msgid="7848510619500937839">"Lys"</string>
+    <!-- no translation found for current_page (7510129573681663135) -->
+    <skip />
+    <!-- no translation found for delete_bookmark_warning (758043186202032205) -->
+    <skip />
+    <string name="open_all_in_new_window" msgid="6514602245828366045">"Open almal in nuwe vensters"</string>
+    <!-- no translation found for goto_dot (3895839050522602723) -->
+    <skip />
+    <string name="incognito_tab" msgid="5419458065370134289">"Open nuwe incognito-oortjie"</string>
+    <!-- no translation found for select_dot (6299170761900561967) -->
+    <skip />
+    <!-- no translation found for tab_picker_title (864478399057782913) -->
+    <skip />
+    <!-- no translation found for tab_picker_remove_tab (630087809802479397) -->
+    <skip />
+    <!-- no translation found for bookmarks (1961279134885867815) -->
+    <skip />
+    <!-- no translation found for shortcut_bookmark (3974876480401135895) -->
+    <skip />
+    <!-- no translation found for history (2451240511251410032) -->
+    <skip />
+    <!-- no translation found for menu_view_download (2124570321712995120) -->
+    <skip />
+    <!-- no translation found for copy_page_url (7635062169011319208) -->
+    <skip />
+    <!-- no translation found for share_page (593756995297268343) -->
+    <skip />
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
+    <!-- outdated translation 3934652434001459581 -->     <string name="menu_save_webarchive" msgid="2474117375302625691">"Stoor as webargief"</string>
+    <!-- outdated translation 7045250341467345007 -->     <string name="webarchive_saved" msgid="2212053339474523406">"Webargief gestoor."</string>
+    <!-- outdated translation 2880998204746620260 -->     <string name="webarchive_failed" msgid="19950914584285713">"Kon nie webargief stoor nie."</string>
+    <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> boekmerke"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"Leë vouer"</string>
+    <!-- no translation found for contextmenu_openlink (7237961252214188935) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow (992765050093960353) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow_background (5556131402560251639) -->
+    <skip />
+    <!-- no translation found for contextmenu_savelink (5508554930832538184) -->
+    <skip />
+    <!-- no translation found for contextmenu_sharelink (5392275392280130331) -->
+    <skip />
+    <!-- no translation found for contextmenu_copy (398860586635404030) -->
+    <skip />
+    <!-- no translation found for contextmenu_copylink (5153657160294534270) -->
+    <skip />
+    <!-- no translation found for contextmenu_download_image (4243829645180686912) -->
+    <skip />
+    <!-- no translation found for contextmenu_view_image (3870625602053600905) -->
+    <skip />
+    <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Stel as muurpapier"</string>
+    <!-- no translation found for contextmenu_dial_dot (5856550683415933806) -->
+    <skip />
+    <!-- no translation found for contextmenu_add_contact (3183511922223645716) -->
+    <skip />
+    <!-- no translation found for contextmenu_send_mail (1014513374828775660) -->
+    <skip />
+    <!-- no translation found for contextmenu_map (7471390435434034912) -->
+    <skip />
+    <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+    <skip />
+    <!-- no translation found for clear (7070043081700011461) -->
+    <skip />
+    <!-- no translation found for replace (4843033491070384047) -->
+    <skip />
+    <!-- no translation found for browser_bookmarks_page_bookmarks_text (6787605028726162673) -->
+    <skip />
+    <!-- no translation found for menu_preferences (6709237687234102240) -->
+    <skip />
+    <!-- no translation found for pref_content_title (722227111894838633) -->
+    <skip />
+    <!-- no translation found for pref_content_load_images (2125616852957377561) -->
+    <skip />
+    <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+    <skip />
+    <!-- no translation found for pref_content_block_popups (4158524847764470895) -->
+    <skip />
+    <!-- no translation found for pref_content_javascript (4570972030299516843) -->
+    <skip />
+    <!-- no translation found for pref_content_open_in_background (824123779725118663) -->
+    <skip />
+    <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+    <skip />
+  <string-array name="pref_content_plugins_choices">
+    <item msgid="6745108155096660725">"Altyd aan"</item>
+    <item msgid="2484126708670016519">"Op aanvraag"</item>
+    <item msgid="8547442717307793863">"Af"</item>
+  </string-array>
+    <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+    <skip />
+    <!-- no translation found for pref_content_homepage (3324574611613105696) -->
+    <skip />
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"Stel soekenjin"</string>
+    <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Kies \'n soekenjin"</string>
+    <string name="pref_set_homepage_to" msgid="7196350233061395098">"Stel na…"</string>
+    <string name="pref_use_current" msgid="1778622474040406672">"Huidige bladsy"</string>
+    <string name="pref_use_blank" msgid="8503238592551111169">"Leë bladsy"</string>
+    <string name="pref_use_default" msgid="192587563274735878">"Verstek bladsy"</string>
+    <!-- no translation found for pref_content_autofit (8260474534053660809) -->
+    <skip />
+    <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+    <skip />
+    <string name="pref_general_title" msgid="1946872771219249323">"Algemeen"</string>
+    <string name="pref_general_sync_title" msgid="3138637035975860324">"Sinkroniseer"</string>
+    <!-- outdated translation 64638897890112873 -->     <string name="pref_general_autofill_title" msgid="547881256865816858">"Outo-invul"</string>
+    <string name="pref_personal_sync_with_chrome" msgid="1695182180332194033">"Sinkroniseer met Google Chrome"</string>
+    <string name="pref_personal_sync_with_chrome_summary" msgid="7414133931827321055">"Deel boekmerke en ander data tussen Android-blaaier en Google Chrome"</string>
+    <string name="pref_personal_google_account" msgid="952360133341490071">"Google-rekening"</string>
+    <string name="pref_personal_sync_bookmarks" msgid="59237515966184432">"Sinkroniseer boekmerke"</string>
+    <string name="pref_personal_sync_bookmarks_summary" msgid="4791767605662205482">"Sinkroniseer boekmerke tussen Android-blaaier en Google Chrome"</string>
+    <string name="pref_personal_start_syncing" msgid="6046972042512655232">"Begin sinkroniseer"</string>
+    <string name="pref_personal_account_dialog_title" msgid="1390867119887955530">"Kies Google-rekening om mee te deel"</string>
+    <!-- outdated translation 1174197447388234595 -->     <string name="pref_autofill_enabled" msgid="1015751713312396713">"Outovul vorm"</string>
+    <string name="pref_autofill_enabled_summary" msgid="422640696197018914">"Vul webvorms met \'n enkele klik in"</string>
+    <!-- outdated translation 1350709161524642663 -->     <string name="pref_autofill_profile_editor" msgid="3864116896052437796">"Outovul-instellings"</string>
+    <!-- outdated translation 6748434431641768870 -->     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Stel op en bestuur data vir outogevulde vorms"</string>
+    <string name="pref_autologin_title" msgid="2362827272595366379">"Outomatiese Google-aanmelding"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Meld aan by Google-werwe met <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <!-- no translation found for autologin_bar_text (3684581827167173371) -->
+    <skip />
+    <!-- no translation found for autologin_bar_login_text (7052816600314556734) -->
+    <skip />
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
+    <!-- no translation found for autologin_bar_error (5132514366023044839) -->
+    <skip />
+    <!-- outdated translation 5009490178189728877 -->     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Outo-invul sal jou profiel gebruik om jou te help om webvorms met \'n enkele klik te voltooi."</string>
+    <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Volle naam:"</string>
+    <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"E-pos:"</string>
+    <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"Maatskappynaam:"</string>
+    <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"Adresreël 1:"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"Straatadres, posbus, per adres"</string>
+    <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"Adresreël 2:"</string>
+    <string name="autofill_profile_editor_address_line_2_hint" msgid="2048330295853546405">"Woonstel, suite, eenheid, gebou, vloer ens."</string>
+    <string name="autofill_profile_editor_city" msgid="4193225955409148508">"Dorp / stad:"</string>
+    <string name="autofill_profile_editor_state" msgid="8549739922338171458">"Deelstaat / provinsie / streek:"</string>
+    <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Poskode:"</string>
+    <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Land:"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Foon:"</string>
+    <!-- no translation found for autofill_profile_editor_phone_number_invalid (7166394872369167580) -->
+    <skip />
+    <string name="autofill_profile_editor_save_profile" msgid="8349915287435262888">"Stoor profiel"</string>
+    <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profiel gestoor"</string>
+    <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profiel uitgevee"</string>
+    <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Vee profiel uit"</string>
+    <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Blaaier kan webvorms soos hierdie outomaties voltooi. Wil jy jou profiel opstel?"</string>
+    <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
+    <skip />
+    <!-- no translation found for disable_autofill (8305901059849400354) -->
+    <skip />
+    <!-- outdated translation 1705642466867300373 -->     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privaatheid en sekuriteit"</string>
+    <!-- no translation found for pref_privacy_clear_cache (3380316479925886998) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_cache_summary (2216463577207991454) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+    <skip />
+    <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Koekies"</string>
+    <!-- no translation found for pref_privacy_clear_cookies (3095583579133780331) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history (8723795508825198477) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history_summary (6868501330708940734) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+    <skip />
+    <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Vorminligting"</string>
+    <!-- no translation found for pref_privacy_clear_form_data (4232668196344383987) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_form_data_summary (1790390894719517167) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_passwords (4750234112289277480) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+    <skip />
+    <string name="pref_privacy_location_title" msgid="7458378016606081067">"Ligging"</string>
+    <!-- no translation found for pref_privacy_enable_geolocation (1395040170290765686) -->
+    <skip />
+    <!-- no translation found for pref_privacy_enable_geolocation_summary (8437020934664306205) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_geolocation_access (6649680770030042980) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_geolocation_access_summary (7750143359497314679) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_geolocation_access_dlg (7327063124488827244) -->
+    <skip />
+    <string name="pref_security_passwords_title" msgid="5734190542383756711">"Wagwoorde"</string>
+    <!-- no translation found for pref_security_remember_passwords (6492957683454529549) -->
+    <skip />
+    <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+    <skip />
+    <!-- no translation found for pref_security_save_form_data (1213669802810198893) -->
+    <skip />
+    <!-- no translation found for pref_security_save_form_data_summary (4994074685153708026) -->
+    <skip />
+    <!-- no translation found for pref_security_show_security_warning (8901135676266754559) -->
+    <skip />
+    <!-- no translation found for pref_security_show_security_warning_summary (8968906112720511704) -->
+    <skip />
+    <!-- no translation found for pref_security_accept_cookies (3201367661925047989) -->
+    <skip />
+    <!-- no translation found for pref_security_accept_cookies_summary (1465118934875026920) -->
+    <skip />
+    <!-- no translation found for pref_text_size_choices:0 (4952686548944739548) -->
+    <!-- no translation found for pref_text_size_choices:1 (1950030433642671460) -->
+    <!-- no translation found for pref_text_size_choices:2 (4338347520133294584) -->
+    <!-- no translation found for pref_text_size_choices:3 (5043128215356351184) -->
+    <!-- no translation found for pref_text_size_choices:4 (7201512237890458902) -->
+    <!-- no translation found for pref_min_font_size (8811125835817449131) -->
+    <skip />
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+    <skip />
+    <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+    <skip />
+    <string name="pref_extras_title" msgid="7075456173747370647">"Gevorderd"</string>
+    <!-- no translation found for pref_extras_website_settings (67866640052455549) -->
+    <skip />
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Gevorderde instellings vir individuele webwerwe"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Laai verstek instellings terug"</string>
+    <!-- no translation found for pref_extras_reset_default (8904000515846202110) -->
+    <skip />
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Stel verstek instellings terug"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="6640261575874704022">"Instellings sal na verstek waardes teruggestel word."</string>
+    <!-- no translation found for pref_extras_reset_default_dlg_title (2250334970728938936) -->
+    <skip />
+    <!-- no translation found for pref_development_title (3263854204533056480) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_choices:0 (7275223955790513818) -->
+    <!-- no translation found for pref_default_text_encoding_choices:1 (2456597866837587140) -->
+    <!-- no translation found for pref_default_text_encoding_dialogtitle (5508255018084978547) -->
+    <skip />
+    <!-- no translation found for pref_accessibility_title (5127836981587423215) -->
+    <skip />
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
+    <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
+    <!-- outdated translation 2105979166017257647 -->     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Vinnige kontroles"</string>
+    <!-- outdated translation 8025196176636589803 -->     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Sleep duim van linker- of regterkant om vinnige kontroles te gebruik"</string>
+    <!-- outdated translation 547134501893835512 -->     <string name="pref_lab_most_visited_homepage" msgid="7597766876952506909">"Mees besoekte tuisblad"</string>
+    <!-- outdated translation 6857702350834122532 -->     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Stel jou tuisblad om die mees besoekte bladsye te wys."</string>
+    <!-- no translation found for pref_use_instant_search (1119176077760723740) -->
+    <skip />
+    <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
+    <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
+    <skip />
+    <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
+    <skip />
+    <!-- no translation found for browserFrameFormResubmitLabel (2685923472682180360) -->
+    <skip />
+    <!-- no translation found for browserFrameFormResubmitMessage (2752182215695632138) -->
+    <skip />
+    <!-- no translation found for loadSuspendedTitle (675991625288706944) -->
+    <skip />
+    <!-- no translation found for loadSuspended (3133656588880851273) -->
+    <skip />
+    <!-- no translation found for clear_history (5998307092715979619) -->
+    <skip />
+    <!-- no translation found for browser_history (1038987118290272525) -->
+    <skip />
+    <!-- no translation found for empty_history (8738772352308207274) -->
+    <skip />
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
+    <!-- no translation found for add_new_bookmark (8086367791400349049) -->
+    <skip />
+    <!-- no translation found for add_bookmark_short (3783984330998103735) -->
+    <skip />
+    <!-- no translation found for search_hint (4647356319916631820) -->
+    <skip />
+    <!-- no translation found for search_button_text (5235226933877634410) -->
+    <skip />
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <!-- no translation found for attention (3473639060042811244) -->
+    <skip />
+    <!-- no translation found for popup_window_attempt (2673111696288657989) -->
+    <skip />
+    <!-- no translation found for allow (1157313689171991335) -->
+    <skip />
+    <!-- no translation found for block (9172175889884707800) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_title (5175503564948906442) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_message (1398571800233959583) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_title (3805453941587725944) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_message (5827289829907966657) -->
+    <skip />
+    <!-- no translation found for download_title (2122874021047565594) -->
+    <skip />
+    <!-- no translation found for download_unknown_filename (4013465542563652175) -->
+    <skip />
+    <!-- no translation found for download_menu_open (4888327480367757513) -->
+    <skip />
+    <!-- no translation found for download_menu_clear (6264454531553418124) -->
+    <skip />
+    <string name="download_menu_delete" msgid="8815502136393894148">"Vee uit"</string>
+    <!-- no translation found for download_menu_cancel (2545333007601851574) -->
+    <skip />
+    <!-- no translation found for download_menu_cancel_all (2136550823151999166) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_title (8909108500262799748) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_msg (6285389170052357797) -->
+    <skip />
+    <string name="download_delete_file" msgid="5330036497843073249">"Lêer sal uitgevee word"</string>
+    <!-- no translation found for download_file_error_dlg_title (2693630283595384874) -->
+    <skip />
+    <!-- no translation found for download_file_error_dlg_msg (5156405410324072471) -->
+    <skip />
+    <!-- no translation found for download_failed_generic_dlg_title (6106781095337833391) -->
+    <skip />
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"USB-berging nie beskikbaar nie"</string>
+    <!-- outdated translation 56777245081568508 -->     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"USB-berging nie beskikbaar nie"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"USB-berging word vereis om <xliff:g id="FILENAME">%s</xliff:g> af te laai."</string>
+    <!-- no translation found for download_no_sdcard_dlg_msg (2616399456116301518) -->
+    <skip />
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"USB-berging nie beskikbaar nie"</string>
+    <!-- outdated translation 8081445664689818973 -->     <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"USB-berging nie beskikbaar nie"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"Die USB-berging is besig. Om aflaai toe te laat, kies \"Skakel USB-berging af\" in die kennisgewing."</string>
+    <!-- outdated translation 3979329954835690147 -->     <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"Die USB-berging is besig. Om aflaai toe te laat, kies \"Skakel USB-berging af\" in die kennisgewing."</string>
+    <!-- no translation found for cannot_download (8150552478556798780) -->
+    <skip />
+    <string name="download_no_application_title" msgid="1286056729168874295">"Kan nie lêer open nie"</string>
+    <!-- no translation found for retry (1835923075542266721) -->
+    <skip />
+    <!-- no translation found for no_downloads (3947445710685021498) -->
+    <skip />
+    <!-- no translation found for download_error (413496839831257187) -->
+    <skip />
+    <!-- no translation found for download_success (2279041638155595203) -->
+    <skip />
+    <!-- no translation found for download_running (2622942231322015059) -->
+    <skip />
+    <!-- no translation found for download_pending (2599683668575349559) -->
+    <skip />
+    <!-- no translation found for download_pending_network (6548714525679461053) -->
+    <skip />
+    <!-- no translation found for download_running_paused (6418029352085656495) -->
+    <skip />
+    <!-- no translation found for download_canceled (6057083743144492515) -->
+    <skip />
+    <!-- no translation found for download_not_acceptable (313769696131563652) -->
+    <skip />
+    <!-- no translation found for download_file_error (1206648050615176113) -->
+    <skip />
+    <!-- no translation found for download_length_required (9038605488460437406) -->
+    <skip />
+    <!-- no translation found for download_precondition_failed (8327584102874295580) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <!-- no translation found for webstorage_outofspace_notification_title (1160474608059771788) -->
+    <skip />
+    <!-- no translation found for webstorage_outofspace_notification_text (7341075135051829692) -->
+    <skip />
+    <!-- no translation found for webstorage_clear_data_title (689484577124333977) -->
+    <skip />
+    <!-- no translation found for webstorage_clear_data_dialog_title (345457466368974706) -->
+    <skip />
+    <!-- no translation found for webstorage_clear_data_dialog_message (6678281256970470125) -->
+    <skip />
+    <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+    <skip />
+    <!-- no translation found for webstorage_clear_data_dialog_cancel_button (2028867751958942762) -->
+    <skip />
+    <!-- no translation found for webstorage_origin_summary_mb_stored (1985885826292236210) -->
+    <skip />
+    <!-- no translation found for loading_video (4887871585216091096) -->
+    <skip />
+    <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+    <skip />
+    <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+    <skip />
+    <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+    <skip />
+    <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+    <skip />
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"Hierdie werf kan jou ligging sien. Verander dit in Instellings -&gt; Webwerf-instellings"</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"Hierdie werf kan nie jou ligging sien nie. Verander dit in Instellings -&gt; Webwerf-instellings"</string>
+    <!-- no translation found for geolocation_settings_page_title (1745477985097536528) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_summary_allowed (9180251524290811398) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_summary_not_allowed (4589649082203102544) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_dialog_title (1549842043381347668) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_dialog_message (7586671987576403993) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_dialog_ok_button (4789434178048077287) -->
+    <skip />
+    <!-- no translation found for geolocation_settings_page_dialog_cancel_button (7941036504673409747) -->
+    <skip />
+    <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+    <skip />
+    <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+    <skip />
+    <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+    <skip />
+    <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+    <skip />
+    <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+    <skip />
+    <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"Stel tans muurpapier in..."</string>
+    <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"Boekmerke"</string>
+    <string name="empty_bookmarks_folder" msgid="7843361614634930942">"Daar is geen boekmerke nie"</string>
+    <string name="rlz_access_point" msgid="7165847807377650632">"Y1"</string>
+    <!-- no translation found for account_chooser_dialog_title (3314204833188808194) -->
+    <!-- no translation found for account_chooser_dialog_title (4833571985009544332) -->
+    <skip />
+    <string name="import_bookmarks_dialog_title" msgid="3325557652271172128">"Sinkroniseer met Google-rekening"</string>
+    <!-- outdated translation 2187665745413495303 -->     <string name="import_bookmarks_dialog_description" msgid="1942452375564381488">"Jou Android-boekmerke is nie met \'n Google-rekening geassosieer nie"</string>
+    <!-- no translation found for import_bookmarks_dialog_select_add_account (3102882579089291099) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_delete_select_account (5192284761080626386) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_delete (8854001080444749211) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_add (5433677293195372675) -->
+    <skip />
+    <!-- outdated translation 8105572409059113340 -->     <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"Verwyder jou Android-boekmerke"</string>
+    <!-- no translation found for import_bookmarks_wizard_next (7578143961884352676) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_previous (8551440353688257031) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_cancel (4936061122806506634) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_done (1446247092194489191) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_add (7552306756868669353) -->
+    <skip />
+    <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Voeg jou Android-boekmerke by boekmerke vir <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
+    <string name="menu_share_url" msgid="5851814357333739700">"Deel"</string>
+    <string name="max_tabs_warning" msgid="4122034303809457570">"Geen oortjies meer beskikbaar nie"</string>
+    <!-- no translation found for instant_search_label (8769284297650716935) -->
+    <skip />
+    <!-- no translation found for recover_title (8095611702406163360) -->
+    <skip />
+    <!-- no translation found for recover_prompt (6541354420842425606) -->
+    <skip />
+    <!-- no translation found for recover_yes (4540538008955917099) -->
+    <skip />
+    <!-- no translation found for recover_no (3121030267940592611) -->
+    <skip />
+    <!-- no translation found for preview (6450823514561689038) -->
+    <skip />
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
+</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
new file mode 100644
index 0000000..8716fc5
--- /dev/null
+++ b/res/values-am/strings.xml
@@ -0,0 +1,572 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name" msgid="1935869255545976415">"አሳሽ"</string>
+    <string name="choose_upload" msgid="3649366287575002063">"ለመስቀል ፋይል ምረጥ"</string>
+    <!-- no translation found for uploads_disabled (463761197575372994) -->
+    <skip />
+    <string name="new_tab" msgid="4505722538297295141">"አዲሰ መስኮት"</string>
+    <string name="new_incognito_tab" msgid="5821404839654751753">"አዲስ incognito መስኮት"</string>
+    <string name="active_tabs" msgid="3050623868203544623">"ዊንዶውስ"</string>
+    <string name="tab_bookmarks" msgid="2305793036003473653">"ዕልባቶች"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"በብዛት የተጎበኘ"</string>
+    <string name="tab_history" msgid="1979267558744613746">"ታሪክ"</string>
+    <string name="added_to_bookmarks" msgid="1020224130695956728">"ወደ እልባቶች ታክሏል"</string>
+    <string name="removed_from_bookmarks" msgid="6063705902028438800">"ከዕልባት የተወገደ"</string>
+    <string name="sign_in_to" msgid="5939425800148759165">"ወደ <xliff:g id="HOSTNAME">%s1</xliff:g>\"<xliff:g id="REALM">%s2</xliff:g>\" ግባ"</string>
+    <!-- no translation found for username (5057566336518215922) -->
+    <skip />
+    <!-- no translation found for password (1177138552305184404) -->
+    <skip />
+    <!-- no translation found for action (183105774472071343) -->
+    <skip />
+    <string name="bookmarks_search" msgid="5229596268214362873">"አሳሽ"</string>
+    <!-- no translation found for cancel (3017274947407233702) -->
+    <skip />
+    <!-- no translation found for ok (1509280796718850364) -->
+    <skip />
+    <string name="title_bar_loading" msgid="7438217780834640678">"በማስገባት ላይ..."</string>
+    <!-- no translation found for page_info (4048529256302257195) -->
+    <skip />
+    <!-- no translation found for page_info_view (5303490449842635158) -->
+    <skip />
+    <!-- no translation found for page_info_address (2222306609532903254) -->
+    <skip />
+    <!-- no translation found for ssl_warnings_header (79744901983636370) -->
+    <skip />
+    <!-- no translation found for ssl_continue (8031515015829358457) -->
+    <skip />
+    <!-- no translation found for security_warning (6607795404322797541) -->
+    <skip />
+    <!-- no translation found for view_certificate (1472768887529093862) -->
+    <skip />
+    <string name="ssl_go_back" msgid="4598951822061593819">"ወደ ኋላተመለስ"</string>
+    <!-- no translation found for ssl_untrusted (5369967226521102194) -->
+    <skip />
+    <!-- no translation found for ssl_mismatch (558688832420069896) -->
+    <skip />
+    <!-- no translation found for ssl_expired (5739349389499575559) -->
+    <skip />
+    <!-- no translation found for ssl_not_yet_valid (2893167846212645846) -->
+    <skip />
+    <!-- no translation found for ssl_certificate (5226747157992111668) -->
+    <skip />
+    <!-- no translation found for ssl_certificate_is_valid (7096160815933145579) -->
+    <skip />
+    <!-- no translation found for issued_to (9032338008819841339) -->
+    <skip />
+    <!-- no translation found for common_name (5745530093500062357) -->
+    <skip />
+    <!-- no translation found for org_name (8868889052889991293) -->
+    <skip />
+    <!-- no translation found for org_unit (4489056376307768196) -->
+    <skip />
+    <!-- no translation found for issued_by (6959484326943152487) -->
+    <skip />
+    <!-- no translation found for validity_period (57988851973181309) -->
+    <skip />
+    <!-- no translation found for issued_on (2082890654801808368) -->
+    <skip />
+    <!-- no translation found for expires_on (8061200430557020704) -->
+    <skip />
+    <!-- no translation found for stopping (4839698519340302982) -->
+    <skip />
+    <!-- no translation found for stop (5687251076030630074) -->
+    <skip />
+    <!-- no translation found for reload (8585220783228408062) -->
+    <skip />
+    <!-- no translation found for back (8414603107175713668) -->
+    <skip />
+    <!-- no translation found for forward (4288210890526641577) -->
+    <skip />
+    <!-- no translation found for save (5922311934992468496) -->
+    <skip />
+    <!-- no translation found for do_not_save (6777633870113477714) -->
+    <skip />
+    <string name="location" msgid="3411848697912600125">"አድራሻ"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
+    <string name="containing_folder" msgid="6771180232953030479">"ያክሉ ለ..."</string>
+    <string name="new_folder" msgid="7743540149088867917">"አዲስ አቃፊ"</string>
+    <string name="edit_folder" msgid="621817453133656156">"አቃፊ አርትዕ"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"አቃፊ ሰርዝ"</string>
+    <string name="no_subfolders" msgid="5880411440592452802">"ምንም  ንዑስ አቃፊዎች የሉም"</string>
+    <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"ዕልባቶች"</string>
+    <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"መነሻ ማያ"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5450890093372998187">"ሌላ አቃፊ..."</string>
+    <string name="name" msgid="5462672162695365387">"መሰየሚያ"</string>
+    <!-- no translation found for http (2163722670597250102) -->
+    <skip />
+    <string name="save_to_bookmarks" msgid="6101482434920313244">"ወደ እልባዎች አክል"</string>
+    <string name="bookmark_this_page" msgid="7530739804320811054">"ይህን ገፅ አልብ"</string>
+    <string name="remove" msgid="7820112494467011374">"አስወግድ"</string>
+    <!-- no translation found for edit_bookmark (5024089053490231905) -->
+    <skip />
+    <string name="create_shortcut_bookmark" msgid="1995095662095484289">"አቋራጭን ወደ መነሻ አክል"</string>
+    <!-- no translation found for open_bookmark (8473581305759935790) -->
+    <skip />
+    <!-- no translation found for remove_bookmark (8407495852801410891) -->
+    <skip />
+    <string name="remove_from_bookmarks" msgid="4374080666576982775">"ከዕልባቶች አስወግድ"</string>
+    <!-- no translation found for remove_history_item (5021424935726728618) -->
+    <skip />
+    <string name="set_as_homepage" msgid="4752937379414905560">"እንደ መነሻገፅ አዘጋጅ"</string>
+    <!-- no translation found for bookmark_saved (2766434679871317557) -->
+    <skip />
+    <string name="bookmark_not_saved" msgid="700600955089376724">"ዕልባትለማስቀመጥ አልተቻለም።"</string>
+    <string name="homepage_set" msgid="8768087280310966395">"መነሻ ገፅ አዘጋጅ።"</string>
+    <string name="bookmark_needs_title" msgid="6245900436119218187">"ዕልባቶች መጠሪያ አላቸው።"</string>
+    <string name="bookmark_needs_url" msgid="7809876865972755158">"ዕልባቶች መጠሪያ አላቸው።"</string>
+    <!-- no translation found for bookmark_url_not_valid (6719785633980202419) -->
+    <skip />
+    <string name="bookmark_cannot_save_url" msgid="791722768778386941">"ይህ URL እልባት ሊደረግበት አልቻለም።"</string>
+    <!-- no translation found for delete_bookmark (2422989994934201992) -->
+    <skip />
+    <!-- no translation found for bookmark_page (6845189305130307274) -->
+    <skip />
+    <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"ጥፍር አከሎች"</string>
+    <string name="bookmark_list_view" msgid="7848510619500937839">"ዝርዝር"</string>
+    <string name="current_page" msgid="7510129573681663135">"ከ "</string>
+    <string name="delete_bookmark_warning" msgid="758043186202032205">"\"<xliff:g id="BOOKMARK">%s</xliff:g>\"  ዕልባት ይሰረዛል።"</string>
+    <string name="open_all_in_new_window" msgid="6514602245828366045">"ሁሉንም በአንድ ዊንዶውዝ ውስጥ ክፈት"</string>
+    <string name="goto_dot" msgid="3895839050522602723">"ሂድ"</string>
+    <string name="incognito_tab" msgid="5419458065370134289">"አዲስ  incognito ትር ክፈት"</string>
+    <string name="select_dot" msgid="6299170761900561967">"ፅሁፍ ምረጥ"</string>
+    <!-- no translation found for tab_picker_title (864478399057782913) -->
+    <skip />
+    <!-- no translation found for tab_picker_remove_tab (630087809802479397) -->
+    <skip />
+    <!-- no translation found for bookmarks (1961279134885867815) -->
+    <skip />
+    <!-- no translation found for shortcut_bookmark (3974876480401135895) -->
+    <skip />
+    <!-- no translation found for history (2451240511251410032) -->
+    <skip />
+    <!-- no translation found for menu_view_download (2124570321712995120) -->
+    <skip />
+    <string name="copy_page_url" msgid="7635062169011319208">"url ገፅ ቅዳ"</string>
+    <!-- no translation found for share_page (593756995297268343) -->
+    <skip />
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
+    <!-- outdated translation 3934652434001459581 -->     <string name="menu_save_webarchive" msgid="2474117375302625691">"እንደ ድረ መዝገብ አስቀምጥ"</string>
+    <!-- outdated translation 7045250341467345007 -->     <string name="webarchive_saved" msgid="2212053339474523406">"የድረ መዝገብ ተቀምጧል።"</string>
+    <!-- outdated translation 2880998204746620260 -->     <string name="webarchive_failed" msgid="19950914584285713">"የድረ መዝገብ ለማስቀመጥ ተሳነ"</string>
+    <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> ዕልባቶች"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"ባዶ አቃፊ"</string>
+    <!-- no translation found for contextmenu_openlink (7237961252214188935) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow (992765050093960353) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow_background (5556131402560251639) -->
+    <skip />
+    <!-- no translation found for contextmenu_savelink (5508554930832538184) -->
+    <skip />
+    <!-- no translation found for contextmenu_sharelink (5392275392280130331) -->
+    <skip />
+    <!-- no translation found for contextmenu_copy (398860586635404030) -->
+    <skip />
+    <!-- no translation found for contextmenu_copylink (5153657160294534270) -->
+    <skip />
+    <!-- no translation found for contextmenu_download_image (4243829645180686912) -->
+    <skip />
+    <!-- no translation found for contextmenu_view_image (3870625602053600905) -->
+    <skip />
+    <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"እንደ ልጥፍ አዘጋጅ"</string>
+    <!-- no translation found for contextmenu_dial_dot (5856550683415933806) -->
+    <skip />
+    <!-- no translation found for contextmenu_add_contact (3183511922223645716) -->
+    <skip />
+    <!-- no translation found for contextmenu_send_mail (1014513374828775660) -->
+    <skip />
+    <!-- no translation found for contextmenu_map (7471390435434034912) -->
+    <skip />
+    <string name="choosertitle_sharevia" msgid="4600490613341909086">"በ በኩል አጋራ"</string>
+    <!-- no translation found for clear (7070043081700011461) -->
+    <skip />
+    <!-- no translation found for replace (4843033491070384047) -->
+    <skip />
+    <!-- no translation found for browser_bookmarks_page_bookmarks_text (6787605028726162673) -->
+    <skip />
+    <!-- no translation found for menu_preferences (6709237687234102240) -->
+    <skip />
+    <!-- no translation found for pref_content_title (722227111894838633) -->
+    <skip />
+    <!-- no translation found for pref_content_load_images (2125616852957377561) -->
+    <skip />
+    <string name="pref_content_load_images_summary" msgid="5055874125248398584">"በድህረ ገፆች ላይ ምስሎች አሳይ"</string>
+    <!-- no translation found for pref_content_block_popups (4158524847764470895) -->
+    <skip />
+    <!-- no translation found for pref_content_javascript (4570972030299516843) -->
+    <skip />
+    <!-- no translation found for pref_content_open_in_background (824123779725118663) -->
+    <skip />
+    <string name="pref_content_plugins" msgid="7231944644794301582">"ተሰኪዎችን አስችል"</string>
+  <string-array name="pref_content_plugins_choices">
+    <item msgid="6745108155096660725">"ሁልጊዜ እንደበራ"</item>
+    <item msgid="2484126708670016519">"በጥየቃ ላይ"</item>
+    <item msgid="8547442717307793863">"ውጪ"</item>
+  </string-array>
+    <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"ክፈት"</string>
+    <!-- no translation found for pref_content_homepage (3324574611613105696) -->
+    <skip />
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"የፍለጋ ፍርግም አዘጋጅ"</string>
+    <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"የፍለጋ ፍርግም ምረጥ"</string>
+    <string name="pref_set_homepage_to" msgid="7196350233061395098">"ለ አዘጋጅ....."</string>
+    <string name="pref_use_current" msgid="1778622474040406672">"የአሁኑ ገፅ"</string>
+    <string name="pref_use_blank" msgid="8503238592551111169">"ባዶ ገጽ"</string>
+    <string name="pref_use_default" msgid="192587563274735878">"ነባሪ ገፅ"</string>
+    <!-- no translation found for pref_content_autofit (8260474534053660809) -->
+    <skip />
+    <string name="pref_content_autofit_summary" msgid="4587831659894879986">"ማያውን ለማስማማት ድረ ገፆችን ቅረፅ"</string>
+    <string name="pref_general_title" msgid="1946872771219249323">"አጠቃላይ"</string>
+    <string name="pref_general_sync_title" msgid="3138637035975860324">"አስምር"</string>
+    <!-- outdated translation 64638897890112873 -->     <string name="pref_general_autofill_title" msgid="547881256865816858">"ራስ ሰር ሙላ"</string>
+    <string name="pref_personal_sync_with_chrome" msgid="1695182180332194033">"Google Chrome አሳምር"</string>
+    <string name="pref_personal_sync_with_chrome_summary" msgid="7414133931827321055">"እልባቶች &amp; ሌላ ውሂብ በAndroid አሳሽ እና Google Chrome መካከል  አጋራ"</string>
+    <string name="pref_personal_google_account" msgid="952360133341490071">"የGoogle መለያ"</string>
+    <string name="pref_personal_sync_bookmarks" msgid="59237515966184432">"እልባቶችን አሳምር"</string>
+    <string name="pref_personal_sync_bookmarks_summary" msgid="4791767605662205482">"እልባቶችን ከGoogle Chrome እና Android ማሰሻ ጋር አሳምር"</string>
+    <string name="pref_personal_start_syncing" msgid="6046972042512655232">"አሳምር ጀምር"</string>
+    <string name="pref_personal_account_dialog_title" msgid="1390867119887955530">"ለማጋራት የGoogle መለያ ምረጥ"</string>
+    <!-- outdated translation 1174197447388234595 -->     <string name="pref_autofill_enabled" msgid="1015751713312396713">"የራስ ሙላ ቅፅ"</string>
+    <string name="pref_autofill_enabled_summary" msgid="422640696197018914">"በነጠላ ጠቅታ የድረ ቅፆችን ሙላ"</string>
+    <!-- outdated translation 1350709161524642663 -->     <string name="pref_autofill_profile_editor" msgid="3864116896052437796">"የራስሙላ ቅንብሮች"</string>
+    <!-- unknown quoting pattern: original -1, translation 1 -->
+    <!-- outdated translation 6748434431641768870 -->     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"ጫን &amp;amp; ለራስሙላ ቅፆች ውሂብ አደራጅ"</string>
+    <string name="pref_autologin_title" msgid="2362827272595366379">"ራስ ሰርGoogle መግቢያ"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"<xliff:g id="ID_1">%s</xliff:g> በመጠቀም ወደ Google ገፆች ይገባል"</string>
+    <!-- no translation found for autologin_bar_text (3684581827167173371) -->
+    <skip />
+    <!-- no translation found for autologin_bar_login_text (7052816600314556734) -->
+    <skip />
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
+    <!-- no translation found for autologin_bar_error (5132514366023044839) -->
+    <skip />
+    <!-- outdated translation 5009490178189728877 -->     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"ራስ ሰር ሙላየመገለጫዎን ድረ ቅፆችን በአንድ ጊዜ ጠቅታ ለማጠናቀቅለማገዝ ይጠቀማል።"</string>
+    <string name="autofill_profile_editor_name" msgid="8566130291459685955">"ሙሉ ስም፡"</string>
+    <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"ኢሜይል:"</string>
+    <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"የኩባንያ ስም:"</string>
+    <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"የአድራሻ መስመር 1፡"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"የጎዳና አድራሻ፣ መ.ሣ.ቁጥር፣ c/o"</string>
+    <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"የአድራሻ መስመር 2፡"</string>
+    <string name="autofill_profile_editor_address_line_2_hint" msgid="2048330295853546405">"አፓርትመንት፣ክፍል ቁጥር፣ክፍል፣ህንፃ፣ፎቅ ወዘተ።"</string>
+    <string name="autofill_profile_editor_city" msgid="4193225955409148508">"ከተማ:"</string>
+    <string name="autofill_profile_editor_state" msgid="8549739922338171458">"ወረዳ / ቀበሌ/ ክልል:"</string>
+    <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"ዚፕ ኮድ:"</string>
+    <string name="autofill_profile_editor_country" msgid="7234470301239156656">"አገር፡"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"ስልክ፡"</string>
+    <!-- no translation found for autofill_profile_editor_phone_number_invalid (7166394872369167580) -->
+    <skip />
+    <string name="autofill_profile_editor_save_profile" msgid="8349915287435262888">"መገለጫ አስቀምጥ"</string>
+    <string name="autofill_profile_successful_save" msgid="6834102203944938409">"መገለጫ  አስቀምጧል"</string>
+    <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"መገለጫ  ሰርዟል"</string>
+    <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"መገለጫ ሰርዝ"</string>
+    <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"አሳሽ እንደዚህ ያሉ የድረ ቅጾችን በራስ ሰር መሙላት ይችላል።መገለጫዎን መጫን ይፈልጋሉ?"</string>
+    <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
+    <skip />
+    <!-- no translation found for disable_autofill (8305901059849400354) -->
+    <skip />
+    <!-- outdated translation 1705642466867300373 -->     <string name="pref_privacy_security_title" msgid="3480313968942160914">"ግላዊነት&amp; ጥበቃ"</string>
+    <!-- no translation found for pref_privacy_clear_cache (3380316479925886998) -->
+    <skip />
+    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"በአካባቢ የተሸጎጠ ይዘት እና የውሂብ ጎታዎችን አጥራ"</string>
+    <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"እዛው አካባቢየተሸጎጠ ይዘት እና የውሂብ ጎታዎች ይሰረዛሉ።"</string>
+    <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"ኩኪዎች"</string>
+    <!-- no translation found for pref_privacy_clear_cookies (3095583579133780331) -->
+    <skip />
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"ሁሉንም የአሳሽ ኩኪዎች አጥራ"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"ሁሉምኩኪዎች ይሰረዛሉ።"</string>
+    <!-- no translation found for pref_privacy_clear_history (8723795508825198477) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history_summary (6868501330708940734) -->
+    <skip />
+    <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"የአሳሹ መዳሰሻ ታሪክ ይሰረዛል።"</string>
+    <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"የውሂብ ቅፅ"</string>
+    <!-- no translation found for pref_privacy_clear_form_data (4232668196344383987) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_form_data_summary (1790390894719517167) -->
+    <skip />
+    <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"የተቀመጡ የውሂብ ቅፆች ሁሉ ይሰረዛሉ።"</string>
+    <!-- no translation found for pref_privacy_clear_passwords (4750234112289277480) -->
+    <skip />
+    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"የተቀመጡ ይለፍ ቃሎችን ሁሉ አጥራ"</string>
+    <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"የተቀመጡ የይለፍ ቃሎች ሁሉ ይሰረዛሉ።"</string>
+    <string name="pref_privacy_location_title" msgid="7458378016606081067">"ስፍራ"</string>
+    <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"ሥፍራ አስችል"</string>
+    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"ድረ ገፆች ወደ እርስዎ ሥፍራ ድረስ ለመጠየቅ ፍቀድ"</string>
+    <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"የስፍራ መድረሻ አፅዳ"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"ለሁሉም ድረ ገፆች የስፍራ ድረስ አጥራ"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"ለሁሉም ድረ ገፆች የስፍራ ድረስ አጥራ"</string>
+    <string name="pref_security_passwords_title" msgid="5734190542383756711">"የይለፍ ቃሎች"</string>
+    <!-- no translation found for pref_security_remember_passwords (6492957683454529549) -->
+    <skip />
+    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"ለድረ ገፆች ተጠቃሚ ስሞች እና የይለፍ ቃሎች አስቀምጥ"</string>
+    <!-- no translation found for pref_security_save_form_data (1213669802810198893) -->
+    <skip />
+    <!-- no translation found for pref_security_save_form_data_summary (4994074685153708026) -->
+    <skip />
+    <!-- no translation found for pref_security_show_security_warning (8901135676266754559) -->
+    <skip />
+    <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"ከድረ ገፅ ደህንነት ጋር ችግር ካለማስጠንቀቂያ አሳይ"</string>
+    <!-- no translation found for pref_security_accept_cookies (3201367661925047989) -->
+    <skip />
+    <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"ድረ ገፆች እንዲያስቀምጡ እና \"ኩኪ\" ውሂብ እንዲያነቡ ፍቀድ"</string>
+  <string-array name="pref_text_size_choices">
+    <item msgid="4952686548944739548">"ደቃቃ"</item>
+    <item msgid="1950030433642671460">"አነስተኛ"</item>
+    <item msgid="4338347520133294584">"መደበኛ"</item>
+    <item msgid="5043128215356351184">"ትልቅ"</item>
+    <item msgid="7201512237890458902">"ግዙፍ"</item>
+  </string-array>
+    <!-- no translation found for pref_min_font_size (8811125835817449131) -->
+    <skip />
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
+    <string name="pref_default_zoom" msgid="8076142259097187395">"ነባሪ አጉላ"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item msgid="549583171195154919">"ሩቅ"</item>
+    <item msgid="5619034257768161024">"መካከለኛ"</item>
+    <item msgid="3840999588443167001">"ዝጋ"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"ነባሪ አጉላ"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"ክፈት"</string>
+    <string name="pref_content_load_page_summary" msgid="8792093504054149369">"አዲስ የተከፈቱ ገፆችን በጠቅላይ ቅኝት አሳይ"</string>
+    <string name="pref_extras_title" msgid="7075456173747370647">"ከፍተኛ"</string>
+    <string name="pref_extras_website_settings" msgid="67866640052455549">"የድረ ገፅ ቅንብሮች"</string>
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"ለነጠላ ድረ ገጾች የላቁ ቅንብሮች"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"ነባሪዎችን ዳግም አስጀምር"</string>
+    <!-- no translation found for pref_extras_reset_default (8904000515846202110) -->
+    <skip />
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"ነባሪ ቅንብሮችን እነበረበት መልስ"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="6640261575874704022">"ቅንብሮች ወደ ነባሪ ዋጋቸው ያድህራሉ።"</string>
+    <!-- no translation found for pref_extras_reset_default_dlg_title (2250334970728938936) -->
+    <skip />
+    <!-- no translation found for pref_development_title (3263854204533056480) -->
+    <skip />
+    <string name="pref_default_text_encoding" msgid="5742965543955558478">"ፅሁፍ በኮድ መክተት"</string>
+  <string-array name="pref_default_text_encoding_choices">
+    <item msgid="7275223955790513818">"-1 (-1"</item>
+    <item msgid="2456597866837587140">"ዩኒኮድ(UTF-8)"</item>
+    <item msgid="6122474363777211732">"ቻይንኛ (GBK)"</item>
+    <item msgid="373372275931607040">"ቻይንኛ (Big5)"</item>
+    <item msgid="891615911084608570">"ጃፓንኛ (ISO-2022-JP)"</item>
+    <item msgid="5589150448475151241">"ጃፓንኛ  (SHIFT_JIS)"</item>
+    <item msgid="7356792686950371843">"ጃፓንኛ (EUC-JP)"</item>
+    <item msgid="2193955365569270096">"ኮሪያኛ (EUC-KR)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"ፅሁፍ በኮድ መክተት"</string>
+    <!-- no translation found for pref_accessibility_title (5127836981587423215) -->
+    <skip />
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
+    <string name="pref_lab_title" msgid="5571091610359629423">"ቤተ ሙከራዎች"</string>
+    <!-- outdated translation 2105979166017257647 -->     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"ፈጣን መቆጣጠሪያ"</string>
+    <!-- outdated translation 8025196176636589803 -->     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"ፈጣን መቆጣጠሪያዎችን ለመድረስ አውራ ጣትወደ ግራ  ወይም ወደ ቀኝአንሸራት"</string>
+    <!-- outdated translation 547134501893835512 -->     <string name="pref_lab_most_visited_homepage" msgid="7597766876952506909">"ብዙ ጊዜ የተጎበኘ መነሻ ገፅ"</string>
+    <!-- outdated translation 6857702350834122532 -->     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"ብዙ የተጎበኘ ገፆችን ለማሳየት መነሻ ገፅዎን ያዘጋጃል።"</string>
+    <!-- no translation found for pref_use_instant_search (1119176077760723740) -->
+    <skip />
+    <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
+    <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
+    <skip />
+    <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
+    <skip />
+    <!-- no translation found for browserFrameFormResubmitLabel (2685923472682180360) -->
+    <skip />
+    <string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"ለማየት እየሞከሩ ያሉት ገፅ (\"POSTDATA\") ተብሎ የተረከበ ውሂብ ይዝዋል። ውሂቡን ድጋሚ ከላኩት፣ ማንኛውም በገፁ ቅፅላይ ያለ ርምጃ ይከናወናል(ለምሳሌ ፍለጋ ወይም የመስመር ላይ ግዢ) ይደገማል።"</string>
+    <!-- no translation found for loadSuspendedTitle (675991625288706944) -->
+    <skip />
+    <string name="loadSuspended" msgid="3133656588880851273">"አሳሽ ይህን ገፅ ማስገባት አልቻለም ምክያቱም የበይነመረብ ተያያዥነት የለም።"</string>
+    <!-- no translation found for clear_history (5998307092715979619) -->
+    <skip />
+    <string name="browser_history" msgid="1038987118290272525">"በቅርብ ጊዜ የተጎበኙ ገፆች"</string>
+    <!-- no translation found for empty_history (8738772352308207274) -->
+    <skip />
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
+    <string name="add_new_bookmark" msgid="8086367791400349049">"እልባት አክል..."</string>
+    <string name="add_bookmark_short" msgid="3783984330998103735">"አክል"</string>
+    <string name="search_hint" msgid="4647356319916631820">"ፈልግ ወይም URL ፃፍ"</string>
+    <!-- no translation found for search_button_text (5235226933877634410) -->
+    <skip />
+    <string name="search_settings_description" msgid="1422401062529014107">"የዕልባቶች እና ድረ ታሪክ"</string>
+    <!-- no translation found for attention (3473639060042811244) -->
+    <skip />
+    <string name="popup_window_attempt" msgid="2673111696288657989">"ይህ ድረ ገፅ ብቅባይ መስኮት ለመክፈት እየሞከረ ነው።"</string>
+    <!-- no translation found for allow (1157313689171991335) -->
+    <skip />
+    <!-- no translation found for block (9172175889884707800) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_title (5175503564948906442) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_message (1398571800233959583) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_title (3805453941587725944) -->
+    <skip />
+    <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"አዲስ ብቅባይ መስኮት መክፈት አልተቻለም ምክንያቱም በአንድ ጊዜ አንድ ብቻ ይከፈታል።"</string>
+    <!-- no translation found for download_title (2122874021047565594) -->
+    <skip />
+    <!-- no translation found for download_unknown_filename (4013465542563652175) -->
+    <skip />
+    <!-- no translation found for download_menu_open (4888327480367757513) -->
+    <skip />
+    <!-- no translation found for download_menu_clear (6264454531553418124) -->
+    <skip />
+    <string name="download_menu_delete" msgid="8815502136393894148">"ሰርዝ"</string>
+    <!-- no translation found for download_menu_cancel (2545333007601851574) -->
+    <skip />
+    <!-- no translation found for download_menu_cancel_all (2136550823151999166) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_title (8909108500262799748) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_msg (6285389170052357797) -->
+    <skip />
+    <string name="download_delete_file" msgid="5330036497843073249">"ፋይሉ ይሰረዛል"</string>
+    <!-- no translation found for download_file_error_dlg_title (2693630283595384874) -->
+    <skip />
+    <string name="download_file_error_dlg_msg" msgid="5156405410324072471">"<xliff:g id="FILENAME">%s</xliff:g> ማውረድ አልተቻለም።"\n" ስልክዎ ላይ ትንሽ ቦታ ያስለቅቁ እና እንደገና ይሞክሩ።"</string>
+    <!-- no translation found for download_failed_generic_dlg_title (6106781095337833391) -->
+    <skip />
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"የUSB ማከማቻ የለም"</string>
+    <!-- outdated translation 56777245081568508 -->     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"የUSB ማከማቻ የለም"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"የUSB ማከማቻ <xliff:g id="FILENAME">%s</xliff:g> ለማውረድ ይጠየቃል።"</string>
+    <!-- no translation found for download_no_sdcard_dlg_msg (2616399456116301518) -->
+    <skip />
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"የUSB ማከማቻ የለም"</string>
+    <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"SD ካር ድ የለም"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"የ USB ማከማቻው ስራ ላይነው። ማውረድ ለመፍቀድ፣ በማሳወቂያ ውስጥ \"የUSB ማከማቻ አጥፋ\" ንምረጥ።"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"የ SD ካርዱ ስራ ላይነው። ማውረድ ለመፍቀድ፣ በማሳወቂያ ውስጥ \"የUSB ማከማቻ አጥፋ\" ንምረጥ።"</string>
+    <!-- no translation found for cannot_download (8150552478556798780) -->
+    <skip />
+    <string name="download_no_application_title" msgid="1286056729168874295">"ፋይል መክፈት አልተቻለም"</string>
+    <!-- no translation found for retry (1835923075542266721) -->
+    <skip />
+    <!-- no translation found for no_downloads (3947445710685021498) -->
+    <skip />
+    <!-- no translation found for download_error (413496839831257187) -->
+    <skip />
+    <!-- no translation found for download_success (2279041638155595203) -->
+    <skip />
+    <!-- no translation found for download_running (2622942231322015059) -->
+    <skip />
+    <!-- no translation found for download_pending (2599683668575349559) -->
+    <skip />
+    <!-- no translation found for download_pending_network (6548714525679461053) -->
+    <skip />
+    <!-- no translation found for download_running_paused (6418029352085656495) -->
+    <skip />
+    <!-- no translation found for download_canceled (6057083743144492515) -->
+    <skip />
+    <string name="download_not_acceptable" msgid="313769696131563652">"ማውረድ አልተቻለም።ይዘቱ በዚህ ስልክ ላይ አይታገዝም።"</string>
+    <!-- no translation found for download_file_error (1206648050615176113) -->
+    <skip />
+    <!-- no translation found for download_length_required (9038605488460437406) -->
+    <skip />
+    <!-- no translation found for download_precondition_failed (8327584102874295580) -->
+    <skip />
+    <string name="search_the_web" msgid="6046130189241962337">"ድሩን ፈልግ"</string>
+    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"የአሳሽ ማከማቻ ሙሉ ነው"</string>
+    <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"ቦታ ነፃ ለማድረግ ጠቅ አድርግ።"</string>
+    <string name="webstorage_clear_data_title" msgid="689484577124333977">"የተከማቸ ውሂብ አጥራ"</string>
+    <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"የተከማቸ ውሂብ አጥራ"</string>
+    <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"በዚህ ድረ ገፅ የተከማቹ  ውሂቦች ሁሉ ይሰረዛሉ"</string>
+    <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"ሁሉንም አፅዳ"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"ይቅር"</string>
+    <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"ስልክዎ ላይ MB ተከማችቷል"</string>
+    <string name="loading_video" msgid="4887871585216091096">"ቪዲዮ በማስገባት ላይ"</string>
+    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> ያሉበትን ሥፍራ ለማወቅ ይፈልጋሉ"</string>
+    <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"ሥፍራ አጋራ"</string>
+    <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"አለመቀበል"</string>
+    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"ምርጫ አስታውስ"</string>
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"ይህ ስፍራዎን መድረስ ይችላል። ቅንብሮች ውስጥ ይህን ለውጥ-&gt; ድረ ገፅ ቅንብሮች"</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"ይህ ስፍራዎን መድረስ አይችልም። ቅንብሮች ውስጥ ይህን ለውጥ-&gt; ድረ ገፅ ቅንብሮች"</string>
+    <string name="geolocation_settings_page_title" msgid="1745477985097536528">"የስፍራ መድረሻ አፅዳ"</string>
+    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"ይህ ድረ ገፅ በአሁኑ ጊዜ የእርስዎን ስፍራ መድረስ ይችላል"</string>
+    <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"ይህ ድረ ገፅ በአሁኑ ጊዜ የእርስዎን ስፍራ መድረስ ይችላል"</string>
+    <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"የስፍራ መድረሻ አፅዳ"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"ለዚህ ድረ ገፅ የሥፍራ ድረስ ይጠራል"</string>
+    <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"መዳረሻውን አጥራ"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"ይቅር"</string>
+    <string name="website_settings_clear_all" msgid="8739804325997655980">"ሁሉንም አፅዳ"</string>
+    <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"የድረ ገፅ ቅንብሮችን ሁሉ ይጥሩ?"</string>
+    <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"ሁሉም የድረ ገፅ ውሂብ እና የሥፍራ ፍቃዶች ይሰረዛሉ።"</string>
+    <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"ሁሉንም ውሂብ ሰርዝ"</string>
+    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"ይቅር"</string>
+    <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"ልጥፍ በማቀናበር ላይ...."</string>
+    <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"እልባቶች"</string>
+    <string name="empty_bookmarks_folder" msgid="7843361614634930942">"ምንም እልባቶች የሉም"</string>
+    <string name="rlz_access_point" msgid="7165847807377650632">"y1"</string>
+    <!-- no translation found for account_chooser_dialog_title (3314204833188808194) -->
+    <!-- no translation found for account_chooser_dialog_title (4833571985009544332) -->
+    <skip />
+    <string name="import_bookmarks_dialog_title" msgid="3325557652271172128">"ከGoogle መለያ ጋር አሳምር"</string>
+    <!-- outdated translation 2187665745413495303 -->     <string name="import_bookmarks_dialog_description" msgid="1942452375564381488">"የAndroid እልባቶችዎ ከGoogle መለያ ጋር አልተጎዳኘም"</string>
+    <!-- no translation found for import_bookmarks_dialog_select_add_account (3102882579089291099) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_delete_select_account (5192284761080626386) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_delete (8854001080444749211) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_add (5433677293195372675) -->
+    <skip />
+    <!-- outdated translation 8105572409059113340 -->     <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"የAndroid እልባቶችዎን ያስወግዱ"</string>
+    <!-- no translation found for import_bookmarks_wizard_next (7578143961884352676) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_previous (8551440353688257031) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_cancel (4936061122806506634) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_done (1446247092194489191) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_add (7552306756868669353) -->
+    <skip />
+    <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Android እልባቶችዎን ለ<xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g> እልባቶች አክል"</string>
+    <string name="menu_share_url" msgid="5851814357333739700">"አጋራ"</string>
+    <string name="max_tabs_warning" msgid="4122034303809457570">"ምንም ተጨማሪ ትሮች የሉም"</string>
+    <!-- no translation found for instant_search_label (8769284297650716935) -->
+    <skip />
+    <!-- no translation found for recover_title (8095611702406163360) -->
+    <skip />
+    <!-- no translation found for recover_prompt (6541354420842425606) -->
+    <skip />
+    <!-- no translation found for recover_yes (4540538008955917099) -->
+    <skip />
+    <!-- no translation found for recover_no (3121030267940592611) -->
+    <skip />
+    <!-- no translation found for preview (6450823514561689038) -->
+    <skip />
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
+</resources>
diff --git a/res/values-ar-sw600dp/strings.xml b/res/values-ar-sw600dp/strings.xml
index 8d2178f..4b05275 100644
--- a/res/values-ar-sw600dp/strings.xml
+++ b/res/values-ar-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"فتح في علامة تبويب جديدة في الخلفية"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"فتح الكل في علامات تبويب جديدة"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"فتح علامات تبويب جديدة وراء علامة التبويب الحالية"</string>
+    <string name="recover_title" msgid="1558775426269800998">"هل تريد استعادة علامات التبويب؟"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"يبدو أن المتصفح قد تعطل. هل تريد استعادة علامات التبويب من المرة السابقة؟"</string>
 </resources>
diff --git a/res/values-ar-xlarge/strings.xml b/res/values-ar-xlarge/strings.xml
index db12504..e9c0109 100644
--- a/res/values-ar-xlarge/strings.xml
+++ b/res/values-ar-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"فتح في علامة تبويب جديدة في الخلفية"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"فتح الكل في علامات تبويب جديدة"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"فتح علامات تبويب جديدة وراء علامة التبويب الحالية"</string>
+    <string name="recover_title" msgid="7754049918641251703">"استعادة علامات التبويب؟"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"يبدو أن المتصفح قد تعطل. هل تريد استعادة علامات التبويب من المرة السابقة؟"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 98d59bd..ca16ccd 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"موافق"</string>
     <string name="do_not_save" msgid="6777633870113477714">"إلغاء"</string>
     <string name="location" msgid="3411848697912600125">"العنوان"</string>
+    <string name="account" msgid="5179824606448077042">"الحساب"</string>
     <string name="containing_folder" msgid="6771180232953030479">"إضافة إلى"</string>
     <string name="new_folder" msgid="7743540149088867917">"مجلد جديد"</string>
     <string name="edit_folder" msgid="621817453133656156">"تعديل مجلد"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"التنزيلات"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"نسخ عنوان URL للصفحة"</string>
     <string name="share_page" msgid="593756995297268343">"مشاركة الصفحة"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"تجميد علامة التبويب"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"حفظ الصفحة"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"تم حفظ الصفحة."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"أخفق حفظ الصفحة."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"إدخال وحفظ البيانات لملء حقول نموذج الويب تلقائيًا"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"تسجيل الدخول تلقائيًا إلى Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"تسجيل الدخول إلى مواقع Google باستخدام <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"تسجل الدخول التلقائي متاح."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"تسجيل الدخول كـ"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"تسجيل الدخول"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"إخفاء"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"أخفق تسجيل الدخول."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"أدخل البيانات المراد ملؤها تلقائيًا في حقول الويب عندما تلمسها."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"الاسم بالكامل:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"عرض تحذير إذا كانت هناك مشكلة في أمان الموقع"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"قبول ملفات تعريف الارتباط"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"السماح للمواقع بحفظ بيانات \"ملف تعريف الارتباط\" وقراءتها"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"حجم النص"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"صغير"</item>
     <item msgid="1950030433642671460">"صغير"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"كبير"</item>
     <item msgid="7201512237890458902">"ضخم"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"حجم النص"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"الحد الأدنى لحجم الخط"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"فرض تمكين التكبير/التصغير"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"تجاوز طلب موقع الويب للتحكم في سلوك التكبير/التصغير"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"التكبير/التصغير الافتراضي"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"بعيد"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"الكورية (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"تشفير النص"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"إمكانية الدخول"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"الميزات الاختبارية"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"عناصر التحكم السريعة"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"مرر الإبهام من الحافة اليسرى أو اليمنى للدخول إلى عناصر التحكم السريعة وإخفاء أشرطة عناوين URL والتطبيق"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"تعرض صفحتك الرئيسية مواقع الويب الأكثر زيارة."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"بحث Google الفوري"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"استخدم بحث Google الفوري عندما تستخدم بحث Google, لإظهار النتائج أثناء الكتابة (يمكن أن يزيد ذلك من استخدام البيانات)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"ملء الشاشة"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"استخدم وضع ملء الشاشة لإخفاء شريط الحالة."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"مشكلة في اتصال البيانات"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"مشكلة في الملف"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"تأكيد"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"محو السجل"</string>
     <string name="browser_history" msgid="1038987118290272525">"الصفحات التي تمت زيارتها حديثًا"</string>
     <string name="empty_history" msgid="8738772352308207274">"سجل المتصفح فارغ."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"إضافة إشارة..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"إضافة"</string>
     <string name="search_hint" msgid="4647356319916631820">"البحث عن أو كتابة عنوان URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"مشاركة"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"لا يتوفر المزيد من علامات التبويب"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google مع البحث الفوري (ميزات اختبارية)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"استعادة النوافذ؟"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"يبدو أن المتصفح قد تعطل. هل تريد استعادة النوافذ من المرة السابقة؟"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"نعم"</string>
+    <string name="recover_no" msgid="3121030267940592611">"لا"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"المعاينة:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"محلية"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"الجوال"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"سطح المكتب"</string>
 </resources>
diff --git a/res/values-bg-sw600dp/strings.xml b/res/values-bg-sw600dp/strings.xml
index 360437b..dade64a 100644
--- a/res/values-bg-sw600dp/strings.xml
+++ b/res/values-bg-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Отваряне в нов раздел на заден план"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Отваряне на всички в нови раздели"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Отваряне на нови раздели зад текущия"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Да се възстановят ли разделите?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Изглежда се получи срив в браузъра. Искате ли да възстановите разделите си от последния път?"</string>
 </resources>
diff --git a/res/values-bg-xlarge/strings.xml b/res/values-bg-xlarge/strings.xml
index 91bd88b..ea2a21c 100644
--- a/res/values-bg-xlarge/strings.xml
+++ b/res/values-bg-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Отваряне в нов раздел на заден план"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Отваряне на всички в нови раздели"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Отваряне на нови раздели зад текущия"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Да се възстановят ли разделите?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Изглежда се получи срив в браузъра. Искате ли да възстановите разделите си от последния път?"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d4f727b..1b66113 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Отказ"</string>
     <string name="location" msgid="3411848697912600125">"Адрес"</string>
+    <string name="account" msgid="5179824606448077042">"Профил"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Добавяне към"</string>
     <string name="new_folder" msgid="7743540149088867917">"Нова папка"</string>
     <string name="edit_folder" msgid="621817453133656156">"Редактиране на папката"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Изтеглени"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Копиране на URL адреса на страницата"</string>
     <string name="share_page" msgid="593756995297268343">"Споделяне на страницата"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Фиксиране на раздел"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Запазване на страницата"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Страницата е запазена."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Запазването на страницата не бе успешно."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Въведете и запазете данни за автоматично попълване на полетата в уеб формуляри"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Автоматичен вход в Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Влизате в сайтове на Google посредством <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Автоматичният вход е налице."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Влезте като"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Вход"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Скриване"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Влизането не бе успешно."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Въведете данните, които при докосване искате да се попълнят автоматично в уеб полетата."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Пълно име:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Показване на предупреждение при проблем със сигурността на сайт"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Приемане на „бисквитки“"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Разрешаване на сайтове да запазват и четат данни за „бисквитки“"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Размер на текста"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Миниатюрен"</item>
     <item msgid="1950030433642671460">"Малък"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Голям"</item>
     <item msgid="7201512237890458902">"Огромен"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Размер на текста"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Минимален размер на шрифта"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Принудит. активиране на мащаба"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Дали заявката на сайт за контрол на мащаба да се отхвърли, или не"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Стандартна промяна на мащаба"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Далече"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Корейски (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Текстово кодиране"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Достъпност"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Лаборатория"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Бързи контроли"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Прокарайте палец от левия/десния край за достъп до бързите контроли и скр. на лентите за прил. и URL адр."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Началната ви страница показва най-посещаваните от вас уеб страници."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Динамично търсене"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Използвайте Google Динамично търсене, за да се показват резултати, докато пишете (може да увеличи употребата на данни)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Цял екран"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Използване на режима на цял екран за скриване на лентата на състоянието."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблем с обмен на данни"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблем с файла"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Потвърждаване"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Изчистване на историята"</string>
     <string name="browser_history" msgid="1038987118290272525">"Наскоро посетени страници"</string>
     <string name="empty_history" msgid="8738772352308207274">"Историята на сърфиране е празна."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Отметката се добавя..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Добавяне"</string>
     <string name="search_hint" msgid="4647356319916631820">"Търсете или въведете URL адрес"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Споделяне"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Не се предлагат повече раздели"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google с Динамично търсене (Лаборатория)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Да се възстановят ли прозорците?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Изглежда се получи срив в браузъра. Искате ли да възстановите прозорците си от последния път?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Да"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Не"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Визуализация:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Локални"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобилна"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Настолна"</string>
 </resources>
diff --git a/res/values-ca-sw600dp/strings.xml b/res/values-ca-sw600dp/strings.xml
index 2ae7b26..27ed753 100644
--- a/res/values-ca-sw600dp/strings.xml
+++ b/res/values-ca-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Obre en una pestanya de fons nova"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Obre-ho tot en pestanyes noves"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Obre les pestanyes noves darrere l\'actual"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vols restaurar les pestanyes?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Sembla que s\'ha bloquejat el navegador. Vols restaurar les pestanyes des de la darrera vegada?"</string>
 </resources>
diff --git a/res/values-ca-xlarge/strings.xml b/res/values-ca-xlarge/strings.xml
index 783e2f4..6d41d51 100644
--- a/res/values-ca-xlarge/strings.xml
+++ b/res/values-ca-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Obre en una pestanya de fons nova"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Obre-ho tot en pestanyes noves"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Obre les pestanyes noves darrere l\'actual"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vols restaurar les pestanyes?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Sembla que s\'ha bloquejat el navegador. Vols restaurar les pestanyes que tenies obertes la darrera vegada?"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4071fed..6e3f83b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"D\'acord"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancel·la"</string>
     <string name="location" msgid="3411848697912600125">"Adreça"</string>
+    <string name="account" msgid="5179824606448077042">"Compte"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Afegeix a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nova carpeta"</string>
     <string name="edit_folder" msgid="621817453133656156">"Edita la carpeta"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Baixades"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copia l\'URL de la pàgina"</string>
     <string name="share_page" msgid="593756995297268343">"Comparteix la pàgina"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Congela la pestanya"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Desa la pàgina"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"S\'ha desat la pàgina."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"No s\'ha pogut desar la pàgina."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Introdueix i desa les dades per emplenar automàticament els camps del formulari web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Inici sessió automàtic a Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Inici de la sessió a Llocs web de Google amb <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Inici de sessió automàtic disponible."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Inicia la sessió com a"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Inici sessió"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Amaga"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Error en iniciar sessió."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Introdueix les dades que vulguis que s\'emplenin automàticament als camps web quan els toquis."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nom complet:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostra un advertiment si hi ha un problema amb la seguretat d\'un lloc"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accepta les galetes"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permet als llocs desar i llegir dades de les \"galetes\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Mida del text"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Molt petita"</item>
     <item msgid="1950030433642671460">"Petita"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Gran"</item>
     <item msgid="7201512237890458902">"Enorme"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Mida del text"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Cos de lletra mínim"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Força l\'activació del zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Decideix si vols substituir o no la sol·licitud d\'un lloc web per controlar el comportament del zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predeterminat"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lluny"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreà (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificació del text"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilitat"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controls ràpids"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Fes lliscar el polze des de la vora esquerra o dreta per accedir als controls ràpids i ocultar les barres d\'aplicació i URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"La teva pàgina d\'inici mostra les pàgines web que més visites."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilitza Google Instant quan utilitzis la Cerca de Google per mostrar resultats mentre escrius (augmenta l\'ús de dades)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Utilitza el mode de pantalla completa per amagar la barra d\'estat."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de connectivitat de dades"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema amb el fitxer"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirma"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Esborra l\'historial"</string>
     <string name="browser_history" msgid="1038987118290272525">"Pàgines visitades recentment"</string>
     <string name="empty_history" msgid="8738772352308207274">"L\'historial del navegador és buit."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Afegeix una adreça d\'interès..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Afegeix"</string>
     <string name="search_hint" msgid="4647356319916631820">"Cerqueu o escriviu l\'URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Comparteix"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"No hi ha cap més pestanya disponible"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google amb Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vols restaurar les finestres?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Sembla que s\'ha bloquejat el navegador. Vols restaurar les finestres que tenies obertes la darrera vegada?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sí"</string>
+    <string name="recover_no" msgid="3121030267940592611">"No"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Visualització prèvia:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Local"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mòbil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Escriptori"</string>
 </resources>
diff --git a/res/values-cs-sw600dp/strings.xml b/res/values-cs-sw600dp/strings.xml
index abca150..c7a62a8 100644
--- a/res/values-cs-sw600dp/strings.xml
+++ b/res/values-cs-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Otevřít na nové kartě na pozadí"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Otevřít vše na nových kartách"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Otevírat nové karty za aktuální kartou"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Obnovit karty?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Zřejmě došlo k selhání prohlížeče. Chcete obnovit naposledy otevřené karty?"</string>
 </resources>
diff --git a/res/values-cs-xlarge/strings.xml b/res/values-cs-xlarge/strings.xml
index 9f47093..25bdce9 100644
--- a/res/values-cs-xlarge/strings.xml
+++ b/res/values-cs-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Otevřít na nové kartě na pozadí"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Otevřít vše na nových kartách"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Otevírat nové karty za aktuální kartou"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Obnovit karty?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Zřejmě došlo k selhání prohlížeče. Chcete obnovit naposledy otevřené karty?"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 34def37..eed6828 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Zrušit"</string>
     <string name="location" msgid="3411848697912600125">"Adresa"</string>
+    <string name="account" msgid="5179824606448077042">"Účet"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Přidat do složky"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nová složka"</string>
     <string name="edit_folder" msgid="621817453133656156">"Upravit složku"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Stažené"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopírovat adresu URL stránky"</string>
     <string name="share_page" msgid="593756995297268343">"Sdílet stránku"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Zmrazit kartu"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Uložit stránku"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Stránka byla uložena."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Uložení stránky se nezdařilo."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Zadat a uložit údaje pro automatické vyplnění polí webových formulářů"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatické přihlášení do Googlu"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Přihlašování do webů Google pomocí uživatelského jména <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatické přihlašování je k dispozici."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Přihlásit se jako"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Přihlášení"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skrýt"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Přihlášení selhalo."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Zadejte data, která chcete automaticky vyplňovat do textových polí na webu, když se jich dotknete."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Jméno a příjmení:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Zobrazit upozornění, pokud dojde k problému se zabezpečením webu"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Přijímat soubory cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Povolit webům ukládat a číst soubory cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Velikost textu"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Velmi malý"</item>
     <item msgid="1950030433642671460">"Malý"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Velký"</item>
     <item msgid="7201512237890458902">"Velmi velký"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Velikost textu"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimální velikost písma"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Vynutit aktivaci přiblížení"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Zda přepsat požadavek webu na řízení funkce přiblížení, či nikoliv"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Výchozí přiblížení"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Daleko"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korejština (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kódování textu"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Usnadnění"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratoř Google"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Rychlé ovládací prvky"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Posunutím prstu od levého nebo pravého okraje zobrazíte rychlé ovládací prvky a skryjete panely aplikací a URL."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Na vaší domovské stránce se zobrazují nejnavštěvovanější webové stránky."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Dynamické vyhledávání Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Dynamické vyhledávání ve Vyhledávání Google zobrazuje výsledky již při zadávání dotazu. (Může se zvýšit množství přenesených dat.)"</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celá obrazovka"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Chcete-li skrýt stavový řádek, použijte režim zobrazení na celou obrazovku."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problémy s datovým připojením"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problém se souborem"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potvrdit"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Vymazat historii"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nedávno navštívené stránky"</string>
     <string name="empty_history" msgid="8738772352308207274">"Historie prohlížeče je prázdná."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Přidat záložku..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Přidat"</string>
     <string name="search_hint" msgid="4647356319916631820">"Zrušit přístup k poloze"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Sdílet"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Žádné další karty nejsou k dispozici"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google s dynamickým vyhledáváním (experimentální funkce)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Obnovit okna?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Zřejmě došlo k selhání prohlížeče. Chcete obnovit naposledy otevřená okna?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ano"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Ne"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Náhled:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokální"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Počítač"</string>
 </resources>
diff --git a/res/values-da-sw600dp/strings.xml b/res/values-da-sw600dp/strings.xml
index 0f5663b..85205c7 100644
--- a/res/values-da-sw600dp/strings.xml
+++ b/res/values-da-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Åbn på ny fane i baggrunden"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Åbn alle på nye faner"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Åbn nye faner bag den aktuelle"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vil du gendanne faner?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Det lader til, at browseren er gået ned. Vil du gendanne dine faner fra sidste gang?"</string>
 </resources>
diff --git a/res/values-da-xlarge/strings.xml b/res/values-da-xlarge/strings.xml
index ab581c7..43867bb 100644
--- a/res/values-da-xlarge/strings.xml
+++ b/res/values-da-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Åbn på ny fane i baggrunden"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Åbn alle i nye faner"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Åbn nye faner bag den aktive"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vil du gendanne fanerne?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Det lader til, at browseren er gået ned. Vil du gendanne dine faner fra sidste gang?"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index c0647c7..5fe93b5 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Annuller"</string>
     <string name="location" msgid="3411848697912600125">"Adresse"</string>
+    <string name="account" msgid="5179824606448077042">"Konto"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Føj til"</string>
     <string name="new_folder" msgid="7743540149088867917">"Ny mappe"</string>
     <string name="edit_folder" msgid="621817453133656156">"Rediger mappen"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopier sidens webadresse"</string>
     <string name="share_page" msgid="593756995297268343">"Del side"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Fanen Frys"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Gem side."</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Siden er gemt."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Siden kunne ikke gemmes."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Indtast og gem data til autoudfyldning af felter i webformularer"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatisk Google-login"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Logger ind på Google-websteder med <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatisk login er tilgængelig."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Log ind som"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Log ind"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skjul"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Login mislykkedes."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Angiv de data, der skal udfyldes automatisk i webfelter, når du trykker på dem."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Fulde navn:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Vis en advarsel, hvis der er problemer med sikkerheden på et websted"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accepter cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillad, at websteder gemmer og læser \"cookie\"-data"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tekststørrelse"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Lillebitte"</item>
     <item msgid="1950030433642671460">"Lille"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Stor"</item>
     <item msgid="7201512237890458902">"Kæmpestor"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tekststørrelse"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Mindste skriftstørrelse"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Tving aktivering af zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Tilsidesættelse af et websteds anmodning om kontrol af zoomadfærd"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standardzoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Langt væk"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Koreansk (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstkodning"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Tilgængelighed"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hurtig betjening"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Glid fra venstre til højre for hurtig betjening og for at skjule applikation og adresselinje"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Din startside viser dine mest besøgte websider."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Direkte"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Brug Google Direkte, når du søger på Google for at få vist resultater ved indtastning (kan forøge dataforbruget)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fuld skærm"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Brug fuldskærmstilstand til at skjule statuslinjen."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Dataforbindelsesproblem"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Der er et problem med filen"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekræft"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Ryd oversigt"</string>
     <string name="browser_history" msgid="1038987118290272525">"Seneste besøgte sider"</string>
     <string name="empty_history" msgid="8738772352308207274">"Browseroversigten er tom."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Opret bogmærke ..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Tilføj"</string>
     <string name="search_hint" msgid="4647356319916631820">"Søg efter eller indtast en webadresse"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Del"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Der er ikke flere tilgængelige faner"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google med Direkte (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vil du gendanne vinduer?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Det lader til, at browseren er gået ned. Vil du gendanne dine vinduer fra sidste gang?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ja"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nej"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Vis eksempel:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Computerversion"</string>
 </resources>
diff --git a/res/values-de-sw600dp/strings.xml b/res/values-de-sw600dp/strings.xml
index 10c7f40..290d331 100644
--- a/res/values-de-sw600dp/strings.xml
+++ b/res/values-de-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"In neuem Hintergrundtab öffnen"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Alle in jeweils neuem Tab öffnen"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Neue Tabs hinter aktuellem Tab öffnen"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Tabs wiederherstellen?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Offenbar ist der Browser abgestürzt. Sollen Ihre zuletzt geöffneten Tabs wiederhergestellt werden?"</string>
 </resources>
diff --git a/res/values-de-xlarge/strings.xml b/res/values-de-xlarge/strings.xml
index 71c5fa3..9135940 100644
--- a/res/values-de-xlarge/strings.xml
+++ b/res/values-de-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"In neuem Hintergrundtab öffnen"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Alle in jeweils neuem Tab öffnen"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Neue Tabs hinter dem aktuellen Tab öffnen"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Tabs wiederherstellen?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Offenbar ist der Browser abgestürzt. Sollen Ihre Tabs wiederhergestellt werden?"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1aacbf0..3797a50 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Abbrechen"</string>
     <string name="location" msgid="3411848697912600125">"Adresse"</string>
+    <string name="account" msgid="5179824606448077042">"Konto"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Hinzufügen zu"</string>
     <string name="new_folder" msgid="7743540149088867917">"Neuer Ordner"</string>
     <string name="edit_folder" msgid="621817453133656156">"Ordner bearbeiten"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Seiten-URL kopieren"</string>
     <string name="share_page" msgid="593756995297268343">"Seitenlink weitergeben"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Tab fixieren"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Seite speichern"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Seite wurde gespeichert."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Seite konnte nicht gespeichert werden."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Eingabe und Speichern von Daten für automatisch auszufüllende Webformularfelder"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatische Google-Anmeldung"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Anmeldung in Google Sites mit <xliff:g id="ID_1">%s</xliff:g>..."</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatische Anmeldung ist verfügbar."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Anmelden als"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Anmelden"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ausblenden"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Anmeldung fehlgeschlagen"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Geben Sie die Daten ein, die automatisch in Web-Felder eingetragen werden sollen, wenn Sie sie berühren."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Vollständiger Name:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Warnung anzeigen, wenn bei einer Website Sicherheitsprobleme auftreten"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Cookies akzeptieren"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Speichern und Lesen von Cookie-Daten zulassen"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Textgröße"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Sehr klein"</item>
     <item msgid="1950030433642671460">"Klein"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Groß"</item>
     <item msgid="7201512237890458902">"Sehr groß"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Textgröße"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Mindestschriftgröße"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Zoom zwingend aktivieren"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Anfrage einer Website zur Steuerung des Zoomverhaltens überschreiben?"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standard-Zoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Entfernt"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Koreanisch (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Textcodierung"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Eingabehilfen"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Schnellsteuerung"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Für Schnellsteuerung/Ausblenden der App- und URL-Leisten Daumen von links nach rechts ziehen"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Auf Ihrer Startseite werden Ihre am häufigsten besuchten Webseiten angezeigt."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Nutzen Sie Google Instant bei der Google-Suche. Ergebnisse werden bei Eingabe angezeigt - ggf. mehr Speicher erforderlich."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Vollbild"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Vollbildmodus zum Ausblenden der Statusleiste verwenden"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datenverbindungsproblem"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem mit Datei"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bestätigen"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Verlauf löschen"</string>
     <string name="browser_history" msgid="1038987118290272525">"Kürzlich besuchte Seiten"</string>
     <string name="empty_history" msgid="8738772352308207274">"Browserverlauf ist leer."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Lesezeichen hinzufügen..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Hinzufügen"</string>
     <string name="search_hint" msgid="4647356319916631820">"Suchen oder URL eingeben"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Weitergeben"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Es sind keine weiteren Tabs verfügbar."</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google mit dynamischer Suche (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Fenster wiederherstellen?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Offenbar ist der Browser abgestürzt. Sollen Ihre Fenster wiederhergestellt werden?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ja"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nein"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Vorschau:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-el-sw600dp/strings.xml b/res/values-el-sw600dp/strings.xml
index 053daf3..06a7c9a 100644
--- a/res/values-el-sw600dp/strings.xml
+++ b/res/values-el-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Άνοιγμα σε νέα καρτέλα στο παρασκήνιο"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Άνοιγμα όλων σε νέες καρτέλες"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Άνοιγμα νέων καρτελών πίσω από την τρέχουσα"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Επαναφορά καρτελών;"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Παρουσιάστηκε σφάλμα στη λειτουργία του προγράμματος περιήγησης. Θα θέλατε να επαναφέρετε τις καρτέλες από την προηγούμενη συνεδρία σας;"</string>
 </resources>
diff --git a/res/values-el-xlarge/strings.xml b/res/values-el-xlarge/strings.xml
index 17411be..de581b8 100644
--- a/res/values-el-xlarge/strings.xml
+++ b/res/values-el-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Άνοιγμα σε νέα καρτέλα στο παρασκήνιο"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Άνοιγμα όλων σε νέες καρτέλες"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Άνοιγμα νέων καρτελών πίσω από την τρέχουσα"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Επαναφορά καρτελών;"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Η λειτουργία του προγράμματος περιήγησης διακόπηκε ξαφνικά. Θα θέλατε να κάνετε ανάκτηση των καρτελών από την τελευταία συνεδρία σας;"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 297eb46..9e687cc 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Ακύρωση"</string>
     <string name="location" msgid="3411848697912600125">"Διεύθυνση"</string>
+    <string name="account" msgid="5179824606448077042">"Λογαριασμός"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Προσθήκη σε"</string>
     <string name="new_folder" msgid="7743540149088867917">"Νέος φάκελος"</string>
     <string name="edit_folder" msgid="621817453133656156">"Επεξεργασία φακέλου"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Λήψεις"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Αντιγραφή διεύθυνσης url της σελίδας"</string>
     <string name="share_page" msgid="593756995297268343">"Κοινή χρήση σελίδας"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Πάγωμα καρτέλας"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Αποθήκευση σελίδας"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Η σελίδα αποθηκεύτηκε."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Απέτυχε η αποθήκευση της σελίδας."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Καταχώριση και αποθήκευση δεδομένων για πεδία φόρμας ιστού αυτόματης συμπλήρωσης"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Αυτόματη σύνδεση στο Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Συνδεθείτε σε Ιστότοπους Google χρησιμοποιώντας το <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Διαθέσιμη αυτόματη σύνδεση."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Σύνδεση ως"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Σύνδεση"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Απόκρυψη"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Η σύνδεση απέτυχε."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Καταχωρίστε τα δεδομένα που θέλετε για να κάνετε αυτόματη συμπλήρωση των πεδίων ιστού όταν τα αγγίζετε,"</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Πλήρες όνομα:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Να εμφαν.προειδοπ.εάν υπάρχ.πρόβλ.με την ασφάλ.ιστότ."</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Αποδοχή cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Να επιτρ.η αποθ.και ανάγν.δεδ.\"cookie\" από ιστότ."</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Μέγεθος κειμένου"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Πολύ μικρό"</item>
     <item msgid="1950030433642671460">"Μικρό"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Μεγάλο"</item>
     <item msgid="7201512237890458902">"Πολύ μεγάλο"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Μέγεθος κειμένου"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Ελάχιστο μέγ. γραμματοσειράς"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Αναγκ. ενεργοπ. εστίασης"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Να αντικατ. ή όχι το αίτημα ιστότ. για έλεγχο συμπερ. εστίασης"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Προεπιλεγμένο ζουμ"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Μακριά"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Κορεατικά (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Κωδικοποίηση κειμένου"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Προσβασιμότητα"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Εργαστήρια"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Στοιχεία γρήγορου ελέγχου"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Σύρετε τον αντίχειρα από αρ. ή δεξ. για τα στοιχ. γρήγ. ελέγχου και κρύψτε τις γραμμές Εφαρμογές και URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Η αρχική σελίδα εμφανίζει τις ιστοσελίδες με τις περισσότερες επισκέψεις σας."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Χρησιμοποιήστε το Instant μαζί με την Αναζήτηση για να εμφανίζονται αποτελ. καθώς πληκτρολ. (πιθανή αύξηση δεδομένων)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Πλήρης οθόνη"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Χρησιμοποιήστε τη λειτουργία πλήρους οθόνης για την απόκρυψη της γραμμής κατάστασης."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Πρόβλημα σύνδεσης δεδομένων"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Υπάρχει πρόβλημα με το αρχείο"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Επιβεβαίωση"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Εκκαθάριση ιστορικού"</string>
     <string name="browser_history" msgid="1038987118290272525">"Σελίδες που επισκεφθήκατε πρόσφατα"</string>
     <string name="empty_history" msgid="8738772352308207274">"Το ιστορικό του προγράμματος περιήγησης είναι κενό."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Προσθήκη σελιδοδείκτη..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Προσθήκη"</string>
     <string name="search_hint" msgid="4647356319916631820">"Αναζήτηση ή πληκτρολόγηση διεύθυνσης URL"</string>
@@ -340,7 +355,7 @@
     <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Εκκαθάριση αποθηκευμένων δεδομένων"</string>
     <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Όλα τα δεδομένα που αποθηκεύτηκαν από αυτόν τον ιστότοπο θα διαγραφούν"</string>
     <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Εκκαθάριση όλων"</string>
-    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Άκυρο"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Ακύρωση"</string>
     <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB αποθηκευμένα στο τηλέφωνό σας"</string>
     <string name="loading_video" msgid="4887871585216091096">"Φόρτωση βίντεο"</string>
     <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"Η σελίδα <xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> θέλει να μάθει την τοποθεσία σας"</string>
@@ -355,7 +370,7 @@
     <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Εκκαθάριση πρόσβασης τοποθεσίας"</string>
     <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Η πρόσβαση στην τοποθεσία για αυτόν τον ιστότοπο θα απαλειφθεί"</string>
     <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Εκκαθάριση πρόσβασης"</string>
-    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Άκυρο"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Ακύρωση"</string>
     <string name="website_settings_clear_all" msgid="8739804325997655980">"Εκκαθάριση όλων"</string>
     <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Εκκαθάριση όλων των ρυθμίσεων ιστοτόπου;"</string>
     <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Θα γίνει διαγραφή όλων των δεδομένων ιστοτόπων και αδειών τοποθεσιών."</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Κοινή χρήση"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Δεν υπάρχουν άλλες διαθέσιμες καρτέλες"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google με Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Επαναφορά παραθύρων;"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Η λειτουργία του προγράμματος περιήγησης διακόπηκε ξαφνικά. Θα θέλατε να κάνετε ανάκτηση των παραθύρων από την τελευταία συνεδρία σας;"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ναι"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Όχι"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Προεπισκόπηση:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Τοπικά"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Για κινητά"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Για υπολογιστή"</string>
 </resources>
diff --git a/res/values-en-rGB-sw600dp/strings.xml b/res/values-en-rGB-sw600dp/strings.xml
index 71f9866..8dc579e 100644
--- a/res/values-en-rGB-sw600dp/strings.xml
+++ b/res/values-en-rGB-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Open in new background tab"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Open all in new tabs"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Open new tabs behind the current one"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Restore tabs?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Browser appears to have crashed. Would you like to restore the tabs from your last session?"</string>
 </resources>
diff --git a/res/values-en-rGB-xlarge/strings.xml b/res/values-en-rGB-xlarge/strings.xml
index ee70575..1db7634 100644
--- a/res/values-en-rGB-xlarge/strings.xml
+++ b/res/values-en-rGB-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Open in new background tab"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Open all in new tabs"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Open new tabs behind the current one"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Restore tabs?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Browser appears to have crashed. Would you like to restore your tabs from last time?"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e8c0538..d402192 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancel"</string>
     <string name="location" msgid="3411848697912600125">"Address"</string>
+    <string name="account" msgid="5179824606448077042">"Account"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Add to"</string>
     <string name="new_folder" msgid="7743540149088867917">"New folder"</string>
     <string name="edit_folder" msgid="621817453133656156">"Edit folder"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copy page URL"</string>
     <string name="share_page" msgid="593756995297268343">"Share page"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Freeze tab"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Save page"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Page saved."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Failed to save page."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Enter and save data for auto-filling web form fields"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatic Google sign-in"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Signing in to Google sites using <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatic sign-in is available."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Sign in as"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Login"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Hide"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Login failed."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Enter the data that you want to auto-fill in web fields when you touch them."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Full name:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Show warning if there is a problem with a site\'s security"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accept cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Allow sites to save and read \"cookie\" data"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Text size"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Tiny"</item>
     <item msgid="1950030433642671460">"Small"</item>
@@ -237,7 +239,11 @@
     <item msgid="5043128215356351184">"Large"</item>
     <item msgid="7201512237890458902">"Huge"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Text size"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimum font size"</string>
+    <string name="pref_min_font_size_value" msgid="2924708480509060209">"<xliff:g id="FONT_SIZE">%d</xliff:g>pt"</string>
+    <string name="pref_text_zoom" msgid="8387229123479610157">"Text zoom"</string>
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Force enable zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Whether or not to override a website\'s request to control zoom behaviour"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Default zoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Far"</item>
@@ -268,6 +274,8 @@
     <item msgid="2193955365569270096">"Korean (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Text encoding"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibility"</string>
+    <string name="pref_font_size_category" msgid="6288925476811083551">"Font size"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Quick controls"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Swipe thumb from left or right edge to access quick controls and hide Application and URL bars"</string>
@@ -275,6 +283,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Your homepage displays your most-visited web pages."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Use Google Instant when you use Google Search, to show results as you type (this can increase data use)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Full screen"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Use full-screen mode to hide the status bar."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Data connectivity problem"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem with file"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirm"</string>
@@ -284,6 +294,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Clear history"</string>
     <string name="browser_history" msgid="1038987118290272525">"Recently visited pages"</string>
     <string name="empty_history" msgid="8738772352308207274">"Browser history is empty."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Add bookmark…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Add"</string>
     <string name="search_hint" msgid="4647356319916631820">"Search or type URL"</string>
@@ -382,4 +394,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Share"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"No more tabs available"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google with Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Restore windows?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Browser appears to have crashed. Would you like to restore your windows from last time?"</string>
+    <string name="recover_yes" msgid="4540538008955917099">"Restore"</string>
+    <string name="recover_no" msgid="3121030267940592611">"No"</string>
+    <string name="preview" msgid="6450823514561689038">"Preview"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Local"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobile"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-es-rUS-sw600dp/strings.xml b/res/values-es-rUS-sw600dp/strings.xml
index bf713c5..9dc3382 100644
--- a/res/values-es-rUS-sw600dp/strings.xml
+++ b/res/values-es-rUS-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Abrir vínculo en una nueva pestaña en segundo plano"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Abrir todos en nuevas pestañas"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Abrir las nuevas pestañas detrás de la pestaña actual"</string>
+    <string name="recover_title" msgid="1558775426269800998">"¿Deseas restaurar las pestañas?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Parece que el navegador se bloqueó. ¿Deseas restaurar las últimas pestañas que abriste?"</string>
 </resources>
diff --git a/res/values-es-rUS-xlarge/strings.xml b/res/values-es-rUS-xlarge/strings.xml
index 096451d..f9d14cd 100644
--- a/res/values-es-rUS-xlarge/strings.xml
+++ b/res/values-es-rUS-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Abrir en una nueva pestaña de fondo"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Abrir todos en pestañas nuevas"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Abrir nuevas pestañas detrás de la actual"</string>
+    <string name="recover_title" msgid="7754049918641251703">"¿Quieres restaurar las pestañas?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Parece que se ha producido un fallo en el navegador. ¿Quieres restaurar las pestañas de la última sesión?"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 6b5c40a..4c9cef2 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Aceptar"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancelar"</string>
     <string name="location" msgid="3411848697912600125">"Dirección"</string>
+    <string name="account" msgid="5179824606448077042">"Cuenta"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Agregar a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Carpeta nueva"</string>
     <string name="edit_folder" msgid="621817453133656156">"Editar carpeta"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Descargas"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL de la página"</string>
     <string name="share_page" msgid="593756995297268343">"Compartir página"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Bloquear pestaña"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Guardar página"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Página guardada"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Error al guardar la página"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Ingresa y guarda datos para completar campos de formularios web automáticamente."</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Acceso automático a Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Accediendo a Google Sites utilizando <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Acceso automático disponible"</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Iniciar sesión como"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Acceder"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ocultar"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Falló el acceso."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Ingresa los datos que deseas que se completen automáticamente al tocar los campos web."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nombre completo:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostrar una advertencia si hay un problema con la seguridad de un sitio"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Aceptar cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permitir que los sitios guarden y lean datos de las \"cookies\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tamaño del texto"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Diminuto"</item>
     <item msgid="1950030433642671460">"Pequeño"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Enorme"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tamaño del texto"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Tamaño de fuente mínimo"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Obligar a habilitar el zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Anular o no la solicitud de control del comportamiento del zoom de un sitio web"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predeterminado"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lejos"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreano (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificación de texto"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilidad"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Desliza pulgar de borde izq. o der. para acceder a contr. ráp. y ocultar barras Aplicación y URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Tu página principal muestra tus páginas web más visitadas."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Usa Google Instant con Búsq. de Google para que los resultados aparezcan mientras tipeas (esto puede aumentar el uso de datos)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Usa el modo de pantalla completa para ocultar la barra de estado."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividad de datos"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema con el archivo"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Borrar historial"</string>
     <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recientemente"</string>
     <string name="empty_history" msgid="8738772352308207274">"El historial del navegador está vacío."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Agregar marcador…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Agregar"</string>
     <string name="search_hint" msgid="4647356319916631820">"Buscar o escribir URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Compartir"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"No hay más pestañas disponibles."</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google con Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"¿Quieres restaurar las ventanas?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Parece que se ha producido un fallo en el navegador. ¿Quieres restaurar las ventanas de la última sesión?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sí"</string>
+    <string name="recover_no" msgid="3121030267940592611">"No"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Vista previa:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Locales"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Versión para teléfonos celulares"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Versión para equipos de escritorio"</string>
 </resources>
diff --git a/res/values-es-sw600dp/strings.xml b/res/values-es-sw600dp/strings.xml
index 87834fd..3e4046e 100644
--- a/res/values-es-sw600dp/strings.xml
+++ b/res/values-es-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Abrir en una nueva pestaña en segundo plano"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Abrir todo en pestañas nuevas"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Abrir nuevas pestañas detrás de la actual"</string>
+    <string name="recover_title" msgid="1558775426269800998">"¿Restaurar pestañas?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Parece que se ha producido un error en el navegador. ¿Quieres restaurar las pestañas de la última sesión?"</string>
 </resources>
diff --git a/res/values-es-xlarge/strings.xml b/res/values-es-xlarge/strings.xml
index c4bdd3e..690043d 100644
--- a/res/values-es-xlarge/strings.xml
+++ b/res/values-es-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Abrir en una nueva pestaña en segundo plano"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Abrir todo en pestañas nuevas"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Abrir nuevas pestañas detrás de la actual"</string>
+    <string name="recover_title" msgid="7754049918641251703">"¿Quieres restaurar las pestañas?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Parece que se ha producido un error en el navegador. ¿Quieres restaurar las pestañas de la última sesión?"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 5a3b439..0b7cae9 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Aceptar"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancelar"</string>
     <string name="location" msgid="3411848697912600125">"Dirección"</string>
+    <string name="account" msgid="5179824606448077042">"Cuenta"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Añadir a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nueva carpeta"</string>
     <string name="edit_folder" msgid="621817453133656156">"Editar carpeta"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Descargas"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL de página"</string>
     <string name="share_page" msgid="593756995297268343">"Compartir página"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Bloquear pestaña"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Guardar página"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Página guardada"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Error al guardar la página"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Introducir y guardar datos de campos de cumplimentación automática de formularios web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Acceso automático a Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Accediendo a Google Sites mediante <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"El acceso automático está disponible."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Acceder como"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Acceder"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ocultar"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Error al acceder"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Introduce los datos con los que quieres que los campos web se completen automáticamente al tocarlos."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nombre completo:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostrar advertencia si hay algún problema con la seguridad del sitio"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Aceptar cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permitir que los sitios guarden y lean datos de cookies"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tamaño de texto"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Muy pequeño"</item>
     <item msgid="1950030433642671460">"Pequeño"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Enorme"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tamaño de texto"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Tamaño mínimo de fuente"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Forzar habilitación de zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"¿Anular control del zoom?"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predeterminado"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lejos"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreano (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificación de texto"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilidad"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Desliza el pulgar para acceder a los controles rápidos y ocultar las barras."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"En la página principal se muestran las páginas web más visitadas."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Con Google Instant, aparecerán resultados de búsqueda de Google a medida que escribas (puede aumentar el uso de datos)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Utiliza el modo de pantalla completa para ocultar la barra de estado."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividad de datos"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema con archivo"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"OK"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Borrar historial"</string>
     <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recientemente"</string>
     <string name="empty_history" msgid="8738772352308207274">"El historial del navegador está vacío."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Añadir marcador…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Añadir"</string>
     <string name="search_hint" msgid="4647356319916631820">"Busca o escribe una URL."</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Compartir"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"No hay más pestañas disponibles."</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google con Instant (experimental)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"¿Quieres restaurar las ventanas?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Parece que se ha producido un error en el navegador. ¿Quieres restaurar las ventanas de la última sesión?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sí"</string>
+    <string name="recover_no" msgid="3121030267940592611">"No"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Vista previa:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Locales"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Móvil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Ordenador"</string>
 </resources>
diff --git a/res/values-fa-sw600dp/strings.xml b/res/values-fa-sw600dp/strings.xml
index b272aec..489ba2e 100644
--- a/res/values-fa-sw600dp/strings.xml
+++ b/res/values-fa-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"باز کردن در برگه جدید در پس زمینه"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"باز کردن همه در برگه های جدید"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"باز کردن برگه های جدید پشت برگه فعلی"</string>
+    <string name="recover_title" msgid="1558775426269800998">"برگه ها بازیابی شوند؟"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"به نظر می رسد مرورگر خراب شده است. آیا می خواهید برگه ها را از آخرین بازدید خود بازیابی کنید؟"</string>
 </resources>
diff --git a/res/values-fa-xlarge/strings.xml b/res/values-fa-xlarge/strings.xml
index cd670ff..25a7039 100644
--- a/res/values-fa-xlarge/strings.xml
+++ b/res/values-fa-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"باز کردن در برگه جدید در پس زمینه"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"باز کردن همه در برگه های جدید"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"باز کردن برگه های جدید پشت برگه فعلی"</string>
+    <string name="recover_title" msgid="7754049918641251703">"برگه ها بازیابی شوند؟"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"به نظر می رسد مرورگر خراب شده است. آیا می خواهید برگه های آخرین بازدید خود را بازیابی کنید؟"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 4a0204a..62b7514 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"تأیید"</string>
     <string name="do_not_save" msgid="6777633870113477714">"لغو"</string>
     <string name="location" msgid="3411848697912600125">"آدرس"</string>
+    <string name="account" msgid="5179824606448077042">"حساب"</string>
     <string name="containing_folder" msgid="6771180232953030479">"افزودن به"</string>
     <string name="new_folder" msgid="7743540149088867917">"پوشه جدید"</string>
     <string name="edit_folder" msgid="621817453133656156">"ویرایشگر پوشه"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"دانلودها"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"کپی url صفحه"</string>
     <string name="share_page" msgid="593756995297268343">"اشتراک گذاری صفحه"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"ثابت کردن برگه"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"ذخیره صفحه"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"صفحه ذخیره شد."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"صفحه ذخیره نشد."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"جهت تکمیل خودکار قسمت های فرم وب، داده ها را وارد و ذخیره کنید"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"ورود به سیستم خودکار Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"ورود به سیستم سایت های Google با استفاده از <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"ورود به سیستم خودکار امکان پذیر است."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"ورود به سیستم بعنوان"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"ورود به سیستم"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"پنهان کردن"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"ورود به سیستم انجام نشد."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"داده های مورد نظر را وارد كنيد تا هنگام لمس كردن زمينه های وب، به صورت خودكار تكميل شوند."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"نام کامل:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"نمایش اخطار، در صورت وجود مشکل در امنیت یک سایت"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"پذیرش کوکی ها"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"اجازه به سایت ها برای ذخیره و خواندن داده های \"کوکی\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"اندازه متن"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"خیلی کوچک"</item>
     <item msgid="1950030433642671460">"کوچک"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"بزرگ"</item>
     <item msgid="7201512237890458902">"بسیار بزرگ"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"اندازه متن"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"حداقل اندازه قلم"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"فعال کردن اجباری بزرگنمایی"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"لغو یا عدم لغو درخواست وب سایت برای کنترل رفتار بزرگنمایی"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"بزرگنمایی پیش فرض"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"دور"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"کره ای (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"رمزگذاری متن"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"قابلیت دسترسی"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"کنترل های سریع"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"انگشت شست را از لبه چپ یا راست حرکت دهید تا به کنترل های سریع دسترسی داشته و نوارهای URL و برنامه را پنهان کنید"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"صفحات وب بیشتر بازدید شده شما در صفحه اصلی نشان داده می شود."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"هنگام استفاده از جستجوی Google، برای نمایش نتایج در حین تایپ از Google Instant استفاده کنید (ممکن است مصرف داده بالا برود)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"تمام صفحه"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"استفاده از حالت تمام صفحه برای مخفی کردن نوار وضعیت."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"مشکل اتصال داده"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"مشکل در فایل"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"تأیید"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"پاک کردن سابقه"</string>
     <string name="browser_history" msgid="1038987118290272525">"صفحات بازدید شده اخیر"</string>
     <string name="empty_history" msgid="8738772352308207274">"سابقه مرورگر خالی است."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"افزودن نشانک..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"افزودن"</string>
     <string name="search_hint" msgid="4647356319916631820">"جستجو یا تایپ URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"اشتراک گذاری"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"برگه بیشتری در دسترس نیست"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google با Instant (ویژگی های آزمایشی)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"پنجره ها بازیابی شوند؟"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"به نظر می رسد مرورگر خراب شده است. آیا می خواهید پنجره های آخرین بازدید خود را بازیابی کنید؟"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"بله"</string>
+    <string name="recover_no" msgid="3121030267940592611">"خیر"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"پیش نمایش:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"محلی"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"تلفن همراه"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"دسکتاپ"</string>
 </resources>
diff --git a/res/values-fi-sw600dp/strings.xml b/res/values-fi-sw600dp/strings.xml
index a604c93..e4e509a 100644
--- a/res/values-fi-sw600dp/strings.xml
+++ b/res/values-fi-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Avaa uudessa välilehdessä taustalla"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Avaa kaikki uusiin välilehtiin"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Avaa uudet välilehdet nykyisen taakse"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Palautetaanko välilehdet?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Selain vaikuttaa kaatuneen. Haluatko palauttaa viime kerralla auki olleet välilehdet?"</string>
 </resources>
diff --git a/res/values-fi-xlarge/strings.xml b/res/values-fi-xlarge/strings.xml
index a1246d4..850cab4 100644
--- a/res/values-fi-xlarge/strings.xml
+++ b/res/values-fi-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Avaa uudessa välilehdessä taustalla"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Avaa kaikki uusiin välilehtiin"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Avaa uudet välilehdet nykyisen taakse"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Palautetaanko välilehdet?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Selain vaikuttaa kaatuneen. Haluatko palauttaa viime kerralla auki olleet välilehdet?"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index f14f718..e89dc69 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Peruuta"</string>
     <string name="location" msgid="3411848697912600125">"Osoite"</string>
+    <string name="account" msgid="5179824606448077042">"Tili"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Lisää kansioon"</string>
     <string name="new_folder" msgid="7743540149088867917">"Uusi kansio"</string>
     <string name="edit_folder" msgid="621817453133656156">"Muokkaa kansiota"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Lataukset"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopioi sivun URL-osoite"</string>
     <string name="share_page" msgid="593756995297268343">"Jaa sivu"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Kuvakaappaus välilehdestä"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Tallenna sivu"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Sivu tallennettu."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Sivun tallennus epäonnistui."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Tallenna tietoja verkkolomakkeiden automaattista täyttöä varten"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automaattinen Google-sisäänkirjaus"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Kirjaudutaan Google-sivustoihin käyttäjänimellä <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automaattinen kirjautuminen käytettävissä."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Kirjautunut käyttäjänä"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Kirjaudu"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Piilota"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Kirjautuminen epäonnistui."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Kirjoita tiedot, jotka haluat täyttää automaattisesti verkon kenttiin koskettaessasi kenttiä."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Koko nimi:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Näytä varoitus, jos sivun suojauksessa on ongelma"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Salli evästeet"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Salli sivustojen tallentaa ja lukea evästetietoja"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tekstin koko"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Hyvin pieni"</item>
     <item msgid="1950030433642671460">"Pieni"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Suuri"</item>
     <item msgid="7201512237890458902">"Hyvin suuri"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tekstin koko"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Kirjasimen vähimmäiskoko"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Ota skaalaus käyttöön"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Ohitetaanko sivuston pyyntö hallinnoida skaalausta"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Oletuszoomaus"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Kauas"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"korea (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstin koodaus"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Esteettömyys"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Pikasäätimet"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Saat pikasäätimet käyttöösi ja voit piilottaa Sovellus- ja URL-palkit liu\'uttamalla vasemmalta tai oikealta reunalta"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Etusivulla näytetään eniten käyttämäsi verkkosivut."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Käyttämällä Google Instantia hakiessasi näet tuloksia jo hakua kirjoittaessasi (tämä voi kasvattaa tiedonsiirron määrää)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Koko ruutu"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Piilota tilapalkki käyttämällä koko ruudun tilaa."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datayhteysongelma"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Tiedosto-ongelma"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Vahvista"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Tyhjennä historia"</string>
     <string name="browser_history" msgid="1038987118290272525">"Äskettäin avatut sivut"</string>
     <string name="empty_history" msgid="8738772352308207274">"Selainhistoria on tyhjä."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Lisää kirjanmerkki…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Lisää"</string>
     <string name="search_hint" msgid="4647356319916631820">"Kirjoita hakusanoja tai URL-osoite"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Jaa"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Välilehtiä ei ole enempää saatavilla"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google ja Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Palautetaanko ikkunat?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Selain vaikuttaa kaatuneen. Haluatko palauttaa viime kerralla auki olleet ikkunat?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Kyllä"</string>
+    <string name="recover_no" msgid="3121030267940592611">"En"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Esikatselu:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Paikalliset kirjanmerkit"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobiili"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Tietokone"</string>
 </resources>
diff --git a/res/values-fr-sw600dp/strings.xml b/res/values-fr-sw600dp/strings.xml
index 6f36159..baafe7b 100644
--- a/res/values-fr-sw600dp/strings.xml
+++ b/res/values-fr-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Ouvrir dans un nouvel onglet d\'arrière-plan"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Toujours ouvrir dans un nouvel onglet"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Ouvrir nouveaux onglets derrière onglet actuel"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Restaurer les onglets ?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Le navigateur semble bloqué. Voulez-vous restaurer les onglets ouverts lors de votre dernière connexion ?"</string>
 </resources>
diff --git a/res/values-fr-xlarge/strings.xml b/res/values-fr-xlarge/strings.xml
index 2975ed5..e65274f 100644
--- a/res/values-fr-xlarge/strings.xml
+++ b/res/values-fr-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Ouvrir dans un nouvel onglet d\'arrière-plan"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Toujours ouvrir dans un nouvel onglet"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Ouvrir nouveaux onglets derrière onglet actuel"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Restaurer les onglets ?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Le navigateur semble bloqué. Souhaitez-vous restaurer les onglets ouverts lors de votre dernière connexion ?"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 42219fa..26adda7 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Annuler"</string>
     <string name="location" msgid="3411848697912600125">"Adresse"</string>
+    <string name="account" msgid="5179824606448077042">"Compte"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Ajouter à"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nouveau dossier"</string>
     <string name="edit_folder" msgid="621817453133656156">"Modifier le dossier"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Téléchargements"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copier l\'URL de la page"</string>
     <string name="share_page" msgid="593756995297268343">"Partager la page"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Figer l\'onglet"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Enregistrer la page"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"La page a été enregistrée."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Échec de l\'enregistrement de la page"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Saisir et enregistrer des données à des fins de saisie automatique dans les champs de formulaires Web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Connexion automatique à Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Connexion à Google Sites avec le compte <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"La connexion automatique est disponible."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Se connecter à l\'aide du compte"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Connexion"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Masquer"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Échec de la connexion"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Renseignez les données à saisir automatiquement dans les champs Web lorsque vous appuyez sur ces derniers."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nom et prénom :"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Afficher un avertissement en cas de problème de sécurité d\'un site"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accepter les cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Autoriser les sites à enregistrer et lire les données des cookies"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Taille de la police"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Très petite"</item>
     <item msgid="1950030433642671460">"Petite"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Très grande"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Taille de la police"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Taille de police minimale"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Forcer l\'activation du zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Ignorer ou non la demande de contrôle du zoom par un site Web"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom par défaut"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Éloigné"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coréen (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codage du texte"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilité"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Commandes rapides"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Accès commandes rapides/masquer barres applications et URL : faire glisser vers droite/gauche"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Votre page d\'accueil affiche les pages Web les plus visitées."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Recherche instantanée Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Affichez plus de résultats lors de la saisie avec la recherche instantanée Google. Peut utiliser plus de données."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Plein écran"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Utiliser le mode plein écran pour masquer la barre d\'état"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problème de connectivité des données"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problème de fichier"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmer"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Effacer l\'historique"</string>
     <string name="browser_history" msgid="1038987118290272525">"Pages récemment consultées"</string>
     <string name="empty_history" msgid="8738772352308207274">"L\'historique du navigateur est vide."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Ajouter aux favoris..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Ajouter"</string>
     <string name="search_hint" msgid="4647356319916631820">"Rech. ou entrer l\'URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Partager"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Plus aucun onglet n\'est disponible."</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google avec Recherche instantanée (Google Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Restaurer les fenêtres ?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Le navigateur semble bloqué. Souhaitez-vous restaurer les fenêtres ouvertes lors de votre dernière connexion ?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Oui"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Non"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Aperçu :"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Favoris locaux"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobile"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Ordinateur"</string>
 </resources>
diff --git a/res/values-hr-sw600dp/strings.xml b/res/values-hr-sw600dp/strings.xml
index 4625edd..528750a 100644
--- a/res/values-hr-sw600dp/strings.xml
+++ b/res/values-hr-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Otvori u novoj pozadinskoj kartici"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Otvori sve u novim karticama"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Otvori nove kartice iza trenutačne"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vratiti kartice?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Izgleda da se preglednik srušio. Želite li vratiti kartice od prethodnog puta?"</string>
 </resources>
diff --git a/res/values-hr-xlarge/strings.xml b/res/values-hr-xlarge/strings.xml
index e61c130..0b35273 100644
--- a/res/values-hr-xlarge/strings.xml
+++ b/res/values-hr-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Otvori u novoj pozadinskoj kartici"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Otvori sve na novim karticama"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Otvori nove kartice iza trenutne"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vratiti kartice?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Izgleda da je preglednik pao. Želite li vratiti kartice od prethodnog puta?"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index e2636da..7fa4ebd 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"U redu"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Odustani"</string>
     <string name="location" msgid="3411848697912600125">"Adresa"</string>
+    <string name="account" msgid="5179824606448077042">"Račun"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Dodaj u grupu"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nova mapa"</string>
     <string name="edit_folder" msgid="621817453133656156">"Uredi mapu"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Preuzimanja"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopiraj url stranice"</string>
     <string name="share_page" msgid="593756995297268343">"Dijeli stranicu"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Zamrzni karticu"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Spremi stranicu"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Stranica je spremljena."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Spremanje stranice nije uspjelo."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Unošenje i spremanje podataka za automatsko popunjavanje polja web-obrasca"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatska prijava na Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Prijava na Google web-lokacije putem <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Dostupna je automatska prijava."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Prijavite se kao"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Prijava"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Sakrij"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Prijava nije uspjela."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Unesite podatke koje želite automatski unijeti u web-polja kad ih dodirnete."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Puno ime:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Prikaži upozorenje ako postoji problem sa sigurnošću web-lokacije"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Prihvati kolačiće"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Dopusti web-lokacijama spremanje i čitanje podataka o \"kolačićima\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Veličina teksta"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Sitan"</item>
     <item msgid="1950030433642671460">"Mali"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Veliki"</item>
     <item msgid="7201512237890458902">"Ogroman"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Veličina teksta"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Najmanja veličina fonta"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Prisilno omogući zumiranje"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Poništiti zahtjev web-lokacije za kontrolu ponašanja zumiranja"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zadano povećanje/smanjenje"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Daleko"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"korejski (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kodiranje teksta"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Dostupnost"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Brze kontrole"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Za pristup brzim kontrolama i skrivanje Aplikacija i URL-ova prijeđite palcem"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Vaša početna stranica prikazuje vaše najposjećenije web-stranice."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Kada u Google Pretraživanju upotrebljavate Google Instant, rezultati se prikazuju dok tipkate (promet podataka može porasti)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Puni zaslon"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Upotrijebite način punog zaslona da biste sakrili traku stanja."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem s podatkovnom povezivošću"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem s datotekom"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potvrdi"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Izbriši povijest"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nedavno posjećene stranice"</string>
     <string name="empty_history" msgid="8738772352308207274">"Povijest preglednika prazna je."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Dodavanje oznake..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Dodaj"</string>
     <string name="search_hint" msgid="4647356319916631820">"Pretraži ili upiši URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Dijeli"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Nema više rasp. kartica"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google sa značajkom Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vratiti prozore?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Izgleda da je preglednik pao. Želite li vratiti prozore od prethodnog puta?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Da"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Ne"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Pregled:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokalno"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobilni uređaj"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Stolno računalo"</string>
 </resources>
diff --git a/res/values-hu-sw600dp/strings.xml b/res/values-hu-sw600dp/strings.xml
index 1f0bb2f..e1e76cf 100644
--- a/res/values-hu-sw600dp/strings.xml
+++ b/res/values-hu-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Megnyitás új lapon a háttérben"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Összes megnyitása új lapon"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Új lapok megnyitása a jelenlegi mögött"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Visszaállítja a lapokat?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Úgy tűnik, böngészője összeomlott. Szeretné visszaállítani a korábbi lapokat?"</string>
 </resources>
diff --git a/res/values-hu-xlarge/strings.xml b/res/values-hu-xlarge/strings.xml
index 76d05c5..0460fbe 100644
--- a/res/values-hu-xlarge/strings.xml
+++ b/res/values-hu-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Megnyitás új lapon a háttérben"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Összes megnyitása új lapon"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Új lapok megnyitása a jelenlegi mögött"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Visszaállítja a lapokat?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Úgy tűnik, hogy böngészője összeomlott. Szeretné visszaállítani a korábbi lapokat?"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 5a5a97e..d91ea0b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Mégse"</string>
     <string name="location" msgid="3411848697912600125">"Cím"</string>
+    <string name="account" msgid="5179824606448077042">"Fiók"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Mentés ide:"</string>
     <string name="new_folder" msgid="7743540149088867917">"Új mappa"</string>
     <string name="edit_folder" msgid="621817453133656156">"Mappa szerkesztése"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Letöltések"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Az oldal URL-jének másolása"</string>
     <string name="share_page" msgid="593756995297268343">"Oldal megosztása"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Lap rögzítése"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Oldal mentése"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Oldal mentve."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Nem sikerült menteni az oldalt."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Adatok beírása és mentése az internetes űrlapok mezőinek automatikus kitöltéséhez"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatikus Google-bejelentkezés"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Bejelentkezés Google-webhelyekre a következők használatával: <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Az automatikus bejelentkezés elérhető."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Bejelentkezés mint"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Belépés"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Elrejtés"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Sikertelen bejelentkezés."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Adja meg azokat az adatokat, amelyekkel ki szeretné tölteni az internetes mezőket, amikor megérinti azokat."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Teljes név:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Figyelmeztetés megjelenítése, ha gond van a webhely biztonságával"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Cookie-k fogadása"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"A webhelyek elmenthetnek és beolvashatnak \"cookie\"-adatokat"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Szöveg mérete"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Apró"</item>
     <item msgid="1950030433642671460">"Kicsi"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Nagy"</item>
     <item msgid="7201512237890458902">"Óriási"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Szöveg mérete"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimális betűméret"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Nagyítás engedélyezése"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Webhely kezelheti-e a nagyítást"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Alapértelmezett nagyítás"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Távoli"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Koreai (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Szöveg kódolása"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Kisegítő lehetőségek"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Gyorsbeállítások"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Seperjen az ujjával: gyorsvezérlők elérése, az Alkalmazás és URL-sáv elrejtése."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Kezdőlapján a leggyakrabban felkeresett webhelyek jelennek meg."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"A Google-keresésnél használja a Google Instantot, és a találatok gépelés közben megjelennek (az adatforgalom nőhet)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Teljes képernyő"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Használja a teljes képernyős módot az állapotsor elrejtéséhez."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Adatkapcsolat-probléma"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Probléma van a fájllal"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Megerősítés"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Előzmények törlése"</string>
     <string name="browser_history" msgid="1038987118290272525">"A közelmúltban meglátogatott oldalak"</string>
     <string name="empty_history" msgid="8738772352308207274">"A böngészési előzmények listája üres."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Könyvjelző hozzáadása..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Hozzáadás:"</string>
     <string name="search_hint" msgid="4647356319916631820">"Keressen vagy írjon be egy URL-t"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Megosztás"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Nem nyitható meg több lap"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google Instanttal (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Visszaállítja az ablakokat?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Úgy tűnik, hogy böngészője összeomlott. Szeretné visszaállítani a korábbi ablakokat?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Igen"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nem"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Előnézet:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Helyi"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Asztali"</string>
 </resources>
diff --git a/res/values-in-sw600dp/strings.xml b/res/values-in-sw600dp/strings.xml
index 7a3bf2c..ef4982f 100644
--- a/res/values-in-sw600dp/strings.xml
+++ b/res/values-in-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Buka di tab latar belakang baru"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Buka semua di tab baru"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Buka tab baru di belakang tab ini"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Pulihkan tab?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Peramban tampaknya telah mogok. Inginkah Anda memulihkan tab-tab yang terakhir terbuka?"</string>
 </resources>
diff --git a/res/values-in-xlarge/strings.xml b/res/values-in-xlarge/strings.xml
index 785a17b..0753ef4 100644
--- a/res/values-in-xlarge/strings.xml
+++ b/res/values-in-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Buka di tab latar belakang baru"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Buka semua di tab baru"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Buka tab baru di belakang tab ini"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Pulihkan tab?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Peramban tampaknya telah mogok. Inginkah Anda memulihkan tab-tab yang terakhir kali terbuka?"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 9e0bd1e..670b1db 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Batal"</string>
     <string name="location" msgid="3411848697912600125">"Alamat"</string>
+    <string name="account" msgid="5179824606448077042">"Akun"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Tambahkan ke"</string>
     <string name="new_folder" msgid="7743540149088867917">"Map baru"</string>
     <string name="edit_folder" msgid="621817453133656156">"Edit map"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Unduhan"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Salin URL laman"</string>
     <string name="share_page" msgid="593756995297268343">"Bagikan lama"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Bekukan tab"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Simpan laman"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Laman tersimpan."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Gagal menyimpan laman."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Masukkan dan simpan data untuk mengisi-otomatis bidang formulir web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Masuk ke Google secara otomatis"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Masuk ke situs Google dengan <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Fitur masuk otomatis tersedia."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Masuk sebagai"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Masuk"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Sembunyikan"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Upaya masuk gagal."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Masukkan data yang ingin Anda isi-otomatiskan ke bidang web saat disentuh."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nama lengkap:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Tampilkan peringatan jika ada masalah dengan keamanan situs"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Terima kuki"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Izinkan situs menyimpan dan membaca data \"kuki\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Ukuran teks"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Kecil"</item>
     <item msgid="1950030433642671460">"Kecil"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Besar"</item>
     <item msgid="7201512237890458902">"Sangat besar"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Ukuran teks"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Ukuran fon minimal"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Paksa aktifkan zum"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Apakah mengesampingkan atau tidak permintaan situs web untuk mengontrol perilaku zum"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom bawaan"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Jauh"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korea (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Penyandiaksaraan teks"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Aksesibilitas"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Kontrol cepat"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Gesek ibu jari dari tepi kiri atau kanan untuk mengakses kontrol cepat dan menyembunyikan bilah aplikasi dan URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Beranda Anda menampilkan situs web yang paling sering disinggahi."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Sekejap"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gunakan Google Sekejap di Google Penelusuran agar hasilnya tampil selagi mengetik (ini dapat menambah pemakaian data)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Layar penuh"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Gunakan modus layar penuh untuk menyembunyikan bilah status."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Masalah konektivitas data"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Masalah dengan berkas"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Konfirmasi"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Hapus riwayat"</string>
     <string name="browser_history" msgid="1038987118290272525">"Laman yang baru dikunjungi"</string>
     <string name="empty_history" msgid="8738772352308207274">"Riwayat peramban kosong."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Tambahkan bookmark..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Tambahkan"</string>
     <string name="search_hint" msgid="4647356319916631820">"Telusuri atau ketik URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Bagikan"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Tidak ada lagi tab yang tersedia"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google dengan Sekejap (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Pulihkan jendela?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Peramban tampaknya telah mogok. Inginkah Anda memulihkan jendela-jendela yang terakhir kali terbuka?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ya"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Tidak"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Pratinjau:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Seluler"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-it-sw600dp/strings.xml b/res/values-it-sw600dp/strings.xml
index 1774a85..23d30fc 100644
--- a/res/values-it-sw600dp/strings.xml
+++ b/res/values-it-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Apri in una nuova scheda in secondo piano"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Apri tutto in nuove schede"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Apri le nuove schede dietro la scheda corrente"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Ripristinare le schede?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Sembra che si sia verificato un arresto anomalo del browser. Ripristinare le schede che erano aperte durante l\'ultima sessione?"</string>
 </resources>
diff --git a/res/values-it-xlarge/strings.xml b/res/values-it-xlarge/strings.xml
index d2dc0e6..e580d2a 100644
--- a/res/values-it-xlarge/strings.xml
+++ b/res/values-it-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Apri in una nuova scheda in secondo piano"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Apri tutto in nuove schede"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Apri le nuove schede dietro la scheda corrente"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Ripristinare le schede?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Sembra che si sia verificato un arresto anomalo del browser. Ripristinare le schede che erano aperte durante l\'ultima sessione?"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8ac3436..68d2de0 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Annulla"</string>
     <string name="location" msgid="3411848697912600125">"Indirizzo"</string>
+    <string name="account" msgid="5179824606448077042">"Account"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Aggiungi a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nuova cartella"</string>
     <string name="edit_folder" msgid="621817453133656156">"Modifica cartella"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Download"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copia URL della pagina"</string>
     <string name="share_page" msgid="593756995297268343">"Condividi pagina"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Blocca scheda"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Salva pagina"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Pagina salvata."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Impossibile salvare la pagina."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Inserisci e salva dati per la compilazione automatica dei campi dei moduli web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Accesso Google automatico"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Accesso ai siti Google utilizzando <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Accesso automatico disponibile."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Accesso eseguito come"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Accedi"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Nascondi"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Accesso non riuscito."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Inserisci i dati desiderati per la compilazione automatica dei moduli web quando li tocchi."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nome e cognome:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostra un avviso se esiste un problema di sicurezza con un sito"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accetta cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Consenti ai siti di salvare e leggere i dati \"cookie\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Dimensioni testo"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Molto piccolo"</item>
     <item msgid="1950030433642671460">"Piccolo"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Molto grande"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Dimensioni testo"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Dimensioni minime caratteri"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Attivazione forzata zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Ignorare o meno la richiesta di un sito di controllare lo zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predefinito"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lontano"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreano (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codifica testo"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilità"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controlli rapidi"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Fai scorrere il pollice dal lato sinistro/destro per accedere ai controlli e nascondere le barre delle applicazioni e dell\'URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"La tua pagina iniziale mostra le tue pagine web più visitate."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Usa Google Instant con Ricerca Google per visualizzare i risultati mentre digiti (può aumentare l\'uso dei dati)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Schermo intero"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Usa la modalità a schermo intero per nascondere la barra di stato."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema di connettività dati"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problemi con il file"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Conferma"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Cancella cronologia"</string>
     <string name="browser_history" msgid="1038987118290272525">"Pagine visitate di recente"</string>
     <string name="empty_history" msgid="8738772352308207274">"La cronologia del browser è vuota."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Aggiungi segnalibro…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Aggiungi"</string>
     <string name="search_hint" msgid="4647356319916631820">"Cerca o digita un URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Condividi"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Nessun\'altra scheda disponibile"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google con Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Ripristinare le finestre?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Sembra che si sia verificato un arresto anomalo del browser. Ripristinare le finestre che erano aperte durante l\'ultima sessione?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sì"</string>
+    <string name="recover_no" msgid="3121030267940592611">"No"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Anteprima:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Locali"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobile"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-iw-sw600dp/strings.xml b/res/values-iw-sw600dp/strings.xml
index 8396347..71f2b76 100644
--- a/res/values-iw-sw600dp/strings.xml
+++ b/res/values-iw-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"פתח בכרטיסיית רקע חדשה"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"פתח הכל בכרטיסיות חדשות"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"פתח כרטיסיות חדשות מאחורי הכרטיסייה הנוכחית"</string>
+    <string name="recover_title" msgid="1558775426269800998">"לשחזר כרטיסיות?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"נראה שהדפדפן קרס. האם ברצונך לשחזר את הכרטיסיות שלך מההפעלה הקודמת?"</string>
 </resources>
diff --git a/res/values-iw-xlarge/strings.xml b/res/values-iw-xlarge/strings.xml
index 1ea3357..9660c57 100644
--- a/res/values-iw-xlarge/strings.xml
+++ b/res/values-iw-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"פתח בכרטיסיית רקע חדשה"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"פתח את הכל בכרטיסיות חדשות"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"פתח כרטיסיות חדשות מאחורי הכרטיסייה הנוכחית"</string>
+    <string name="recover_title" msgid="7754049918641251703">"לשחזר כרטיסיות?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"נראה שהדפדפן קרס. האם ברצונך לשחזר את הכרטיסיות שלך מההפעלה הקודמת?"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0230fc1..3588a8f 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"אישור"</string>
     <string name="do_not_save" msgid="6777633870113477714">"ביטול"</string>
     <string name="location" msgid="3411848697912600125">"כתובת"</string>
+    <string name="account" msgid="5179824606448077042">"חשבון0"</string>
     <string name="containing_folder" msgid="6771180232953030479">"הוסף אל"</string>
     <string name="new_folder" msgid="7743540149088867917">"תיקיה חדשה"</string>
     <string name="edit_folder" msgid="621817453133656156">"ערוך תיקיה"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"הורדות"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"העתק כתובת אתר של דף"</string>
     <string name="share_page" msgid="593756995297268343">"שתף דף"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"הקפא כרטיסייה"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"שמור דף"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"הדף נשמר."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"שמירת הדף נכשלה."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"הזן נתונים ושמור אותם למילוי אוטומטי של שדות בטופס אינטרנט"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"כניסה אוטומטית ל-Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"כניסה אל Google Sites באמצעות <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"הכניסה האוטומטית זמינה."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"היכנס כ:"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"התחבר"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"הסתר"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"ההתחברות נכשלה."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"הזן את הנתונים שברצונך למלא באופן אוטומטי בשדות באינטרנט כאשר תיגע בשדות אלה."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"שם מלא:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"הצג אזהרה אם יש בעיה באבטחת אתר"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"קבל קובצי cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"אפר לאתרים לשמור ולקרוא נתוני cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"גודל טקסט"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"זעיר"</item>
     <item msgid="1950030433642671460">"קטן"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"גדול"</item>
     <item msgid="7201512237890458902">"ענק"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"גודל טקסט"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"גודל גופן מינימלי"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"אלץ הפעלת מרחק מתצוגה"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"האם לעקוף או לא לעקוף בקשה של אתר כדי לשלוט באופן הפעולה של מרחק מתצוגה"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"ברירת מחדל של מרחק מתצוגה"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"רחוק"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"קוריאנית (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"קידוד טקסט"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"נגישות"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"פקדים מהירים"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"העבר את האגודל מאחד הצדדים  כדי לגשת לפקדים המהירים ולהסתיר את סרגלי היישום וה-URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"דף הבית שלך מציג את דפי האינטרנט שבהם ביקרת בתדירות הגבוהה ביותר."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"השתמש ב-Google Instant כאשר אתה משתמש בחיפוש Google, כדי להציג תוצאות בעת ההקלדה (פעולה זו יכולה להגדיל שימוש בנתונים)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"מסך מלא"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"השתמש במצב מסך מלא כדי להסתיר את שורת המצב."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"בעיה בקישוריות נתונים"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"בעיה בקובץ"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"אשר"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"נקה היסטוריה"</string>
     <string name="browser_history" msgid="1038987118290272525">"דפים שביקרת בהם לאחרונה"</string>
     <string name="empty_history" msgid="8738772352308207274">"היסטוריית הדפדפן ריקה."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"הוסף סימניה..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"הוסף"</string>
     <string name="search_hint" msgid="4647356319916631820">"חפש או הקלד כתובת אתר"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"שתף"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"אין עוד כרטיסיות זמינות"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google עם Instant ‏(Google Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"לשחזר חלונות?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"נראה שהדפדפן קרס. האם ברצונך לשחזר את החלונות שלך מההפעלה הקודמת?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"כן"</string>
+    <string name="recover_no" msgid="3121030267940592611">"לא"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"תצוגה מקדימה:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"מקומי"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"נייד"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"שולחן עבודה"</string>
 </resources>
diff --git a/res/values-ja-sw600dp/strings.xml b/res/values-ja-sw600dp/strings.xml
index 31c13a1..36fc8a1 100644
--- a/res/values-ja-sw600dp/strings.xml
+++ b/res/values-ja-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"新しいバックグラウンドタブで開く"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"すべて新しいタブで開く"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"現在のタブの後ろに新しいタブを開く"</string>
+    <string name="recover_title" msgid="1558775426269800998">"タブを復元しますか?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"ブラウザはクラッシュしたようです。前回のタブを復元しますか?"</string>
 </resources>
diff --git a/res/values-ja-xlarge/strings.xml b/res/values-ja-xlarge/strings.xml
index 7e75d86..d3681f3 100644
--- a/res/values-ja-xlarge/strings.xml
+++ b/res/values-ja-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"新しいバックグラウンドタブで開く"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"常に新しいタブで開く"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"現在のタブの後ろに新しいタブを開く"</string>
+    <string name="recover_title" msgid="7754049918641251703">"タブを復元しますか?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"ブラウザはクラッシュしたようです。前回のタブを復元しますか?"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 3a4c996..7d94111 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"キャンセル"</string>
     <string name="location" msgid="3411848697912600125">"アドレス"</string>
+    <string name="account" msgid="5179824606448077042">"アカウント"</string>
     <string name="containing_folder" msgid="6771180232953030479">"追加先"</string>
     <string name="new_folder" msgid="7743540149088867917">"新しいフォルダ"</string>
     <string name="edit_folder" msgid="621817453133656156">"フォルダを編集"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"ダウンロード履歴"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"ページのURLをコピー"</string>
     <string name="share_page" msgid="593756995297268343">"ページを共有"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"タブをフリーズ"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"ページを保存"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"ページを保存しました。"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"ページを保存できませんでした。"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"ウェブフォームフィールドに自動入力するデータを入力、保存する"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Googleへの自動ログイン"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"<xliff:g id="ID_1">%s</xliff:g>を使用してGoogleサイトにログインしています"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"自動ログインを利用できます。"</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"次のアカウントでログイン"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"ログイン"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"表示しない"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"ログインに失敗しました。"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"ウェブ上でフィールドをタップしたときに自動入力するデータを入力します。"</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"氏名:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"サイトの安全性に問題がある場合に警告を表示する"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Cookieを受け入れる"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"サイトによるCookieの保存と読み取りを許可する"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"テキストサイズ"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"最小"</item>
     <item msgid="1950030433642671460">"小"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"大"</item>
     <item msgid="7201512237890458902">"最大"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"文字サイズ"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"最小フォントサイズ"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"拡大縮小設定の上書き"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"サイトの拡大縮小設定を上書き"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"デフォルトの倍率"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"低"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"韓国語(EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"テキストエンコード"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"ユーザー補助"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"クイックコントロール"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"クイックコントロールへのアクセス(アプリ/URLバー非表示)には左/右端からスワイプ"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"アクセス数が最も多いウェブページをホームページとして表示します。"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Googleインスタント検索"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Google検索時にGoogleインスタント検索を使用すると、入力中に結果が表示されます(データの使用量が増えることがあります)。"</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全画面"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"全画面モードを使用してステータスバーを非表示にする。"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"データアクセスエラー"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"ファイルに問題があります"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"履歴消去"</string>
     <string name="browser_history" msgid="1038987118290272525">"最近閲覧したページ"</string>
     <string name="empty_history" msgid="8738772352308207274">"ブラウザ履歴はありません。"</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"現在のページをブックマーク"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"追加"</string>
     <string name="search_hint" msgid="4647356319916631820">"検索またはURLを入力"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"共有"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"タブ数が上限に達しました"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Googleインスタント検索(Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"ウィンドウを復元しますか?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"ブラウザはクラッシュしたようです。前回のウィンドウを復元しますか?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"はい"</string>
+    <string name="recover_no" msgid="3121030267940592611">"いいえ"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"プレビュー:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"ローカル"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"モバイル"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"デスクトップ"</string>
 </resources>
diff --git a/res/values-ko-sw600dp/strings.xml b/res/values-ko-sw600dp/strings.xml
index 4da5e73..992782f 100644
--- a/res/values-ko-sw600dp/strings.xml
+++ b/res/values-ko-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"새 배경 탭에서 열기"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"새 탭에서 모두 열기"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"현재 탭 뒤에 새 탭 열기"</string>
+    <string name="recover_title" msgid="1558775426269800998">"탭을 복원하시겠습니까?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"브라우저가 멈춘 것 같습니다. 마지막에 열려있던 탭을 복원하시겠습니까?"</string>
 </resources>
diff --git a/res/values-ko-xlarge/strings.xml b/res/values-ko-xlarge/strings.xml
index 63bd6a1..c2e21ce 100644
--- a/res/values-ko-xlarge/strings.xml
+++ b/res/values-ko-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"새 배경 탭에서 열기"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"새 탭에서 모두 열기"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"현재 탭 뒤에 새 탭 열기"</string>
+    <string name="recover_title" msgid="7754049918641251703">"탭을 복원하시겠습니까?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"브라우저가 멈추었습니다. 마지막에 열려있던 탭을 복원하시겠습니까?"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index ccc1d38..971957c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"확인"</string>
     <string name="do_not_save" msgid="6777633870113477714">"취소"</string>
     <string name="location" msgid="3411848697912600125">"주소"</string>
+    <string name="account" msgid="5179824606448077042">"계정"</string>
     <string name="containing_folder" msgid="6771180232953030479">"추가할 위치"</string>
     <string name="new_folder" msgid="7743540149088867917">"새 폴더"</string>
     <string name="edit_folder" msgid="621817453133656156">"폴더 수정"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"다운로드"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"페이지 URL 복사"</string>
     <string name="share_page" msgid="593756995297268343">"페이지 공유"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"새 탭에 캡처화면 만들기"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"페이지 저장"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"페이지가 저장되었습니다."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"페이지를 저장하지 못했습니다."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"자동 입력 웹 양식 필드에 대한 데이터 입력 및 저장"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"자동 Google 로그인"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"<xliff:g id="ID_1">%s</xliff:g>(으)로 Google 사이트에 로그인 중"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"자동 로그인을 사용할 수 있습니다."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"다음 사용자로 로그인:"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"로그인"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"숨기기"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"로그인하지 못했습니다."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"터치할 때 웹 입력란에 자동 완성되도록 하려는 데이터를 입력하세요."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"이름:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"사이트 보안 관련 문제가 있는 경우 경고 표시"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"쿠키 허용"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"사이트에서 \'쿠키\' 데이터 저장 및 읽기 허용"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"텍스트 크기"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"아주 작게"</item>
     <item msgid="1950030433642671460">"작게"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"크게"</item>
     <item msgid="7201512237890458902">"아주 크게"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"텍스트 크기"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"최소 글꼴 크기"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"확대/축소 강제 사용"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"확대/축소 요청 무시 여부"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"기본 확대/축소"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"축소"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"한국어(EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"텍스트 인코딩"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"접근성"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"실험실"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"빠른 컨트롤"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"좌/우 끝에서 엄지로 스와이프하여 빠른 컨트롤에 액세스하고 앱 및 URL 표시줄 숨김"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"홈페이지에 자주 방문한 웹페이지가 표시됩니다."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 순간 검색"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Google 검색을 사용할 때 Google 순간 검색을 사용하면 입력하는 동안 결과가 표시됩니다(데이터 사용이 증가될 수 있음)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"전체화면"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"전체화면 모드를 사용하여 상태 표시줄을 숨깁니다."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"데이터 연결에 문제 발생"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"파일 문제 발생"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"확인"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"기록 지우기"</string>
     <string name="browser_history" msgid="1038987118290272525">"최근 방문한 페이지"</string>
     <string name="empty_history" msgid="8738772352308207274">"브라우저 기록이 비어 있습니다."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"북마크에 추가…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"추가"</string>
     <string name="search_hint" msgid="4647356319916631820">"검색어 또는 URL 입력"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"공유"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"탭이 더 이상 없습니다."</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google 순간 검색(실험실)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"창을 복원하시겠습니까?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"브라우저가 멈추었습니다. 마지막에 열려있던 창을 복원하시겠습니까?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"예"</string>
+    <string name="recover_no" msgid="3121030267940592611">"아니요"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"미리보기:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"로컬"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"모바일"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"데스크톱"</string>
 </resources>
diff --git a/res/values-land/dimensions.xml b/res/values-land/dimensions.xml
index f3b1235..5294d6e 100644
--- a/res/values-land/dimensions.xml
+++ b/res/values-land/dimensions.xml
@@ -15,4 +15,6 @@
     <dimen name="preference_screen_side_margin">96dp</dimen>
     <dimen name="preference_screen_side_margin_negative">-100dp</dimen>
     <dimen name="preference_widget_width">72dp</dimen>
+    <dimen name="nav_tab_width">225dip</dimen>
+    <dimen name="nav_tab_height">150dip</dimen>
 </resources>
diff --git a/res/values-lt-sw600dp/strings.xml b/res/values-lt-sw600dp/strings.xml
index 100acd1..8f040c3 100644
--- a/res/values-lt-sw600dp/strings.xml
+++ b/res/values-lt-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Atidaryti naujame fono skirtuke"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Atidaryti visas naujuose skirtukuose"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Atidaryti naujus skirtukus už dabartinio"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Atkurti skirtukus?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Atrodo, kad naršyklė užstrigo. Ar norėtumėte atkurti paskutinį kartą naudotus skirtukus?"</string>
 </resources>
diff --git a/res/values-lt-xlarge/strings.xml b/res/values-lt-xlarge/strings.xml
index 7fedc78..832e6ff 100644
--- a/res/values-lt-xlarge/strings.xml
+++ b/res/values-lt-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Atidaryti naujame fono skirtuko lape"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Atidaryti visas naujuose skirtukų lapuose"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Atidaroma naujų skirtukų lapų už dabartinio"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Atkurti skirtukus?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Atrodo, naršyklė užstrigo. Ar norėtumėte atkurti paskutinį kartą  naudotus skirtukus?"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f449b26..b9c0da5 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Gerai"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Atšaukti"</string>
     <string name="location" msgid="3411848697912600125">"Adresas"</string>
+    <string name="account" msgid="5179824606448077042">"Paskyra"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Pridėti prie"</string>
     <string name="new_folder" msgid="7743540149088867917">"Naujas aplankas"</string>
     <string name="edit_folder" msgid="621817453133656156">"Redaguoti aplanką"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Atsisiuntimai"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopijuoti puslapio URL"</string>
     <string name="share_page" msgid="593756995297268343">"Bendrinti puslapį"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Fiksuoti skirtuką"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Išsaugoti puslapį"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Puslapis išsaugotas."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Nepavyko išsaugoti puslapio."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Įveskite duomenis ir išsaugokite juos automatinio pildymo formos žiniatinklyje laukuose"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Autom. prisijung. prie „Google“"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Prisijungiama prie „Google“ svetainių naudojant <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Galimas automatinis prisijungimas."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Prisijungti kaip"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Prisijung."</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Slėpti"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Nepavyko prisijungti."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Įveskite duomenis, kuriais norite automatiškai užpildyti žiniatinklio laukus, kai juos paliesite."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Vardas ir pavardė:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Rodyti įspėjimą, jei kyla problemų dėl svetainės saugos"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Priimti slapukus"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Leisti svetainėms išsaugoti ir skaityti „slapukų“ duomenis"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Teksto dydis"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Labai nedidelis"</item>
     <item msgid="1950030433642671460">"Mažas"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Didelis"</item>
     <item msgid="7201512237890458902">"Didžiulis"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Teksto dydis"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Mažiausias šrifto dydis"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Priverstinai įgal. mast. keit."</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Ar įr. svet. užkl. vald. mast. keit. elgs."</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Numatytasis mastelio keitimas"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Toli"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korėjiečių (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Teksto koduotė"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Pasiekiamumas"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorijos"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Spartieji valdikliai"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Sl. nykščiu iš kair. ar deš. kr., kad pasiekt. sparč. vald. ir pasl. pr. ir URL juost."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Pagrindiniame puslapyje pateikiami dažniausiai lankyti tinklalapiai."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Intuityvioji „Google“ paieška"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Kai naud. „Google“ paiešką, naud. Int. „Google“ paiešką, kad renk. tekst. b. rodomi rezult. (tai g. padid. duom. naud.)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Visas ekranas"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Jei norite paslėpti būsenos juostą, naudokite viso ekrano režimą."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Duomenų jungiamumo problema"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Failo problema"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Patvirtinti"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Išvalyti istoriją"</string>
     <string name="browser_history" msgid="1038987118290272525">"Paskutiniai lankyti puslapiai"</string>
     <string name="empty_history" msgid="8738772352308207274">"Naršyklės istorija tuščia."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Pridėti žymę..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Pridėti"</string>
     <string name="search_hint" msgid="4647356319916631820">"Ieškokite ar įveskite URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Bendrinti"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Daugiau galimų skirtukų nėra"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"„Google“ su Intuityviąja paieška (Laboratorijos)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Atkurti langus?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Atrodo, naršyklė užstrigo. Ar norėtumėte atkurti paskutinį kartą naudotus langus?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Taip"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Ne"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Peržiūra:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Vietinės"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobilusis įrenginys"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Stalinis kompiuteris"</string>
 </resources>
diff --git a/res/values-lv-sw600dp/strings.xml b/res/values-lv-sw600dp/strings.xml
index ba2eb73..29ff90c 100644
--- a/res/values-lv-sw600dp/strings.xml
+++ b/res/values-lv-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Atvērt jaunā fona cilnē"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Atvērt visas grāmatzīmes jaunās cilnēs"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Atvērt jaunas cilnes aiz pašreiz atvērtās"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vai atjaunot cilnes?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Notika pārlūkprogrammas avārija. Vai vēlaties atjaunot pēdējās atvērtās cilnes?"</string>
 </resources>
diff --git a/res/values-lv-xlarge/strings.xml b/res/values-lv-xlarge/strings.xml
index 75c6059..0279ba9 100644
--- a/res/values-lv-xlarge/strings.xml
+++ b/res/values-lv-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Atvērt jaunā fona cilnē"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Atvērt visas jaunās cilnēs"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Atvērt jaunas cilnes aiz pašreizējās"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vai atjaunot cilnes?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Notika pārlūkprogrammas avārija. Vai vēlaties atjaunot pēdējās atvērtās cilnes?"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 7322e2e..9d7dbc7 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Labi"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Atcelt"</string>
     <string name="location" msgid="3411848697912600125">"Adrese"</string>
+    <string name="account" msgid="5179824606448077042">"Konts"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Pievienot:"</string>
     <string name="new_folder" msgid="7743540149088867917">"Jauna mape"</string>
     <string name="edit_folder" msgid="621817453133656156">"Rediģēt mapi"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Lejupielādes"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopēt lapas URL"</string>
     <string name="share_page" msgid="593756995297268343">"Kopīgot lapu"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Iesaldēt cilni"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Saglabāt lapu"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Lapa ir saglabāta."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Neizdevās saglabāt lapu."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Ievadiet un saglabājiet datus tīmekļa veidlapu lauku automātiskai aizpildīšanai."</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Autom. pierakst. vietnē Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Pierakstīšanās pakalpojumā Google vietnes, izmantojot <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Ir pieejama automātiskā pierakstīšanās."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Pierakstīties kā"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Pieteikties"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Paslēpt"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Neizdevās pieteikties."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Ievadiet datus, kas automātiski jāaizpilda tīmekļa laukos, kad tiem pieskaraties."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Vārds, uzvārds:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Rādīt brīdinājumu, ja radusies problēma ar vietnes drošību"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Pieņemt sīkfailus"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Atļaut vietnēm saglabāt un nolasīt sīkfailu datus"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Teksta lielums"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Sīks"</item>
     <item msgid="1950030433642671460">"Mazs"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Liels"</item>
     <item msgid="7201512237890458902">"Milzīgs"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Teksta lielums"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimālais fonta lielums"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Pieprasīt tālummaiņas iespēj."</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Ignorēt vietnes piepr. par tālummaiņas kontrolēšanu vai ne."</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Noklusējuma tālummaiņa"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Tālu"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korejiešu (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Teksta kodējums"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Pieejamība"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorijas"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Ātrās piekļuves vadīklas"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Lai piekļ. ātr. piekļ. vadīklām un slēptu lietojumpr. un URL joslas, ekr. lab. vai kr. malā pavelciet ar īkšķi."</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Sākumlapā tiek rādītas biežāk apmeklētās tīmekļa lapas."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google dinamiskā meklēšana"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Izmantojiet Google dinamisko meklēšanu, kad lietojat Google meklēšanu, lai redzētu rezultātus rakstīšanas laikā (var tikt izmantots vairāk datu)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pilnekrāna režīms"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Lai paslēptu statusa joslu, izmantojiet pilnekrāna režīmu."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datu savienojamības problēma"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Faila problēma"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Apstiprināt"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Notīrīt vēsturi"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nesen apmeklētās lapas"</string>
     <string name="empty_history" msgid="8738772352308207274">"Pārlūkprogrammas vēsture ir tukša."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Pievienot grāmatzīmi..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Pievienot"</string>
     <string name="search_hint" msgid="4647356319916631820">"Meklējiet vai ievadiet URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Kopīgot"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Vairs nav pieejamu ciļņu"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Pakalpojums Google ar dinamisko meklēšanu (Laboratorijas)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vai atjaunot logus?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Notika pārlūkprogrammas avārija. Vai vēlaties atjaunot pēdējos atvērtos logus?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Jā"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nē"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Priekšskatījums:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Vietējās"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Versija mobilajām ierīcēm"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Versija datoriem"</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
new file mode 100644
index 0000000..5c869a5
--- /dev/null
+++ b/res/values-ms/strings.xml
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name" msgid="1935869255545976415">"Penyemak imbas"</string>
+    <string name="choose_upload" msgid="3649366287575002063">"Pilih fail untuk dimuat naik"</string>
+    <string name="uploads_disabled" msgid="463761197575372994">"Muat naik fail dilumpuhkan."</string>
+    <string name="new_tab" msgid="4505722538297295141">"Tetingkap baru"</string>
+    <string name="new_incognito_tab" msgid="5821404839654751753">"Tetingkap penyamaran baru"</string>
+    <string name="active_tabs" msgid="3050623868203544623">"Tetingkap"</string>
+    <string name="tab_bookmarks" msgid="2305793036003473653">"Penanda halaman"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"Yang paling kerap dilawati"</string>
+    <string name="tab_history" msgid="1979267558744613746">"Sejarah"</string>
+    <string name="added_to_bookmarks" msgid="1020224130695956728">"Ditambah ke penanda halaman"</string>
+    <string name="removed_from_bookmarks" msgid="6063705902028438800">"Dialih keluar daripada penanda halaman"</string>
+    <string name="sign_in_to" msgid="5939425800148759165">"Log masuk ke \"<xliff:g id="REALM">%s2</xliff:g>\" <xliff:g id="HOSTNAME">%s1</xliff:g>"</string>
+    <string name="username" msgid="5057566336518215922">"Nama"</string>
+    <string name="password" msgid="1177138552305184404">"Kata laluan"</string>
+    <string name="action" msgid="183105774472071343">"Log masuk"</string>
+    <string name="bookmarks_search" msgid="5229596268214362873">"Penyemak imbas"</string>
+    <string name="cancel" msgid="3017274947407233702">"Batal"</string>
+    <string name="ok" msgid="1509280796718850364">"OK"</string>
+    <string name="title_bar_loading" msgid="7438217780834640678">"Memuatkan..."</string>
+    <string name="page_info" msgid="4048529256302257195">"Maklumat halaman"</string>
+    <string name="page_info_view" msgid="5303490449842635158">"Lihat maklumat halaman"</string>
+    <string name="page_info_address" msgid="2222306609532903254">"Alamat:"</string>
+    <string name="ssl_warnings_header" msgid="79744901983636370">"Terdapat masalah dengan sijil keselamatan untuk tapak ini."</string>
+    <string name="ssl_continue" msgid="8031515015829358457">"Teruskan"</string>
+    <string name="security_warning" msgid="6607795404322797541">"Amaran keselamatan"</string>
+    <string name="view_certificate" msgid="1472768887529093862">"Lihat sijil"</string>
+    <string name="ssl_go_back" msgid="4598951822061593819">"Kembali"</string>
+    <string name="ssl_untrusted" msgid="5369967226521102194">"Sijil ini bukan daripada pihak berkuasa yang dipercayai."</string>
+    <string name="ssl_mismatch" msgid="558688832420069896">"Nama tapak tidak sepadan dengan nama pada sijil."</string>
+    <string name="ssl_expired" msgid="5739349389499575559">"Sijil ini telah tamat tempoh."</string>
+    <string name="ssl_not_yet_valid" msgid="2893167846212645846">"Sijil ini belum lagi sah."</string>
+    <string name="ssl_certificate" msgid="5226747157992111668">"Sijil keselamatan"</string>
+    <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Sijil ini sah."</string>
+    <string name="issued_to" msgid="9032338008819841339">"Dikeluarkan kepada:"</string>
+    <string name="common_name" msgid="5745530093500062357">"Nama biasa:"</string>
+    <string name="org_name" msgid="8868889052889991293">"Organisasi:"</string>
+    <string name="org_unit" msgid="4489056376307768196">"Unit Organisasi:"</string>
+    <string name="issued_by" msgid="6959484326943152487">"Dikeluarkan oleh:"</string>
+    <string name="validity_period" msgid="57988851973181309">"Kesahan:"</string>
+    <string name="issued_on" msgid="2082890654801808368">"Dikeluarkan pada:"</string>
+    <string name="expires_on" msgid="8061200430557020704">"Tamat tempoh pada:"</string>
+    <string name="stopping" msgid="4839698519340302982">"Menghentikan…"</string>
+    <string name="stop" msgid="5687251076030630074">"Henti"</string>
+    <string name="reload" msgid="8585220783228408062">"Muat semula"</string>
+    <string name="back" msgid="8414603107175713668">"Kembali"</string>
+    <string name="forward" msgid="4288210890526641577">"Ke hadapan"</string>
+    <string name="save" msgid="5922311934992468496">"OK"</string>
+    <string name="do_not_save" msgid="6777633870113477714">"Batal"</string>
+    <string name="location" msgid="3411848697912600125">"Alamat"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
+    <string name="containing_folder" msgid="6771180232953030479">"Tambah ke"</string>
+    <string name="new_folder" msgid="7743540149088867917">"Folder baru"</string>
+    <string name="edit_folder" msgid="621817453133656156">"Edit folder"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"Padamkan folder"</string>
+    <string name="no_subfolders" msgid="5880411440592452802">"Tiada subfolder"</string>
+    <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Penanda halaman"</string>
+    <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Skrin utama"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5450890093372998187">"Folder lain..."</string>
+    <string name="name" msgid="5462672162695365387">"Label"</string>
+    <string name="http" msgid="2163722670597250102">"http://"</string>
+    <string name="save_to_bookmarks" msgid="6101482434920313244">"Tambah Penanda Halaman"</string>
+    <string name="bookmark_this_page" msgid="7530739804320811054">"Menanda halaman laman ini"</string>
+    <string name="remove" msgid="7820112494467011374">"Alih keluar"</string>
+    <string name="edit_bookmark" msgid="5024089053490231905">"Edit penanda halaman"</string>
+    <string name="create_shortcut_bookmark" msgid="1995095662095484289">"Tambah pintasan ke laman utama"</string>
+    <string name="open_bookmark" msgid="8473581305759935790">"Buka"</string>
+    <string name="remove_bookmark" msgid="8407495852801410891">"Padam penanda halaman"</string>
+    <string name="remove_from_bookmarks" msgid="4374080666576982775">"Alih keluar daripada penanda halaman"</string>
+    <string name="remove_history_item" msgid="5021424935726728618">"Alih keluar daripada sejarah"</string>
+    <string name="set_as_homepage" msgid="4752937379414905560">"Tetapkan sebagai halaman utama"</string>
+    <string name="bookmark_saved" msgid="2766434679871317557">"Disimpan ke penanda halaman."</string>
+    <string name="bookmark_not_saved" msgid="700600955089376724">"Tidak boleh menyimpan penanda halaman."</string>
+    <string name="homepage_set" msgid="8768087280310966395">"Halaman utama sudah ditetapkan."</string>
+    <string name="bookmark_needs_title" msgid="6245900436119218187">"Penanda halaman mesti mempunyai nama."</string>
+    <string name="bookmark_needs_url" msgid="7809876865972755158">"Penanda halaman mesti mempunyai lokasi."</string>
+    <string name="bookmark_url_not_valid" msgid="6719785633980202419">"URL tidak sah."</string>
+    <string name="bookmark_cannot_save_url" msgid="791722768778386941">"URL ini tidak boleh ditandakan halamannya."</string>
+    <string name="delete_bookmark" msgid="2422989994934201992">"Padam"</string>
+    <string name="bookmark_page" msgid="6845189305130307274">"Tandakan halaman yang terakhir dilihat"</string>
+    <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Lakaran kenit"</string>
+    <string name="bookmark_list_view" msgid="7848510619500937839">"Senarai"</string>
+    <string name="current_page" msgid="7510129573681663135">"dari "</string>
+    <string name="delete_bookmark_warning" msgid="758043186202032205">"Penanda halaman \"<xliff:g id="BOOKMARK">%s</xliff:g>\" akan dipadamkan."</string>
+    <string name="open_all_in_new_window" msgid="6514602245828366045">"Buka semua dalam tetingkap baru"</string>
+    <string name="goto_dot" msgid="3895839050522602723">"Pergi"</string>
+    <string name="incognito_tab" msgid="5419458065370134289">"Buka tab penyamaran baru"</string>
+    <string name="select_dot" msgid="6299170761900561967">"Pilih teks"</string>
+    <string name="tab_picker_title" msgid="864478399057782913">"Tetingkap semasa"</string>
+    <string name="tab_picker_remove_tab" msgid="630087809802479397">"Tutup"</string>
+    <string name="bookmarks" msgid="1961279134885867815">"Penanda halaman"</string>
+    <string name="shortcut_bookmark" msgid="3974876480401135895">"Penanda halaman"</string>
+    <string name="history" msgid="2451240511251410032">"Sejarah"</string>
+    <string name="menu_view_download" msgid="2124570321712995120">"Muat turun"</string>
+    <string name="copy_page_url" msgid="7635062169011319208">"Salin url halaman"</string>
+    <string name="share_page" msgid="593756995297268343">"Kongsi halaman"</string>
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
+    <string name="menu_save_webarchive" msgid="2474117375302625691">"Simpan halaman"</string>
+    <string name="webarchive_saved" msgid="2212053339474523406">"Halaman disimpan."</string>
+    <string name="webarchive_failed" msgid="19950914584285713">"Gagal menyimpan halaman."</string>
+    <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> penanda halaman"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"Folder kosong"</string>
+    <string name="contextmenu_openlink" msgid="7237961252214188935">"Buka"</string>
+    <string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Buka dalam tetingkap baru"</string>
+    <string name="contextmenu_openlink_newwindow_background" msgid="5556131402560251639">"Buka dalam tetingkap latar belakang baru"</string>
+    <string name="contextmenu_savelink" msgid="5508554930832538184">"Simpan pautan"</string>
+    <string name="contextmenu_sharelink" msgid="5392275392280130331">"Kongsi pautan"</string>
+    <string name="contextmenu_copy" msgid="398860586635404030">"Salin"</string>
+    <string name="contextmenu_copylink" msgid="5153657160294534270">"Salin URL pautan"</string>
+    <string name="contextmenu_download_image" msgid="4243829645180686912">"Simpan imej"</string>
+    <string name="contextmenu_view_image" msgid="3870625602053600905">"Papar imej"</string>
+    <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Tetapkan sebagai kertas dinding"</string>
+    <string name="contextmenu_dial_dot" msgid="5856550683415933806">"Dail..."</string>
+    <string name="contextmenu_add_contact" msgid="3183511922223645716">"Tambah kenalan"</string>
+    <string name="contextmenu_send_mail" msgid="1014513374828775660">"Hantar e-mel"</string>
+    <string name="contextmenu_map" msgid="7471390435434034912">"Peta"</string>
+    <string name="choosertitle_sharevia" msgid="4600490613341909086">"Kongsi melalui"</string>
+    <string name="clear" msgid="7070043081700011461">"Padam bersih"</string>
+    <string name="replace" msgid="4843033491070384047">"Gantikan"</string>
+    <string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Penanda halaman"</string>
+    <string name="menu_preferences" msgid="6709237687234102240">"Tetapan"</string>
+    <string name="pref_content_title" msgid="722227111894838633">"Tetapan kandungan halaman"</string>
+    <string name="pref_content_load_images" msgid="2125616852957377561">"Muatkan imej"</string>
+    <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Paparkan imej di halaman web"</string>
+    <string name="pref_content_block_popups" msgid="4158524847764470895">"Sekat pop timbul"</string>
+    <string name="pref_content_javascript" msgid="4570972030299516843">"Dayakan JavaScript"</string>
+    <string name="pref_content_open_in_background" msgid="824123779725118663">"Buka di latar belakang"</string>
+    <string name="pref_content_plugins" msgid="7231944644794301582">"Dayakan pemalam"</string>
+  <string-array name="pref_content_plugins_choices">
+    <item msgid="6745108155096660725">"Sentiasa hidup"</item>
+    <item msgid="2484126708670016519">"Atas permintaan"</item>
+    <item msgid="8547442717307793863">"Mati"</item>
+  </string-array>
+    <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Buka tetingkap baru di belakang tetingkap semasa"</string>
+    <string name="pref_content_homepage" msgid="3324574611613105696">"Tetapkan halaman utama"</string>
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"Tetapkan enjin carian"</string>
+    <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Pilih enjin carian"</string>
+    <string name="pref_set_homepage_to" msgid="7196350233061395098">"Tetapkan pada…"</string>
+    <string name="pref_use_current" msgid="1778622474040406672">"Halaman semasa"</string>
+    <string name="pref_use_blank" msgid="8503238592551111169">"Halaman kosong"</string>
+    <string name="pref_use_default" msgid="192587563274735878">"Halaman lalai"</string>
+    <string name="pref_content_autofit" msgid="8260474534053660809">"Muat auto halaman"</string>
+    <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Format halaman web agar padan dengan saiz skrin"</string>
+    <string name="pref_general_title" msgid="1946872771219249323">"Umum"</string>
+    <string name="pref_general_sync_title" msgid="3138637035975860324">"Penyegerakan"</string>
+    <string name="pref_general_autofill_title" msgid="547881256865816858">"Auto isi"</string>
+    <string name="pref_personal_sync_with_chrome" msgid="1695182180332194033">"Segerakkan dengan Google Chrome"</string>
+    <string name="pref_personal_sync_with_chrome_summary" msgid="7414133931827321055">"Berkongsi penanda halaman &amp; data lain antara Penyemak Imbas Android dan Google Chrome"</string>
+    <string name="pref_personal_google_account" msgid="952360133341490071">"Akaun Google"</string>
+    <string name="pref_personal_sync_bookmarks" msgid="59237515966184432">"Segerakkan penanda halaman"</string>
+    <string name="pref_personal_sync_bookmarks_summary" msgid="4791767605662205482">"Segerakkan penanda halaman antara Penyemak Imbas Android dan Google Chrome"</string>
+    <string name="pref_personal_start_syncing" msgid="6046972042512655232">"Mula menyegerak"</string>
+    <string name="pref_personal_account_dialog_title" msgid="1390867119887955530">"Plih akaun utk kngsi"</string>
+    <string name="pref_autofill_enabled" msgid="1015751713312396713">"Auto isi borang"</string>
+    <string name="pref_autofill_enabled_summary" msgid="422640696197018914">"Isikan borang web dengan satu klik"</string>
+    <string name="pref_autofill_profile_editor" msgid="3864116896052437796">"Auto isi data"</string>
+    <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Masukkan dan simpan data untuk medan auto isi borang web"</string>
+    <string name="pref_autologin_title" msgid="2362827272595366379">"Log masuk Google automatik"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Melog masuk ke dalam tapak Google menggunakan <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <!-- outdated translation 8013977161879448141 -->     <string name="autologin_bar_text" msgid="3684581827167173371">"Log masuk automatik tersedia."</string>
+    <string name="autologin_bar_login_text" msgid="7052816600314556734">"Log masuk"</string>
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
+    <string name="autologin_bar_error" msgid="5132514366023044839">"Log masuk gagal."</string>
+    <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Masukkan data yang anda mahu auto isi dalam medan web apabila anda menyentuhnya."</string>
+    <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nama penuh:"</string>
+    <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"E-mel:"</string>
+    <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"Nama syarikat:"</string>
+    <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"Alamat baris 1:"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"Alamat jalan, P.S, d/a"</string>
+    <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"Alamat baris 2:"</string>
+    <string name="autofill_profile_editor_address_line_2_hint" msgid="2048330295853546405">"Pangsapuri, suite, unit, bangunan, tingkat dsb."</string>
+    <string name="autofill_profile_editor_city" msgid="4193225955409148508">"Bandar / Pekan:"</string>
+    <string name="autofill_profile_editor_state" msgid="8549739922338171458">"Negeri / Daerah / Wilayah:"</string>
+    <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Poskod:"</string>
+    <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Negara:"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Telefon:"</string>
+    <string name="autofill_profile_editor_phone_number_invalid" msgid="7166394872369167580">"Nombor telefon tidak sah"</string>
+    <string name="autofill_profile_editor_save_profile" msgid="8349915287435262888">"Simpan profil"</string>
+    <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil disimpan"</string>
+    <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil telah dipadamkan"</string>
+    <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Padam profil"</string>
+    <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Penyemak imbas boleh melengkapkan borang web seperti ini secara automatik. Adakah anda mahu menyediakan profil anda?"</string>
+    <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Auto isi sentiasa boleh dikonfigurasikan melalui Tetapan Penyemak Imbas."</string>
+    <string name="disable_autofill" msgid="8305901059849400354">"Lumpuhkan auto isi"</string>
+    <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privasi &amp; keselamatan"</string>
+    <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Padam bersih cache"</string>
+    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Padam bersih kandungan tercache dan pangkalan data setempat"</string>
+    <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Kandungan tercache dan pangkalan data setempat akan dipadamkan."</string>
+    <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Kuki"</string>
+    <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Padam bersih semua data kuki"</string>
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Padam bersih semua kuki penyemak imbas"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Semua kuki akan dipadamkan."</string>
+    <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Padam bersih sejarah"</string>
+    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Padam bersih sejarah navigasi penyemak imbas"</string>
+    <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Sejarah navigasi penyemak imbas akan dipadamkan."</string>
+    <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Data borang"</string>
+    <string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Padam bersih data borang"</string>
+    <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Padam bersih semua data borang yang disimpan"</string>
+    <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Semua data borang yang disimpan akan dipadamkan."</string>
+    <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Padam bersih kata laluan"</string>
+    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Padam bersih semua kata laluan yang disimpan"</string>
+    <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Semua kata laluan yang disimpan akan dipadamkan."</string>
+    <string name="pref_privacy_location_title" msgid="7458378016606081067">"Lokasi"</string>
+    <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Dayakan lokasi"</string>
+    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Benarkan tapak meminta akses ke lokasi anda"</string>
+    <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Padam bersih akses lokasi"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Padam bersih akses lokasi bagi semua tapak web"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Padam bersih akses lokasi bagi semua tapak web"</string>
+    <string name="pref_security_passwords_title" msgid="5734190542383756711">"Kata laluan"</string>
+    <string name="pref_security_remember_passwords" msgid="6492957683454529549">"Ingat kata laluan"</string>
+    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Simpan nama pengguna dan kata laluan untuk tapak web"</string>
+    <string name="pref_security_save_form_data" msgid="1213669802810198893">"Ingat data borang"</string>
+    <string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Ingat data yang saya taipkan dalam borang untuk kegunaan akan datang"</string>
+    <string name="pref_security_show_security_warning" msgid="8901135676266754559">"Tunjukkan amaran keselamatan"</string>
+    <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Tunjukkan amaran jika terdapat masalah dengan keselamatan tapak"</string>
+    <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Terima kuki"</string>
+    <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Benarkan tapak menyimpan dan membaca data \"kuki\""</string>
+  <string-array name="pref_text_size_choices">
+    <item msgid="4952686548944739548">"Sangat kecil"</item>
+    <item msgid="1950030433642671460">"Kecil"</item>
+    <item msgid="4338347520133294584">"Biasa"</item>
+    <item msgid="5043128215356351184">"Besar"</item>
+    <item msgid="7201512237890458902">"Sangat Besar"</item>
+  </string-array>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Saiz fon minimum"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
+    <string name="pref_default_zoom" msgid="8076142259097187395">"Zum lalai"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item msgid="549583171195154919">"Jauh"</item>
+    <item msgid="5619034257768161024">"Sederhana"</item>
+    <item msgid="3840999588443167001">"Dekat"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zum lalai"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Buka halaman dalam gambaran keseluruhan"</string>
+    <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Tunjukkan gambaran keseluruhan halaman-halaman yang baru dibuka"</string>
+    <string name="pref_extras_title" msgid="7075456173747370647">"Terperinci"</string>
+    <string name="pref_extras_website_settings" msgid="67866640052455549">"Tetapan tapak web"</string>
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Tetapan terperinci untuk tapak web individu"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Tetapkan semula lalai"</string>
+    <string name="pref_extras_reset_default" msgid="8904000515846202110">"Tetapkan semula kepada lalai"</string>
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Memulihkan ke tetapan lalai"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="6640261575874704022">"Tetapan akan berbalik ke nilai lalai."</string>
+    <string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Tetapkan semula kepada lalai"</string>
+    <string name="pref_development_title" msgid="3263854204533056480">"Nyahpepijat"</string>
+    <string name="pref_default_text_encoding" msgid="5742965543955558478">"Pengekodan teks"</string>
+  <string-array name="pref_default_text_encoding_choices">
+    <item msgid="7275223955790513818">"Latin-1 (ISO-8859-1)"</item>
+    <item msgid="2456597866837587140">"Unikod (UTF-8)"</item>
+    <item msgid="6122474363777211732">"Cina (GBK)"</item>
+    <item msgid="373372275931607040">"Cina (Big5)"</item>
+    <item msgid="891615911084608570">"Jepun (ISO-2022-JP)"</item>
+    <item msgid="5589150448475151241">"Jepun (Shift_JIS)"</item>
+    <item msgid="7356792686950371843">"Jepun (EUC-JP)"</item>
+    <item msgid="2193955365569270096">"Korea (EUC-KR)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Pengekodan teks"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Kebolehaksesan"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
+    <string name="pref_lab_title" msgid="5571091610359629423">"Makmal"</string>
+    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Kawalan pantas"</string>
+    <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Leret jari dr kiri/kanan utk akses kawalan pantas dan sembunyikan bar Apl &amp; URL"</string>
+    <string name="pref_lab_most_visited_homepage" msgid="7597766876952506909">"Halaman utama paling banyak dilawati"</string>
+    <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Halaman utama anda memaparkan halaman web yang paling banyak anda lawati."</string>
+    <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
+    <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Guna Google Instant bila anda guna Carian Google, utk tunjuk hasil bila anda menaip (boleh menambah penggunaan data)."</string>
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
+    <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Masalah kesambungan data"</string>
+    <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Masalah dengan fail"</string>
+    <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Sahkan"</string>
+    <string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Halaman yang anda cuba paparkan mengandungi data yang sudah pun diserahkan (\"POSTDATA\"). Jika anda menghantar semula data itu, sebarang tindakan yang dijalankan borang pada halaman itu (seperti carian atau pembelian dalam talian) akan diulangi."</string>
+    <string name="loadSuspendedTitle" msgid="675991625288706944">"Tiada sambungan rangkaian"</string>
+    <string name="loadSuspended" msgid="3133656588880851273">"Penyemak imbas tidak boleh memuatkan halaman ini kerana tiada sambungan internet."</string>
+    <string name="clear_history" msgid="5998307092715979619">"Padam bersih sejarah"</string>
+    <string name="browser_history" msgid="1038987118290272525">"Halaman terbaru dilawati"</string>
+    <string name="empty_history" msgid="8738772352308207274">"Sejarah penyemak imbas kosong."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
+    <string name="add_new_bookmark" msgid="8086367791400349049">"Tambah penanda halaman..."</string>
+    <string name="add_bookmark_short" msgid="3783984330998103735">"Tambah"</string>
+    <string name="search_hint" msgid="4647356319916631820">"Buat carian atau taipkan URL"</string>
+    <string name="search_button_text" msgid="5235226933877634410">"Pergi"</string>
+    <string name="search_settings_description" msgid="1422401062529014107">"Penanda halaman dan sejarah web"</string>
+    <string name="attention" msgid="3473639060042811244">"Perhatian"</string>
+    <string name="popup_window_attempt" msgid="2673111696288657989">"Tapak ini cuba membuka tetingkap pop timbul."</string>
+    <string name="allow" msgid="1157313689171991335">"Benarkan"</string>
+    <string name="block" msgid="9172175889884707800">"Sekat"</string>
+    <string name="too_many_windows_dialog_title" msgid="5175503564948906442">"Had tetingkap dicapai"</string>
+    <string name="too_many_windows_dialog_message" msgid="1398571800233959583">"Tidak dapat membuka tetingkap baru kerana anda telah membuka bilangan maksimum tetingkap."</string>
+    <string name="too_many_subwindows_dialog_title" msgid="3805453941587725944">"Pop-up sudah terbuka"</string>
+    <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"Tidak boleh membuka tetingkap pop-up baru kerana hanya satu sahaja yang boleh dibuka pada satu-satu masa."</string>
+    <string name="download_title" msgid="2122874021047565594">"Sejarah muat turun"</string>
+    <string name="download_unknown_filename" msgid="4013465542563652175">"&lt;Tidak diketahui&gt;"</string>
+    <string name="download_menu_open" msgid="4888327480367757513">"Buka"</string>
+    <string name="download_menu_clear" msgid="6264454531553418124">"Padam bersih daripada senarai"</string>
+    <string name="download_menu_delete" msgid="8815502136393894148">"Padam"</string>
+    <string name="download_menu_cancel" msgid="2545333007601851574">"Batalkan muat turun"</string>
+    <string name="download_menu_cancel_all" msgid="2136550823151999166">"Batalkan semua muat turun"</string>
+    <string name="download_cancel_dlg_title" msgid="8909108500262799748">"Batalkan muat turun"</string>
+    <string name="download_cancel_dlg_msg" msgid="6285389170052357797">"Semua <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> muat turun akan dibatalkan dan dipadam bersih daripada sejarah muat turun."</string>
+    <string name="download_delete_file" msgid="5330036497843073249">"Fail akan dipadamkan"</string>
+    <string name="download_file_error_dlg_title" msgid="2693630283595384874">"Kehabisan ruang"</string>
+    <string name="download_file_error_dlg_msg" msgid="5156405410324072471">"<xliff:g id="FILENAME">%s</xliff:g> tidak boleh dimuat turun."\n"Kosongkan sebahagian ruang pada telefon anda dan cuba lagi."</string>
+    <string name="download_failed_generic_dlg_title" msgid="6106781095337833391">"Muat turun tidak berjaya"</string>
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"Storan USB tidak tersedia"</string>
+    <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"Tiada kad SD"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"Storan USB diperlukan untuk memuat turun <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_no_sdcard_dlg_msg" product="default" msgid="2616399456116301518">"Kad SD diperlukan untuk memuat turun <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"Storan USB tidak tersedia"</string>
+    <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"Kad SD tidak tersedia"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"Storan USB sibuk. Untuk membenarkan muat turun, pilih \"Matikan storan USB\" dalam pemberitahuan."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"Kad SD sibuk. Untuk membenarkan muat turun, pilih \"Matikan storan USB\" dalam pemberitahuan."</string>
+    <string name="cannot_download" msgid="8150552478556798780">"Boleh memuat turun URL \"http\" atau \"https\" sahaja."</string>
+    <string name="download_no_application_title" msgid="1286056729168874295">"Tidak boleh membuka fail"</string>
+    <string name="retry" msgid="1835923075542266721">"Cuba semula"</string>
+    <string name="no_downloads" msgid="3947445710685021498">"Sejarah muat turun kosong."</string>
+    <string name="download_error" msgid="413496839831257187">"Download tidak berjaya."</string>
+    <string name="download_success" msgid="2279041638155595203">"Muat turun <xliff:g id="FILE">%s</xliff:g> selesai."</string>
+    <string name="download_running" msgid="2622942231322015059">"Memuat turun..."</string>
+    <string name="download_pending" msgid="2599683668575349559">"Memulakan muat turun ..."</string>
+    <string name="download_pending_network" msgid="6548714525679461053">"Menunggu sambungan data..."</string>
+    <string name="download_running_paused" msgid="6418029352085656495">"Menunggu sambungan data..."</string>
+    <string name="download_canceled" msgid="6057083743144492515">"Muat turun dibatalkan."</string>
+    <string name="download_not_acceptable" msgid="313769696131563652">"Tidak boleh memuat turun. Kandungan tidak disokong pada telefon ini."</string>
+    <string name="download_file_error" msgid="1206648050615176113">"Tidak boleh menyelesaikan muat turun. Ruang tidak mencukupi."</string>
+    <string name="download_length_required" msgid="9038605488460437406">"Tidak boleh memuat turun. Saiz item tidak boleh ditentukan."</string>
+    <string name="download_precondition_failed" msgid="8327584102874295580">"Muat turun terganggu. Ia tidak boleh disambung semula."</string>
+    <string name="search_the_web" msgid="6046130189241962337">"Cari di web"</string>
+    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Storan penyemak imbas penuh"</string>
+    <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"Klik untuk mengosongkan ruang."</string>
+    <string name="webstorage_clear_data_title" msgid="689484577124333977">"Padam bersih data yang disimpan"</string>
+    <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Padam bersih data yang disimpan"</string>
+    <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Semua data yang disimpan oleh tapak web ini akan dipadamkan"</string>
+    <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Padam bersih semua"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Batal"</string>
+    <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB disimpan pada telefon anda"</string>
+    <string name="loading_video" msgid="4887871585216091096">"Memuatkan video"</string>
+    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> mahu mengetahui lokasi anda"</string>
+    <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Kongsi lokasi"</string>
+    <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Tolak"</string>
+    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Ingat pilihan"</string>
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"Tapak ini boleh mengakses lokasi anda. Tukarkannya dalam Tetapan -&gt; Tetapan tapak web"</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"Tapak ini tidak boleh mengakses lokasi anda. Tukarkannya dalam Tetapan -&gt; Tetapan tapak web"</string>
+    <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Padam bersih akses lokasi"</string>
+    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Tapak ini boleh mengakses lokasi anda pada masa ini"</string>
+    <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Tapak ini tidak boleh mengakses lokasi anda pada masa ini"</string>
+    <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Padam bersih akses lokasi"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Akses lokasi untuk tapak web ini akan dipadam bersih"</string>
+    <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Padam bersih akses"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Batal"</string>
+    <string name="website_settings_clear_all" msgid="8739804325997655980">"Padam bersih semua"</string>
+    <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Padam bersih semua tetapan tapak web?"</string>
+    <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Semua tapak web dan kebenaran lokasi akan dipadamkan."</string>
+    <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Padamkan semua data"</string>
+    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Batal"</string>
+    <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"Menetapkan kertas dinding..."</string>
+    <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"Penanda halaman"</string>
+    <string name="empty_bookmarks_folder" msgid="7843361614634930942">"Tiada penanda halaman"</string>
+    <string name="rlz_access_point" msgid="7165847807377650632">"Y1"</string>
+    <string name="account_chooser_dialog_title" msgid="3314204833188808194">"Pilih akaun"</string>
+    <string name="import_bookmarks_dialog_title" msgid="3325557652271172128">"Segerakkan dengan akaun Google"</string>
+    <string name="import_bookmarks_dialog_description" msgid="1942452375564381488">"Penanda halaman pada peranti ini belum lagi dikaitkan dengan akaun Google. Simpan penanda halaman ini dengan menambahnya ke akaun. Padam penanda halaman ini jika anda tidak mahu menyegerakkannya."</string>
+    <string name="import_bookmarks_dialog_select_add_account" msgid="3102882579089291099">"Tambah penanda halaman yang ada pada peranti ini buat masa ini dan mula menyegerakkan dengan Akaun Google"</string>
+    <string name="import_bookmarks_dialog_delete_select_account" msgid="5192284761080626386">"Padamkan penanda halaman yang ada pada peranti ini buat masa ini dan mulakan penyegerakan dengan Akaun Google"</string>
+    <string name="import_bookmarks_dialog_confirm_delete" msgid="8854001080444749211">"Padamkan penanda halaman yang ada pada peranti ini buat masa ini dan mulakan penyegerakan penanda halaman dengan <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>."</string>
+    <string name="import_bookmarks_dialog_confirm_add" msgid="5433677293195372675">"Tambah penanda halaman yang ada pada peranti ini buat masa ini dan mulakan penyegerakan dengan <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>."</string>
+    <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"Padam penanda halaman"</string>
+    <string name="import_bookmarks_wizard_next" msgid="7578143961884352676">"Seterusnya"</string>
+    <string name="import_bookmarks_wizard_previous" msgid="8551440353688257031">"Sebelumnya"</string>
+    <string name="import_bookmarks_wizard_cancel" msgid="4936061122806506634">"Batal"</string>
+    <string name="import_bookmarks_wizard_done" msgid="1446247092194489191">"Selesai"</string>
+    <string name="import_bookmarks_dialog_add" msgid="7552306756868669353">"Tambah penanda halaman ke Akaun Google"</string>
+    <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Tambah penanda halaman Android anda ke penanda halaman untuk <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
+    <string name="menu_share_url" msgid="5851814357333739700">"Kongsi"</string>
+    <string name="max_tabs_warning" msgid="4122034303809457570">"Tiada lagi tab yang sedia"</string>
+    <string name="instant_search_label" msgid="8769284297650716935">"Google dengan Instant (Makmal)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Pulihkan tetingkap?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Penyemak imbas kelihatan seperti telah ranap. Adakah anda mahu memulihkan tetingkap anda kepada keadaan terakhirnya?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ya"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Tidak"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Pratonton:"</string>
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
+</resources>
diff --git a/res/values-nb-sw600dp/strings.xml b/res/values-nb-sw600dp/strings.xml
index 421bb88..9461db6 100644
--- a/res/values-nb-sw600dp/strings.xml
+++ b/res/values-nb-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Åpne i ny bakgrunnsfane"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Åpne alle i nye faner"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Åpne nye faner bak den gjeldende"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vil du gjenopprette fanene?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Nettleseren ser ut til å ha fått et programstopp. Vil du gjenopprette fanene fra forrige økt?"</string>
 </resources>
diff --git a/res/values-nb-xlarge/strings.xml b/res/values-nb-xlarge/strings.xml
index 67ab1b6..507fab4 100644
--- a/res/values-nb-xlarge/strings.xml
+++ b/res/values-nb-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Åpne i ny bakgrunnsfane"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Åpne alle i nye faner"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Åpne nye faner bak den gjeldende"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vil du gjenopprette fanene?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Nettleseren ser ut til å ha fått et programstopp. Vil du gjenopprette fanene fra forrige økt?"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 18007c7..0c077e3 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Avbryt"</string>
     <string name="location" msgid="3411848697912600125">"Adresse"</string>
+    <string name="account" msgid="5179824606448077042">"Konto"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Legg til i"</string>
     <string name="new_folder" msgid="7743540149088867917">"Ny mappe"</string>
     <string name="edit_folder" msgid="621817453133656156">"Rediger mappe"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Nedlastinger"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopier nettstedsadresse"</string>
     <string name="share_page" msgid="593756995297268343">"Del side"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Frys fane"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Lagre siden"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Siden ble lagret."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Fikk ikke lagret siden."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Skriv inn og lagre data for automatisk utfylling av nettskjemafelter"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatisk Google-pålogging"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Pålogging til Google-nettsteder ved hjelp av <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatisk pålogging er tilgjengelig."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Logg på som"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Logg på"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skjul"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Pålogging mislyktes."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Skriv inn dataene du vil fylle inn automatisk når du trykker på felter på nettet."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Fullt navn:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Vis advarsel hvis det er et problem med sikkerheten på et nettsted"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Godta informasjonskapsler"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillat nettsteder å lagre og lese informasjonskapsler"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Skriftstørrelse"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Bitteliten"</item>
     <item msgid="1950030433642671460">"Liten"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Stor"</item>
     <item msgid="7201512237890458902">"Kjempestor"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tekststørrelse"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minste skriftstørrelse"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Tving aktivering av zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Hvorvidt et nettsteds forespørs. om å kontr. zoom-adferd skal overstyres"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standardzoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Langt unna"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Koreansk (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstkoding"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Tilgjengelighet"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Prøvefunksjoner"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hurtigkontroller"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Sveip fra venstre mot høyre kant for å bruke hurtigkontr. og skjule app- og nettadresserader"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Startsiden viser dine mest besøkte nettsider."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Bruk Google Instant når du bruker Google Søk for å vise resultater mens du skriver (dette kan gi økt databruk)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fullskjerm"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Bruk fullskjermmodus for å skjule statusfeltet."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datatilkoblingsproblem"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem med fil"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekreft"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Tøm logg"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nylig besøkte sider"</string>
     <string name="empty_history" msgid="8738772352308207274">"Nettleserloggen er tom."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Legg til bokmerke"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Legg til"</string>
     <string name="search_hint" msgid="4647356319916631820">"Søk etter eller skriv inn URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Del"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Ingen flere faner tilgjengelig"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google med Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vil du gjenopprette vinduene?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Nettleseren ser ut til å ha fått et programstopp. Vil du gjenopprette vinduene fra forrige økt?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ja"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nei"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Forhåndsvisning:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Skrivebord"</string>
 </resources>
diff --git a/res/values-nl-sw600dp/strings.xml b/res/values-nl-sw600dp/strings.xml
index 59c7ad5..86292d0 100644
--- a/res/values-nl-sw600dp/strings.xml
+++ b/res/values-nl-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Openen op een nieuw tabblad op de achtergrond"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Alle bladwijzers openen op nieuwe tabbladen"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Nieuwe tabbladen openen achter het huidige tabblad"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Tabbladen herstellen?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"De browser lijkt te zijn gecrasht. Wilt u de tabbladen uit uw vorige sessie herstellen?"</string>
 </resources>
diff --git a/res/values-nl-xlarge/strings.xml b/res/values-nl-xlarge/strings.xml
index ea78890..16d5032 100644
--- a/res/values-nl-xlarge/strings.xml
+++ b/res/values-nl-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Openen op een nieuw tabblad op de achtergrond"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Alle bladwijzers openen op nieuwe tabbladen"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Nieuwe tabbladen openen achter het huidige tabblad"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Tabbladen herstellen?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"De browser lijkt te zijn gecrasht. Wilt u de tabbladen uit uw vorige sessie herstellen?"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 8c25469..7b6e875 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Annuleren"</string>
     <string name="location" msgid="3411848697912600125">"Adres"</string>
+    <string name="account" msgid="5179824606448077042">"Account"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Toevoegen aan"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nieuwe map"</string>
     <string name="edit_folder" msgid="621817453133656156">"Map bewerken"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Pagina-URL kopiëren"</string>
     <string name="share_page" msgid="593756995297268343">"Pagina delen"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Statische tabbladkopie maken"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Pagina opslaan"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Pagina opgeslagen."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Opslaan van pagina mislukt."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Gegevens invoeren en opslaan voor automatisch invullen van velden in webformulieren"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatische Google-aanmelding"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Aanmelden bij Google-sites met <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatisch aanmelden is beschikbaar."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Aanmelden als"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Aanmelden"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Verbergen"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Aanmelden mislukt."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Geef de gegevens op die u automatisch in webvelden wilt laten invullen wanneer u ze aanraakt."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Volledige naam:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Waarschuwen als er een beveiligingsprobleem is met een site"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Cookies accepteren"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Sites toestaan cookiegegevens te lezen en schrijven"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tekengrootte"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Minuscuul"</item>
     <item msgid="1950030433642671460">"Klein"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Groot"</item>
     <item msgid="7201512237890458902">"Enorm"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tekengrootte"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimum lettergrootte"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Zoom inschakelen forceren"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Of websiteverzoek tot bepalen van zoomgedrag wordt genegeerd"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standaardzoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Veraf"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Koreaans (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstcodering"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Toegankelijkheid"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Snelle bedieningselementen"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Schuif vanaf links of rechts voor Quick Controls en om app- en URL-balken te verbergen"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Op uw startpagina staan uw meest bezochte webpagina\'s."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gebruik Google Instant bij Google Zoeken voor resultaten tijdens het typen (kan resulteren in meer gegevensverbruik)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Volledig scherm"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Gebruik de modus voor volledig scherm om de statusbalk te verbergen."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Probleem met gegevensverbinding"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Probleem met bestand"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bevestigen"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Geschiedenis wissen"</string>
     <string name="browser_history" msgid="1038987118290272525">"Onlangs bezochte pagina\'s"</string>
     <string name="empty_history" msgid="8738772352308207274">"Browsergeschiedenis is leeg."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Bladwijzer toevoegen…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Toevoegen"</string>
     <string name="search_hint" msgid="4647356319916631820">"Zoek of typ de URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Delen"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Er zijn niet meer tabbladen beschikbaar"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google met Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vensters herstellen?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"De browser lijkt te zijn gecrasht. Wilt u de vensters uit uw vorige sessie herstellen?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ja"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nee"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Voorbeeld:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokaal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobiel"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-pl-sw600dp/strings.xml b/res/values-pl-sw600dp/strings.xml
index 217276e..25f1866 100644
--- a/res/values-pl-sw600dp/strings.xml
+++ b/res/values-pl-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Otwórz w nowej karcie tła"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Otwórz wszystkie w nowych kartach"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Otwieraj nowe karty za bieżącą"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Przywrócić karty?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Przeglądarka prawdopodobnie uległa awarii. Czy chcesz przywrócić karty z poprzedniej sesji?"</string>
 </resources>
diff --git a/res/values-pl-xlarge/strings.xml b/res/values-pl-xlarge/strings.xml
index d5fe8e5..33c1eb9 100644
--- a/res/values-pl-xlarge/strings.xml
+++ b/res/values-pl-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Otwórz w nowej karcie tła"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Otwórz wszystkie w nowych kartach"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Otwieraj nowe karty za bieżącą"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Przywrócić karty?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Przeglądarka uległa awarii. Czy chcesz przywrócić karty z poprzedniej sesji?"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e686328..11c6261 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Anuluj"</string>
     <string name="location" msgid="3411848697912600125">"Adres"</string>
+    <string name="account" msgid="5179824606448077042">"Konto"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Dodaj do"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nowy folder"</string>
     <string name="edit_folder" msgid="621817453133656156">"Edytuj folder"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Pobrane"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopiuj adres URL strony"</string>
     <string name="share_page" msgid="593756995297268343">"Udostępnij stronę"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Zablokuj kartę"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Zapisz stronę"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Strona została zapisana."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Nie można zapisać strony."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Wpisz i zachowaj dane, które chcesz automatycznie uzupełniać w formularzach internetowych"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatyczne logowanie do Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Logowanie w witrynach Google za pomocą identyfikatora <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatyczne logowanie jest dostępne."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Zaloguj jako"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Zaloguj"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ukryj"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Niepowodzenie logowania."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Wprowadź dane, które chcesz automatycznie umieszczać w formularzach internetowych."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Imię i nazwisko:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Wyświetl ostrzeżenie w razie problemów z zabezpieczeniami strony"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Akceptuj pliki cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Zezwalaj witrynom na zapis i odczyt danych w plikach cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Rozmiar tekstu"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Bardzo mały"</item>
     <item msgid="1950030433642671460">"Mały"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Duży"</item>
     <item msgid="7201512237890458902">"Bardzo duży"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Rozmiar tekstu"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimalny rozmiar czcionki"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Wymuś włączenie powiększenia"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Określa, czy zezwolić stronie na sterowanie powiększeniem"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Powiększenie domyślne"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Małe"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"koreański (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kodowanie tekstu"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Ułatwienia dostępu"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorium"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Szybkie sterowanie"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Przesuń kciukiem od lewej lub prawej, aby użyć szybkiego sterowania oraz ukryć paski aplikacji i URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Na stronie głównej wyświetlane są najczęściej odwiedzane strony internetowe."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Wyszukiwanie dynamiczne Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Użyj wyszukiwania dynamicznego Google, aby uzyskiwać wyniki podczas pisania (może być pobierana większa ilość danych)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pełny ekran"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Użyj trybu pełnoekranowego, aby ukryć pasek stanu."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem z łącznością danych"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem z plikiem"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potwierdzenie"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Wyczyść historię"</string>
     <string name="browser_history" msgid="1038987118290272525">"Ostatnio odwiedzone strony"</string>
     <string name="empty_history" msgid="8738772352308207274">"Historia przeglądarki jest pusta."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Dodaj do zakładek..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Dodaj"</string>
     <string name="search_hint" msgid="4647356319916631820">"Wyszukaj lub wpisz URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Udostępnij"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Brak dostępnych kart"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google z wyszukiwaniem dynamicznym (Laboratorium)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Przywrócić okna?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Przeglądarka uległa awarii. Czy chcesz przywrócić okna z poprzedniej sesji?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Tak"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nie"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Podgląd:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokalne"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Dla komórek"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Dla komputerów"</string>
 </resources>
diff --git a/res/values-pt-rPT-sw600dp/strings.xml b/res/values-pt-rPT-sw600dp/strings.xml
index 3598b7b..630bdaf 100644
--- a/res/values-pt-rPT-sw600dp/strings.xml
+++ b/res/values-pt-rPT-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Abrir num separador novo em segundo plano"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Abrir tudo em separadores novos"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Abrir novos separadores atrás do atual"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Restaurar separadores?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"O navegador bloqueou. Pretende restaurar os separadores abertos na última sessão?"</string>
 </resources>
diff --git a/res/values-pt-rPT-xlarge/strings.xml b/res/values-pt-rPT-xlarge/strings.xml
index 5c45d17..fac7ed3 100644
--- a/res/values-pt-rPT-xlarge/strings.xml
+++ b/res/values-pt-rPT-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Abrir em novo separador em segundo plano"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Abrir tudo em separadores novos"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Abrir novos separadores atrás do actual"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Restaurar separadores?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"O navegador bloqueou. Pretende restaurar os separadores utilizados na última sessão?"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index a9017fb..5be076e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancelar"</string>
     <string name="location" msgid="3411848697912600125">"Endereço"</string>
+    <string name="account" msgid="5179824606448077042">"Conta"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Adicionar a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nova pasta"</string>
     <string name="edit_folder" msgid="621817453133656156">"Editar pasta"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Transferências"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL da página"</string>
     <string name="share_page" msgid="593756995297268343">"Partilhar página"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Fixar separador"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Guardar página"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Página guardada."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Ocorreu uma falha ao guardar a página."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Introduzir e guardar dados de campos de formulários Web de preenchimento automático"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Início sessão automático Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Iniciar sessão em Web sites do Google utilizando <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Início sessão automático disponível."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Iniciar sessão como"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"In. sessão"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ocultar"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Falha ao iniciar sessão."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Introduza os dados que pretende preencher automaticamente nos campos Web quando tocar nos mesmos."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nome completo:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostrar aviso se ocorrer um problema com a segurança de um site"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Aceitar cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permitir que os sites guardem e leiam dados de \"cookies\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tamanho do texto"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Muito pequeno"</item>
     <item msgid="1950030433642671460">"Pequeno"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Muito grande"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tamanho do texto"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Tamanho mín. do tipo de letra"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Forçar ativação do zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Eliminar ou não pedido do site para controlar zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predefinido"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Afastado"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreano (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificação do texto"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Acessibilidade"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controlos rápidos"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Deslize polegar margem esq. ou dir. p/ aceder contr. rápidos e ocultar barras Aplicação e URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"A sua página inicial apresenta as páginas Web mais visitadas."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instantâneo"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilize Google Instantâneo na Pesquisa do Google para mostrar resultados quando escreve (pode aumentar utiliz. dados)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Ecrã inteiro"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Utilizar o modo de ecrã inteiro para ocultar a barra de estado."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividade de dados"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problemas com o ficheiro"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Limpar histórico"</string>
     <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recentemente"</string>
     <string name="empty_history" msgid="8738772352308207274">"O histórico do browser está vazio."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Adicionar marcador..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Adicionar"</string>
     <string name="search_hint" msgid="4647356319916631820">"Pesquisar ou escrever URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Partilhar"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Atingiu o limite de separadores"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google com Instantâneo (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Restaurar as janelas?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"O navegador bloqueou. Pretende restaurar as janelas utilizadas na última sessão?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sim"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Não"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Pré-visualizar:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Local"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Telemóvel"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Computador"</string>
 </resources>
diff --git a/res/values-pt-sw600dp/strings.xml b/res/values-pt-sw600dp/strings.xml
index 2cfc851..831c0b9 100644
--- a/res/values-pt-sw600dp/strings.xml
+++ b/res/values-pt-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Abrir em uma nova guia em segundo plano"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Abrir tudo em novas guias"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Abrir novas guias atrás da guia atual"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Restaurar guias?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Parece que o navegador travou. Restaurar as guias da última sessão?"</string>
 </resources>
diff --git a/res/values-pt-xlarge/strings.xml b/res/values-pt-xlarge/strings.xml
index 73dfece..a729b61 100644
--- a/res/values-pt-xlarge/strings.xml
+++ b/res/values-pt-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Abrir em uma nova guia em segundo plano"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Abrir todos em novas abas"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Abrir novas guias atrás da guia atual"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Restaurar guias?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"O navegador parece ter travado. Gostaria de restaurar as guias da última vez?"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index baa56ab..a0e6553 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Cancelar"</string>
     <string name="location" msgid="3411848697912600125">"Endereço"</string>
+    <string name="account" msgid="5179824606448077042">"Conta"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Adicionar a"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nova pasta"</string>
     <string name="edit_folder" msgid="621817453133656156">"Editar pasta"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL da página"</string>
     <string name="share_page" msgid="593756995297268343">"Compartilhar página"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Congelar guia"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Salvar a página"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Página salva."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Falha ao salvar página."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Inserir e salvar dados para preencher automaticamente os campos dos formulários da web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Login automático do Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Faça login nos sites do Google usando <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"O login automático está disponível."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Fazer login como"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Fazer login"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ocultar"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Falha de login."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Insira os dados que deseja preencher automaticamente em campos da web ao tocá-los."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Nome completo:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mostrar aviso se houver um problema com a segurança de um site."</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Aceitar cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permitir que os sites salvem e leiam dados de \"cookie\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Tamanho do texto"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Muito pequeno"</item>
     <item msgid="1950030433642671460">"Pequeno"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Grande"</item>
     <item msgid="7201512237890458902">"Enorme"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tamanho do texto"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Tamanho mínimo da fonte"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Forçar ativação de zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Subst. ou não solic. do site para contr. zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom padrão"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Longe"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreano (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificação de texto"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Acessibilidade"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Google Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Deslize o polegar da esqu. ou dir. para acessar controles rápidos e ocultar barras de apps e URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Sua página inicial exibe as páginas da web mais visitadas."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Use o Google Instant ao usar a Pesquisa Google para exibir resultados enquanto digita (o uso de dados pode aumentar)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Tela cheia"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Use o modo de tela cheia para ocultar a barra de status."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividade de dados"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema com o arquivo"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Limpar histórico"</string>
     <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recentemente"</string>
     <string name="empty_history" msgid="8738772352308207274">"O histórico do navegador está vazio."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Adicionar favorito…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Adicionar"</string>
     <string name="search_hint" msgid="4647356319916631820">"Pesquisar ou digitar URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Compartilhar"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Não há mais guias disponíveis"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google com Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Restaurar janelas?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"O navegador parece ter travado. Gostaria de restaurar as janelas da última vez?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Sim"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Não"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Visualizar:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Locais"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Celular"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Computador"</string>
 </resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 5cabaa0..b9bcdc9 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -67,6 +67,8 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Interrumper"</string>
     <!-- outdated translation 969988560160364559 -->     <string name="location" msgid="3411848697912600125">"Adressa"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
     <!-- no translation found for containing_folder (6771180232953030479) -->
     <skip />
     <!-- no translation found for new_folder (7743540149088867917) -->
@@ -124,6 +126,8 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Telechargiadas"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiar la URL da la pagina"</string>
     <string name="share_page" msgid="593756995297268343">"Barattar la pagina"</string>
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
     <!-- outdated translation 3934652434001459581 -->     <string name="menu_save_webarchive" msgid="2474117375302625691">"Memorisar sco archiv web"</string>
     <!-- outdated translation 7045250341467345007 -->     <string name="webarchive_saved" msgid="2212053339474523406">"Memorisà archiv da web"</string>
     <!-- outdated translation 2880998204746620260 -->     <string name="webarchive_failed" msgid="19950914584285713">"Betg reussì da memorisar l\'archiv da web."</string>
@@ -210,10 +214,12 @@
     <skip />
     <!-- no translation found for pref_autologin_progress (8333244467048833461) -->
     <skip />
-    <!-- no translation found for autologin_bar_text (8013977161879448141) -->
+    <!-- no translation found for autologin_bar_text (3684581827167173371) -->
     <skip />
     <!-- no translation found for autologin_bar_login_text (7052816600314556734) -->
     <skip />
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
     <!-- no translation found for autologin_bar_error (5132514366023044839) -->
     <skip />
     <!-- no translation found for autofill_profile_editor_heading (8392952553626722083) -->
@@ -296,7 +302,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Mussar in avertiment en cas da problems da segirezza cun ina website"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Acceptar cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permetter a las websites da memorisar e leger cookies"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Grondezza dal text"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Fitg pitschna"</item>
     <item msgid="1950030433642671460">"Pitschna"</item>
@@ -304,7 +309,16 @@
     <item msgid="5043128215356351184">"Gronda"</item>
     <item msgid="7201512237890458902">"Fitg grond"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Grondezza dal text"</string>
+    <!-- no translation found for pref_min_font_size (8811125835817449131) -->
+    <skip />
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predefinì"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lontan"</item>
@@ -336,6 +350,10 @@
     <item msgid="2193955365569270096">"Corean (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codaziun dal text"</string>
+    <!-- no translation found for pref_accessibility_title (5127836981587423215) -->
+    <skip />
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <!-- no translation found for pref_lab_title (5571091610359629423) -->
     <skip />
     <!-- no translation found for pref_lab_quick_controls (3267606522082281367) -->
@@ -350,6 +368,10 @@
     <skip />
     <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
     <skip />
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem da connectivitad da datas"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem da datoteca"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confermar"</string>
@@ -359,6 +381,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Stizzar la cronologia"</string>
     <string name="browser_history" msgid="1038987118290272525">"Paginas visitadas dacurt"</string>
     <string name="empty_history" msgid="8738772352308207274">"La cronologia è vida."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Agiuntar in segnapagina…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Agiuntar"</string>
     <string name="search_hint" msgid="4647356319916631820">"Tschertgar u endatar ina URL"</string>
@@ -478,4 +502,20 @@
     <skip />
     <!-- no translation found for instant_search_label (8769284297650716935) -->
     <skip />
+    <!-- no translation found for recover_title (8095611702406163360) -->
+    <skip />
+    <!-- no translation found for recover_prompt (6541354420842425606) -->
+    <skip />
+    <!-- no translation found for recover_yes (4540538008955917099) -->
+    <skip />
+    <!-- no translation found for recover_no (3121030267940592611) -->
+    <skip />
+    <!-- no translation found for preview (6450823514561689038) -->
+    <skip />
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
 </resources>
diff --git a/res/values-ro-sw600dp/strings.xml b/res/values-ro-sw600dp/strings.xml
index a6f9874..a9bfc33 100644
--- a/res/values-ro-sw600dp/strings.xml
+++ b/res/values-ro-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Deschideţi într-o filă nouă în fundal"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Deschideţi-le pe toate în file noi"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Deschideţi filele noi în spatele celei curente"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Restabiliţi filele?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Browserul pare să se fi blocat. Doriţi să restabiliţi filele din ultima sesiune?"</string>
 </resources>
diff --git a/res/values-ro-xlarge/strings.xml b/res/values-ro-xlarge/strings.xml
index a7d3698..a5e2a8e 100644
--- a/res/values-ro-xlarge/strings.xml
+++ b/res/values-ro-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Deschideţi într-o filă nouă în fundal"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Deschideţi-le pe toate în file noi"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Deschideţi file noi în spatele celei curente"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Restabiliţi filele?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Browserul pare să se fi blocat. Doriţi să restabiliţi filele din ultima sesiune?"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 53c3e97..50e9691 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Anulaţi"</string>
     <string name="location" msgid="3411848697912600125">"Adresă"</string>
+    <string name="account" msgid="5179824606448077042">"Cont"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Adăugaţi la"</string>
     <string name="new_folder" msgid="7743540149088867917">"Dosar nou"</string>
     <string name="edit_folder" msgid="621817453133656156">"Editaţi dosarul"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Descărcări"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Copiaţi adresa URL a paginii"</string>
     <string name="share_page" msgid="593756995297268343">"Distribuiţi pagina"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Îngheţaţi fila"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Salvaţi pagina"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Pagina a fost salvată."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Pagina nu a fost salvată."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Introduceţi şi salvaţi date pentru completarea automată a câmpurilor din formularele web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Conectare automată la Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Se conectează la site-urile Google utilizând <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Este disponibilă conectarea automată."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Conectaţi-vă ca"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Conectare"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ascundeţi"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Conectare eşuată."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Introduceţi datele care se vor completa automat în câmpurile web, atunci când le atingeţi."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Numele complet:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Afişaţi avertismentul dacă apare o problemă de securitate a unui site"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Acceptaţi cookie-uri"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Permiteţi site-urilor salvarea şi citirea datelor de tip „cookie”"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Dimensiune text"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Minusculă"</item>
     <item msgid="1950030433642671460">"Mică"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Mare"</item>
     <item msgid="7201512237890458902">"Foarte mare"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Dimensiune text"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Dimensiunea minimă a fontului"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Forţaţi activarea zoomului"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Suprascriere solicitare site web pentru control comportament zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom prestabilit"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Departe"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Coreeană (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificare text"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilitate"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laborator"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Comenzi rapide"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Glis. deg. mare din marg. st. sau dr. şi acc. com. rapide/asc. bar. Apl. şi URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Pagina dvs. de pornire afişează paginile web cele mai accesate."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilizaţi Google Instant în Căutarea Google şi vedeţi rezultate în timp ce introd. text (creşte vol. de date utilizate)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Ecran complet"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Utilizaţi modul ecran complet pentru a ascunde bara de stare."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Există o problemă de conexiune la date"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problemă cu fişierul"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmaţi"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Ştergeţi istoricul"</string>
     <string name="browser_history" msgid="1038987118290272525">"Pagini recent vizitate"</string>
     <string name="empty_history" msgid="8738772352308207274">"Istoricul de navigare este gol."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Adăugaţi marcajul..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Adăugaţi"</string>
     <string name="search_hint" msgid="4647356319916631820">"Căutaţi sau introduceţi adresa URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Distribuiţi"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Nu mai există file disponibile"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google cu Instant (Google Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Restabiliţi ferestrele?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Browserul pare să se fi blocat. Doriţi să restabiliţi ferestrele din ultima sesiune?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Da"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nu"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Previzualizaţi:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Locale"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-ru-sw600dp/strings.xml b/res/values-ru-sw600dp/strings.xml
index 85a4357..febeeed 100644
--- a/res/values-ru-sw600dp/strings.xml
+++ b/res/values-ru-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Открыть в фоновой вкладке"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Открыть все в новых вкладках"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Открывать новые вкладки позади текущей"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Восстановить вкладки?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Произошел сбой в работе браузера. Восстановить вкладки последнего сеанса?"</string>
 </resources>
diff --git a/res/values-ru-xlarge/strings.xml b/res/values-ru-xlarge/strings.xml
index 517957e..9fad6d2 100644
--- a/res/values-ru-xlarge/strings.xml
+++ b/res/values-ru-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Открыть в фоновой вкладке"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Открыть все в новых вкладках"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Открывать новые вкладки под текущей вкладкой"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Восстановить вкладки?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Произошел сбой в работе браузера. Восстановить вкладки последнего сеанса?"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ce6c856..1f8ec53 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"ОК"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Отмена"</string>
     <string name="location" msgid="3411848697912600125">"Адрес"</string>
+    <string name="account" msgid="5179824606448077042">"Аккаунт"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Добавить в"</string>
     <string name="new_folder" msgid="7743540149088867917">"Новая папка"</string>
     <string name="edit_folder" msgid="621817453133656156">"Изменить папку"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Загрузки"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Копировать URL страницы"</string>
     <string name="share_page" msgid="593756995297268343">"Отправить страницу"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Зафиксировать вкладку"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Сохранить страницу"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Страница сохранена."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Не удалось сохранить страницу."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Ввод и сохранение данных для автозаполнения веб-форм"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Автоматический вход в Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Вход в Сайты Google с помощью аккаунта <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Доступен автоматический вход."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Войти как"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Войти"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Скрыть"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Вход не выполнен."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Вводите данные в веб-формы одним нажатием с помощью автозаполнения."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Полное имя:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Предупреждать при обнаружении на сайтах угроз для безопасности"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Разрешить cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Разрешить сайтам сохранять и читать файлы cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Размер текста"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Мелкий"</item>
     <item msgid="1950030433642671460">"Маленький"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Большой"</item>
     <item msgid="7201512237890458902">"Огромный"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Размер текста"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Минимальный размер шрифта"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Менять масштаб принудительно"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Учитывать ли запросы сайтов при управлении масштабом"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Масштаб по умолчанию"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Мелкий"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Корейская (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Кодировка текста"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Специальные возможности"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Лаборатория Google"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Панель инструментов"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Чтобы открыть панель инструментов, скрыв адресную строку и панель приложений, проведите пальцем в правом или левом углу экрана"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Отображение часто посещаемых веб-сайтов на стартовой странице."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Живой поиск"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"В Живом поиске результаты появляются прямо при вводе текста (возможно увеличение объема передаваемых данных)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Во весь экран"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Чтобы скрыть строку состояния, используйте полноэкранный режим."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблема с подключением"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблема с файлом"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Подтвердить"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Очистить историю"</string>
     <string name="browser_history" msgid="1038987118290272525">"Недавно посещенные"</string>
     <string name="empty_history" msgid="8738772352308207274">"История браузера пуста."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Добавить закладку…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Добавить"</string>
     <string name="search_hint" msgid="4647356319916631820">"Введите условия поиска или URL-адрес"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Отправить"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Достигнут предел количества вкладок"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google с Живым поиском (Лаборатория Google)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Восстановить окна?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Произошел сбой в работе браузера. Восстановить окна последнего сеанса?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Да"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Нет"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Просмотр"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Локальные"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобильная"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Обычная"</string>
 </resources>
diff --git a/res/values-sk-sw600dp/strings.xml b/res/values-sk-sw600dp/strings.xml
index f76492c..ef551dd 100644
--- a/res/values-sk-sw600dp/strings.xml
+++ b/res/values-sk-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Otvoriť na novej karte na pozadí"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Otvoriť všetky na nových kartách"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Otvárať nové karty za aktuálnou kartou"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Obnoviť karty?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Zrejme došlo k zlyhaniu prehliadača. Chcete obnoviť naposledy otvorené karty?"</string>
 </resources>
diff --git a/res/values-sk-xlarge/strings.xml b/res/values-sk-xlarge/strings.xml
index d1be7da..f9f9048 100644
--- a/res/values-sk-xlarge/strings.xml
+++ b/res/values-sk-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Otvoriť na novej karte na pozadí"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Otvoriť všetky na nových kartách"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Otvárať nové karty za aktuálnou kartou"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Obnoviť karty?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Zrejme došlo k zlyhaniu prehliadača. Chcete obnoviť naposledy otvorené karty?"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 12a0aed..2238fc7 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Zrušiť"</string>
     <string name="location" msgid="3411848697912600125">"Adresa"</string>
+    <string name="account" msgid="5179824606448077042">"Účet"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Pridať do"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nový priečinok"</string>
     <string name="edit_folder" msgid="621817453133656156">"Upraviť priečinok"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Prevzatia"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopírovať adresu URL stránky"</string>
     <string name="share_page" msgid="593756995297268343">"Zdieľať stránku"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Zmraziť kartu"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Uložiť stránku"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Stránka bola uložená."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Ukladanie stránky zlyhalo."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Zadajte a uložte údaje pre automatické dopĺňanie polí webových formulárov"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatické prihlasovanie Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Prihlasovanie na stránky Google pomocou používateľského mena <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatické prihlásenie je k dispozícii."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Prihlásený/-á ako"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Prihlásiť"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skryť"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Prihlásenie zlyhalo."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Zadajte údaje, ktoré sa majú pri dotyku automaticky doplniť do webových polí."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Celé meno:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Zobraziť upozornenia, ak dôjde k problému so zabezpečením webových stránok"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Prijímať súbory cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Povoliť webovým lokalitám ukladať a čítať súbory cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Veľkosť textu"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Malé"</item>
     <item msgid="1950030433642671460">"Malý"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Veľké"</item>
     <item msgid="7201512237890458902">"Veľmi veľký"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Veľkosť textu"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimálna veľkosť písma"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Vynút. povolenie priblíženia"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Prekonanie žiadosti lokality o ovládanie priblíženia"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Predvolené priblíženie"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Ďaleko"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Kórejčina (EUC–KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kódovanie textu"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Zjednodušenie"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Rýchle ovládacie prvky"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Posuňte prstom v smere od ľavého alebo pravého okraja, čím rýchlo pristúpite k ovládacím prvkom a skryjete panely aplikácií a adresy URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Na vašej domovskej stránke sa zobrazujú najviac navštevované webové stránky."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Dynamické vyhľadávanie Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Ak chcete zobrazovať výsl. počas zadávania textu, použite Dynamické vyhľ. Google (môže sa zvýšiť spotr. údajov)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celá obrazovka"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Ak chcete skryť stavový riadok, použite režim celej obrazovky."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problémy s dátovým pripojením"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problém so súborom"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potvrdiť"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Vymazať históriu"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nedávno navštívené stránky"</string>
     <string name="empty_history" msgid="8738772352308207274">"História prehliadača je prázdna."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Pridať záložku..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Pridať"</string>
     <string name="search_hint" msgid="4647356319916631820">"Vyhľadajte alebo zadajte adresu URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Zdieľať"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"K dispozícii nie sú žiadne ďalšie záložky"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google s Dynamickým vyhľadávaním (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Obnoviť okná?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Zrejme došlo k zlyhaniu prehliadača. Chcete obnoviť naposledy otvorené okná?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Áno"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nie"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Ukážka:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Miestne"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Stolný počítač"</string>
 </resources>
diff --git a/res/values-sl-sw600dp/strings.xml b/res/values-sl-sw600dp/strings.xml
index 31f0310..046d623 100644
--- a/res/values-sl-sw600dp/strings.xml
+++ b/res/values-sl-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Odpri na novem zavihku v ozadju"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Odpri vse na novih zavihkih"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Odpri nove zavihke za trenutnim"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Želite obnoviti zavihke?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Videti je, da se je brskalnik zrušil. Želite obnoviti prejšnje zavihke?"</string>
 </resources>
diff --git a/res/values-sl-xlarge/strings.xml b/res/values-sl-xlarge/strings.xml
index 55a76e4..bce1349 100644
--- a/res/values-sl-xlarge/strings.xml
+++ b/res/values-sl-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Odpri v novem zavihku v ozadju"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Odpri vse v novih zavihkih"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Odpri nove zavihke za trenutnim"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Želite obnoviti zavihke?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Videti je, da se je brskalnik zrušil. Želite obnoviti prejšnje zavihke?"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b153da3..5d740e7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"V redu"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Prekliči"</string>
     <string name="location" msgid="3411848697912600125">"Naslov"</string>
+    <string name="account" msgid="5179824606448077042">"Račun"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Dodaj v skupino"</string>
     <string name="new_folder" msgid="7743540149088867917">"Nova mapa"</string>
     <string name="edit_folder" msgid="621817453133656156">"Uredi mapo"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Prenosi"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopiraj URL strani"</string>
     <string name="share_page" msgid="593756995297268343">"Stran deli z drugimi"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Zamrzni zavihek"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Shrani stran"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Stran je shranjena."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Shranjevanje strani ni uspelo."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Vnesite in shranite podatke za samodejno izpolnjevanje polj v spletnih obrazcih"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Samodejna prijava v Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Prijavljanje v Google Spletna mesta z <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Na voljo je samodejna prijava."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Prijava kot"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Prijava"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skrij"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Prijava ni uspela."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Vnesite podatke, za katere želite, da se samodejno vnesejo v spletna polja, ko se jih dotaknete."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Polno ime:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Pokaži opozorilo, če je težava z varnostjo mesta"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Sprejmi piškotke"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Dovoli mestom shranjevati in brati podatke »piškotkov«"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Velikost besedila"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Zelo majhna"</item>
     <item msgid="1950030433642671460">"Majhna"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Velika"</item>
     <item msgid="7201512237890458902">"Velikanska"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Velikost besedila"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Najmanjša velikost pisave"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Vsili povečavo"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Preglas. zaht. mesta za nadz. povečave?"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Privzeta povečava/pomanjšava"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Oddaljeno"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korejščina (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kodiranje besedila"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Nastavitve za osebe s posebnimi potrebami"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratoriji"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hitri kontrolniki"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Povlecite palec z l./d. roba za hitre kontr. in skrivanje vrstic Program in URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Na domači strani so prikazane najpogosteje obiskane spletne strani."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Dinamično iskanje"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Če uporabljate Google Dinamično iskanje, se rezultati prikazujejo že med tipkanjem, kar lahko poveča porabo podatkov."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celozaslonsko"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Če želite skriti vrstico stanja, uporabite celozaslonski način."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Težava s povezljivostjo podatkov"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Težava z datoteko"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potrdi"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Počisti zgodovino"</string>
     <string name="browser_history" msgid="1038987118290272525">"Nedavno obiskane strani"</string>
     <string name="empty_history" msgid="8738772352308207274">"Zgodovina brskanja je prazna."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Dodaj zaznamek ..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Dodaj"</string>
     <string name="search_hint" msgid="4647356319916631820">"Poiščite ali vnesite URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Skupna raba"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Ni več razpoložljivih zavihkov"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google z Dinamičnim iskanjem (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Želite obnoviti okna?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Videti je, da se je brskalnik zrušil. Želite obnoviti prejšnja okna?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Da"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Ne"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Predogled:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokalno"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobilna različica"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Namizje"</string>
 </resources>
diff --git a/res/values-sr-sw600dp/strings.xml b/res/values-sr-sw600dp/strings.xml
index 827e8e9..5cf039b 100644
--- a/res/values-sr-sw600dp/strings.xml
+++ b/res/values-sr-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Отвори у новој картици у позадини"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Отвори све у новим картицама"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Отварање нових картица иза тренутне"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Желите ли да вратите картице?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Изгледа да је прегледач отказао. Желите ли да вратите картице које сте последње користили?"</string>
 </resources>
diff --git a/res/values-sr-xlarge/strings.xml b/res/values-sr-xlarge/strings.xml
index 993e372..b4c6b08 100644
--- a/res/values-sr-xlarge/strings.xml
+++ b/res/values-sr-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Отвори у новој позадинској картици"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Отвори све у новим картицама"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Отварање нових картица иза тренутне картице"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Желите ли да вратите картице?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Изгледа да је прегледач отказао. Желите ли да вратите картице које сте последње користили?"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 77a0145..6986ec9 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Потврди"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Откажи"</string>
     <string name="location" msgid="3411848697912600125">"Адреса"</string>
+    <string name="account" msgid="5179824606448077042">"Налог"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Додај у"</string>
     <string name="new_folder" msgid="7743540149088867917">"Нов директоријум"</string>
     <string name="edit_folder" msgid="621817453133656156">"Измени директоријум"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Преузимања"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Копирај URL адресу странице"</string>
     <string name="share_page" msgid="593756995297268343">"Дели страницу"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Замрзни картицу"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Сачувај страницу"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Страница је сачувана."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Чување странице није успело."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Унесите и сачувајте податке за аутоматско попуњавање поља у веб обрасцима"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Аутоматска пријава на Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Пријављивање на Google сајтове помоћу <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Аутоматско пријављивање је доступно."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Пријављивање као"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Пријави ме"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Сакриј"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Пријављивање није успело."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Унесите податке које желите да аутоматски попуне веб поља када их додирнете."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Пуно име:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Приказивање упозорења ако постоји проблем у вези са безбедношћу сајта"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Прихвати колачиће"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Омогућавање да сајтови сачувају и прочитају податке „колачића“"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Величина текста"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Мајушно"</item>
     <item msgid="1950030433642671460">"Мала"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Велика"</item>
     <item msgid="7201512237890458902">"Огромно"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Величина текста"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Минимална величина фонта"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Принудно омогући зум"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Да ли треба одбити захтев веб сајта за контролу понашања зума"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Подразумевано зумирај"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Издалека"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"корејски (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Кодирање текста"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Приступачност"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Брзе контроле"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Листањем са леве или десне ивице приступа се брзим контролама и сакривају траке Апликације и URL адресе"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Почетна страница приказује веб странице које најчешће посећујете."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google инстант"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Користите Google инстант са Google претрагом да бисте видели резултате док куцате (то може да повећа употребу података)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Цео екран"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Сакријте статусну траку помоћу режима целог екрана."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблем при повезивању са подацима"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблем са датотеком"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Потврда"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Обриши историју"</string>
     <string name="browser_history" msgid="1038987118290272525">"Недавно посећене странице"</string>
     <string name="empty_history" msgid="8738772352308207274">"Историја прегледача је празна."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Додај обележивач..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Додај"</string>
     <string name="search_hint" msgid="4647356319916631820">"Претражите или унесите URL адресу"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Дели"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Нема више доступних картица"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google са Инстантом (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Желите ли да вратите прозоре?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Изгледа да је прегледач отказао. Желите ли да вратите прозоре које сте последње користили?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Да"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Не"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Преглед:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Локални"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобилни"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Рачунар"</string>
 </resources>
diff --git a/res/values-sv-sw600dp/strings.xml b/res/values-sv-sw600dp/strings.xml
index 0015ef5..978731c 100644
--- a/res/values-sv-sw600dp/strings.xml
+++ b/res/values-sv-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Öppna i en ny flik i bakgrunden"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Öppna alla i nya flikar"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Öppna nya flikar bakom den aktiva"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Vill du återställa flikarna?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Webbläsaren verkar ha kraschat. Vill du återställa flikarna från förra gången?"</string>
 </resources>
diff --git a/res/values-sv-xlarge/strings.xml b/res/values-sv-xlarge/strings.xml
index 0e3cd5b..07b3c5e 100644
--- a/res/values-sv-xlarge/strings.xml
+++ b/res/values-sv-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Öppna i ny flik i bakgrunden"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Öppna alla på en ny flik"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Öppna nya flikar bakom den aktiva"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Vill du återställa flikar?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Webbläsaren verkar ha kraschat. Vill du återställa dina flikar från förra gången?"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 35715ff..7938854 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Avbryt"</string>
     <string name="location" msgid="3411848697912600125">"Adress"</string>
+    <string name="account" msgid="5179824606448077042">"Konto"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Lägg till"</string>
     <string name="new_folder" msgid="7743540149088867917">"Ny mapp"</string>
     <string name="edit_folder" msgid="621817453133656156">"Redigera mapp"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Hämtningar"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopiera sidans webbadress"</string>
     <string name="share_page" msgid="593756995297268343">"Dela sida"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Frys fliken"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Spara sida"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Sidan har sparats."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Sidan kunde inte sparas."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Ange och spara data för automatisk ifyllning av webbformulärfält"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Automatiskt inloggning på Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Loggar in på Google Sites med <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Automatisk inloggning är tillgänglig."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Logga in som"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Logga in"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Dölj"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Misslyckad inloggning."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Ange de data som du vill ska fyllas i automatiskt i webbformulär när du trycker på dem."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Fullständigt namn:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Visa varningar om det uppstår problem med en webbplats säkerhet"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Acceptera cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillåt att webbplatser sparar och läser cookie-data"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Textstorlek"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Pytteliten"</item>
     <item msgid="1950030433642671460">"Liten"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Stor"</item>
     <item msgid="7201512237890458902">"Mycket stor"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Textstorlek"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minsta teckenstorlek"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Tvinga aktivering av  zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Om en webbplats begäran om att styra zoomfunktionen ska åsidosättas"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standardinställning för zoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Lång"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"koreanska (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Textkodning"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Tillgänglighet"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Snabbkontroller"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Svep från vänster eller höger så visas snabbkontrollerna och program- och adressfälten döljs"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"På startsidan visas de webbplatser du besöker oftast."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Använd Google Instant när du söker på Google så får du resultat medan du skriver (detta kan öka dataanvändningen)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Helskärm"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Använd helskärmsläge om du vill dölja statusfältet."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem med dataanslutning"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem med filen"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekräfta"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Rensa historik"</string>
     <string name="browser_history" msgid="1038987118290272525">"Senast besökta sidor"</string>
     <string name="empty_history" msgid="8738772352308207274">"Det finns ingen webbläsarhistorik."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Lägg till bokmärke…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Lägg till"</string>
     <string name="search_hint" msgid="4647356319916631820">"Ange eller sök efter webbplats"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Dela"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Det finnns inga fler flikar"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google med Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Vill du återställa fönster?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Webbläsaren verkar ha kraschat. Vill du återställa dina fönster från förra gången?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Ja"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Nej"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Förhandsgranska:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokala"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Skrivbord"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
new file mode 100644
index 0000000..900dbb2
--- /dev/null
+++ b/res/values-sw/strings.xml
@@ -0,0 +1,571 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name" msgid="1935869255545976415">" Kivinjari"</string>
+    <string name="choose_upload" msgid="3649366287575002063">"Chagua faili ya kupakia"</string>
+    <!-- no translation found for uploads_disabled (463761197575372994) -->
+    <skip />
+    <string name="new_tab" msgid="4505722538297295141">"Dirisha jipya"</string>
+    <string name="new_incognito_tab" msgid="5821404839654751753">"Dirisha fiche jipya"</string>
+    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
+    <string name="tab_bookmarks" msgid="2305793036003473653">"Alamisho"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"Zilizotembelewa sana"</string>
+    <string name="tab_history" msgid="1979267558744613746">"Historia"</string>
+    <string name="added_to_bookmarks" msgid="1020224130695956728">"Imeongezwa kwa alamisho"</string>
+    <string name="removed_from_bookmarks" msgid="6063705902028438800">"Imeondolewa kutoka kwa alamisho"</string>
+    <string name="sign_in_to" msgid="5939425800148759165">"Ingia kwa <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <!-- no translation found for username (5057566336518215922) -->
+    <skip />
+    <!-- no translation found for password (1177138552305184404) -->
+    <skip />
+    <!-- no translation found for action (183105774472071343) -->
+    <skip />
+    <string name="bookmarks_search" msgid="5229596268214362873">" Kivinjari"</string>
+    <!-- no translation found for cancel (3017274947407233702) -->
+    <skip />
+    <!-- no translation found for ok (1509280796718850364) -->
+    <skip />
+    <string name="title_bar_loading" msgid="7438217780834640678">"Inapakia…"</string>
+    <!-- no translation found for page_info (4048529256302257195) -->
+    <skip />
+    <!-- no translation found for page_info_view (5303490449842635158) -->
+    <skip />
+    <!-- no translation found for page_info_address (2222306609532903254) -->
+    <skip />
+    <!-- no translation found for ssl_warnings_header (79744901983636370) -->
+    <skip />
+    <!-- no translation found for ssl_continue (8031515015829358457) -->
+    <skip />
+    <!-- no translation found for security_warning (6607795404322797541) -->
+    <skip />
+    <!-- no translation found for view_certificate (1472768887529093862) -->
+    <skip />
+    <string name="ssl_go_back" msgid="4598951822061593819">"Rudi nyuma"</string>
+    <!-- no translation found for ssl_untrusted (5369967226521102194) -->
+    <skip />
+    <!-- no translation found for ssl_mismatch (558688832420069896) -->
+    <skip />
+    <!-- no translation found for ssl_expired (5739349389499575559) -->
+    <skip />
+    <!-- no translation found for ssl_not_yet_valid (2893167846212645846) -->
+    <skip />
+    <!-- no translation found for ssl_certificate (5226747157992111668) -->
+    <skip />
+    <!-- no translation found for ssl_certificate_is_valid (7096160815933145579) -->
+    <skip />
+    <!-- no translation found for issued_to (9032338008819841339) -->
+    <skip />
+    <!-- no translation found for common_name (5745530093500062357) -->
+    <skip />
+    <!-- no translation found for org_name (8868889052889991293) -->
+    <skip />
+    <!-- no translation found for org_unit (4489056376307768196) -->
+    <skip />
+    <!-- no translation found for issued_by (6959484326943152487) -->
+    <skip />
+    <!-- no translation found for validity_period (57988851973181309) -->
+    <skip />
+    <!-- no translation found for issued_on (2082890654801808368) -->
+    <skip />
+    <!-- no translation found for expires_on (8061200430557020704) -->
+    <skip />
+    <!-- no translation found for stopping (4839698519340302982) -->
+    <skip />
+    <!-- no translation found for stop (5687251076030630074) -->
+    <skip />
+    <!-- no translation found for reload (8585220783228408062) -->
+    <skip />
+    <!-- no translation found for back (8414603107175713668) -->
+    <skip />
+    <!-- no translation found for forward (4288210890526641577) -->
+    <skip />
+    <!-- no translation found for save (5922311934992468496) -->
+    <skip />
+    <!-- no translation found for do_not_save (6777633870113477714) -->
+    <skip />
+    <string name="location" msgid="3411848697912600125">"Anwani"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
+    <string name="containing_folder" msgid="6771180232953030479">"Ongeza kwa"</string>
+    <string name="new_folder" msgid="7743540149088867917">"Folda mpya"</string>
+    <string name="edit_folder" msgid="621817453133656156">"Hariri folda"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"Futa folda"</string>
+    <string name="no_subfolders" msgid="5880411440592452802">"Hakuna folda ndogo"</string>
+    <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Alamisho"</string>
+    <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Skrini ya nyumbani."</string>
+    <string name="add_to_other_folder_menu_option" msgid="5450890093372998187">"Folda lingine..."</string>
+    <string name="name" msgid="5462672162695365387">"Lebo"</string>
+    <!-- no translation found for http (2163722670597250102) -->
+    <skip />
+    <string name="save_to_bookmarks" msgid="6101482434920313244">"Ongeza kwa Alamisho"</string>
+    <string name="bookmark_this_page" msgid="7530739804320811054">"Alamisha ukurasa huu"</string>
+    <string name="remove" msgid="7820112494467011374">"Ondoa"</string>
+    <!-- no translation found for edit_bookmark (5024089053490231905) -->
+    <skip />
+    <string name="create_shortcut_bookmark" msgid="1995095662095484289">"Ongeza njia mkato katika nyumbani"</string>
+    <!-- no translation found for open_bookmark (8473581305759935790) -->
+    <skip />
+    <!-- no translation found for remove_bookmark (8407495852801410891) -->
+    <skip />
+    <string name="remove_from_bookmarks" msgid="4374080666576982775">"Ondoa kutoka kwa alamisho"</string>
+    <!-- no translation found for remove_history_item (5021424935726728618) -->
+    <skip />
+    <string name="set_as_homepage" msgid="4752937379414905560">"Weka ukurasa wa nyumbani"</string>
+    <!-- no translation found for bookmark_saved (2766434679871317557) -->
+    <skip />
+    <string name="bookmark_not_saved" msgid="700600955089376724">"Haiwezi kuhifadhi alamisho."</string>
+    <string name="homepage_set" msgid="8768087280310966395">"Ukurasa wa nyumbani umewekwa."</string>
+    <string name="bookmark_needs_title" msgid="6245900436119218187">"Alamisho lazima iwe na jina."</string>
+    <string name="bookmark_needs_url" msgid="7809876865972755158">"Alamisho lazima iwe na mahali."</string>
+    <!-- no translation found for bookmark_url_not_valid (6719785633980202419) -->
+    <skip />
+    <string name="bookmark_cannot_save_url" msgid="791722768778386941">"URL hii haiwezi kualamishwa."</string>
+    <!-- no translation found for delete_bookmark (2422989994934201992) -->
+    <skip />
+    <!-- no translation found for bookmark_page (6845189305130307274) -->
+    <skip />
+    <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vijipicha"</string>
+    <string name="bookmark_list_view" msgid="7848510619500937839">"Orodha"</string>
+    <string name="current_page" msgid="7510129573681663135">"kutoka "</string>
+    <string name="delete_bookmark_warning" msgid="758043186202032205">"Alamisho \"<xliff:g id="BOOKMARK">%s</xliff:g>\" itafutwa."</string>
+    <string name="open_all_in_new_window" msgid="6514602245828366045">"Fungua zote katika madirisha mapya"</string>
+    <string name="goto_dot" msgid="3895839050522602723">"Nenda"</string>
+    <string name="incognito_tab" msgid="5419458065370134289">"Fungua kichupo fiche kipya"</string>
+    <string name="select_dot" msgid="6299170761900561967">"Chagua maandishi"</string>
+    <!-- no translation found for tab_picker_title (864478399057782913) -->
+    <skip />
+    <!-- no translation found for tab_picker_remove_tab (630087809802479397) -->
+    <skip />
+    <!-- no translation found for bookmarks (1961279134885867815) -->
+    <skip />
+    <!-- no translation found for shortcut_bookmark (3974876480401135895) -->
+    <skip />
+    <!-- no translation found for history (2451240511251410032) -->
+    <skip />
+    <!-- no translation found for menu_view_download (2124570321712995120) -->
+    <skip />
+    <string name="copy_page_url" msgid="7635062169011319208">"Nakili url ya ukurasa"</string>
+    <!-- no translation found for share_page (593756995297268343) -->
+    <skip />
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
+    <!-- outdated translation 3934652434001459581 -->     <string name="menu_save_webarchive" msgid="2474117375302625691">"Hifadhi kama Jalada la Wavuti"</string>
+    <!-- outdated translation 7045250341467345007 -->     <string name="webarchive_saved" msgid="2212053339474523406">"Jalada la wavuti limehifadhiwa."</string>
+    <!-- outdated translation 2880998204746620260 -->     <string name="webarchive_failed" msgid="19950914584285713">"Imeshindwa kuhifadhi jalada la wavuti"</string>
+    <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Alamisho <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"Folda iko tupu"</string>
+    <!-- no translation found for contextmenu_openlink (7237961252214188935) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow (992765050093960353) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow_background (5556131402560251639) -->
+    <skip />
+    <!-- no translation found for contextmenu_savelink (5508554930832538184) -->
+    <skip />
+    <!-- no translation found for contextmenu_sharelink (5392275392280130331) -->
+    <skip />
+    <!-- no translation found for contextmenu_copy (398860586635404030) -->
+    <skip />
+    <!-- no translation found for contextmenu_copylink (5153657160294534270) -->
+    <skip />
+    <!-- no translation found for contextmenu_download_image (4243829645180686912) -->
+    <skip />
+    <!-- no translation found for contextmenu_view_image (3870625602053600905) -->
+    <skip />
+    <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Weka kama taswira"</string>
+    <!-- no translation found for contextmenu_dial_dot (5856550683415933806) -->
+    <skip />
+    <!-- no translation found for contextmenu_add_contact (3183511922223645716) -->
+    <skip />
+    <!-- no translation found for contextmenu_send_mail (1014513374828775660) -->
+    <skip />
+    <!-- no translation found for contextmenu_map (7471390435434034912) -->
+    <skip />
+    <string name="choosertitle_sharevia" msgid="4600490613341909086">"Shiriki kupitia"</string>
+    <!-- no translation found for clear (7070043081700011461) -->
+    <skip />
+    <!-- no translation found for replace (4843033491070384047) -->
+    <skip />
+    <!-- no translation found for browser_bookmarks_page_bookmarks_text (6787605028726162673) -->
+    <skip />
+    <!-- no translation found for menu_preferences (6709237687234102240) -->
+    <skip />
+    <!-- no translation found for pref_content_title (722227111894838633) -->
+    <skip />
+    <!-- no translation found for pref_content_load_images (2125616852957377561) -->
+    <skip />
+    <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Onyesha picha kwenye kurasa za wavuti"</string>
+    <!-- no translation found for pref_content_block_popups (4158524847764470895) -->
+    <skip />
+    <!-- no translation found for pref_content_javascript (4570972030299516843) -->
+    <skip />
+    <!-- no translation found for pref_content_open_in_background (824123779725118663) -->
+    <skip />
+    <string name="pref_content_plugins" msgid="7231944644794301582">"Wezesha programu-jalizi"</string>
+  <string-array name="pref_content_plugins_choices">
+    <item msgid="6745108155096660725">"Imewashwa kila wakati"</item>
+    <item msgid="2484126708670016519">"Inapohitajika"</item>
+    <item msgid="8547442717307793863">"Zima"</item>
+  </string-array>
+    <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Fungua madirisha mapya nyuma ya dirisha la sasa"</string>
+    <!-- no translation found for pref_content_homepage (3324574611613105696) -->
+    <skip />
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"Weka injini tafuti"</string>
+    <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Teua injini tafuti"</string>
+    <string name="pref_set_homepage_to" msgid="7196350233061395098">"Weka kwa..."</string>
+    <string name="pref_use_current" msgid="1778622474040406672">"Ukurasa wa sasa"</string>
+    <string name="pref_use_blank" msgid="8503238592551111169">"Ukurasa mtupu"</string>
+    <string name="pref_use_default" msgid="192587563274735878">"Ukurasa chaguo-msingi"</string>
+    <!-- no translation found for pref_content_autofit (8260474534053660809) -->
+    <skip />
+    <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Fomati kurasa za wavuti ili zitoshee skrini"</string>
+    <string name="pref_general_title" msgid="1946872771219249323">"Kawaida"</string>
+    <string name="pref_general_sync_title" msgid="3138637035975860324">"Sawazisha"</string>
+    <!-- outdated translation 64638897890112873 -->     <string name="pref_general_autofill_title" msgid="547881256865816858">"Kujaza Kiotomatiki"</string>
+    <string name="pref_personal_sync_with_chrome" msgid="1695182180332194033">"Sawazisha kwa Google Chrome"</string>
+    <string name="pref_personal_sync_with_chrome_summary" msgid="7414133931827321055">"Shiriki alamisho na data nyingine kati ya Kivinjari cha Android na Google Chrome"</string>
+    <string name="pref_personal_google_account" msgid="952360133341490071">"Akaunti ya Google"</string>
+    <string name="pref_personal_sync_bookmarks" msgid="59237515966184432">"Sawazisha alamisho"</string>
+    <string name="pref_personal_sync_bookmarks_summary" msgid="4791767605662205482">"Sawazisha alamisho kati ya Kivinjari cha Android na Google Chrome"</string>
+    <string name="pref_personal_start_syncing" msgid="6046972042512655232">"Anza usawazishaji"</string>
+    <string name="pref_personal_account_dialog_title" msgid="1390867119887955530">"Teua akaunti ya Google ya kushiriki nayo"</string>
+    <!-- outdated translation 1174197447388234595 -->     <string name="pref_autofill_enabled" msgid="1015751713312396713">"Jaza Fomu Kiotomatiki"</string>
+    <string name="pref_autofill_enabled_summary" msgid="422640696197018914">"Jaza fomu za wavuti kwa kobofya mara moja tu"</string>
+    <!-- outdated translation 1350709161524642663 -->     <string name="pref_autofill_profile_editor" msgid="3864116896052437796">"Jaza Mipangilio Kiotomatiki"</string>
+    <!-- outdated translation 6748434431641768870 -->     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Weka na udhibiti data ya fomu zilizojazwa kiotomatiki"</string>
+    <string name="pref_autologin_title" msgid="2362827272595366379">"Ingia katika Google kiotomatiki"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Kuingia kwa tovuti za Google kwa kutumia <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <!-- no translation found for autologin_bar_text (3684581827167173371) -->
+    <skip />
+    <!-- no translation found for autologin_bar_login_text (7052816600314556734) -->
+    <skip />
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
+    <!-- no translation found for autologin_bar_error (5132514366023044839) -->
+    <skip />
+    <!-- outdated translation 5009490178189728877 -->     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Kujaza Kiotomatiki kutatumia maelezo yako mafupi ili kukusaidia kukamilisha fomu za wavuti kwa kubofya mara moja."</string>
+    <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Jina kamili:"</string>
+    <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"Barua pepe"</string>
+    <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"Jina la kampuni:"</string>
+    <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"Mstari wa kwanza wa Anwani:"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"Anwani ya barabara, Sanduku la posta, chini ya"</string>
+    <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"Mstari wa pili wa anwani:"</string>
+    <string name="autofill_profile_editor_address_line_2_hint" msgid="2048330295853546405">"Ghorofa, chumba, kizio, jengo, sakafu n.k"</string>
+    <string name="autofill_profile_editor_city" msgid="4193225955409148508">"Jiji / Mji:"</string>
+    <string name="autofill_profile_editor_state" msgid="8549739922338171458">"Jimbo / Mkoa / Eneo:"</string>
+    <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Msimbo wa eneo:"</string>
+    <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Nchi:"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Simu:"</string>
+    <!-- no translation found for autofill_profile_editor_phone_number_invalid (7166394872369167580) -->
+    <skip />
+    <string name="autofill_profile_editor_save_profile" msgid="8349915287435262888">"Hifadhi maelezo mafupi"</string>
+    <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Maelezo Mafupi yamehifadhiwa"</string>
+    <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Maelezo mafupi yamefutwa"</string>
+    <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Futa maelezo mafupi"</string>
+    <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Kivinjari kinaweza kukamilisha fomu za wavuti  kama hii kiotomatiki. Je, ungependa kuweka maelezo yako mafupi?"</string>
+    <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
+    <skip />
+    <!-- no translation found for disable_autofill (8305901059849400354) -->
+    <skip />
+    <!-- outdated translation 1705642466867300373 -->     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Faragha na Usalama"</string>
+    <!-- no translation found for pref_privacy_clear_cache (3380316479925886998) -->
+    <skip />
+    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Futa maudhui na hifadhidata zilizoakibishwa kwenye simu"</string>
+    <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Maudhui na hifadhidata zilizoakibishwa kwenye simu zitafutwa."</string>
+    <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Kuki"</string>
+    <!-- no translation found for pref_privacy_clear_cookies (3095583579133780331) -->
+    <skip />
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Futa kuki zote za kivinjari"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Kuki zote zitafutwa."</string>
+    <!-- no translation found for pref_privacy_clear_history (8723795508825198477) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history_summary (6868501330708940734) -->
+    <skip />
+    <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Historia ya uabiri wa kivinjari itafutwa."</string>
+    <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Data ya fomu"</string>
+    <!-- no translation found for pref_privacy_clear_form_data (4232668196344383987) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_form_data_summary (1790390894719517167) -->
+    <skip />
+    <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Data yote iliyohifadhiwa ya fomu itafutwa."</string>
+    <!-- no translation found for pref_privacy_clear_passwords (4750234112289277480) -->
+    <skip />
+    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Futa manenosiri yote yaliyohifadhiwa"</string>
+    <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Manenosiri yote yaliyohifadhiwa yatafutwa."</string>
+    <string name="pref_privacy_location_title" msgid="7458378016606081067">"Mahali"</string>
+    <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Wezesha mahali"</string>
+    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Ruhusu tovuti kuomba ufikiaji mahali pako"</string>
+    <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Futa ufikiaji mahali"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Futa ufikiaji mahali kwa tovuti zote"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Futa ufikiaji mahali kwa tovuti zote"</string>
+    <string name="pref_security_passwords_title" msgid="5734190542383756711">"Manenosiri"</string>
+    <!-- no translation found for pref_security_remember_passwords (6492957683454529549) -->
+    <skip />
+    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Hifadhi majina ya mtumiaji na manenosiri ya tovuti"</string>
+    <!-- no translation found for pref_security_save_form_data (1213669802810198893) -->
+    <skip />
+    <!-- no translation found for pref_security_save_form_data_summary (4994074685153708026) -->
+    <skip />
+    <!-- no translation found for pref_security_show_security_warning (8901135676266754559) -->
+    <skip />
+    <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Onyesha onyo kama kuna tatizo la usalama wa tovuti"</string>
+    <!-- no translation found for pref_security_accept_cookies (3201367661925047989) -->
+    <skip />
+    <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Ruhusu tovuti kuhifadhi na kusoma data ya \"kuki\"."</string>
+  <string-array name="pref_text_size_choices">
+    <item msgid="4952686548944739548">"Dogo sana"</item>
+    <item msgid="1950030433642671460">"Ndogo"</item>
+    <item msgid="4338347520133294584">"Kawaida"</item>
+    <item msgid="5043128215356351184">"Kubwa"</item>
+    <item msgid="7201512237890458902">"Kubwa mno"</item>
+  </string-array>
+    <!-- no translation found for pref_min_font_size (8811125835817449131) -->
+    <skip />
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
+    <string name="pref_default_zoom" msgid="8076142259097187395">"Kuza chaguo-msingi"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item msgid="549583171195154919">"Mbali"</item>
+    <item msgid="5619034257768161024">"Wastani"</item>
+    <item msgid="3840999588443167001">"Funga"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Kuza chaguo-msingi"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Fungua kurasa katika muhtasari."</string>
+    <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Onyesha muhtasari wa kurasa mpya zilizofunguliwa"</string>
+    <string name="pref_extras_title" msgid="7075456173747370647">"Mahiri"</string>
+    <string name="pref_extras_website_settings" msgid="67866640052455549">"Mipangilio ya tovuti"</string>
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Mipangilio mahiri kwa wavuti mahsusi"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Weka chaguo-msingi upya"</string>
+    <!-- no translation found for pref_extras_reset_default (8904000515846202110) -->
+    <skip />
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Rejesha mipangilio chaguo-msingi"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="6640261575874704022">"Mipangilio zitarejeshwa kwa thamani chaguo-msingi"</string>
+    <!-- no translation found for pref_extras_reset_default_dlg_title (2250334970728938936) -->
+    <skip />
+    <!-- no translation found for pref_development_title (3263854204533056480) -->
+    <skip />
+    <string name="pref_default_text_encoding" msgid="5742965543955558478">"Usimbaji maandishi"</string>
+  <string-array name="pref_default_text_encoding_choices">
+    <item msgid="7275223955790513818">"Kilatini-1 (ISO-8859-1)"</item>
+    <item msgid="2456597866837587140">"Msimbosare (UTF-8)"</item>
+    <item msgid="6122474363777211732">"Kichina (GBK)"</item>
+    <item msgid="373372275931607040">"Kichina (Big5)"</item>
+    <item msgid="891615911084608570">"Kijapani (ISO-2022-JP)"</item>
+    <item msgid="5589150448475151241">"Kijapani (SHIFT_JIS)"</item>
+    <item msgid="7356792686950371843">"Kijapani (EUC-JP)"</item>
+    <item msgid="2193955365569270096">"Kikorea (EUC-KR)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Usimbaji maandishi"</string>
+    <!-- no translation found for pref_accessibility_title (5127836981587423215) -->
+    <skip />
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
+    <string name="pref_lab_title" msgid="5571091610359629423">"Maabara"</string>
+    <!-- outdated translation 2105979166017257647 -->     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Vidhibiti vya Haraka"</string>
+    <!-- outdated translation 8025196176636589803 -->     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Pitisha kidole cha gumba kutoka kona ya kushoto au kulia ili kufikia vidhibiti vya haraka"</string>
+    <!-- outdated translation 547134501893835512 -->     <string name="pref_lab_most_visited_homepage" msgid="7597766876952506909">"Ukurasa wa nyumbani unaotembelewa zaidi"</string>
+    <!-- outdated translation 6857702350834122532 -->     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Huweka ukurasa wako wa nyumbani kuonyesha kurasa zilizotembelewa zaidi."</string>
+    <!-- no translation found for pref_use_instant_search (1119176077760723740) -->
+    <skip />
+    <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
+    <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
+    <skip />
+    <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
+    <skip />
+    <!-- no translation found for browserFrameFormResubmitLabel (2685923472682180360) -->
+    <skip />
+    <string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Ukurasa unaojaribu kuangalia una data ambayo imewasilishwa tayari (\"POSTDATA\"). Ukituma data tena, kitendo chochote ambacho fomu kwenye ukurasa ilitekeleza (kama vile utafutaji au ununuzi kwenye wavuti) kitarudiwa."</string>
+    <!-- no translation found for loadSuspendedTitle (675991625288706944) -->
+    <skip />
+    <string name="loadSuspended" msgid="3133656588880851273">"Kivinjari hakiwezi kupakia ukurasa huu kwa sababu hakuna muunganisho wa mtandao."</string>
+    <!-- no translation found for clear_history (5998307092715979619) -->
+    <skip />
+    <string name="browser_history" msgid="1038987118290272525">"Kurasa zilizotembelewa hivi karibuni"</string>
+    <!-- no translation found for empty_history (8738772352308207274) -->
+    <skip />
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
+    <string name="add_new_bookmark" msgid="8086367791400349049">"Ongeza alamisho..."</string>
+    <string name="add_bookmark_short" msgid="3783984330998103735">"Ongeza"</string>
+    <string name="search_hint" msgid="4647356319916631820">"Tafuta au chapa URL"</string>
+    <!-- no translation found for search_button_text (5235226933877634410) -->
+    <skip />
+    <string name="search_settings_description" msgid="1422401062529014107">"Alamisho na historia ya wavuti"</string>
+    <!-- no translation found for attention (3473639060042811244) -->
+    <skip />
+    <string name="popup_window_attempt" msgid="2673111696288657989">"Tovuti hii inajaribu kufungua dirisha ibukizi."</string>
+    <!-- no translation found for allow (1157313689171991335) -->
+    <skip />
+    <!-- no translation found for block (9172175889884707800) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_title (5175503564948906442) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_message (1398571800233959583) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_title (3805453941587725944) -->
+    <skip />
+    <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"Haikuweza kufungua dirisha jipya la ibukizi kwa sababu ni moja tu unaoweza kufunguliwa kwa wakati mmoja."</string>
+    <!-- no translation found for download_title (2122874021047565594) -->
+    <skip />
+    <!-- no translation found for download_unknown_filename (4013465542563652175) -->
+    <skip />
+    <!-- no translation found for download_menu_open (4888327480367757513) -->
+    <skip />
+    <!-- no translation found for download_menu_clear (6264454531553418124) -->
+    <skip />
+    <string name="download_menu_delete" msgid="8815502136393894148">"Futa"</string>
+    <!-- no translation found for download_menu_cancel (2545333007601851574) -->
+    <skip />
+    <!-- no translation found for download_menu_cancel_all (2136550823151999166) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_title (8909108500262799748) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_msg (6285389170052357797) -->
+    <skip />
+    <string name="download_delete_file" msgid="5330036497843073249">"Faili itafutwa"</string>
+    <!-- no translation found for download_file_error_dlg_title (2693630283595384874) -->
+    <skip />
+    <string name="download_file_error_dlg_msg" msgid="5156405410324072471">"<xliff:g id="FILENAME">%s</xliff:g> haikuweza kupakuliwa."\n"Futa vitu kadhaa upate nafasi kwenye simu yako na ujaribu tena."</string>
+    <!-- no translation found for download_failed_generic_dlg_title (6106781095337833391) -->
+    <skip />
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"Hifadhi ya USB haipatikani"</string>
+    <!-- outdated translation 56777245081568508 -->     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"Hifadhi ya USB haipatikani"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"Hifadhi ya USB inahitajika ili kupakua <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <!-- no translation found for download_no_sdcard_dlg_msg (2616399456116301518) -->
+    <skip />
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"Hifadhi ya USB haipatikani"</string>
+    <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"Kadi ya SD haipatikani"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"Hifadhi ya USB ina shughuli. Ili kuruhusu vipakuzi, chagua \"Zima hifadhi ya USB\" katika arifa."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"Kadi ya SD ina shughuli. Kuruhusu vipakuzi, chagua \"Zima hifadhi ya USB\" katika arifa."</string>
+    <!-- no translation found for cannot_download (8150552478556798780) -->
+    <skip />
+    <string name="download_no_application_title" msgid="1286056729168874295">"Haiwezi kufungua faili"</string>
+    <!-- no translation found for retry (1835923075542266721) -->
+    <skip />
+    <!-- no translation found for no_downloads (3947445710685021498) -->
+    <skip />
+    <!-- no translation found for download_error (413496839831257187) -->
+    <skip />
+    <!-- no translation found for download_success (2279041638155595203) -->
+    <skip />
+    <!-- no translation found for download_running (2622942231322015059) -->
+    <skip />
+    <!-- no translation found for download_pending (2599683668575349559) -->
+    <skip />
+    <!-- no translation found for download_pending_network (6548714525679461053) -->
+    <skip />
+    <!-- no translation found for download_running_paused (6418029352085656495) -->
+    <skip />
+    <!-- no translation found for download_canceled (6057083743144492515) -->
+    <skip />
+    <string name="download_not_acceptable" msgid="313769696131563652">"Haiwezi kupakua. Maudhui hayahimiliwi kwenye simu hii."</string>
+    <!-- no translation found for download_file_error (1206648050615176113) -->
+    <skip />
+    <!-- no translation found for download_length_required (9038605488460437406) -->
+    <skip />
+    <!-- no translation found for download_precondition_failed (8327584102874295580) -->
+    <skip />
+    <string name="search_the_web" msgid="6046130189241962337">"Tafuta wavuti"</string>
+    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Hifadhi ya kivinjari imejaa"</string>
+    <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"Bofya ili kupata nafasi."</string>
+    <string name="webstorage_clear_data_title" msgid="689484577124333977">"Futa data iliyohifadhiwa"</string>
+    <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Futa data iliyohifadhiwa"</string>
+    <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Data yote iliyohifadhiwa na tovuti hii itafutwa"</string>
+    <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Futa zote"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Ghairi"</string>
+    <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB imehifadhiwa kwenye simu yako"</string>
+    <string name="loading_video" msgid="4887871585216091096">"Inapakia video"</string>
+    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> anataka kujua mahali pako"</string>
+    <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Shiriki mahali"</string>
+    <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Kataa"</string>
+    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Kumbuka mapendeleo"</string>
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"Tovuti hii inaweza kufikia mahali pako. Badilisha hii katika Mipangilio -&gt; Mipangilio ya tovuti"</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"Tovuti hii haiwezi kufikia mahali pako. Badilisha hili katika Mipangilio -&gt; Mipangilio ya wavuti"</string>
+    <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Futa ufikiaji mahali"</string>
+    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Tovuti hii kwa sasa inaweza kufikia mahali ulipo"</string>
+    <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Tovuti hii kwa sasa haiwezi kufikia mahali ulipo"</string>
+    <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Futa ufikiaji mahali"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Uwezo wa tovuti hii kufikia mahali ulipo utafutwa."</string>
+    <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Futa ufikiaji"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Ghairi"</string>
+    <string name="website_settings_clear_all" msgid="8739804325997655980">"Futa zote"</string>
+    <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Futa mipangilio yote ya tovuti?"</string>
+    <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Data ya tovuti zote na vibali vya mahali vitafutwa."</string>
+    <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Futa data yote"</string>
+    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Ghairi"</string>
+    <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"Inapangilia taswira..."</string>
+    <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"Alamisho"</string>
+    <string name="empty_bookmarks_folder" msgid="7843361614634930942">"Hakuna alamisho"</string>
+    <string name="rlz_access_point" msgid="7165847807377650632">"Y1"</string>
+    <!-- no translation found for account_chooser_dialog_title (3314204833188808194) -->
+    <!-- no translation found for account_chooser_dialog_title (4833571985009544332) -->
+    <skip />
+    <string name="import_bookmarks_dialog_title" msgid="3325557652271172128">"Sawazisha kwa akaunti ya Google"</string>
+    <!-- outdated translation 2187665745413495303 -->     <string name="import_bookmarks_dialog_description" msgid="1942452375564381488">"Alamisho zako za Android hazihusishwi na akaunti ya Google"</string>
+    <!-- no translation found for import_bookmarks_dialog_select_add_account (3102882579089291099) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_delete_select_account (5192284761080626386) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_delete (8854001080444749211) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_add (5433677293195372675) -->
+    <skip />
+    <!-- outdated translation 8105572409059113340 -->     <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"Ondoa alamisho zako za Android"</string>
+    <!-- no translation found for import_bookmarks_wizard_next (7578143961884352676) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_previous (8551440353688257031) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_cancel (4936061122806506634) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_done (1446247092194489191) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_add (7552306756868669353) -->
+    <skip />
+    <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Ongeza alamamisho zako za Android kwa alamisho za <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
+    <string name="menu_share_url" msgid="5851814357333739700">"Shiriki"</string>
+    <string name="max_tabs_warning" msgid="4122034303809457570">"Hakuna vichupo zaidi vinavyopatikana"</string>
+    <!-- no translation found for instant_search_label (8769284297650716935) -->
+    <skip />
+    <!-- no translation found for recover_title (8095611702406163360) -->
+    <skip />
+    <!-- no translation found for recover_prompt (6541354420842425606) -->
+    <skip />
+    <!-- no translation found for recover_yes (4540538008955917099) -->
+    <skip />
+    <!-- no translation found for recover_no (3121030267940592611) -->
+    <skip />
+    <!-- no translation found for preview (6450823514561689038) -->
+    <skip />
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
+</resources>
diff --git a/res/values-sw600dp-port/dimensions.xml b/res/values-sw600dp-port/dimensions.xml
index 7c0d447..682bbaf 100644
--- a/res/values-sw600dp-port/dimensions.xml
+++ b/res/values-sw600dp-port/dimensions.xml
@@ -14,6 +14,5 @@
     <dimen name="widgetThumbnailHeight">84dip</dimen>
     <dimen name="widgetHorizontalSpacing">6dip</dimen>
     <dimen name="widgetVerticalSpacing">6dip</dimen>
-    <dimen name="combo_paddingLeftRight">16dip</dimen>
-    <dimen name="combo_horizontalSpacing">8dip</dimen>
+    <dimen name="combo_horizontalSpacing">4dip</dimen>
 </resources>
diff --git a/res/values-sw600dp-w1200dp/dimensions.xml b/res/values-sw600dp-w1200dp/dimensions.xml
deleted file mode 100644
index de9616b..0000000
--- a/res/values-sw600dp-w1200dp/dimensions.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <dimen name="combo_paddingLeftRight">134dip</dimen>
-    <dimen name="combo_horizontalSpacing">20dip</dimen>
-</resources>
diff --git a/res/values-sw600dp/dimensions.xml b/res/values-sw600dp/dimensions.xml
index cbb0ba9..e1ed19e 100644
--- a/res/values-sw600dp/dimensions.xml
+++ b/res/values-sw600dp/dimensions.xml
@@ -25,6 +25,14 @@
     <dimen name="mv_border_width">3dp</dimen>
     <!-- For the combined Bookmarks History view -->
     <dimen name="combo_paddingTop">50dip</dimen>
-    <dimen name="combo_paddingLeftRight">32dip</dimen>
     <dimen name="combo_horizontalSpacing">8dip</dimen>
+    <dimen name="qc_radius_start">50dip</dimen>
+    <dimen name="qc_radius_increment">70dip</dimen>
+    <dimen name="qc_slop">15dip</dimen>
+    <dimen name="qc_touch_offset">15dip</dimen>
+    <dimen name="qc_tab_title_height">30dip</dimen>
+    <dimen name="qc_thumb_width">240dip</dimen>
+    <dimen name="qc_thumb_height">160dip</dimen>
+    <dimen name="qc_item_size">48dip</dimen>
+    <dimen name="suggest_item_padding">16dp</dimen>
 </resources>
diff --git a/res/values-sw600dp/strings.xml b/res/values-sw600dp/strings.xml
index 92646a4..cb0d8a4 100644
--- a/res/values-sw600dp/strings.xml
+++ b/res/values-sw600dp/strings.xml
@@ -32,4 +32,8 @@
     <string name="open_all_in_new_window">Open all in new tabs</string>
     <!-- Settings summary CHAR LIMIT=50]-->
     <string name="pref_content_open_in_background_summary">Open new tabs behind the current one</string>
+    <!-- Recover tabs after a crash dialog title [CHAR LIMIT=32] -->
+    <string name="recover_title">Restore tabs?</string>
+    <!-- Recover tabs after a crash dialog prompt [CHAR LIMIT=none] -->
+    <string name="recover_prompt">Would you like to restore your browser tabs from last time?</string>
 </resources>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
new file mode 100644
index 0000000..4951b2e
--- /dev/null
+++ b/res/values-sw600dp/styles.xml
@@ -0,0 +1,25 @@
+<?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>
+    <style name="BrowserTheme" parent="@android:Theme.Holo">
+        <item name="android:windowBackground">@color/white</item>
+        <item name="android:colorBackground">#FFFFFFFF</item>
+        <item name="android:windowActionBar">true</item>
+        <item name="android:windowNoTitle">false</item>
+        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
+        <item name="android:actionButtonStyle">@style/ActionButton</item>
+    </style>
+</resources>
diff --git a/res/values-th-sw600dp/strings.xml b/res/values-th-sw600dp/strings.xml
index d96f82a..e530d33 100644
--- a/res/values-th-sw600dp/strings.xml
+++ b/res/values-th-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"เปิดในแท็บพื้นหลังใหม่"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"เปิดทั้งหมดในแท็บใหม่"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"เปิดแท็บใหม่หลังแท็บปัจจุบัน"</string>
+    <string name="recover_title" msgid="1558775426269800998">"คืนค่าแท็บหรือไม่"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"ดูเหมือนว่าจะเกิดข้อขัดข้องกับเบราว์เซอร์ คุณต้องการคืนค่าแท็บจากครั้งที่แล้วหรือไม่"</string>
 </resources>
diff --git a/res/values-th-xlarge/strings.xml b/res/values-th-xlarge/strings.xml
index 7eb654b..9047f27 100644
--- a/res/values-th-xlarge/strings.xml
+++ b/res/values-th-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"เปิดในแท็บพื้นหลังใหม่"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"เปิดทั้งหมดในแท็บใหม่"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"เปิดแท็บใหม่หลังแท็บปัจจุบัน"</string>
+    <string name="recover_title" msgid="7754049918641251703">"กู้แท็บคืนหรือไม่"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"ดูเหมือนว่าจะเกิดข้อขัดข้องกับเบราว์เซอร์ คุณต้องการคืนค่าแท็บจากครั้งที่แล้วหรือไม่"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 97e9d23..2cb0e4d 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"ตกลง"</string>
     <string name="do_not_save" msgid="6777633870113477714">"ยกเลิก"</string>
     <string name="location" msgid="3411848697912600125">"ที่อยู่"</string>
+    <string name="account" msgid="5179824606448077042">"บัญชี"</string>
     <string name="containing_folder" msgid="6771180232953030479">"เพิ่มใน"</string>
     <string name="new_folder" msgid="7743540149088867917">"โฟลเดอร์ใหม่"</string>
     <string name="edit_folder" msgid="621817453133656156">"แก้ไขโฟลเดอร์"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"สิ่งที่ดาวน์โหลด"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"คัดลอก URL หน้าเว็บ"</string>
     <string name="share_page" msgid="593756995297268343">"แบ่งปันหน้าเว็บ"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"ตรึงแท็บ"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"บันทึกหน้าเว็บ"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"บันทึกหน้าเว็บแล้ว"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"ไม่สามารถบันทึกหน้าเว็บ"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"ป้อนและบันทึกข้อมูลสำหรับการป้อนฟิลด์ของเว็บฟอร์มอัตโนมัติ"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"ลงชื่อเข้าใช้ Google อัตโนมัติ"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"ลงชื่อเข้าใช้ Google Sites โดยใช้ <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"การลงชื่อเข้าใช้อัตโนมัติพร้อมใช้งาน"</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"ลงชื่อเข้าใช้ในฐานะ"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"ลงชื่อเข้าใช้"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"ซ่อน"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"ลงชื่อเข้าใช้ล้มเหลว"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"ป้อนข้อมูลที่คุณต้องการให้ป้อนอัตโนมัติในเว็บฟิลด์เมื่อคุณแตะฟิลด์เหล่านั้น"</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"ชื่อเต็ม:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"แสดงคำเตือนหากมีปัญหาเกี่ยวกับความปลอดภัยของไซต์"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"ยอมรับคุกกี้"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"อนุญาตให้ไซต์บันทึกและอ่านข้อมูล \"คุกกี้\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"ขนาดข้อความ"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"เล็กมาก"</item>
     <item msgid="1950030433642671460">"เล็ก"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"ใหญ่"</item>
     <item msgid="7201512237890458902">"ใหญ่มาก"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"ขนาดข้อความ"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"ขนาดแบบอักษรขั้นต่ำ"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"บังคับเปิดใช้งานการขยาย"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"แทนที่คำขอควบคุมการขยายของเว็บไซต์หรือไม่"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"การซูมเริ่มต้น"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"ไกล"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"เกาหลี (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"การเข้ารหัสข้อความ"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"การเข้าถึง"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"การควบคุมอย่างรวดเร็ว"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"กวาดหัวแม่มือจากซ้ายหรือขวาเพื่อการควบคุมที่รวดเร็วและซ่อนแอปพลิเคชันและแถบ URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"หน้าแรกของคุณจะแสดงหน้าเว็บที่เข้าชมบ่อยที่สุด"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google ค้นหาทันใจ"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"ใช้ Google ค้นหาทันใจเมื่อคุณใช้ Google Search เพื่อแสดงผลการค้นหาในขณะที่คุณพิมพ์ (ซึ่งสามารถเพิ่มการใช้งานข้อมูล)"</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"เต็มหน้าจอ"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"ใช้โหมดเต็มหน้าจอเพื่อซ่อนแถบสถานะ"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"ปัญหาการเชื่อมต่อข้อมูล"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"ปัญหาเกี่ยวกับไฟล์"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"ยืนยัน"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"ล้างประวัติ"</string>
     <string name="browser_history" msgid="1038987118290272525">"หน้าที่เพิ่งเข้าชมเมื่อเร็วๆ นี้"</string>
     <string name="empty_history" msgid="8738772352308207274">"ประวัติเบราว์เซอร์ว่างเปล่า"</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"เพิ่มบุ๊กมาร์ก..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"เพิ่ม"</string>
     <string name="search_hint" msgid="4647356319916631820">"ค้นหาหรือพิมพ์ URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"แบ่งปัน"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"ไม่สามารถใช้แท็บเพิ่มได้"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google พร้อมการค้นหาทันใจ (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"กู้หน้าต่างคืนหรือไม่"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"ดูเหมือนว่าจะเกิดข้อขัดข้องกับเบราว์เซอร์ คุณต้องการคืนค่าหน้าต่างจากครั้งที่แล้วหรือไม่"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"ใช่"</string>
+    <string name="recover_no" msgid="3121030267940592611">"ไม่"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"ดูตัวอย่าง:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"ในตัวเครื่อง"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"มือถือ"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"เดสก์ท็อป"</string>
 </resources>
diff --git a/res/values-tl-sw600dp/strings.xml b/res/values-tl-sw600dp/strings.xml
index 7c8dd5e..bd77a31 100644
--- a/res/values-tl-sw600dp/strings.xml
+++ b/res/values-tl-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Buksan sa tab na bagong background"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Buksan ang lahat sa mga bagong tab"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Buksan ang bagong tab sa likod ng kasalukuyang tab"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Ibalik ang mga tab?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Lumilitaw na nag-crash ang browser. Gusto mo bang ibalik ang iyong mga tab sa dati?"</string>
 </resources>
diff --git a/res/values-tl-xlarge/strings.xml b/res/values-tl-xlarge/strings.xml
index 069d6eb..fbbfb73 100644
--- a/res/values-tl-xlarge/strings.xml
+++ b/res/values-tl-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Buksan sa bagong tab na background"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Buksan sa lahat ng mga bagong tab"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Buksan ang mga bagong tab sa likod ng kasalukuyan"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Ibalik ang mga tab?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Mukhang nag-crash ang browser. Gusto mo bang ibalik ang iyong mga tab mula sa nakaraan?"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index cf791c4..5c57318 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Kanselahin"</string>
     <string name="location" msgid="3411848697912600125">"Address"</string>
+    <string name="account" msgid="5179824606448077042">"Account"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Idagdag sa"</string>
     <string name="new_folder" msgid="7743540149088867917">"Bagong folder"</string>
     <string name="edit_folder" msgid="621817453133656156">"I-edit ang folder"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Mga Pag-download"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Kopyahin ang url ng pahina"</string>
     <string name="share_page" msgid="593756995297268343">"Ibahagi ang pahina"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"I-freeze ang Tab"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"I-save ang pahina"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Na-save na ang pahina."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Nabigong ma-save ang pahina."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Ilagay at i-save ang data para sa mga field ng form ng web sa pag-auto-fill"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Awtomatiko pag-sign in sa Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Pag-sign in sa mga site ng Google gamit ang <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Available ang awtomatikong pag-sign in."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Mag-sign in bilang"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Mag-login"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Itago"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Nabigo ang pag-login."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Ilagay ang data na gusto mong i-auto-fill sa mga field ng web kapag hinawakan mo ang mga ito."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Buong pangalan:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Ipakita ang babala kung may problema sa seguridad ng site"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Tanggapin ang cookies"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Payagan ang mga site na i-save at basahin ang data ng \"cookie\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Laki ng teksto"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Katiting"</item>
     <item msgid="1950030433642671460">"Maliit"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Malaki"</item>
     <item msgid="7201512237890458902">"Malaki"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Laki ng teksto"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimum na laki ng font"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Pwersahing paganahin ang zoom"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Override o hindi hiling site na ikontrol galaw ng zoom"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Default zoom"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Malayo"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korean (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Pag-encode ng teksto"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Pagiging Naa-access"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Mga Lab"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Mga mabilis na pagkontrol"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"I-swipe thumb sa kaliwa o kanan gilid para access bilis kontrol at itago Application at URL bar"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Ipinapakita ng iyong homepage ang iyong pinaka-nabibisitang mga webpage."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gamit Google Instant pag gumamit ka Google Search, para magpakita resulta habang type ka (mapataas nito paggamit data)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fullscreen"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Gamitin ang mode na fullscreen upang itago ang status bar."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema sa pagkakakonekta ng data"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema sa file"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Kumpirmahin"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"I-clear ang kasaysayan"</string>
     <string name="browser_history" msgid="1038987118290272525">"Mga pahinang binisita kamakailan"</string>
     <string name="empty_history" msgid="8738772352308207274">"Walang laman ang kasaysayan ng browser."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Magdagdag ng bookmark..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Idagdag"</string>
     <string name="search_hint" msgid="4647356319916631820">"Hanapin o i-type ang URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Ibahagi"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Wala nang available na mga tab"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google na mayroong Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Ibalik ang windows?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Mukhang nag-crash ang browser. Gusto mo bang ibalik ang iyong windows mula sa nakaraan?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Oo"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Hindi"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Preview:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Lokal"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobile"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
 </resources>
diff --git a/res/values-tr-sw600dp/strings.xml b/res/values-tr-sw600dp/strings.xml
index 95605bb..07f83ed 100644
--- a/res/values-tr-sw600dp/strings.xml
+++ b/res/values-tr-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Yeni arka plan sekmesinde aç"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Tümünü yeni sekmelerde aç"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Yeni sekmeleri mevcut sekmenin arkasında aç"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Sekmeler geri yüklensin mi?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Tarayıcı kilitlenmiş görünüyor. Son kullandığınız sekmelerin geri yüklenmesini ister misiniz?"</string>
 </resources>
diff --git a/res/values-tr-xlarge/strings.xml b/res/values-tr-xlarge/strings.xml
index ad88d26..9836e2a 100644
--- a/res/values-tr-xlarge/strings.xml
+++ b/res/values-tr-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Yeni arka plan sekmesinde aç"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Tümünü yeni sekmelerde aç"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Yeni sekmeleri geçerli sekmenin arkasında aç"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Sekmeler geri yüklensin mi?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Tarayıcı kilitlenmiş görünüyor. Son kullandığınız sekmelerin geri yüklenmesini ister misiniz?"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 9896e0c..7c71bcd 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"Tamam"</string>
     <string name="do_not_save" msgid="6777633870113477714">"İptal"</string>
     <string name="location" msgid="3411848697912600125">"Adres"</string>
+    <string name="account" msgid="5179824606448077042">"Hesap"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Şu klasöre ekle"</string>
     <string name="new_folder" msgid="7743540149088867917">"Yeni klasör"</string>
     <string name="edit_folder" msgid="621817453133656156">"Klasörü düzenle"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"İndirme işlemleri"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Sayfa url\'sini kopyala"</string>
     <string name="share_page" msgid="593756995297268343">"Sayfayı paylaş"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Sekmeyi dondur"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Sayfayı kaydet"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Sayfa kaydedildi."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Sayfa kaydedilemedi."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Web formu alanlarının otomatik olarak doldurulması için verileri girin ve kaydedin"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Otomatik Google oturumu açma"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"<xliff:g id="ID_1">%s</xliff:g> kullanılarak Google sitelerinde oturum açılıyor"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Otomatik oturum açma kullanılabilir."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Farklı kullanıcı olarak oturum aç"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Giriş yap"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Gizle"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Giriş yapılamadı."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Dokunduğunuz web alanlarına otomatik olarak doldurulmasını istediğiniz verileri girin."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Tam ad:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Site güvenliği ile ilgili bir sorun varsa uyarı göster"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Çerezleri kabul et"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Sitelere \"çerez\" verilerini kaydetme ve okuma izni ver"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Metin boyutu"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Çok Küçük"</item>
     <item msgid="1950030433642671460">"Küçük"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Büyük"</item>
     <item msgid="7201512237890458902">"Çok büyük"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Metin boyutu"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Minimum yazı tipi boyutu"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Yakınlştrmyı etknlştrmye zorla"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Sitenin yakınlaştırmayı kontrol isteğinin geçersiz kılınıp kılınmayacağı"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Varsayılan zum"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Uzak"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Korece (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Metin kodlama"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Erişilebilirlik"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hızlı denetimler"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Hızlı dentmlr erşmk, Uyg ve URL çubklr gizlmk için başprmğnzı sol veya sağ kenrdn hızlc kaydrn"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Ana sayfanızda en sık ziyaret edilen web sayfaları görüntülenir."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Anında Arama"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Yazarken sonuçların görüntülenmesi için, Google Arama\'yı kullanırken Google Anında Arama\'dan yararlanın (veri kullanımını artırabilir)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Tam ekran"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Durum çubuğunu gizlemek için tam ekran modunu kullanın"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Veri bağlantısı sorunu"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Sorunlu dosya"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Doğrula"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Geçmişi temizle"</string>
     <string name="browser_history" msgid="1038987118290272525">"Son ziyaret edilen sayfalar"</string>
     <string name="empty_history" msgid="8738772352308207274">"Tarayıcı geçmişi boş."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Favori ekle..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Ekle"</string>
     <string name="search_hint" msgid="4647356319916631820">"Arayın veya URL\'yi yazın"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Paylaş"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Kullanılabilir başka sekme yok"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Anında Arama ile Google (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Pencereler geri yüklensin mi?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Tarayıcı kilitlenmiş görünüyor. Son kullandığınız pencerelerin geri yüklenmesini ister misiniz?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Evet"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Hayır"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Önizleme:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Yerel"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mobil"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Masaüstü"</string>
 </resources>
diff --git a/res/values-uk-sw600dp/strings.xml b/res/values-uk-sw600dp/strings.xml
index c92456b..42ed88e 100644
--- a/res/values-uk-sw600dp/strings.xml
+++ b/res/values-uk-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Відкрити в новій фоновій вкладці"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Відкрити все в нових вкладках"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Відкривати нові вкладки за поточною"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Відновити вкладки?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Відбулося аварійне завершення роботи веб-переглядача. Відновити останні відкриті вкладки?"</string>
 </resources>
diff --git a/res/values-uk-xlarge/strings.xml b/res/values-uk-xlarge/strings.xml
index 036aeaf..114653e 100644
--- a/res/values-uk-xlarge/strings.xml
+++ b/res/values-uk-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Відкрити в новій фоновій вкладці"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Відкрити все в нових вкладках"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Відкривати нові вкладки за поточною"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Відновити вкладки?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Відбулося аварійне завершення роботи веб-переглядача. Відновити останні відкриті вкладки?"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index eec1e19..73df9d4 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Скасувати"</string>
     <string name="location" msgid="3411848697912600125">"Адреса"</string>
+    <string name="account" msgid="5179824606448077042">"Обліковий запис"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Додати до"</string>
     <string name="new_folder" msgid="7743540149088867917">"Нова папка"</string>
     <string name="edit_folder" msgid="621817453133656156">"Редагувати папку"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Завантаження"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Копіюв. URL стор."</string>
     <string name="share_page" msgid="593756995297268343">"Надісл. стор."</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Зафіксувати вкладку"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Зберегти сторінку"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Сторінку збережено."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Не вдалося зберегти сторінку."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Введіть і збережіть дані для полів автоматичного заповнення веб-форм"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Автоматичний вхід у Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Вхід у Google Sites за допомогою <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Доступний автоматичний вхід."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Вхід із використанням облікового запису"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Увійти"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Сховати"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Помилка входу."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Введіть дані, які автоматично підставлятимуться у веб-поля, коли ви торкатиметеся їх."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Повне ім\'я:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Показувати застереження, якщо є проблема з безпекою сайту"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Прийн. файли cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Дозвол. сайтам зберіг. і зчит. дані файлів cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Розмір тексту"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Дуже мал."</item>
     <item msgid="1950030433642671460">"Малий"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Великий"</item>
     <item msgid="7201512237890458902">"Дуже вел."</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Розмір тексту"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Мінімальний розмір шрифту"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Примусово ввімк. масштабування"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Чи потрібно змінюв. запит веб-сайту на контроль поведінки масштабування"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Масштаб за умовч."</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Віддал."</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Корейська (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Кодування тексту"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Доступність"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Лабораторії"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Швидкі елементи керування"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Гортайте зліва чи справа, щоб відкрити швидкі елем. керування та сховати панелі програми й URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"На вашій домашній сторінці відображаються найчастіше відвідувані веб-сторінки."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Миттєвий пошук Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Використовуйте Миттєвий пошук у пошуку Google для відображ. результ. під час введення (може збільшитись викорис. даних)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Повноекранний режим"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Використовуйте повноекранний режим, щоб ховати рядок стану."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблема з доступом до даних"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблема з файлом"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Підтверд."</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Очистити історію"</string>
     <string name="browser_history" msgid="1038987118290272525">"Нещодавно відвідані стор."</string>
     <string name="empty_history" msgid="8738772352308207274">"Історія переглядача порожня."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Додати закладку…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Додати"</string>
     <string name="search_hint" msgid="4647356319916631820">"Знайд. або введіть URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Надіслати"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Більше немає вкладок"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google із Миттєвим пошуком (Лабораторії)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Відновити вікна?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Відбулося аварійне завершення роботи веб-переглядача. Відновити останні відкриті вікна?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Так"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Ні"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Перегляд:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Локальні"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Версія для мобільного пристрою"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Версія для комп’ютера"</string>
 </resources>
diff --git a/res/values-vi-sw600dp/strings.xml b/res/values-vi-sw600dp/strings.xml
index afe596b..d328570 100644
--- a/res/values-vi-sw600dp/strings.xml
+++ b/res/values-vi-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Mở trong tab nền mới"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"Mở tất cả trong tab mới"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Mở tab mới phía sau tab hiện tại"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Khôi phục các tab?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"Trình duyệt dường như đã gặp sự cố. Bạn có muốn khôi phục lại các tab từ lần trước không?"</string>
 </resources>
diff --git a/res/values-vi-xlarge/strings.xml b/res/values-vi-xlarge/strings.xml
index 5e74c13..4a12067 100644
--- a/res/values-vi-xlarge/strings.xml
+++ b/res/values-vi-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"Mở trong tab nền mới"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"Mở tất cả trong tab mới"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"Mở tab mới phía sau tab hiện tại"</string>
+    <string name="recover_title" msgid="7754049918641251703">"Khôi phục các tab?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"Trình duyệt có vẻ như đã gặp sự cố. Bạn có muốn khôi phục lại các tab từ lần trước không?"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index d5010a4..ebd2196 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"OK"</string>
     <string name="do_not_save" msgid="6777633870113477714">"Huỷ"</string>
     <string name="location" msgid="3411848697912600125">"Địa chỉ"</string>
+    <string name="account" msgid="5179824606448077042">"Tài khoản"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Thêm vào"</string>
     <string name="new_folder" msgid="7743540149088867917">"Thư mục mới"</string>
     <string name="edit_folder" msgid="621817453133656156">"Chỉnh sửa thư mục"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Nội dung tải xuống"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"Sao chép url của trang"</string>
     <string name="share_page" msgid="593756995297268343">"Chia sẻ trang"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"Cố định tab"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"Lưu trang"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"Đã lưu trang."</string>
     <string name="webarchive_failed" msgid="19950914584285713">"Không thể lưu trang."</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Nhập và lưu dữ liệu cho các trường tự động điền biểu mẫu web"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"Tự động đăng nhập Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Đang đăng nhập vào trang web Google bằng <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"Tính năng đăng nhập tự động hiện khả dụng."</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"Đăng nhập với tên"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"Đăng nhập"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ẩn"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"Đăng nhập không thành công."</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Nhập dữ liệu bạn muốn để tự động điền vào các trường trên web khi bạn gặp chúng."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Tên đầy đủ:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Hiển thị cảnh báo nếu có sự cố với bảo mật của trang web"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Chấp nhận cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Cho phép trang web lưu và đọc dữ liệu \"cookie\""</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"Kích cỡ chữ"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Rất nhỏ"</item>
     <item msgid="1950030433642671460">"Nhỏ"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"Lớn"</item>
     <item msgid="7201512237890458902">"Rất lớn"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Kích cỡ chữ"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Kích thước phông chữ tối thiểu"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Bắt buộc bật thu phóng"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Gh.đè y/c tr.web để k.s t.phóng"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Thu phóng mặc định"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Xa"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"Tiếng Hàn (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Mã hoá văn bản"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Khả năng truy cập"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"Lab"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Các điều khiển nhanh"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Trượt ngón tay từ cạnh trái hoặc phải để truy cập điều khiển nhanh và ẩn các thanh Ứng dụng và URL"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Trang chủ hiển thị các trang web được truy cập nhiều nhất của bạn."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Sử dụng Google Instant khi bạn sử dụng Tìm kiếm của Google để hiển thị kết quả khi nhập (điều này có thể tăng việc sử dụng dữ liệu)."</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Toàn màn hình"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Sử dụng chế độ toàn màn hình để ẩn thanh trạng thái."</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Sự cố kết nối dữ liệu"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Sự cố với tệp"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Xác nhận"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"Xoá lịch sử"</string>
     <string name="browser_history" msgid="1038987118290272525">"Các trang đã truy cập gần đây"</string>
     <string name="empty_history" msgid="8738772352308207274">"Lịch sử trình duyệt trống."</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"Thêm dấu trang..."</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Thêm"</string>
     <string name="search_hint" msgid="4647356319916631820">"Tìm kiếm hoặc nhập URL"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Chia sẻ"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Không có thêm tab nào"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google với tính năng Instant (Labs)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"Khôi phục các cửa sổ?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"Trình duyệt có vẻ như đã gặp sự cố. Bạn có muốn khôi phục lại các cửa sổ từ lần trước không?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"Có"</string>
+    <string name="recover_no" msgid="3121030267940592611">"Không"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"Xem trước:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Địa phương"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Điện thoại di động"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Máy tính"</string>
 </resources>
diff --git a/res/values-w720dp/bools.xml b/res/values-w720dp/bools.xml
deleted file mode 100644
index 0d05b7f..0000000
--- a/res/values-w720dp/bools.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?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
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <bool name="hide_nav_buttons">false</bool>
-</resources>
diff --git a/res/values-zh-rCN-sw600dp/strings.xml b/res/values-zh-rCN-sw600dp/strings.xml
index c9913fc..97769a7 100644
--- a/res/values-zh-rCN-sw600dp/strings.xml
+++ b/res/values-zh-rCN-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"在新的后台标签页中打开"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"在新标签页中打开全部书签"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"在当前标签页后方打开新标签页"</string>
+    <string name="recover_title" msgid="1558775426269800998">"要恢复标签页吗?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"浏览器似乎已崩溃。要恢复最后一次打开的标签页吗?"</string>
 </resources>
diff --git a/res/values-zh-rCN-xlarge/strings.xml b/res/values-zh-rCN-xlarge/strings.xml
index b64a476..5ae13e5 100644
--- a/res/values-zh-rCN-xlarge/strings.xml
+++ b/res/values-zh-rCN-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"在新的后台标签页中打开"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"在新标签页中打开全部书签"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"在当前标签页后方打开新标签页"</string>
+    <string name="recover_title" msgid="7754049918641251703">"恢复标签页?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"浏览器似乎已崩溃。要恢复最后一次打开的标签页吗?"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ed5f8e1..a948af0 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"确定"</string>
     <string name="do_not_save" msgid="6777633870113477714">"取消"</string>
     <string name="location" msgid="3411848697912600125">"地址"</string>
+    <string name="account" msgid="5179824606448077042">"帐户"</string>
     <string name="containing_folder" msgid="6771180232953030479">"添加到"</string>
     <string name="new_folder" msgid="7743540149088867917">"新建文件夹"</string>
     <string name="edit_folder" msgid="621817453133656156">"修改文件夹"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"下载内容"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"复制网页网址"</string>
     <string name="share_page" msgid="593756995297268343">"分享网页"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"冻结标签"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"保存网页"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"网页已保存。"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"保存网页时失败。"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"输入并保存网络表单自动填充字段的数据"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"自动登录 Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"正使用 <xliff:g id="ID_1">%s</xliff:g> 登录 Google 网站"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"自动登录已可使用。"</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"使用以下身份登录:"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"登录"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"隐藏"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"登录失败。"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"请在网络字段中输入希望触摸时自动填充的数据。"</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"全名:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"当网站安全性出现问题时显示警告"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"接受 Cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"允许网站保存并读取 Cookie 数据"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"文字大小"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"超小"</item>
     <item msgid="1950030433642671460">"小"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"大"</item>
     <item msgid="7201512237890458902">"超大"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"文字大小"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"字体大小下限"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"强制启用缩放"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"是否通过替换网站的请求来控制缩放行为"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"默认缩放设置"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"远"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"韩语 (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"文字编码"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"辅助功能"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"实验室"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"从左边缘或右边缘滑动拇指即可访问快速控制并隐藏应用程序和网址栏"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"您的主页会显示最常访问的网页。"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 即搜即得"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"借助 Google 即搜即得,您可以在使用 Google 搜索时一边键入内容一边查看结果(此功能可能会增加数据使用量)。"</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全屏"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"使用全屏模式可隐藏状态栏。"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"数据连接性问题"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"文件有问题"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"确认"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"清除历史记录"</string>
     <string name="browser_history" msgid="1038987118290272525">"最近访问过的网页"</string>
     <string name="empty_history" msgid="8738772352308207274">"浏览器历史记录为空。"</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"添加书签…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"添加"</string>
     <string name="search_hint" msgid="4647356319916631820">"搜索或键入网址"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"分享"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"没有更多标签可用"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"具有即搜即得功能的 Google(实验室)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"恢复窗口?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"浏览器似乎已崩溃。要恢复最后一次打开的窗口吗?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"是"</string>
+    <string name="recover_no" msgid="3121030267940592611">"否"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"预览:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"本地"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"移动版"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"桌面版"</string>
 </resources>
diff --git a/res/values-zh-rTW-sw600dp/strings.xml b/res/values-zh-rTW-sw600dp/strings.xml
index 8bb6ef4..5d30dc7 100644
--- a/res/values-zh-rTW-sw600dp/strings.xml
+++ b/res/values-zh-rTW-sw600dp/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"在新背景分頁中開啟連結"</string>
     <string name="open_all_in_new_window" msgid="4294281492905397499">"在新分頁中開啟所有書籤"</string>
     <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"在目前分頁的後面開啟新分頁"</string>
+    <string name="recover_title" msgid="1558775426269800998">"還原分頁?"</string>
+    <!-- outdated translation 3793203259958951755 -->     <string name="recover_prompt" msgid="377456662058488205">"瀏覽器已當機,您要還原當機前開啟的分頁嗎?"</string>
 </resources>
diff --git a/res/values-zh-rTW-xlarge/strings.xml b/res/values-zh-rTW-xlarge/strings.xml
index 32c2158..9d2881b 100644
--- a/res/values-zh-rTW-xlarge/strings.xml
+++ b/res/values-zh-rTW-xlarge/strings.xml
@@ -23,4 +23,6 @@
     <string name="contextmenu_openlink_newwindow_background" msgid="5625314148071601758">"在新背景分頁中開啟連結"</string>
     <string name="open_all_in_new_window" msgid="8498279523071618315">"於新分頁開啟所有書籤"</string>
     <string name="pref_content_open_in_background_summary" msgid="7653600574808720292">"在目前分頁的後面開啟新分頁"</string>
+    <string name="recover_title" msgid="7754049918641251703">"還原標籤?"</string>
+    <string name="recover_prompt" msgid="3030249435588073132">"瀏覽器似乎當機了。您想要還原最後一次的標籤嗎?"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 96e1e57..bacb4c9 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -65,6 +65,7 @@
     <string name="save" msgid="5922311934992468496">"確定"</string>
     <string name="do_not_save" msgid="6777633870113477714">"取消"</string>
     <string name="location" msgid="3411848697912600125">"地址"</string>
+    <string name="account" msgid="5179824606448077042">"帳戶"</string>
     <string name="containing_folder" msgid="6771180232953030479">"新增至"</string>
     <string name="new_folder" msgid="7743540149088867917">"新資料夾"</string>
     <string name="edit_folder" msgid="621817453133656156">"編輯資料夾"</string>
@@ -110,6 +111,7 @@
     <string name="menu_view_download" msgid="2124570321712995120">"下載"</string>
     <string name="copy_page_url" msgid="7635062169011319208">"複製網頁網址"</string>
     <string name="share_page" msgid="593756995297268343">"分享網頁"</string>
+    <string name="menu_freeze_tab" msgid="189603565552297099">"凍結分頁"</string>
     <string name="menu_save_webarchive" msgid="2474117375302625691">"儲存網頁"</string>
     <string name="webarchive_saved" msgid="2212053339474523406">"網頁已儲存。"</string>
     <string name="webarchive_failed" msgid="19950914584285713">"無法儲存網頁。"</string>
@@ -172,8 +174,9 @@
     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"輸入並儲存資料,以供自動填入表單欄位時使用"</string>
     <string name="pref_autologin_title" msgid="2362827272595366379">"自動登入 Google"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"正使用 <xliff:g id="ID_1">%s</xliff:g> 登入 Google 網站"</string>
-    <string name="autologin_bar_text" msgid="8013977161879448141">"可自動登入。"</string>
+    <string name="autologin_bar_text" msgid="3684581827167173371">"登入身分"</string>
     <string name="autologin_bar_login_text" msgid="7052816600314556734">"登入"</string>
+    <string name="autologin_bar_hide_text" msgid="3629355974385859580">"隱藏"</string>
     <string name="autologin_bar_error" msgid="5132514366023044839">"登入失敗。"</string>
     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"輸入您輕觸網頁欄位時要自動填入的資料。"</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"全名:"</string>
@@ -229,7 +232,6 @@
     <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"當網站安全性有問題時,顯示警告訊息"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"接受 Cookie"</string>
     <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"允許網站存取 Cookie"</string>
-    <string name="pref_text_size" msgid="3827031324346612208">"文字大小"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"最小"</item>
     <item msgid="1950030433642671460">"小"</item>
@@ -237,7 +239,13 @@
     <item msgid="5043128215356351184">"大"</item>
     <item msgid="7201512237890458902">"最大"</item>
   </string-array>
-    <string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"文字大小"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"最小字型大小"</string>
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"強制啟用縮放功能"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"是否覆寫網站的控制縮放行為要求"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"預設縮放"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"遠"</item>
@@ -268,6 +276,9 @@
     <item msgid="2193955365569270096">"韓文 (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"文字編碼"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"協助工具"</string>
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
     <string name="pref_lab_title" msgid="5571091610359629423">"研究室"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制介面"</string>
     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"於左右邊緣滑動拇指即可使用快速控制介面,以及隱藏應用程式列和網址列"</string>
@@ -275,6 +286,8 @@
     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"首頁會顯示您最常瀏覽的網頁。"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 互動智慧搜尋"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"使用「Google 搜尋」時啟用「Google 互動智慧搜尋」功能,您輸入查詢時可以即時獲得顯示搜尋結果 (這會增加資料傳輸量)。"</string>
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全螢幕"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"使用全螢幕模式以隱藏狀態列。"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"資料連線問題"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"檔案有問題"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
@@ -284,6 +297,8 @@
     <string name="clear_history" msgid="5998307092715979619">"清除記錄"</string>
     <string name="browser_history" msgid="1038987118290272525">"最近瀏覽的網頁"</string>
     <string name="empty_history" msgid="8738772352308207274">"瀏覽記錄是空的。"</string>
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
     <string name="add_new_bookmark" msgid="8086367791400349049">"加入書籤…"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"新增"</string>
     <string name="search_hint" msgid="4647356319916631820">"搜尋或輸入網址"</string>
@@ -382,4 +397,12 @@
     <string name="menu_share_url" msgid="5851814357333739700">"分享"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"已無分頁可供使用"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"使用 Google 互動智慧搜尋 (研究室)"</string>
+    <string name="recover_title" msgid="8095611702406163360">"還原視窗?"</string>
+    <!-- outdated translation 5526783279696786755 -->     <string name="recover_prompt" msgid="6541354420842425606">"瀏覽器似乎當機了。您想要還原最後一次的視窗嗎?"</string>
+    <!-- outdated translation 5837971910598069183 -->     <string name="recover_yes" msgid="4540538008955917099">"好"</string>
+    <string name="recover_no" msgid="3121030267940592611">"不用了"</string>
+    <!-- outdated translation 1470306351083271066 -->     <string name="preview" msgid="6450823514561689038">"預覽:"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"本機"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"行動版"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"電腦版"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
new file mode 100644
index 0000000..49ed703
--- /dev/null
+++ b/res/values-zu/strings.xml
@@ -0,0 +1,572 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name" msgid="1935869255545976415">"Isiphequluli"</string>
+    <string name="choose_upload" msgid="3649366287575002063">"Khetha ifayela yokulayisha"</string>
+    <!-- no translation found for uploads_disabled (463761197575372994) -->
+    <skip />
+    <string name="new_tab" msgid="4505722538297295141">"Iwindi elisha"</string>
+    <string name="new_incognito_tab" msgid="5821404839654751753">"Iwindi elisha le-incognito"</string>
+    <string name="active_tabs" msgid="3050623868203544623">"I-Windows"</string>
+    <string name="tab_bookmarks" msgid="2305793036003473653">"Amabhukimakhi"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"Okuvakashelwa njalo"</string>
+    <string name="tab_history" msgid="1979267558744613746">"Umlando"</string>
+    <string name="added_to_bookmarks" msgid="1020224130695956728">"Amabhukimakhi afakiwe"</string>
+    <string name="removed_from_bookmarks" msgid="6063705902028438800">"Ikhishwe kumabhukimakhi"</string>
+    <string name="sign_in_to" msgid="5939425800148759165">"Ngena ngemvume ku-\"<xliff:g id="HOSTNAME">%s1</xliff:g>\" \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <!-- no translation found for username (5057566336518215922) -->
+    <skip />
+    <!-- no translation found for password (1177138552305184404) -->
+    <skip />
+    <!-- no translation found for action (183105774472071343) -->
+    <skip />
+    <string name="bookmarks_search" msgid="5229596268214362873">"Isiphequluli"</string>
+    <!-- no translation found for cancel (3017274947407233702) -->
+    <skip />
+    <!-- no translation found for ok (1509280796718850364) -->
+    <skip />
+    <string name="title_bar_loading" msgid="7438217780834640678">"Iyalayisha..."</string>
+    <!-- no translation found for page_info (4048529256302257195) -->
+    <skip />
+    <!-- no translation found for page_info_view (5303490449842635158) -->
+    <skip />
+    <!-- no translation found for page_info_address (2222306609532903254) -->
+    <skip />
+    <!-- no translation found for ssl_warnings_header (79744901983636370) -->
+    <skip />
+    <!-- no translation found for ssl_continue (8031515015829358457) -->
+    <skip />
+    <!-- no translation found for security_warning (6607795404322797541) -->
+    <skip />
+    <!-- no translation found for view_certificate (1472768887529093862) -->
+    <skip />
+    <string name="ssl_go_back" msgid="4598951822061593819">"Phindela emuva"</string>
+    <!-- no translation found for ssl_untrusted (5369967226521102194) -->
+    <skip />
+    <!-- no translation found for ssl_mismatch (558688832420069896) -->
+    <skip />
+    <!-- no translation found for ssl_expired (5739349389499575559) -->
+    <skip />
+    <!-- no translation found for ssl_not_yet_valid (2893167846212645846) -->
+    <skip />
+    <!-- no translation found for ssl_certificate (5226747157992111668) -->
+    <skip />
+    <!-- no translation found for ssl_certificate_is_valid (7096160815933145579) -->
+    <skip />
+    <!-- no translation found for issued_to (9032338008819841339) -->
+    <skip />
+    <!-- no translation found for common_name (5745530093500062357) -->
+    <skip />
+    <!-- no translation found for org_name (8868889052889991293) -->
+    <skip />
+    <!-- no translation found for org_unit (4489056376307768196) -->
+    <skip />
+    <!-- no translation found for issued_by (6959484326943152487) -->
+    <skip />
+    <!-- no translation found for validity_period (57988851973181309) -->
+    <skip />
+    <!-- no translation found for issued_on (2082890654801808368) -->
+    <skip />
+    <!-- no translation found for expires_on (8061200430557020704) -->
+    <skip />
+    <!-- no translation found for stopping (4839698519340302982) -->
+    <skip />
+    <!-- no translation found for stop (5687251076030630074) -->
+    <skip />
+    <!-- no translation found for reload (8585220783228408062) -->
+    <skip />
+    <!-- no translation found for back (8414603107175713668) -->
+    <skip />
+    <!-- no translation found for forward (4288210890526641577) -->
+    <skip />
+    <!-- no translation found for save (5922311934992468496) -->
+    <skip />
+    <!-- no translation found for do_not_save (6777633870113477714) -->
+    <skip />
+    <string name="location" msgid="3411848697912600125">"Ikheli"</string>
+    <!-- no translation found for account (5179824606448077042) -->
+    <skip />
+    <string name="containing_folder" msgid="6771180232953030479">"Yengeza ku-"</string>
+    <string name="new_folder" msgid="7743540149088867917">"Ifolda entsha"</string>
+    <string name="edit_folder" msgid="621817453133656156">"Hlela ifolda"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"Susa ifolda"</string>
+    <string name="no_subfolders" msgid="5880411440592452802">"Awekho amafolda angaphansi"</string>
+    <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Amabhukimakhi"</string>
+    <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Isikrini sasekhaya"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5450890093372998187">"Enye ifolda..."</string>
+    <string name="name" msgid="5462672162695365387">"Ilebula"</string>
+    <!-- no translation found for http (2163722670597250102) -->
+    <skip />
+    <string name="save_to_bookmarks" msgid="6101482434920313244">"Yengeza Kumabhukimakhi"</string>
+    <string name="bookmark_this_page" msgid="7530739804320811054">"Beka uphawu lokubekisa kuleli khasi"</string>
+    <string name="remove" msgid="7820112494467011374">"Khipha"</string>
+    <!-- no translation found for edit_bookmark (5024089053490231905) -->
+    <skip />
+    <string name="create_shortcut_bookmark" msgid="1995095662095484289">"Yengeza izinqamuleli ekhaya"</string>
+    <!-- no translation found for open_bookmark (8473581305759935790) -->
+    <skip />
+    <!-- no translation found for remove_bookmark (8407495852801410891) -->
+    <skip />
+    <string name="remove_from_bookmarks" msgid="4374080666576982775">"Khipha kumabhukimakhi"</string>
+    <!-- no translation found for remove_history_item (5021424935726728618) -->
+    <skip />
+    <string name="set_as_homepage" msgid="4752937379414905560">"Hlela njengekhasi eliyisiqalo"</string>
+    <!-- no translation found for bookmark_saved (2766434679871317557) -->
+    <skip />
+    <string name="bookmark_not_saved" msgid="700600955089376724">"Ayikwazi ukugcina ibhukimakhi."</string>
+    <string name="homepage_set" msgid="8768087280310966395">"Hlela ikhasi eliyisiqalo."</string>
+    <string name="bookmark_needs_title" msgid="6245900436119218187">"Ibhukimakhi kumele ibe negama"</string>
+    <string name="bookmark_needs_url" msgid="7809876865972755158">"Ibhukimakhi kumele ibe nendawo."</string>
+    <!-- no translation found for bookmark_url_not_valid (6719785633980202419) -->
+    <skip />
+    <string name="bookmark_cannot_save_url" msgid="791722768778386941">"Le-URL ayikwazi ukubhukimakhiwa."</string>
+    <!-- no translation found for delete_bookmark (2422989994934201992) -->
+    <skip />
+    <!-- no translation found for bookmark_page (6845189305130307274) -->
+    <skip />
+    <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Izithonjana"</string>
+    <string name="bookmark_list_view" msgid="7848510619500937839">"Uhlu"</string>
+    <string name="current_page" msgid="7510129573681663135">"kusuka ku "</string>
+    <string name="delete_bookmark_warning" msgid="758043186202032205">"Ibhukimakhi \"<xliff:g id="BOOKMARK">%s</xliff:g>\" izosuswa."</string>
+    <string name="open_all_in_new_window" msgid="6514602245828366045">"Vula konke kumawindi amasha"</string>
+    <string name="goto_dot" msgid="3895839050522602723">"Iya"</string>
+    <string name="incognito_tab" msgid="5419458065370134289">"Vula ithebhu entsha ye-incognito"</string>
+    <string name="select_dot" msgid="6299170761900561967">"Khetha umbhalo"</string>
+    <!-- no translation found for tab_picker_title (864478399057782913) -->
+    <skip />
+    <!-- no translation found for tab_picker_remove_tab (630087809802479397) -->
+    <skip />
+    <!-- no translation found for bookmarks (1961279134885867815) -->
+    <skip />
+    <!-- no translation found for shortcut_bookmark (3974876480401135895) -->
+    <skip />
+    <!-- no translation found for history (2451240511251410032) -->
+    <skip />
+    <!-- no translation found for menu_view_download (2124570321712995120) -->
+    <skip />
+    <string name="copy_page_url" msgid="7635062169011319208">"Kopisha i-url yekhasi"</string>
+    <!-- no translation found for share_page (593756995297268343) -->
+    <skip />
+    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <skip />
+    <!-- outdated translation 3934652434001459581 -->     <string name="menu_save_webarchive" msgid="2474117375302625691">"Londoloza njengeSigcinamlando seWebhu."</string>
+    <!-- outdated translation 7045250341467345007 -->     <string name="webarchive_saved" msgid="2212053339474523406">"Isigcinamlando sewebhu silondoloziwe."</string>
+    <!-- outdated translation 2880998204746620260 -->     <string name="webarchive_failed" msgid="19950914584285713">"Yehlulekile ukulondoloza isigcinamlando sewebhu."</string>
+    <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> amabhukimakhi"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"Ifolda engenalutho"</string>
+    <!-- no translation found for contextmenu_openlink (7237961252214188935) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow (992765050093960353) -->
+    <skip />
+    <!-- no translation found for contextmenu_openlink_newwindow_background (5556131402560251639) -->
+    <skip />
+    <!-- no translation found for contextmenu_savelink (5508554930832538184) -->
+    <skip />
+    <!-- no translation found for contextmenu_sharelink (5392275392280130331) -->
+    <skip />
+    <!-- no translation found for contextmenu_copy (398860586635404030) -->
+    <skip />
+    <!-- no translation found for contextmenu_copylink (5153657160294534270) -->
+    <skip />
+    <!-- no translation found for contextmenu_download_image (4243829645180686912) -->
+    <skip />
+    <!-- no translation found for contextmenu_view_image (3870625602053600905) -->
+    <skip />
+    <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Hlela njengephephadonga"</string>
+    <!-- no translation found for contextmenu_dial_dot (5856550683415933806) -->
+    <skip />
+    <!-- no translation found for contextmenu_add_contact (3183511922223645716) -->
+    <skip />
+    <!-- no translation found for contextmenu_send_mail (1014513374828775660) -->
+    <skip />
+    <!-- no translation found for contextmenu_map (7471390435434034912) -->
+    <skip />
+    <string name="choosertitle_sharevia" msgid="4600490613341909086">"Abelana nge"</string>
+    <!-- no translation found for clear (7070043081700011461) -->
+    <skip />
+    <!-- no translation found for replace (4843033491070384047) -->
+    <skip />
+    <!-- no translation found for browser_bookmarks_page_bookmarks_text (6787605028726162673) -->
+    <skip />
+    <!-- no translation found for menu_preferences (6709237687234102240) -->
+    <skip />
+    <!-- no translation found for pref_content_title (722227111894838633) -->
+    <skip />
+    <!-- no translation found for pref_content_load_images (2125616852957377561) -->
+    <skip />
+    <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Bonisa imifanekiso emakhasini lewebhu"</string>
+    <!-- no translation found for pref_content_block_popups (4158524847764470895) -->
+    <skip />
+    <!-- no translation found for pref_content_javascript (4570972030299516843) -->
+    <skip />
+    <!-- no translation found for pref_content_open_in_background (824123779725118663) -->
+    <skip />
+    <string name="pref_content_plugins" msgid="7231944644794301582">"Vumela intshutheko"</string>
+  <string-array name="pref_content_plugins_choices">
+    <item msgid="6745108155096660725">"Njalo ivuliwe"</item>
+    <item msgid="2484126708670016519">"Kuyadingeka kakhulu"</item>
+    <item msgid="8547442717307793863">"Valiwe"</item>
+  </string-array>
+    <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Vula amawindi amasha emva kwamanje"</string>
+    <!-- no translation found for pref_content_homepage (3324574611613105696) -->
+    <skip />
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"Hlela injini yokusesha"</string>
+    <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Khetha injini yokusesha"</string>
+    <string name="pref_set_homepage_to" msgid="7196350233061395098">"Hlelela ku-"</string>
+    <string name="pref_use_current" msgid="1778622474040406672">"Ikhasi lamanje"</string>
+    <string name="pref_use_blank" msgid="8503238592551111169">"Ikhasi elingenalutho"</string>
+    <string name="pref_use_default" msgid="192587563274735878">"Ikhasi elimisiwe"</string>
+    <!-- no translation found for pref_content_autofit (8260474534053660809) -->
+    <skip />
+    <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Lungisa amakhasi ewebhu ukulingana kwisikrini"</string>
+    <string name="pref_general_title" msgid="1946872771219249323">"Okuvamile"</string>
+    <string name="pref_general_sync_title" msgid="3138637035975860324">"Vumelanisa"</string>
+    <!-- outdated translation 64638897890112873 -->     <string name="pref_general_autofill_title" msgid="547881256865816858">"Ukugcwalisa Ngokuzenzakalelayo"</string>
+    <string name="pref_personal_sync_with_chrome" msgid="1695182180332194033">"Vumelanisa ne-Google Chrome"</string>
+    <string name="pref_personal_sync_with_chrome_summary" msgid="7414133931827321055">"Abelana namabhukimakhi &amp; enye idatha phakathi kweSiphequluli se-Android ne-Google Chrome"</string>
+    <string name="pref_personal_google_account" msgid="952360133341490071">"I-akhawunti ye-Google"</string>
+    <string name="pref_personal_sync_bookmarks" msgid="59237515966184432">"Vumelanisa amabhukimakhi"</string>
+    <string name="pref_personal_sync_bookmarks_summary" msgid="4791767605662205482">"Vumelanisa amabhukimakhi phakathi Nesiphequluli se-Android kanye ne-Google Chrome"</string>
+    <string name="pref_personal_start_syncing" msgid="6046972042512655232">"Qalisa ukuvumelanisa"</string>
+    <string name="pref_personal_account_dialog_title" msgid="1390867119887955530">"Khetha i-akhawunti ye-Google ozokwabelana nayo"</string>
+    <!-- outdated translation 1174197447388234595 -->     <string name="pref_autofill_enabled" msgid="1015751713312396713">"Ifomu Yokugcwalisa Okuzenzakalelayo"</string>
+    <string name="pref_autofill_enabled_summary" msgid="422640696197018914">"Gcwalisa amafomu ewebhu ngokuchofoza okukodwa"</string>
+    <!-- outdated translation 1350709161524642663 -->     <string name="pref_autofill_profile_editor" msgid="3864116896052437796">"Izilungiselelo Zokugcwalisa Okuzenzakalelayo"</string>
+    <!-- unknown quoting pattern: original -1, translation 1 -->
+    <!-- outdated translation 6748434431641768870 -->     <string name="pref_autofill_profile_editor_summary" msgid="3653552312512743181">"Hlela &amp;amp; phatha idatha yamafomu Agcwaliswe Ngokuzenzakalelayo"</string>
+    <string name="pref_autologin_title" msgid="2362827272595366379">"Ukungena ngemvume okuzenzakalelayo kwi-Google"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Ingena ngemvume kumasayithi e-Google isebenzisa i-<xliff:g id="ID_1">%s</xliff:g>"</string>
+    <!-- no translation found for autologin_bar_text (3684581827167173371) -->
+    <skip />
+    <!-- no translation found for autologin_bar_login_text (7052816600314556734) -->
+    <skip />
+    <!-- no translation found for autologin_bar_hide_text (3629355974385859580) -->
+    <skip />
+    <!-- no translation found for autologin_bar_error (5132514366023044839) -->
+    <skip />
+    <!-- outdated translation 5009490178189728877 -->     <string name="autofill_profile_editor_heading" msgid="8392952553626722083">"Ukugcwalisa ngokuzenzakalelayo kuzosebenzisa iphrofayli yakho ukukusiza ukugcwalisa amafomu ewebhu ngokuqhafaza okukodwa."</string>
+    <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Igama eliphelele:"</string>
+    <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"I-imeyili:"</string>
+    <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"Igama lenkampani:"</string>
+    <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"Umugqa wekheli 1:"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"Isitaladi, ikheli, P.O. box, c/o"</string>
+    <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"Umugqa wekheli 2:"</string>
+    <string name="autofill_profile_editor_address_line_2_hint" msgid="2048330295853546405">"I-aphathimenti, i-suite, iyunithi, isakhiwo, phansi nokunye."</string>
+    <string name="autofill_profile_editor_city" msgid="4193225955409148508">"Izwe / Idolobha:"</string>
+    <string name="autofill_profile_editor_state" msgid="8549739922338171458">"Izwe / Isifundazwe / Isifunda:"</string>
+    <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Ikhodi ye-Zip:"</string>
+    <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Izwe:"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Ifoni:"</string>
+    <!-- no translation found for autofill_profile_editor_phone_number_invalid (7166394872369167580) -->
+    <skip />
+    <string name="autofill_profile_editor_save_profile" msgid="8349915287435262888">"Gcina iphrofayli"</string>
+    <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Iphrofayli igciniwe"</string>
+    <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Iphrofayli isusiwe"</string>
+    <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Susa iphrofayli"</string>
+    <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Isiphequluli ngokuzenzakalelayo singagcwalisa amafomu ewebhu anjengalawa. Ungathanda ukumisa iphrofayli yakho?"</string>
+    <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
+    <skip />
+    <!-- no translation found for disable_autofill (8305901059849400354) -->
+    <skip />
+    <!-- outdated translation 1705642466867300373 -->     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ubumfihlo &amp; Ukuvikeleka"</string>
+    <!-- no translation found for pref_privacy_clear_cache (3380316479925886998) -->
+    <skip />
+    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Sula okuqukethwe okulondolozwa okwesikhashana kwasendaweni nezizinda zemininingwane"</string>
+    <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Okuqekethwe okulondolozwe okwesikhashana kwasendaweni nezizinda zemininingwane kuzosuswa."</string>
+    <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Amakhukhi"</string>
+    <!-- no translation found for pref_privacy_clear_cookies (3095583579133780331) -->
+    <skip />
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Sula wonke amakhukhi okuphequlula"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Wonke amakhukhi azosuswa."</string>
+    <!-- no translation found for pref_privacy_clear_history (8723795508825198477) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_history_summary (6868501330708940734) -->
+    <skip />
+    <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Umlando wokuzulazula wesiphequluli uzosuswa."</string>
+    <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Ifomu yedatha"</string>
+    <!-- no translation found for pref_privacy_clear_form_data (4232668196344383987) -->
+    <skip />
+    <!-- no translation found for pref_privacy_clear_form_data_summary (1790390894719517167) -->
+    <skip />
+    <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Yonke idatha yefomu elondoloziwe izosuwa."</string>
+    <!-- no translation found for pref_privacy_clear_passwords (4750234112289277480) -->
+    <skip />
+    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Sula wonke amaphasiwedi agciniwe"</string>
+    <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Wonke amaphasiwedi agciniwe azosuswa."</string>
+    <string name="pref_privacy_location_title" msgid="7458378016606081067">"Indawo"</string>
+    <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Vumela indawo"</string>
+    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Vumela amasayithi ukucela ukufinyelela kundawo yakho"</string>
+    <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Sula ukufinyelela indawo"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Sula ukufinyelela indawo kwawo wonke amawebhusayithi"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Sula ukufinyelela indawo kwawo wonke amawebhusayithi"</string>
+    <string name="pref_security_passwords_title" msgid="5734190542383756711">"Amaphasiwedi"</string>
+    <!-- no translation found for pref_security_remember_passwords (6492957683454529549) -->
+    <skip />
+    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Londoloza amagama omesebenzisi namaphasiwedi amawebhusayithi"</string>
+    <!-- no translation found for pref_security_save_form_data (1213669802810198893) -->
+    <skip />
+    <!-- no translation found for pref_security_save_form_data_summary (4994074685153708026) -->
+    <skip />
+    <!-- no translation found for pref_security_show_security_warning (8901135676266754559) -->
+    <skip />
+    <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Bonisa isexwayiso uma kunenkinga ngokuphepha kwesayithi."</string>
+    <!-- no translation found for pref_security_accept_cookies (3201367661925047989) -->
+    <skip />
+    <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Vumela amasayithi ukugcina nokufunda idatha \"yekhukhi\""</string>
+  <string-array name="pref_text_size_choices">
+    <item msgid="4952686548944739548">"Ncane"</item>
+    <item msgid="1950030433642671460">"Ncane"</item>
+    <item msgid="4338347520133294584">"Kuvamile"</item>
+    <item msgid="5043128215356351184">"Okukhulu"</item>
+    <item msgid="7201512237890458902">"Khulu"</item>
+  </string-array>
+    <!-- no translation found for pref_min_font_size (8811125835817449131) -->
+    <skip />
+    <!-- no translation found for pref_min_font_size_value (2924708480509060209) -->
+    <skip />
+    <!-- no translation found for pref_text_zoom (8387229123479610157) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable (5641500562399892621) -->
+    <skip />
+    <!-- no translation found for pref_force_userscalable_summary (4431962409438162448) -->
+    <skip />
+    <string name="pref_default_zoom" msgid="8076142259097187395">"Ukusondeza okuzenzakalelayo"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item msgid="549583171195154919">"Kude"</item>
+    <item msgid="5619034257768161024">"Okulingene"</item>
+    <item msgid="3840999588443167001">"Vala"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Ukusondeza okuzenzakalelayo"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Vula amakhasi ngokufingqiwe"</string>
+    <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Bonisa okufingqiwe kwamakhasi asanda kuvulwa"</string>
+    <string name="pref_extras_title" msgid="7075456173747370647">"Okuthuthukisiwe"</string>
+    <string name="pref_extras_website_settings" msgid="67866640052455549">"Izilungiselelo zewebhusayithi"</string>
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Izilungiselelo ezithuthukisiwe zamawebhusayithi omuntu ngamunye"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Setha kabusha okumisiwe"</string>
+    <!-- no translation found for pref_extras_reset_default (8904000515846202110) -->
+    <skip />
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Buyisela esimweni izilungiselelo ezizenzakalelayo"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="6640261575874704022">"Izilungiselelo zizobuyela kumanani okuzenzakalelayo."</string>
+    <!-- no translation found for pref_extras_reset_default_dlg_title (2250334970728938936) -->
+    <skip />
+    <!-- no translation found for pref_development_title (3263854204533056480) -->
+    <skip />
+    <string name="pref_default_text_encoding" msgid="5742965543955558478">"Umbhalo wekhodi wokubhaliwe"</string>
+  <string-array name="pref_default_text_encoding_choices">
+    <item msgid="7275223955790513818">"isi-Latin- 1 (ISO-8859-1)"</item>
+    <item msgid="2456597866837587140">"Ukungabhali ngemfihlo (UTF-8)"</item>
+    <item msgid="6122474363777211732">"isi-Chinese (GBK)"</item>
+    <item msgid="373372275931607040">"isi-Chinese (Big 5)"</item>
+    <item msgid="891615911084608570">"isi-Japanese (ISO-2022-JP)"</item>
+    <item msgid="5589150448475151241">"isi-Japanese (SHIFT_JIS)"</item>
+    <item msgid="7356792686950371843">"isi-Japanese (EUC-JP)"</item>
+    <item msgid="2193955365569270096">"isi-Korean (EUC-KR)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Umbhalo wekhodi wokubhaliwe"</string>
+    <!-- no translation found for pref_accessibility_title (5127836981587423215) -->
+    <skip />
+    <!-- no translation found for pref_font_size_category (6288925476811083551) -->
+    <skip />
+    <string name="pref_lab_title" msgid="5571091610359629423">"Amalebhu"</string>
+    <!-- outdated translation 2105979166017257647 -->     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Izilawuli Ezisheshayo"</string>
+    <!-- outdated translation 8025196176636589803 -->     <string name="pref_lab_quick_controls_summary" msgid="1564546156544675707">"Shintshela isithonjana kusuka kunqenqema langokwesokunxele noma langokwesokudla ukufinyelela izilawuli ezisheshayo"</string>
+    <!-- outdated translation 547134501893835512 -->     <string name="pref_lab_most_visited_homepage" msgid="7597766876952506909">"Ikhasi Eliyisiqalo Elivakashelwa Njalo"</string>
+    <!-- outdated translation 6857702350834122532 -->     <string name="pref_lab_most_visited_homepage_summary" msgid="4132511544800457513">"Isetha ikhasi lakho eliyisiqalo ukubonisa amakhasi avakashelwa njalo."</string>
+    <!-- no translation found for pref_use_instant_search (1119176077760723740) -->
+    <skip />
+    <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen (8173609016657987973) -->
+    <skip />
+    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <skip />
+    <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
+    <skip />
+    <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
+    <skip />
+    <!-- no translation found for browserFrameFormResubmitLabel (2685923472682180360) -->
+    <skip />
+    <string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Ikhasi ozama ukulibuka liqukethe idatha esithunyelwe kakade (\"POSTDATA\"). Uma ufuna ukuthumela futhi idatha, noma isiphi isenzo nokwakheka ekhisini okwenziwayo (njengokusesha  noma ukuthenga uxhumeke kwi-inthanethi ) kuzophindwa."</string>
+    <!-- no translation found for loadSuspendedTitle (675991625288706944) -->
+    <skip />
+    <string name="loadSuspended" msgid="3133656588880851273">"Isiphequluli asikwazi ukuhlohla leli khasi ngoba alukho uxhumano lwe-inthanethi"</string>
+    <!-- no translation found for clear_history (5998307092715979619) -->
+    <skip />
+    <string name="browser_history" msgid="1038987118290272525">"Amakhasi asanda kuvakashelwa"</string>
+    <!-- no translation found for empty_history (8738772352308207274) -->
+    <skip />
+    <!-- no translation found for go_home (3140773562046381164) -->
+    <skip />
+    <string name="add_new_bookmark" msgid="8086367791400349049">"Engeza ibhukimakhi..."</string>
+    <string name="add_bookmark_short" msgid="3783984330998103735">"Engeza"</string>
+    <string name="search_hint" msgid="4647356319916631820">"Sesha noma thayipha i-URL"</string>
+    <!-- no translation found for search_button_text (5235226933877634410) -->
+    <skip />
+    <string name="search_settings_description" msgid="1422401062529014107">"Amabhukimakhi nomlando wewebhu."</string>
+    <!-- no translation found for attention (3473639060042811244) -->
+    <skip />
+    <string name="popup_window_attempt" msgid="2673111696288657989">"Le sayithi izama ukuvula iwindi elingugaxekile"</string>
+    <!-- no translation found for allow (1157313689171991335) -->
+    <skip />
+    <!-- no translation found for block (9172175889884707800) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_title (5175503564948906442) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_message (1398571800233959583) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_title (3805453941587725944) -->
+    <skip />
+    <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"Ayikwazanga ukuvula iwindi elingagaxekile ngoba elilodwa kuphela elingavulwa nganoma isiphi isikhathi."</string>
+    <!-- no translation found for download_title (2122874021047565594) -->
+    <skip />
+    <!-- no translation found for download_unknown_filename (4013465542563652175) -->
+    <skip />
+    <!-- no translation found for download_menu_open (4888327480367757513) -->
+    <skip />
+    <!-- no translation found for download_menu_clear (6264454531553418124) -->
+    <skip />
+    <string name="download_menu_delete" msgid="8815502136393894148">"Susa"</string>
+    <!-- no translation found for download_menu_cancel (2545333007601851574) -->
+    <skip />
+    <!-- no translation found for download_menu_cancel_all (2136550823151999166) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_title (8909108500262799748) -->
+    <skip />
+    <!-- no translation found for download_cancel_dlg_msg (6285389170052357797) -->
+    <skip />
+    <string name="download_delete_file" msgid="5330036497843073249">"Ifayela izosuswa"</string>
+    <!-- no translation found for download_file_error_dlg_title (2693630283595384874) -->
+    <skip />
+    <string name="download_file_error_dlg_msg" msgid="5156405410324072471">"<xliff:g id="FILENAME">%s</xliff:g> ayikwazanga ukulandwa."\n"Khulula isikhala efonini yakho bese uzama futhi."</string>
+    <!-- no translation found for download_failed_generic_dlg_title (6106781095337833391) -->
+    <skip />
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"Ukugcina nge-USB akutholakali"</string>
+    <!-- outdated translation 56777245081568508 -->     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"Ukugcina nge-USB akutholakali"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"Ukugcina nge-USB kuyadingeka ukuze ulande i-<xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <!-- no translation found for download_no_sdcard_dlg_msg (2616399456116301518) -->
+    <skip />
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"Ukugcina nge-USB akutholakali"</string>
+    <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"Ikhadi le-SD alitholakali"</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"Ukugcina nge-USB kumatasa. Ukuvumela ukulanda, khetha \"Vala ukugcina nge-USB\' kwisaziso."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"Ikhadi le-SD limatasa. Ukuvumela ukulanda, khetha \"Vala ukulondoloza nge-USB\" kwisaziso."</string>
+    <!-- no translation found for cannot_download (8150552478556798780) -->
+    <skip />
+    <string name="download_no_application_title" msgid="1286056729168874295">"Ayikwazi ukuvula ifayela"</string>
+    <!-- no translation found for retry (1835923075542266721) -->
+    <skip />
+    <!-- no translation found for no_downloads (3947445710685021498) -->
+    <skip />
+    <!-- no translation found for download_error (413496839831257187) -->
+    <skip />
+    <!-- no translation found for download_success (2279041638155595203) -->
+    <skip />
+    <!-- no translation found for download_running (2622942231322015059) -->
+    <skip />
+    <!-- no translation found for download_pending (2599683668575349559) -->
+    <skip />
+    <!-- no translation found for download_pending_network (6548714525679461053) -->
+    <skip />
+    <!-- no translation found for download_running_paused (6418029352085656495) -->
+    <skip />
+    <!-- no translation found for download_canceled (6057083743144492515) -->
+    <skip />
+    <string name="download_not_acceptable" msgid="313769696131563652">"Ayikwazi ukulanda. Okuqukethwe akusekelwe kule foni."</string>
+    <!-- no translation found for download_file_error (1206648050615176113) -->
+    <skip />
+    <!-- no translation found for download_length_required (9038605488460437406) -->
+    <skip />
+    <!-- no translation found for download_precondition_failed (8327584102874295580) -->
+    <skip />
+    <string name="search_the_web" msgid="6046130189241962337">"Sesha iwebhu"</string>
+    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Ukulondoloza isiphequluli kugcwele"</string>
+    <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"Qhafaza ukukhulula isikhala."</string>
+    <string name="webstorage_clear_data_title" msgid="689484577124333977">"Sula idatha elondoloziwe"</string>
+    <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Sula idatha elondoloziwe"</string>
+    <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Yonke idatha egcinwe yile webhusayithi izosuswa."</string>
+    <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Sula konke"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Khansela"</string>
+    <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"I-MB igcinwe efonini yakho"</string>
+    <string name="loading_video" msgid="4887871585216091096">"Ilayisha ividiyo"</string>
+    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> ifuna ukwazi indawo yakho"</string>
+    <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Yabelana ngendawo"</string>
+    <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Nqaba"</string>
+    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Khumbula okukhethwayo"</string>
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"Lesayithi iyakwazi ukufinyelela indawo yakho. Shintsha lokhu kokuthi Izilungiselelo -&gt; Izilungiselelo zewebhusayithi"</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"Lesayithi ayikwazi ukufinyelela indawo yakho. Shintsha lokhu kokuthi Izilungiselelo -&gt; Izilungiselelo zewebhusayithi"</string>
+    <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Sula ukufinyelela indawo"</string>
+    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Le sayithi okwamanje ingafinyelela kundawo yakho"</string>
+    <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Le sayithi ayikwazi okwamanje ukufinyelela kundawo yakho"</string>
+    <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Sula ukufinyelela indawo"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Ukufinyelela indawo yalewebhusayithi kuzosulwa."</string>
+    <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Sula ukufinyelela"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Khansela"</string>
+    <string name="website_settings_clear_all" msgid="8739804325997655980">"Sula konke"</string>
+    <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Sula zonke izilungiselelo zewebhusayithi?"</string>
+    <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Yonke idatha yewebhusayithi nezimvume zendawo kuzosuswa"</string>
+    <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Susa yonke idatha"</string>
+    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Khansela"</string>
+    <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"Ihlela iphephadonga..."</string>
+    <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"Amabhukimakhi"</string>
+    <string name="empty_bookmarks_folder" msgid="7843361614634930942">"Awekho amabhukimakhi"</string>
+    <string name="rlz_access_point" msgid="7165847807377650632">"Y1"</string>
+    <!-- no translation found for account_chooser_dialog_title (3314204833188808194) -->
+    <!-- no translation found for account_chooser_dialog_title (4833571985009544332) -->
+    <skip />
+    <string name="import_bookmarks_dialog_title" msgid="3325557652271172128">"Vumelanisa nge-akhawunti ye-Google"</string>
+    <!-- outdated translation 2187665745413495303 -->     <string name="import_bookmarks_dialog_description" msgid="1942452375564381488">"Amabhukimakhi akho e-Android awahlobene ne-akhawunti ye-Google"</string>
+    <!-- no translation found for import_bookmarks_dialog_select_add_account (3102882579089291099) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_delete_select_account (5192284761080626386) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_delete (8854001080444749211) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_confirm_add (5433677293195372675) -->
+    <skip />
+    <!-- outdated translation 8105572409059113340 -->     <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"Khipha amabhukimakhi akho e-Android"</string>
+    <!-- no translation found for import_bookmarks_wizard_next (7578143961884352676) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_previous (8551440353688257031) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_cancel (4936061122806506634) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_wizard_done (1446247092194489191) -->
+    <skip />
+    <!-- no translation found for import_bookmarks_dialog_add (7552306756868669353) -->
+    <skip />
+    <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Yengeza amabhukimakhi akho e-Android kumabhukimakhi e-<xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
+    <string name="menu_share_url" msgid="5851814357333739700">"Yabelana"</string>
+    <string name="max_tabs_warning" msgid="4122034303809457570">"Awasekho amathebhu atholakalayo"</string>
+    <!-- no translation found for instant_search_label (8769284297650716935) -->
+    <skip />
+    <!-- no translation found for recover_title (8095611702406163360) -->
+    <skip />
+    <!-- no translation found for recover_prompt (6541354420842425606) -->
+    <skip />
+    <!-- no translation found for recover_yes (4540538008955917099) -->
+    <skip />
+    <!-- no translation found for recover_no (3121030267940592611) -->
+    <skip />
+    <!-- no translation found for preview (6450823514561689038) -->
+    <skip />
+    <!-- no translation found for local_bookmarks (533816851415228520) -->
+    <skip />
+    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
+    <skip />
+    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <skip />
+</resources>
diff --git a/res/values/bools.xml b/res/values/bools.xml
index 55f8242..6217de1 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -13,5 +13,4 @@
 <resources
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <bool name="isTablet">false</bool>
-    <bool name="hide_nav_buttons">true</bool>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 6a7c578..322a80a 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -36,4 +36,6 @@
     <color name="qcMenuBackground">#C0000000</color>
     <color name="qc_normal">#C02447B2</color>
     <color name="qc_selected">#D0102052</color>
+    <color name="tabViewTitleBackground">#D0000000</color>
+    <color name="navtab_bg">#80606060</color>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 1d993f8..c4ce151 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -30,21 +30,21 @@
     <dimen name="widgetItemMinHeight">48dip</dimen>
     <dimen name="favicon_size">16dip</dimen>
     <dimen name="favicon_padded_size">20dip</dimen>
-    <dimen name="qc_radius_start">50dip</dimen>
-    <dimen name="qc_radius_increment">70dip</dimen>
-    <dimen name="qc_slop">15dip</dimen>
+    <dimen name="qc_radius_start">30dip</dimen>
+    <dimen name="qc_radius_increment">60dip</dimen>
+    <dimen name="qc_slop">10dip</dimen>
     <dimen name="qc_touch_offset">15dip</dimen>
     <dimen name="qc_tab_title_height">30dip</dimen>
-    <dimen name="qc_thumb_width">240dip</dimen>
-    <dimen name="qc_thumb_height">160dip</dimen>
-    <dimen name="qc_item_size">48dip</dimen>
+    <dimen name="qc_thumb_width">160dip</dimen>
+    <dimen name="qc_thumb_height">120dip</dimen>
+    <dimen name="qc_item_size">40dip</dimen>
     <dimen name="bookmark_widget_thumb_size">32dip</dimen>
     <dimen name="bookmark_widget_favicon_size">26dip</dimen>
-    <!-- For the most visited page -->
-    <dimen name="mv_max_width">830dp</dimen>
-    <dimen name="mv_item_width">96dp</dimen>
-    <dimen name="mv_item_width_portrait">96dp</dimen>
-    <dimen name="mv_border_width">3dp</dimen>
+    <!-- For the most visited page (we use px as these are adjusted by the browser) -->
+    <dimen name="mv_max_width">450px</dimen>
+    <dimen name="mv_item_width">80px</dimen>
+    <dimen name="mv_item_width_portrait">80px</dimen>
+    <dimen name="mv_border_width">2px</dimen>
     <dimen name="tab_padding_top">12dp</dimen>
     <dimen name="tab_first_padding_left">12dp</dimen>
     <dimen name="list_favicon_padding">5dip</dimen>
@@ -55,12 +55,21 @@
     <dimen name="widgetVerticalSpacing">12dip</dimen>
     <!-- For the combined Bookmarks History view -->
     <dimen name="combo_paddingTop">10dip</dimen>
-    <dimen name="combo_paddingLeftRight">16dip</dimen>
-    <dimen name="combo_horizontalSpacing">8dip</dimen>
+    <dimen name="combo_horizontalSpacing">6dip</dimen>
+    <dimen name="tab_view_thumbnail_height">76dip</dimen>
     <!-- Preference activity side margins -->
     <dimen name="preference_screen_side_margin">0dp</dimen>
     <!-- Preference activity side margins negative-->
     <dimen name="preference_screen_side_margin_negative">0dp</dimen>
     <!-- Preference widget area width (to the left of the text) -->
     <dimen name="preference_widget_width">56dp</dimen>
+    <dimen name="nav_tab_spacing">8dp</dimen>
+    <dimen name="menu_width">240dip</dimen>
+    <dimen name="toolbar_height">52dip</dimen>
+    <dimen name="tab_capture_size">160dp</dimen>
+    <dimen name="nav_tab_width">240dip</dimen>
+    <dimen name="nav_tab_height">160dip</dimen>
+    <dimen name="nav_tab_text_normal">18sp</dimen>
+    <dimen name="nav_tab_text_small">14sp</dimen>
+    <dimen name="suggest_item_padding">8dp</dimen>
 </resources>
diff --git a/res/layout-sw600dp/browser_add_bookmark.xml b/res/values/ids.xml
similarity index 69%
copy from res/layout-sw600dp/browser_add_bookmark.xml
copy to res/values/ids.xml
index 14edecf..d6b74bd 100644
--- a/res/layout-sw600dp/browser_add_bookmark.xml
+++ b/res/values/ids.xml
@@ -14,12 +14,9 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/add_bookmark_width"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    >
-
-    <include layout="@layout/browser_add_bookmark_content" />
-
-</LinearLayout>
+<resources>
+    <!-- IDs for BookmarkExpandableGridView -->
+    <item type="id" name="group_position" />
+    <item type="id" name="child_position" />
+    <item type="id" name="child_id" />
+</resources>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index ad0ed90..5a8c15f 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -27,4 +27,6 @@
     <integer name="comboViewFadeInDuration">400</integer>
     <!--  fade between tabs duration -->
     <integer name="tabFadeDuration">300</integer>
+    <!-- The maximum number of columns in the bookmark grid view -->
+    <integer name="max_bookmark_columns">5</integer>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e754ea9..34ca824 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -129,6 +129,8 @@
     <string name="do_not_save">Cancel</string>
     <!-- Field label in Bookmark dialog box: refers to URL of the page to bookmark -->
     <string name="location">Address</string>
+    <!-- Field label in Bookmark dialog box: refers to the account to save the bookmark to -->
+    <string name="account">Account</string>
     <!-- Field label in Bookmark dialog box: refers to the folder in which to save the bookmark -->
     <string name="containing_folder">Add to</string>
     <!-- Default name for a new folder and label for a button that allows the user to create a new folder
@@ -233,6 +235,9 @@
     <string name="copy_page_url">Copy page url</string>
     <!-- Menu item -->
     <string name="share_page">Share page</string>
+    <!-- Menu item to freeze a tab. This will make a view-only
+            snapshot of the page in a new tab. [CHAR LIMIT=50] -->
+    <string name="menu_freeze_tab">Freeze tab</string>
     <!-- Menu item for saving a page. [CHAR LIMIT=30] -->
     <string name="menu_save_webarchive">Save page</string>
     <!-- Toast informing the user that the page has been saved. [CHAR LIMIT=50] -->
@@ -384,9 +389,11 @@
     <!-- Message shown during auto login [CHAR-LIMIT=none] -->
     <string name="pref_autologin_progress">Signing into Google sites using <xliff:g>%s</xliff:g></string>
     <!-- Auto-login bar description [CHAR-LIMIT=40] -->
-    <string name="autologin_bar_text">Automatic sign-in is available.</string>
+    <string name="autologin_bar_text">Sign in as</string>
     <!-- Login button [CHAR-LIMIT=10] -->
     <string name="autologin_bar_login_text">Login</string>
+    <!-- Hide button [CHAR-LIMIT=10] -->
+    <string name="autologin_bar_hide_text">Hide</string>
     <!-- Login failure text [CHAR-LIMIT=25] -->
     <string name="autologin_bar_error">Login failed.</string>
 
@@ -503,9 +510,7 @@
     <string name="pref_security_accept_cookies">Accept cookies</string>
     <!-- Settings summary -->
     <string name="pref_security_accept_cookies_summary">Allow sites to save and read \"cookie\" data</string>
-    <!-- Settings label -->
-    <string name="pref_text_size">Text size</string>
-    <!-- Settings text size options; appear in Text size dialog box -->
+    <!-- Settings text size options; appear in Text size dialog box [CHAR LIMIT=30] -->
     <string-array name="pref_text_size_choices">
         <item>Tiny</item>
         <item>Small</item>
@@ -513,16 +518,16 @@
         <item>Large</item>
         <item>Huge</item>
     </string-array>
-    <!-- Title of dialog for setting the text size -->
-    <string name="pref_text_size_dialogtitle">Text size</string>
-    <!-- Do not translate -->
-    <string-array name="pref_text_size_values" translatable="false">
-        <item><xliff:g>SMALLEST</xliff:g></item>
-        <item><xliff:g>SMALLER</xliff:g></item>
-        <item><xliff:g>NORMAL</xliff:g></item>
-        <item><xliff:g>LARGER</xliff:g></item>
-        <item><xliff:g>LARGEST</xliff:g></item>
-    </string-array>
+    <!-- Label for minimum font size [CHAR LIMIT=30] -->
+    <string name="pref_min_font_size">Minimum font size</string>
+    <!-- Label for the current minimum font size value [CHAR LIMIT=6] -->
+    <string name="pref_min_font_size_value"><xliff:g id="font_size">%d</xliff:g>pt</string>
+    <!-- Label for text zoom (percent) [CHAR LIMIT=30] -->
+    <string name="pref_text_zoom">Text zoom</string>
+    <!-- Label for whether or not to force-enable user scalablity (aka, zoom) [CHAR LIMIT=30] -->
+    <string name="pref_force_userscalable">Force enable zoom</string>
+    <!-- Summary for whether or not to force-enable user scalablity (aka, zoom) [CHAR LIMIT=30] -->
+    <string name="pref_force_userscalable_summary">Whether or not to override a website\'s request to control zoom behavior</string>
     <!-- Settings label -->
     <string name="pref_default_zoom">Default zoom</string>
     <!-- Settings default zoom options; appear in default zoom dialog box -->
@@ -586,6 +591,7 @@
         <item>iPhone</item>
         <item>iPad</item>
         <item>Froyo-N1</item>
+        <item>Honeycomb-Xoom</item>
     </string-array>
     <!-- Do not tranlsate.  Development option -->
     <string-array name="pref_development_ua_values" translatable="false">
@@ -594,6 +600,7 @@
         <item>2</item>
         <item>3</item>
         <item>4</item>
+        <item>5</item>
     </string-array>
     <string name="pref_development_error_console" translatable="false">Show JavaScript Console</string>
     <!-- Settings screen, setting option name -->
@@ -625,6 +632,10 @@
         <item>EUC-KR</item>
     </string-array>
     <string name="pref_default_text_encoding_default" translatable="false">Latin-1</string>
+    <!-- Title for accessibility settings [CHAR LIMIT=25] -->
+    <string name="pref_accessibility_title">Accessibility</string>
+    <!-- Font size settings category under accessibility settings [CHAR LIMIT=50] -->
+    <string name="pref_font_size_category">Font size</string>
     <!-- Title for lab settings [CHAR LIMIT=25] -->
     <string name="pref_lab_title">Labs</string>
     <!-- Title for lab quick controls feature [CHAR LIMIT=40] -->
@@ -643,6 +654,11 @@
     <string name="pref_use_instant_search_summary">
       Use Google Instant when you use Google Search, to show results as you
       type (this can increase data use).</string>
+    <!-- Title for the fullscreen lab feature [CHAR LIMIT=40] -->
+    <string name="pref_lab_fullscreen">Fullscreen</string>
+    <!-- Summary for the fullscreen lab feature [CHAR LIMIT=120] -->
+    <string name="pref_lab_fullscreen_summary">
+      Use fullscreen mode to hide the status bar.</string>
     <!-- Title for a dialog displayed when the browser has a data connectivity
             problem -->
     <string name="browserFrameNetworkErrorLabel">Data connectivity problem</string>
@@ -664,6 +680,8 @@
     <string name="browser_history">Recently visited pages</string>
     <!-- Appears on History screen if no history is found -->
     <string name="empty_history">Browser history is empty.</string>
+    <!-- Menu option to load the user's home page [CHAR LIMIT=30] -->
+    <string name="go_home">Home</string>
     <!-- Displayed at the top of the bookmarks page.  When clicked, it bookmarks the page the browser is currently showing -->
     <string name="add_new_bookmark">Add bookmark\u2026</string>
     <!-- Verb placed in front of a screenshot of a web page that, when clicked,
@@ -975,4 +993,20 @@
          the search engines list (Preferences->Advanced->Set search engine
          [CHAR LIMIT=80] -->
     <string name="instant_search_label">Google with Instant (Labs)</string>
+    <!-- Recover tabs after a crash dialog title [CHAR LIMIT=32] -->
+    <string name="recover_title">Restore windows?</string>
+    <!-- Recover tabs after a crash dialog prompt [CHAR LIMIT=none] -->
+    <string name="recover_prompt">Would you like to restore your browser windows from last time?</string>
+    <!-- Yes, recover windows from last time [CHAR LIMIT=10] -->
+    <string name="recover_yes">Restore</string>
+    <!-- No, don't recover windows from last time [CHAR LIMIT=10] -->
+    <string name="recover_no">No</string>
+    <!-- Font size preview label in settings [CHAR LIMIT=30] -->
+    <string name="preview">Preview</string>
+    <!-- Name for the user's unsynced, local bookmarks [CHAR LIMIT=50] -->
+    <string name="local_bookmarks">Local</string>
+    <!-- Popup menu option that allows the user to select the mobile version of a webpage [CHAR LIMIT=50] -->
+    <string name="ua_switcher_mobile">Mobile</string>
+    <!-- Popup menu option that allows the user to select the desktop version of a webpage [CHAR LIMIT=50] -->
+    <string name="ua_switcher_desktop">Desktop</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8d222f4..1b77509 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -23,6 +23,7 @@
         <item name="android:colorBackground">#FFFFFFFF</item>
         <item name="android:windowActionBar">true</item>
         <item name="android:windowNoTitle">false</item>
+        <item name="android:windowActionBarOverlay">true</item>
         <item name="android:actionBarStyle">@style/ActionBarStyle</item>
         <item name="android:actionButtonStyle">@style/ActionButton</item>
     </style>
@@ -68,7 +69,7 @@
         <item name="android:windowEnterAnimation">@anim/title_bar_enter</item>
         <item name="android:windowExitAnimation">@anim/title_bar_exit</item>
     </style>
-        <style name="HoloIcon">
+    <style name="HoloIcon">
         <item name="android:layout_marginLeft">16dip</item>
     </style>
     <style name="HoloButton">
diff --git a/res/xml-sw600dp/lab_preferences.xml b/res/xml-sw600dp/lab_preferences.xml
new file mode 100644
index 0000000..705f740
--- /dev/null
+++ b/res/xml-sw600dp/lab_preferences.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<PreferenceScreen
+        xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <CheckBoxPreference
+        android:key="enable_quick_controls"
+        android:defaultValue="false"
+        android:title="@string/pref_lab_quick_controls"
+        android:summary="@string/pref_lab_quick_controls_summary" />
+
+    <CheckBoxPreference
+        android:key="use_most_visited_homepage"
+        android:defaultValue="false"
+        android:title="@string/pref_lab_most_visited_homepage"
+        android:summary="@string/pref_lab_most_visited_homepage_summary" />
+
+    <CheckBoxPreference
+        android:key="use_instant_search"
+        android:defaultValue="false"
+        android:title="@string/pref_use_instant_search"
+        android:summary="@string/pref_use_instant_search_summary" />
+
+</PreferenceScreen>
diff --git a/res/xml/accessibility_preferences.xml b/res/xml/accessibility_preferences.xml
new file mode 100644
index 0000000..a7124f4
--- /dev/null
+++ b/res/xml/accessibility_preferences.xml
@@ -0,0 +1,43 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <CheckBoxPreference android:key="force_userscalable"
+        android:title="@string/pref_force_userscalable"
+        android:summary="@string/pref_force_userscalable_summary"
+        android:defaultValue="false" />
+
+    <PreferenceCategory android:title="@string/pref_font_size_category">
+        <com.android.browser.preferences.WebViewPreview
+            android:title="@string/preview" />
+
+        <com.android.browser.preferences.FontSizePreference
+            android:key="text_zoom"
+            android:title="@string/pref_text_zoom"
+            android:defaultValue="10"
+            android:max="30" />
+
+        <com.android.browser.preferences.FontSizePreference
+            android:key="min_font_size"
+            android:title="@string/pref_min_font_size"
+            android:defaultValue="0"
+            android:max="20" />
+
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/advanced_preferences.xml b/res/xml/advanced_preferences.xml
index 3264d22..4a2823e 100644
--- a/res/xml/advanced_preferences.xml
+++ b/res/xml/advanced_preferences.xml
@@ -50,13 +50,6 @@
             android:summary="@string/pref_extras_website_settings_summary" />
 
     <PreferenceCategory android:title="@string/pref_content_title">
-        <ListPreference
-                android:key="text_size"
-                android:title="@string/pref_text_size"
-                android:defaultValue="NORMAL"
-                android:entries="@array/pref_text_size_choices"
-                android:entryValues="@array/pref_text_size_values"
-                android:dialogTitle="@string/pref_text_size_dialogtitle" />
 
         <ListPreference
                 android:key="default_zoom"
diff --git a/res/xml/bookmarkthumbnailwidget_info.xml b/res/xml/bookmarkthumbnailwidget_info.xml
index 65497cd..e98e3f7 100644
--- a/res/xml/bookmarkthumbnailwidget_info.xml
+++ b/res/xml/bookmarkthumbnailwidget_info.xml
@@ -22,5 +22,6 @@
     android:updatePeriodMillis="0"
     android:previewImage="@drawable/browser_widget_preview"
     android:initialLayout="@layout/bookmarkthumbnailwidget"
-    android:resizeMode="vertical">
+    android:resizeMode="vertical"
+    android:configure="com.android.browser.widget.BookmarkWidgetConfigure">
 </appwidget-provider>
diff --git a/res/xml/debug_preferences.xml b/res/xml/debug_preferences.xml
index 50d4c14..5126b0d 100644
--- a/res/xml/debug_preferences.xml
+++ b/res/xml/debug_preferences.xml
@@ -29,4 +29,51 @@
         android:entryValues="@array/pref_development_ua_values"
         android:defaultValue="0"/>
 
+    <!-- The javascript console is enabled by default when the user has
+         also enabled debug mode by navigating to about:debug. -->
+    <CheckBoxPreference
+        android:key="enable_visual_indicator"
+        android:defaultValue="false"
+        android:title="@string/pref_development_visual_indicator" />
+
+    <CheckBoxPreference
+        android:key="javascript_console"
+        android:defaultValue="true"
+        android:title="@string/pref_development_error_console" />
+
+    <CheckBoxPreference
+        android:key="small_screen"
+        android:defaultValue="false"
+        android:title="@string/pref_development_single_column_rendering" />
+
+    <CheckBoxPreference
+        android:key="wide_viewport"
+        android:defaultValue="true"
+        android:title="@string/pref_development_viewport" />
+
+    <CheckBoxPreference
+        android:key="normal_layout"
+        android:defaultValue="false"
+        android:title="@string/pref_development_normal_rendering" />
+
+    <CheckBoxPreference
+        android:key="enable_tracing"
+        android:defaultValue="false"
+        android:title="@string/pref_development_trace" />
+
+    <CheckBoxPreference
+        android:key="enable_light_touch"
+        android:defaultValue="false"
+        android:title="Enable light touch" />
+
+    <CheckBoxPreference
+        android:key="enable_nav_dump"
+        android:defaultValue="false"
+        android:title="@string/pref_development_nav_dump" />
+
+    <EditTextPreference
+        android:key="js_engine_flags"
+        android:title="@string/js_engine_flags"
+        android:singleLine="true" />
+
 </PreferenceScreen>
diff --git a/res/xml/general_preferences.xml b/res/xml/general_preferences.xml
index 92b1f2a..7b26307 100644
--- a/res/xml/general_preferences.xml
+++ b/res/xml/general_preferences.xml
@@ -22,13 +22,6 @@
             android:hint="@string/http"
             android:inputType="textUri|textMultiLine" />
 
-    <PreferenceCategory android:title="@string/pref_general_sync_title">
-        <Preference android:key="sync_with_chrome"
-            android:title="@string/pref_personal_sync_with_chrome"
-            android:summary="@string/pref_personal_sync_with_chrome_summary"
-        />
-    </PreferenceCategory>
-
     <PreferenceCategory android:title="@string/pref_general_autofill_title">
         <CheckBoxPreference android:key="autofill_enabled"
             android:title="@string/pref_autofill_enabled"
diff --git a/res/xml/hidden_debug_preferences.xml b/res/xml/hidden_debug_preferences.xml
deleted file mode 100644
index 661d9de..0000000
--- a/res/xml/hidden_debug_preferences.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<PreferenceScreen
-        xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <!-- The javascript console is enabled by default when the user has
-         also enabled debug mode by navigating to about:debug. -->
-    <CheckBoxPreference
-        android:key="enable_visual_indicator"
-        android:defaultValue="false"
-        android:title="@string/pref_development_visual_indicator" />
-
-    <CheckBoxPreference
-        android:key="javascript_console"
-        android:defaultValue="true"
-        android:title="@string/pref_development_error_console" />
-
-    <CheckBoxPreference
-        android:key="small_screen"
-        android:defaultValue="false"
-        android:title="@string/pref_development_single_column_rendering" />
-
-    <CheckBoxPreference
-        android:key="wide_viewport"
-        android:defaultValue="true"
-        android:title="@string/pref_development_viewport" />
-
-    <CheckBoxPreference
-        android:key="normal_layout"
-        android:defaultValue="false"
-        android:title="@string/pref_development_normal_rendering" />
-
-    <CheckBoxPreference
-        android:key="enable_tracing"
-        android:defaultValue="false"
-        android:title="@string/pref_development_trace" />
-
-    <CheckBoxPreference
-        android:key="enable_light_touch"
-        android:defaultValue="false"
-        android:title="Enable light touch" />
-
-    <CheckBoxPreference
-        android:key="enable_nav_dump"
-        android:defaultValue="false"
-        android:title="@string/pref_development_nav_dump" />
-
-    <EditTextPreference
-        android:key="js_engine_flags"
-        android:title="@string/js_engine_flags"
-        android:singleLine="true" />
-
-</PreferenceScreen>
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
index 87383b0..ee00463 100644
--- a/res/xml/lab_preferences.xml
+++ b/res/xml/lab_preferences.xml
@@ -16,22 +16,19 @@
 
 <PreferenceScreen
         xmlns:android="http://schemas.android.com/apk/res/android" >
-
     <CheckBoxPreference
         android:key="enable_quick_controls"
         android:defaultValue="false"
         android:title="@string/pref_lab_quick_controls"
         android:summary="@string/pref_lab_quick_controls_summary" />
-
     <CheckBoxPreference
         android:key="use_most_visited_homepage"
         android:defaultValue="false"
         android:title="@string/pref_lab_most_visited_homepage"
         android:summary="@string/pref_lab_most_visited_homepage_summary" />
-
     <CheckBoxPreference
-        android:key="use_instant_search"
+        android:key="fullscreen"
         android:defaultValue="false"
-        android:title="@string/pref_use_instant_search"
-        android:summary="@string/pref_use_instant_search_summary" />
+        android:title="@string/pref_lab_fullscreen"
+        android:summary="@string/pref_lab_fullscreen_summary" />
 </PreferenceScreen>
diff --git a/res/xml/preference_headers.xml b/res/xml/preference_headers.xml
index cdf259c..e58b90a 100644
--- a/res/xml/preference_headers.xml
+++ b/res/xml/preference_headers.xml
@@ -24,6 +24,10 @@
         android:title="@string/pref_privacy_security_title"
     />
 
+    <header android:fragment="com.android.browser.preferences.AccessibilityPreferencesFragment"
+        android:title="@string/pref_accessibility_title"
+    />
+
     <header android:fragment="com.android.browser.preferences.AdvancedPreferencesFragment"
         android:title="@string/pref_extras_title"
     />
diff --git a/src/com/android/browser/AccountsChangedReceiver.java b/src/com/android/browser/AccountsChangedReceiver.java
index a34180a..e5397a2 100644
--- a/src/com/android/browser/AccountsChangedReceiver.java
+++ b/src/com/android/browser/AccountsChangedReceiver.java
@@ -13,51 +13,77 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.android.browser;
 
-import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
+import android.database.Cursor;
+import android.net.Uri;
 import android.provider.BrowserContract;
+import android.provider.BrowserContract.Accounts;
+import android.provider.BrowserContract.Bookmarks;
+import android.text.TextUtils;
 
 public class AccountsChangedReceiver extends BroadcastReceiver {
 
+    private static final String[] PROJECTION = new String[] {
+        Accounts.ACCOUNT_NAME,
+        Accounts.ACCOUNT_TYPE,
+    };
+    private static final String SELECTION = Accounts.ACCOUNT_NAME + " IS NOT NULL";
+    private static final String DELETE_SELECTION = Accounts.ACCOUNT_NAME + "=? AND "
+            + Accounts.ACCOUNT_TYPE + "=?";
+
     @Override
     public void onReceive(Context context, Intent intent) {
-        // Validate that the account we are syncing to still exists
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-        String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-        String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-        if (accountType == null || accountName == null) {
-            // Not syncing, nothing to do
-            return;
-        }
-        Account[] accounts = AccountManager.get(context).getAccountsByType(accountType);
-        for (Account a : accounts) {
-            if (accountName.equals(a.name)) {
-                // Still have a valid account, sweet
-                return;
-            }
-        }
-        // Account deleted - disable sync
-        prefs.edit()
-                .remove(BrowserBookmarksPage.PREF_ACCOUNT_TYPE)
-                .remove(BrowserBookmarksPage.PREF_ACCOUNT_NAME)
-                .commit();
-        BrowserContract.Settings.setSyncEnabled(context, false);
-        for (Account a : accounts) {
-            ContentResolver.setSyncAutomatically(a, BrowserContract.AUTHORITY, false);
-            ContentResolver.setIsSyncable(a, BrowserContract.AUTHORITY, 0);
-        }
-        BookmarkThumbnailWidgetProvider.refreshWidgets(context, true);
+        new DeleteRemovedAccounts(context).start();
     }
 
+    static class DeleteRemovedAccounts extends Thread {
+        Context mContext;
+        public DeleteRemovedAccounts(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public void run() {
+            Account[] accounts = AccountManager.get(mContext).getAccounts();
+            ContentResolver cr = mContext.getContentResolver();
+            Cursor c = cr.query(Accounts.CONTENT_URI, PROJECTION,
+                    SELECTION, null, null);
+            while (c.moveToNext()) {
+                String name = c.getString(0);
+                String type = c.getString(1);
+                if (!contains(accounts, name, type)) {
+                    delete(cr, name, type);
+                }
+            }
+            cr.update(Accounts.CONTENT_URI, null, null, null);
+        }
+
+        void delete(ContentResolver cr, String name, String type) {
+            // Pretend to be a sync adapter to delete the data and not mark
+            // it for deletion. Without this, the bookmarks will be marked to
+            // be deleted, which will propagate to the server if the account
+            // is added back.
+            Uri uri = Bookmarks.CONTENT_URI.buildUpon()
+                    .appendQueryParameter(BrowserContract.CALLER_IS_SYNCADAPTER, "true")
+                    .build();
+            cr.delete(uri, DELETE_SELECTION, new String[] { name, type });
+        }
+
+        boolean contains(Account[] accounts, String name, String type) {
+            for (Account a : accounts) {
+                if (TextUtils.equals(a.name, name)
+                        && TextUtils.equals(a.type, type)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
 }
diff --git a/src/com/android/browser/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java
index 664fd68..0feba9a 100644
--- a/src/com/android/browser/ActiveTabsPage.java
+++ b/src/com/android/browser/ActiveTabsPage.java
@@ -18,62 +18,88 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
-import android.os.Handler;
+import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
 import android.widget.LinearLayout;
-import android.widget.ListView;
 import android.widget.TextView;
 
-public class ActiveTabsPage extends LinearLayout {
+interface OnCloseTab {
+    void onCloseTab(int position);
+}
 
-    private static final String LOGTAG = "TabPicker";
+public class ActiveTabsPage extends LinearLayout implements OnClickListener,
+        OnItemClickListener, OnCloseTab {
 
-    private final LayoutInflater mFactory;
-    private final UiController mUiController;
-    private final TabControl mControl;
-    private final TabsListAdapter mAdapter;
-    private final ListView mListView;
+    private Context mContext;
+    private UiController mController;
+    private TabControl mTabControl;
+    private View mNewTab, mNewIncognitoTab;
+    private TabAdapter mAdapter;
+    private AbsListView mTabsList;
 
-    public ActiveTabsPage(Context context, UiController control) {
+    public ActiveTabsPage(Context context, UiController controller) {
         super(context);
-        mUiController = control;
-        mControl = control.getTabControl();
-        mFactory = LayoutInflater.from(context);
-        mFactory.inflate(R.layout.active_tabs, this);
-        mListView = (ListView) findViewById(R.id.list);
-        mAdapter = new TabsListAdapter();
-        mListView.setAdapter(mAdapter);
-        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-                public void onItemClick(AdapterView<?> parent, View view,
-                        int position, long id) {
-                    if (mControl.canCreateNewTab()) {
-                        position -= 2;
-                    }
-                    boolean needToAttach = false;
-                    if (position == -2) {
-                        // Create a new tab
-                        mUiController.openTabToHomePage();
-                    } else if (position == -1) {
-                        // Create a new incognito tab
-                        mUiController.openIncognitoTab();
-                    } else {
-                        // Open the corresponding tab
-                        // If the tab is the current one, switchToTab will
-                        // do nothing and return, so we need to make sure
-                        // it gets attached back to its mContentView in
-                        // removeActiveTabPage
-                        needToAttach = !mUiController.switchToTab(position);
-                    }
-                    mUiController.removeActiveTabsPage(needToAttach);
-                }
-        });
+        mContext = context;
+        mController = controller;
+        mTabControl = mController.getTabControl();
+        setOrientation(VERTICAL);
+        setBackgroundResource(R.drawable.bg_browser);
+        LayoutInflater inflate = LayoutInflater.from(mContext);
+        inflate.inflate(R.layout.active_tabs, this, true);
+        mNewTab = findViewById(R.id.new_tab);
+        mNewIncognitoTab = findViewById(R.id.new_incognito_tab);
+        mNewTab.setOnClickListener(this);
+        mNewIncognitoTab.setOnClickListener(this);
+        int visibility = mTabControl.canCreateNewTab() ? View.VISIBLE : View.GONE;
+        mNewTab.setVisibility(visibility);
+        mNewIncognitoTab.setVisibility(visibility);
+        mTabsList = (AbsListView) findViewById(android.R.id.list);
+        mAdapter = new TabAdapter(mContext, mTabControl);
+        mAdapter.setOnCloseListener(this);
+        mTabsList.setAdapter(mAdapter);
+        mTabsList.setOnItemClickListener(this);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mNewTab) {
+            mController.openTabToHomePage();
+        } else if (v == mNewIncognitoTab) {
+            mController.openIncognitoTab();
+        }
+        mController.removeActiveTabsPage(false);
+    }
+
+    @Override
+    public void onItemClick(
+            AdapterView<?> parent, View view, int position, long id) {
+        final Tab tab = mTabControl.getTab(position);
+        boolean needToAttach = !mController.switchToTab(tab);
+        mController.removeActiveTabsPage(needToAttach);
+    }
+
+    @Override
+    public void onCloseTab(int position) {
+        Tab tab = mTabControl.getTab(position);
+        if (tab != null) {
+            mController.closeTab(tab);
+            if (mTabControl.getTabCount() == 0) {
+                mController.openTabToHomePage();
+                mController.removeActiveTabsPage(false);
+            } else {
+                mAdapter.notifyDataSetChanged();
+            }
+        }
     }
 
     /**
@@ -81,7 +107,7 @@
      * the parent to be pressed without being pressed itself.  This way the line
      * of a tab can be pressed, but the close button itself is not.
      */
-    private static class CloseHolder extends ImageView {
+    public static class CloseHolder extends ImageView {
         public CloseHolder(Context context, AttributeSet attrs) {
             super(context, attrs);
         }
@@ -96,118 +122,79 @@
         }
     }
 
-    private class TabsListAdapter extends BaseAdapter {
-        private boolean mNotified = true;
-        private int mReturnedCount;
-        private Handler mHandler = new Handler();
+    static class TabAdapter extends BaseAdapter implements OnClickListener {
 
+        LayoutInflater mInflater;
+        OnCloseTab mCloseListener;
+        TabControl mTabControl;
+
+        TabAdapter(Context context, TabControl tabs) {
+            mInflater = LayoutInflater.from(context);
+            mTabControl = tabs;
+        }
+
+        void setOnCloseListener(OnCloseTab listener) {
+            mCloseListener = listener;
+        }
+
+        @Override
+        public View getView(int position, View view, ViewGroup parent) {
+            if (view == null) {
+                view = mInflater.inflate(R.layout.tab_view, parent, false);
+            }
+            ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
+            ImageView thumbnail = (ImageView) view.findViewById(R.id.thumb);
+            TextView title = (TextView) view.findViewById(R.id.label);
+            Tab tab = getItem(position);
+
+            String label = tab.getTitle();
+            if (TextUtils.isEmpty(label)) {
+                label = tab.getUrl();
+            }
+            title.setText(label);
+            Bitmap thumbnailBitmap = tab.getScreenshot();
+            if (thumbnailBitmap == null) {
+                thumbnail.setImageResource(R.drawable.browser_thumbnail);
+            } else {
+                thumbnail.setImageBitmap(thumbnailBitmap);
+            }
+            Bitmap faviconBitmap = tab.getFavicon();
+            if (tab.isPrivateBrowsingEnabled()) {
+                favicon.setImageResource(R.drawable.ic_incognito_holo_dark);
+            } else {
+                if (faviconBitmap == null) {
+                    favicon.setImageResource(R.drawable.app_web_browser_sm);
+                } else {
+                    favicon.setImageBitmap(faviconBitmap);
+                }
+            }
+            View close = view.findViewById(R.id.close);
+            close.setTag(position);
+            close.setOnClickListener(this);
+            return view;
+        }
+
+        @Override
+        public void onClick(View v) {
+            int position = (Integer) v.getTag();
+            if (mCloseListener != null) {
+                mCloseListener.onCloseTab(position);
+            }
+        }
+
+        @Override
         public int getCount() {
-            int count = mControl.getTabCount();
-            if (mControl.canCreateNewTab()) {
-                count += 2;
-            }
-            // XXX: This is a workaround to be more like a real adapter. Most
-            // adapters call notifyDataSetChanged() whenever the internal data
-            // has changed. Since TabControl is our internal data, we don't
-            // know when that changes.
-            //
-            // Keep track of the last count we returned and whether we called
-            // notifyDataSetChanged(). If we did not initiate a data set
-            // change, and the count is different, send the notify and return
-            // the old count.
-            if (!mNotified && count != mReturnedCount) {
-                notifyChange();
-                return mReturnedCount;
-            }
-            mReturnedCount = count;
-            mNotified = false;
-            return count;
+            return mTabControl.getTabCount();
         }
-        public Object getItem(int position) {
-            return null;
+
+        @Override
+        public Tab getItem(int position) {
+            return mTabControl.getTab(position);
         }
+
+        @Override
         public long getItemId(int position) {
             return position;
         }
-        public int getViewTypeCount() {
-            return 2;
-        }
-        public int getItemViewType(int position) {
-            if (mControl.canCreateNewTab()) {
-                position -= 2;
-            }
-            // Do not recycle the "add new tab" item.
-            return position < 0 ? IGNORE_ITEM_VIEW_TYPE : 1;
-        }
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final int tabCount = mControl.getTabCount();
-            if (mControl.canCreateNewTab()) {
-                position -= 2;
-            }
-
-            if (convertView == null) {
-                if (position == -2) {
-                    convertView = mFactory.inflate(R.layout.tab_view_add_tab, null);
-                } else if (position == -1) {
-                    convertView = mFactory.inflate(R.layout.tab_view_add_incognito_tab, null);
-                } else {
-                    convertView = mFactory.inflate(R.layout.tab_view, null);
-                }
-            }
-
-            if (position >= 0) {
-                TextView title =
-                        (TextView) convertView.findViewById(R.id.title);
-                TextView url = (TextView) convertView.findViewById(R.id.url);
-                ImageView favicon =
-                        (ImageView) convertView.findViewById(R.id.favicon);
-                View close = convertView.findViewById(R.id.close);
-                Tab tab = mControl.getTab(position);
-                if (tab.getWebView() == null) {
-                    // This means that populatePickerData will have to use the
-                    // saved state.
-                    Log.w(LOGTAG, "Tab " + position + " has a null WebView and "
-                            + (tab.getSavedState() == null ? "null" : "non-null")
-                            + " saved state ");
-                }
-                if (tab.getTitle() == null || tab.getTitle().length() == 0) {
-                    Log.w(LOGTAG, "Tab " + position + " has no title. "
-                            + "Check above in the Logs to see whether it has a "
-                            + "null WebView or null WebHistoryItem");
-                }
-                title.setText(tab.getTitle());
-                url.setText(tab.getUrl());
-                Bitmap icon = tab.getFavicon();
-                if (icon != null) {
-                    favicon.setImageBitmap(icon);
-                } else {
-                    favicon.setImageResource(R.drawable.app_web_browser_sm);
-                }
-                final int closePosition = position;
-                close.setOnClickListener(new View.OnClickListener() {
-                        public void onClick(View v) {
-                            mUiController.closeTab(
-                                    mControl.getTab(closePosition));
-                            if (tabCount == 1) {
-                                mUiController.openTabToHomePage();
-                                mUiController.removeActiveTabsPage(false);
-                            } else {
-                                mNotified = true;
-                                notifyDataSetChanged();
-                            }
-                        }
-                });
-            }
-            return convertView;
-        }
-
-        void notifyChange() {
-            mHandler.post(new Runnable() {
-                public void run() {
-                    mNotified = true;
-                    notifyDataSetChanged();
-                }
-            });
-        }
     }
 }
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 08f9d39..f330cd5 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -16,19 +16,19 @@
 
 package com.android.browser;
 
-import com.android.browser.provider.BrowserProvider2;
 import com.android.browser.addbookmark.FolderSpinner;
 import com.android.browser.addbookmark.FolderSpinnerAdapter;
 
 import android.app.Activity;
 import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.AsyncTaskLoader;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Loader;
-import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
@@ -40,8 +40,8 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.preference.PreferenceManager;
 import android.provider.BrowserContract;
+import android.provider.BrowserContract.Accounts;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
@@ -53,20 +53,23 @@
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
 import android.widget.CursorAdapter;
 import android.widget.EditText;
 import android.widget.ListView;
+import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
 
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.Stack;
 
 public class AddBookmarkPage extends Activity
         implements View.OnClickListener, TextView.OnEditorActionListener,
         AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor>,
-        BreadCrumbView.Controller, FolderSpinner.OnSetSelectionListener {
+        BreadCrumbView.Controller, FolderSpinner.OnSetSelectionListener,
+        OnItemSelectedListener {
 
     public static final long DEFAULT_FOLDER_ID = -1;
     public static final String TOUCH_ICON_URL = "touch_icon_url";
@@ -83,12 +86,9 @@
     private final String LOGTAG = "Bookmarks";
 
     // IDs for the CursorLoaders that are used.
-    private final int LOADER_ID_FOLDER_CONTENTS = 0;
-    private final int LOADER_ID_ALL_FOLDERS = 1;
-    private final int LOADER_ID_FIND_ROOT = 2;
-    private final int LOADER_ID_CHECK_FOR_DUPE = 3;
-    private final int LOADER_ID_MOST_RECENTLY_SAVED_BOOKMARK = 4;
-    private final int LOADER_ID_FIND_FOLDER_BY_ID = 5;
+    private final int LOADER_ID_ACCOUNTS = 0;
+    private final int LOADER_ID_FOLDER_CONTENTS = 1;
+    private final int LOADER_ID_EDIT_INFO = 2;
 
     private EditText    mTitle;
     private EditText    mAddress;
@@ -121,6 +121,9 @@
     private View mRemoveLink;
     private View mFakeTitleHolder;
     private FolderSpinnerAdapter mFolderAdapter;
+    private Spinner mAccountSpinner;
+    private ArrayAdapter<BookmarkAccount> mAccountAdapter;
+
     private static class Folder {
         String Name;
         long Id;
@@ -142,26 +145,16 @@
     }
 
     private Uri getUriForFolder(long folder) {
-        Uri uri;
-        if (folder == mRootFolder) {
-            uri = BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER;
-        } else {
-            uri = BrowserContract.Bookmarks.buildFolderUri(folder);
-        }
-        String[] accountInfo = getAccountNameAndType(this);
-        if (accountInfo != null) {
-            uri = BookmarksLoader.addAccount(uri, accountInfo[1], accountInfo[0]);
-        }
-        return uri;
+        return BrowserContract.Bookmarks.buildFolderUri(folder);
     }
 
     @Override
-    public void onTop(int level, Object data) {
+    public void onTop(BreadCrumbView view, int level, Object data) {
         if (null == data) return;
         Folder folderData = (Folder) data;
         long folder = folderData.Id;
         LoaderManager manager = getLoaderManager();
-        CursorLoader loader = (CursorLoader) ((Loader) manager.getLoader(
+        CursorLoader loader = (CursorLoader) ((Loader<?>) manager.getLoader(
                 LOADER_ID_FOLDER_CONTENTS));
         loader.setUri(getUriForFolder(folder));
         loader.forceLoad();
@@ -213,7 +206,7 @@
                     // editing a folder, 1 otherwise.
                     mFolder.setSelectionIgnoringSelectionChange(mEditingFolder ? 0 : 1);
                 } else {
-                    ((TextView) mFolder.getSelectedView()).setText(folder.Name);
+                    mFolderAdapter.setOtherFolderDisplayText(folder.Name);
                 }
             }
         } else {
@@ -227,17 +220,15 @@
                 } else {
                     Object data = mCrumbs.getTopData();
                     if (data != null && ((Folder) data).Id == mCurrentFolder) {
-                        // We are showing the correct folder heirarchy. The
+                        // We are showing the correct folder hierarchy. The
                         // folder selector will say "Other folder..."  Change it
                         // to say the name of the folder once again.
-                        ((TextView) mFolder.getSelectedView()).setText(((Folder) data).Name);
+                        mFolderAdapter.setOtherFolderDisplayText(((Folder) data).Name);
                     } else {
-                        // We are not be showing the correct folder heirarchy.
+                        // We are not showing the correct folder hierarchy.
                         // Clear the Crumbs and find the proper folder
-                        mCrumbs.clear();
                         setupTopCrumb();
                         LoaderManager manager = getLoaderManager();
-                        manager.restartLoader(LOADER_ID_ALL_FOLDERS, null, this);
                         manager.restartLoader(LOADER_ID_FOLDER_CONTENTS, null, this);
 
                     }
@@ -319,7 +310,6 @@
                 // and choose a different one, so that we will start from
                 // the correct place.
                 LoaderManager manager = getLoaderManager();
-                manager.initLoader(LOADER_ID_ALL_FOLDERS, null, this);
                 manager.restartLoader(LOADER_ID_FOLDER_CONTENTS, null, this);
                 break;
             default:
@@ -351,11 +341,6 @@
         values.put(BrowserContract.Bookmarks.TITLE,
                 name);
         values.put(BrowserContract.Bookmarks.IS_FOLDER, 1);
-        String[] accountInfo = getAccountNameAndType(this);
-        if (accountInfo != null) {
-            values.put(BrowserContract.Bookmarks.ACCOUNT_TYPE, accountInfo[1]);
-            values.put(BrowserContract.Bookmarks.ACCOUNT_NAME, accountInfo[0]);
-        }
         long currentFolder;
         Object data = mCrumbs.getTopData();
         if (data != null) {
@@ -391,66 +376,78 @@
         }
     }
 
+    private LoaderCallbacks<EditBookmarkInfo> mEditInfoLoaderCallbacks =
+            new LoaderCallbacks<EditBookmarkInfo>() {
+
+        @Override
+        public void onLoaderReset(Loader<EditBookmarkInfo> loader) {
+            // Don't care
+        }
+
+        @Override
+        public void onLoadFinished(Loader<EditBookmarkInfo> loader,
+                EditBookmarkInfo info) {
+            boolean setAccount = false;
+            if (info.id != -1) {
+                mEditingExisting = true;
+                showRemoveButton();
+                mFakeTitle.setText(R.string.edit_bookmark);
+                mTitle.setText(info.title);
+                mFolderAdapter.setOtherFolderDisplayText(info.parentTitle);
+                mMap.putLong(BrowserContract.Bookmarks._ID, info.id);
+                setAccount = true;
+                setAccount(info.accountName, info.accountType);
+                mCurrentFolder = info.parentId;
+                onCurrentFolderFound();
+            }
+            // TODO: Detect if lastUsedId is a subfolder of info.id in the
+            // editing folder case. For now, just don't show the last used
+            // folder at all to prevent any chance of the user adding a parent
+            // folder to a child folder
+            if (info.lastUsedId != -1 && info.lastUsedId != info.id
+                    && !mEditingFolder) {
+                if (setAccount && info.lastUsedId != mRootFolder
+                        && TextUtils.equals(info.lastUsedAccountName, info.accountName)
+                        && TextUtils.equals(info.lastUsedAccountType, info.accountType)) {
+                    mFolderAdapter.addRecentFolder(info.lastUsedId, info.lastUsedTitle);
+                } else if (!setAccount) {
+                    setAccount = true;
+                    setAccount(info.lastUsedAccountName, info.lastUsedAccountType);
+                    if (info.lastUsedId != mRootFolder) {
+                        mFolderAdapter.addRecentFolder(info.lastUsedId,
+                                info.lastUsedTitle);
+                    }
+                }
+            }
+            if (!setAccount) {
+                mAccountSpinner.setSelection(0);
+            }
+        }
+
+        @Override
+        public Loader<EditBookmarkInfo> onCreateLoader(int id, Bundle args) {
+            return new EditBookmarkInfoLoader(AddBookmarkPage.this, mMap);
+        }
+    };
+
+    void setAccount(String accountName, String accountType) {
+        for (int i = 0; i < mAccountAdapter.getCount(); i++) {
+            BookmarkAccount account = mAccountAdapter.getItem(i);
+            if (TextUtils.equals(account.accountName, accountName)
+                    && TextUtils.equals(account.accountType, accountType)) {
+                onRootFolderFound(account.rootFolderId);
+                mAccountSpinner.setSelection(i);
+                return;
+            }
+        }
+    }
+
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
         String[] projection;
         switch (id) {
-            case LOADER_ID_CHECK_FOR_DUPE:
-                projection = new String[] {
-                        BrowserContract.Bookmarks._ID,
-                        BrowserContract.Bookmarks.PARENT,
-                        BrowserContract.Bookmarks.TITLE
-                };
-                return new CursorLoader(this,
-                        BookmarkUtils.getBookmarksUri(this),
-                        projection,
-                        BrowserContract.Bookmarks.URL + " = ?",
-                        new String[] { mOriginalUrl },
-                        null);
-            case LOADER_ID_FIND_ROOT:
-                String name = args.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME);
-                String type = args.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE);
-
-                projection = new String[] { BrowserContract.Bookmarks._ID };
-                String selection = BrowserContract.ChromeSyncColumns.SERVER_UNIQUE + "=? AND "
-                        + BrowserContract.Bookmarks.ACCOUNT_NAME + "=? AND "
-                        + BrowserContract.Bookmarks.ACCOUNT_TYPE + "=?";
-                String[] selArgs = new String[] {
-                        BrowserContract.ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR,
-                        name,
-                        type
-                };
-                return new CursorLoader(this,
-                        BrowserContract.Bookmarks.CONTENT_URI,
-                        projection,
-                        selection,
-                        selArgs,
-                        null);
-            case LOADER_ID_FIND_FOLDER_BY_ID:
-                projection = new String[] {
-                        BrowserContract.Bookmarks._ID,
-                        BrowserContract.Bookmarks.TITLE
-                };
-                return new CursorLoader(this,
-                        BookmarkUtils.getBookmarksUri(this),
-                        projection,
-                        BrowserContract.Bookmarks._ID + " = "
-                                + args.getLong(BrowserContract.Bookmarks._ID),
-                        null,
-                        null);
-            case LOADER_ID_ALL_FOLDERS:
-                projection = new String[] {
-                        BrowserContract.Bookmarks._ID,
-                        BrowserContract.Bookmarks.PARENT,
-                        BrowserContract.Bookmarks.TITLE,
-                        BrowserContract.Bookmarks.IS_FOLDER
-                };
-                return new CursorLoader(this,
-                        BookmarkUtils.getBookmarksUri(this),
-                        projection,
-                        BrowserContract.Bookmarks.IS_FOLDER + " != 0",
-                        null,
-                        null);
+            case LOADER_ID_ACCOUNTS:
+                return new AccountsLoader(this);
             case LOADER_ID_FOLDER_CONTENTS:
                 projection = new String[] {
                         BrowserContract.Bookmarks._ID,
@@ -458,26 +455,25 @@
                         BrowserContract.Bookmarks.IS_FOLDER
                 };
                 String where = BrowserContract.Bookmarks.IS_FOLDER + " != 0";
+                String whereArgs[] = null;
                 if (mEditingFolder) {
-                    where += " AND " + BrowserContract.Bookmarks._ID + " != "
-                            + mMap.getLong(BrowserContract.Bookmarks._ID);
+                    where += " AND " + BrowserContract.Bookmarks._ID + " != ?";
+                    whereArgs = new String[] { Long.toString(mMap.getLong(
+                            BrowserContract.Bookmarks._ID)) };
+                }
+                long currentFolder;
+                Object data = mCrumbs.getTopData();
+                if (data != null) {
+                    currentFolder = ((Folder) data).Id;
+                } else {
+                    currentFolder = mRootFolder;
                 }
                 return new CursorLoader(this,
-                        getUriForFolder(mCurrentFolder),
+                        getUriForFolder(currentFolder),
                         projection,
                         where,
-                        null,
+                        whereArgs,
                         BrowserContract.Bookmarks._ID + " ASC");
-            case LOADER_ID_MOST_RECENTLY_SAVED_BOOKMARK:
-                projection = new String[] {
-                        BrowserContract.Bookmarks.PARENT
-                };
-                return new CursorLoader(this,
-                        BookmarkUtils.getBookmarksUri(this),
-                        projection,
-                        BrowserContract.Bookmarks.IS_FOLDER + " = 0",
-                        null,
-                        BrowserContract.Bookmarks.DATE_CREATED + " DESC");
             default:
                 throw new AssertionError("Asking for nonexistant loader!");
         }
@@ -486,101 +482,18 @@
     @Override
     public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
         switch (loader.getId()) {
-            case LOADER_ID_CHECK_FOR_DUPE:
-                if (cursor != null && cursor.moveToFirst()) {
-                    // Site is bookmarked.
-                    mEditingExisting = true;
-                    showRemoveButton();
-                    mFakeTitle.setText(R.string.edit_bookmark);
-                    int index = cursor.getColumnIndexOrThrow(
-                            BrowserContract.Bookmarks.PARENT);
-                    mCurrentFolder = cursor.getLong(index);
-                    index = cursor.getColumnIndexOrThrow(
-                            BrowserContract.Bookmarks.TITLE);
-                    String title = cursor.getString(index);
-                    mTitle.setText(title);
-                    index = cursor.getColumnIndexOrThrow(
-                            BrowserContract.Bookmarks._ID);
-                    long id = cursor.getLong(index);
-                    mMap.putLong(BrowserContract.Bookmarks._ID, id);
+            case LOADER_ID_ACCOUNTS:
+                mAccountAdapter.clear();
+                while (cursor.moveToNext()) {
+                    mAccountAdapter.add(new BookmarkAccount(this, cursor));
                 }
-                onCurrentFolderFound();
-                getLoaderManager().destroyLoader(LOADER_ID_CHECK_FOR_DUPE);
-                break;
-            case LOADER_ID_FIND_ROOT:
-                long root;
-                if (cursor != null && cursor.moveToFirst()) {
-                    root = cursor.getLong(0);
-                } else {
-                    root = BrowserProvider2.FIXED_ID_ROOT;
-                }
-                onRootFolderFound(root);
-                getLoaderManager().destroyLoader(LOADER_ID_FIND_ROOT);
+                getLoaderManager().destroyLoader(LOADER_ID_ACCOUNTS);
+                getLoaderManager().restartLoader(LOADER_ID_EDIT_INFO, null,
+                        mEditInfoLoaderCallbacks);
                 break;
             case LOADER_ID_FOLDER_CONTENTS:
                 mAdapter.changeCursor(cursor);
                 break;
-            case LOADER_ID_MOST_RECENTLY_SAVED_BOOKMARK:
-                LoaderManager manager = getLoaderManager();
-                if (cursor != null && cursor.moveToFirst()) {
-                    // Find the parent
-                    long lastUsedFolder = cursor.getLong(0);
-                    if (lastUsedFolder != mRootFolder
-                            && lastUsedFolder != mCurrentFolder
-                            && lastUsedFolder != 0) {
-                        // Find out the parent's name
-                        Bundle b = new Bundle();
-                        b.putLong(BrowserContract.Bookmarks._ID, lastUsedFolder);
-                        manager.initLoader(LOADER_ID_FIND_FOLDER_BY_ID, b, this);
-                    }
-                }
-                manager.destroyLoader(LOADER_ID_MOST_RECENTLY_SAVED_BOOKMARK);
-                break;
-            case LOADER_ID_FIND_FOLDER_BY_ID:
-                if (cursor != null && cursor.moveToFirst()) {
-                    long id = cursor.getLong(cursor.getColumnIndexOrThrow(
-                            BrowserContract.Bookmarks._ID));
-                    String title = cursor.getString(cursor.getColumnIndexOrThrow(
-                            BrowserContract.Bookmarks.TITLE));
-                    mFolderAdapter.addRecentFolder(id, title);
-                }
-                getLoaderManager().destroyLoader(LOADER_ID_FIND_FOLDER_BY_ID);
-                break;
-            case LOADER_ID_ALL_FOLDERS:
-                long parent = mCurrentFolder;
-                int idIndex = cursor.getColumnIndexOrThrow(
-                        BrowserContract.Bookmarks._ID);
-                int titleIndex = cursor.getColumnIndexOrThrow(
-                        BrowserContract.Bookmarks.TITLE);
-                int parentIndex = cursor.getColumnIndexOrThrow(
-                        BrowserContract.Bookmarks.PARENT);
-                // If the user is editing anything inside the "Other Bookmarks"
-                // folder, we need to stop searching up when we reach its parent.
-                // Find the root folder
-                moveCursorToFolder(cursor, mRootFolder, idIndex);
-                // omniparent is the folder which contains root, and therefore
-                // also the parent of the "Other Bookmarks" folder.
-                long omniparent = cursor.getLong(parentIndex);
-                Stack<Folder> folderStack = new Stack<Folder>();
-                while ((parent != mRootFolder) && (parent != 0) && (parent != omniparent)) {
-                    // First, find the folder corresponding to the current
-                    // folder
-                    moveCursorToFolder(cursor, parent, idIndex);
-                    String name = cursor.getString(titleIndex);
-                    if (parent == mCurrentFolder) {
-                        ((TextView) mFolder.getSelectedView()).setText(name);
-                    }
-                    folderStack.push(new Folder(name, parent));
-                    parent = cursor.getLong(parentIndex);
-                }
-                while (!folderStack.isEmpty()) {
-                    Folder thisFolder = folderStack.pop();
-                    mCrumbs.pushView(thisFolder.Name, thisFolder);
-                }
-                getLoaderManager().destroyLoader(LOADER_ID_ALL_FOLDERS);
-                break;
-            default:
-                break;
         }
     }
 
@@ -727,7 +640,7 @@
         mCancelButton.setOnClickListener(this);
 
         mFolder = (FolderSpinner) findViewById(R.id.folder);
-        mFolderAdapter = new FolderSpinnerAdapter(!mEditingFolder);
+        mFolderAdapter = new FolderSpinnerAdapter(this, !mEditingFolder);
         mFolder.setAdapter(mFolderAdapter);
         mFolder.setOnSetSelectionListener(this);
 
@@ -759,22 +672,22 @@
         mListView.setOnItemClickListener(this);
         mListView.addEditText(mFolderNamer);
 
+        mAccountAdapter = new ArrayAdapter<BookmarkAccount>(this,
+                android.R.layout.simple_spinner_item);
+        mAccountAdapter.setDropDownViewResource(
+                android.R.layout.simple_spinner_dropdown_item);
+        mAccountSpinner = (Spinner) findViewById(R.id.accounts);
+        mAccountSpinner.setAdapter(mAccountAdapter);
+        mAccountSpinner.setOnItemSelectedListener(this);
+
+
         mFakeTitleHolder = findViewById(R.id.title_holder);
 
         if (!window.getDecorView().isInTouchMode()) {
             mButton.requestFocus();
         }
 
-        String[] accountInfo = getAccountNameAndType(this);
-        if (accountInfo == null) {
-            onRootFolderFound(BrowserProvider2.FIXED_ID_ROOT);
-        } else {
-            Bundle args = new Bundle();
-            args.putString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, accountInfo[0]);
-            args.putString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, accountInfo[1]);
-            getLoaderManager().initLoader(LOADER_ID_FIND_ROOT, args, this);
-        }
-
+        getLoaderManager().restartLoader(LOADER_ID_ACCOUNTS, null, this);
     }
 
     private void showRemoveButton() {
@@ -787,22 +700,13 @@
     // Called once we have determined which folder is the root folder
     private void onRootFolderFound(long root) {
         mRootFolder = root;
-        if (mCurrentFolder == DEFAULT_FOLDER_ID) {
-            mCurrentFolder = mRootFolder;
-        }
+        mCurrentFolder = mRootFolder;
         setupTopCrumb();
-        if (mEditingExisting || TextUtils.isEmpty(mOriginalUrl)
-                || !(mMap != null && mMap.getBoolean(CHECK_FOR_DUPE))) {
-            onCurrentFolderFound();
-        } else {
-            // User is attempting to bookmark a site, rather than deliberately
-            // editing a bookmark.  Rather than let them create a duplicate
-            // bookmark, see if the bookmark already exists.
-            getLoaderManager().initLoader(LOADER_ID_CHECK_FOR_DUPE, null, this);
-        }
+        onCurrentFolderFound();
     }
 
     private void setupTopCrumb() {
+        mCrumbs.clear();
         String name = getString(R.string.bookmarks);
         mTopLevelLabel = (TextView) mCrumbs.pushView(name, false,
                 new Folder(name, mRootFolder));
@@ -813,19 +717,12 @@
     private void onCurrentFolderFound() {
         LoaderManager manager = getLoaderManager();
         if (mCurrentFolder != mRootFolder) {
-            // Find all the folders
-            manager.initLoader(LOADER_ID_ALL_FOLDERS, null, this);
             // Since we're not in the root folder, change the selection to other
             // folder now.  The text will get changed once we select the correct
             // folder.
             mFolder.setSelectionIgnoringSelectionChange(mEditingFolder ? 1 : 2);
         } else {
             setShowBookmarkIcon(true);
-            if (!mEditingExisting) {
-                // Find the most recently saved bookmark, so that we can include it in
-                // the list of options to save the current bookmark.
-                manager.initLoader(LOADER_ID_MOST_RECENTLY_SAVED_BOOKMARK, null, this);
-            }
             if (!mEditingFolder) {
                 // Initially the "Bookmarks" folder should be showing, rather than
                 // the home screen.  In the editing folder case, home screen is not
@@ -834,22 +731,7 @@
             }
         }
         // Find the contents of the current folder
-        manager.initLoader(LOADER_ID_FOLDER_CONTENTS, null, this);
-}
-    /**
-     * Get the account name and type of the currently synced account.
-     * @param context Context to access preferences.
-     * @return null if no account name or type.  Otherwise, the result will be
-     *      an array of two Strings, the accountName and accountType, respectively.
-     */
-    private String[] getAccountNameAndType(Context context) {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-        String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-        String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-        if (TextUtils.isEmpty(accountName) || TextUtils.isEmpty(accountType)) {
-            return null;
-        }
-        return new String[] { accountName, accountType };
+        manager.restartLoader(LOADER_ID_FOLDER_CONTENTS, null, this);
     }
 
     /**
@@ -1070,6 +952,22 @@
         return true;
     }
 
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position,
+            long id) {
+        if (mAccountSpinner == parent) {
+            long root = mAccountAdapter.getItem(position).rootFolderId;
+            if (root != mRootFolder) {
+                onRootFolderFound(root);
+            }
+        }
+    }
+
+    @Override
+    public void onNothingSelected(AdapterView<?> parent) {
+        // Don't care
+    }
+
     /*
      * Class used as a proxy for the InputMethodManager to get to mFolderNamer
      */
@@ -1097,4 +995,162 @@
             return view == mEditText;
         }
     }
+
+    public static class AccountsLoader extends CursorLoader {
+
+        static final String[] PROJECTION = new String[] {
+            Accounts.ACCOUNT_NAME,
+            Accounts.ACCOUNT_TYPE,
+            Accounts.ROOT_ID,
+        };
+
+        static final int COLUMN_INDEX_ACCOUNT_NAME = 0;
+        static final int COLUMN_INDEX_ACCOUNT_TYPE = 1;
+        static final int COLUMN_INDEX_ROOT_ID = 2;
+
+        public AccountsLoader(Context context) {
+            super(context, Accounts.CONTENT_URI, PROJECTION, null, null,
+                    Accounts.ACCOUNT_NAME + " ASC");
+        }
+
+    }
+
+    public static class BookmarkAccount {
+
+        private String mLabel;
+        String accountName, accountType;
+        public long rootFolderId;
+
+        public BookmarkAccount(Context context, Cursor cursor) {
+            accountName = cursor.getString(
+                    AccountsLoader.COLUMN_INDEX_ACCOUNT_NAME);
+            accountType = cursor.getString(
+                    AccountsLoader.COLUMN_INDEX_ACCOUNT_TYPE);
+            rootFolderId = cursor.getLong(
+                    AccountsLoader.COLUMN_INDEX_ROOT_ID);
+            mLabel = accountName;
+            if (TextUtils.isEmpty(mLabel)) {
+                mLabel = context.getString(R.string.local_bookmarks);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return mLabel;
+        }
+    }
+
+    static class EditBookmarkInfo {
+        long id = -1;
+        long parentId = -1;
+        String parentTitle;
+        String title;
+        String accountName;
+        String accountType;
+
+        long lastUsedId = -1;
+        String lastUsedTitle;
+        String lastUsedAccountName;
+        String lastUsedAccountType;
+    }
+
+    static class EditBookmarkInfoLoader extends AsyncTaskLoader<EditBookmarkInfo> {
+
+        private Context mContext;
+        private Bundle mMap;
+
+        public EditBookmarkInfoLoader(Context context, Bundle bundle) {
+            super(context);
+            mContext = context;
+            mMap = bundle;
+        }
+
+        @Override
+        public EditBookmarkInfo loadInBackground() {
+            final ContentResolver cr = mContext.getContentResolver();
+            EditBookmarkInfo info = new EditBookmarkInfo();
+            Cursor c = null;
+
+            try {
+                // First, let's lookup the bookmark (check for dupes, get needed info)
+                String url = mMap.getString(BrowserContract.Bookmarks.URL);
+                info.id = mMap.getLong(BrowserContract.Bookmarks._ID, -1);
+                boolean checkForDupe = mMap.getBoolean(CHECK_FOR_DUPE);
+                if (checkForDupe && info.id == -1 && !TextUtils.isEmpty(url)) {
+                    c = cr.query(BrowserContract.Bookmarks.CONTENT_URI,
+                            new String[] { BrowserContract.Bookmarks._ID},
+                            BrowserContract.Bookmarks.URL + "=?",
+                            new String[] { url }, null);
+                    if (c.getCount() == 1 && c.moveToFirst()) {
+                        info.id = c.getLong(0);
+                    }
+                    c.close();
+                }
+                if (info.id != -1) {
+                    c = cr.query(ContentUris.withAppendedId(
+                            BrowserContract.Bookmarks.CONTENT_URI, info.id),
+                            new String[] {
+                            BrowserContract.Bookmarks.PARENT,
+                            BrowserContract.Bookmarks.ACCOUNT_NAME,
+                            BrowserContract.Bookmarks.ACCOUNT_TYPE,
+                            BrowserContract.Bookmarks.TITLE},
+                            null, null, null);
+                    if (c.moveToFirst()) {
+                        info.parentId = c.getLong(0);
+                        info.accountName = c.getString(1);
+                        info.accountType = c.getString(2);
+                        info.title = c.getString(3);
+                    }
+                    c.close();
+                    c = cr.query(ContentUris.withAppendedId(
+                            BrowserContract.Bookmarks.CONTENT_URI, info.parentId),
+                            new String[] {
+                            BrowserContract.Bookmarks.TITLE,},
+                            null, null, null);
+                    if (c.moveToFirst()) {
+                        info.parentTitle = c.getString(0);
+                    }
+                    c.close();
+                }
+
+                // Figure out the last used folder/account
+                c = cr.query(BrowserContract.Bookmarks.CONTENT_URI,
+                        new String[] {
+                        BrowserContract.Bookmarks.PARENT,
+                        }, null, null,
+                        BrowserContract.Bookmarks.DATE_MODIFIED + " DESC LIMIT 1");
+                if (c.moveToFirst()) {
+                    long parent = c.getLong(0);
+                    c.close();
+                    c = cr.query(BrowserContract.Bookmarks.CONTENT_URI,
+                            new String[] {
+                            BrowserContract.Bookmarks.TITLE,
+                            BrowserContract.Bookmarks.ACCOUNT_NAME,
+                            BrowserContract.Bookmarks.ACCOUNT_TYPE},
+                            BrowserContract.Bookmarks._ID + "=?", new String[] {
+                            Long.toString(parent)}, null);
+                    if (c.moveToFirst()) {
+                        info.lastUsedId = parent;
+                        info.lastUsedTitle = c.getString(0);
+                        info.lastUsedAccountName = c.getString(1);
+                        info.lastUsedAccountType = c.getString(2);
+                    }
+                    c.close();
+                }
+            } finally {
+                if (c != null) {
+                    c.close();
+                }
+            }
+
+            return info;
+        }
+
+        @Override
+        protected void onStartLoading() {
+            forceLoad();
+        }
+
+    }
+
 }
diff --git a/src/com/android/browser/AutoFillSettingsFragment.java b/src/com/android/browser/AutoFillSettingsFragment.java
index 3a7ae12..141de34 100644
--- a/src/com/android/browser/AutoFillSettingsFragment.java
+++ b/src/com/android/browser/AutoFillSettingsFragment.java
@@ -28,6 +28,9 @@
 import android.view.ViewGroup;
 import android.view.View.OnClickListener;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.inputmethod.InputMethodManager;
 import android.webkit.WebSettings.AutoFillProfile;
 import android.widget.Button;
@@ -53,6 +56,7 @@
 
     // Used to display toast after DB interactions complete.
     private Handler mHandler;
+    private BrowserSettings mSettings;
 
     private final static int PROFILE_SAVED_MSG = 100;
     private final static int PROFILE_DELETED_MSG = 101;
@@ -116,6 +120,7 @@
                 case PROFILE_SAVED_MSG:
                     Toast.makeText(getActivity(), R.string.autofill_profile_successful_save,
                             Toast.LENGTH_SHORT).show();
+                    closeEditor();
                     break;
 
                 case PROFILE_DELETED_MSG:
@@ -130,6 +135,38 @@
     @Override
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
+        setHasOptionsMenu(true);
+        mSettings = BrowserSettings.getInstance();
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.autofill_profile_editor, menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == R.id.autofill_profile_editor_delete_profile_menu_id) {
+            // Clear the UI.
+            mFullNameEdit.setText("");
+            mEmailEdit.setText("");
+            mCompanyEdit.setText("");
+            mAddressLine1Edit.setText("");
+            mAddressLine2Edit.setText("");
+            mCityEdit.setText("");
+            mStateEdit.setText("");
+            mZipEdit.setText("");
+            mCountryEdit.setText("");
+            mPhoneEdit.setText("");
+
+            // Update browser settings and native with a null profile. This will
+            // trigger the current profile to get deleted from the DB.
+            mSettings.setAutoFillProfile(null,
+                    mHandler.obtainMessage(PROFILE_DELETED_MSG));
+            updateButtonState();
+            return true;
+        }
+        return false;
     }
 
     @Override
@@ -177,45 +214,13 @@
                         mCountryEdit.getText().toString(),
                         mPhoneEdit.getText().toString());
 
-                BrowserSettings.getInstance().setAutoFillProfile(getActivity(), newProfile,
+                mSettings.setAutoFillProfile(newProfile,
                         mHandler.obtainMessage(PROFILE_SAVED_MSG));
-                closeEditor();
             }
         });
 
-        Button deleteButton = (Button)v.findViewById(R.id.autofill_profile_editor_delete_button);
-        deleteButton.setOnClickListener(new OnClickListener() {
-            public void onClick(View button) {
-                // Clear the UI.
-                mFullNameEdit.setText("");
-                mEmailEdit.setText("");
-                mCompanyEdit.setText("");
-                mAddressLine1Edit.setText("");
-                mAddressLine2Edit.setText("");
-                mCityEdit.setText("");
-                mStateEdit.setText("");
-                mZipEdit.setText("");
-                mCountryEdit.setText("");
-                mPhoneEdit.setText("");
-
-                // Update browser settings and native with a null profile. This will
-                // trigger the current profile to get deleted from the DB.
-                BrowserSettings.getInstance().setAutoFillProfile(getActivity(), null,
-                        mHandler.obtainMessage(PROFILE_DELETED_MSG));
-
-                updateButtonState();
-            }
-        });
-
-        Button cancelButton = (Button)v.findViewById(R.id.autofill_profile_editor_cancel_button);
-        cancelButton.setOnClickListener(new OnClickListener() {
-           public void onClick(View button) {
-               closeEditor();
-           }
-        });
-
         // Populate the text boxes with any pre existing AutoFill data.
-        AutoFillProfile activeProfile = BrowserSettings.getInstance().getAutoFillProfile();
+        AutoFillProfile activeProfile = mSettings.getAutoFillProfile();
         if (activeProfile != null) {
             mFullNameEdit.setText(activeProfile.getFullName());
             mEmailEdit.setText(activeProfile.getEmailAddress());
diff --git a/src/com/android/browser/AutofillHandler.java b/src/com/android/browser/AutofillHandler.java
new file mode 100644
index 0000000..b6b237d
--- /dev/null
+++ b/src/com/android/browser/AutofillHandler.java
@@ -0,0 +1,202 @@
+
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.database.Cursor;
+import android.os.AsyncTask;
+import android.os.Message;
+import android.preference.PreferenceManager;
+import android.webkit.WebSettings.AutoFillProfile;
+
+import java.util.concurrent.CountDownLatch;
+
+public class AutofillHandler {
+
+    private AutoFillProfile mAutoFillProfile;
+    // Default to zero. In the case no profile is set up, the initial
+    // value will come from the AutoFillSettingsFragment when the user
+    // creates a profile. Otherwise, we'll read the ID of the last used
+    // profile from the prefs db.
+    private int mAutoFillActiveProfileId;
+    private static final int NO_AUTOFILL_PROFILE_SET = 0;
+
+    private CountDownLatch mLoaded = new CountDownLatch(1);
+    private Context mContext;
+
+    public AutofillHandler(Context context) {
+        mContext = context;
+    }
+
+    /**
+     * Load settings from the browser app's database. It is performed in
+     * an AsyncTask as it involves plenty of slow disk IO.
+     * NOTE: Strings used for the preferences must match those specified
+     * in the various preference XML files.
+     */
+    public void asyncLoadFromDb() {
+        // Run the initial settings load in an AsyncTask as it hits the
+        // disk multiple times through SharedPreferences and SQLite. We
+        // need to be certain though that this has completed before we start
+        // to load pages though, so in the worst case we will block waiting
+        // for it to finish in BrowserActivity.onCreate().
+         new LoadFromDb().start();
+    }
+
+    public void waitForLoad() {
+        try {
+            mLoaded.await();
+        } catch (InterruptedException e) {}
+    }
+
+    private class LoadFromDb extends Thread {
+
+        @Override
+        public void run() {
+            SharedPreferences p =
+                    PreferenceManager.getDefaultSharedPreferences(mContext);
+
+            // Read the last active AutoFill profile id.
+            mAutoFillActiveProfileId = p.getInt(
+                    PreferenceKeys.PREF_AUTOFILL_ACTIVE_PROFILE_ID,
+                    mAutoFillActiveProfileId);
+
+            // Load the autofill profile data from the database. We use a database separate
+            // to the browser preference DB to make it easier to support multiple profiles
+            // and switching between them.
+            AutoFillProfileDatabase autoFillDb = AutoFillProfileDatabase.getInstance(mContext);
+            Cursor c = autoFillDb.getProfile(mAutoFillActiveProfileId);
+
+            if (c.getCount() > 0) {
+                c.moveToFirst();
+
+                String fullName = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.FULL_NAME));
+                String email = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.EMAIL_ADDRESS));
+                String company = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.COMPANY_NAME));
+                String addressLine1 = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.ADDRESS_LINE_1));
+                String addressLine2 = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.ADDRESS_LINE_2));
+                String city = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.CITY));
+                String state = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.STATE));
+                String zip = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.ZIP_CODE));
+                String country = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.COUNTRY));
+                String phone = c.getString(c.getColumnIndex(
+                        AutoFillProfileDatabase.Profiles.PHONE_NUMBER));
+                mAutoFillProfile = new AutoFillProfile(mAutoFillActiveProfileId,
+                        fullName, email, company, addressLine1, addressLine2, city,
+                        state, zip, country, phone);
+            }
+            c.close();
+            autoFillDb.close();
+
+            mLoaded.countDown();
+        }
+    }
+
+    public void setAutoFillProfile(AutoFillProfile profile, Message msg) {
+        int profileId = NO_AUTOFILL_PROFILE_SET;
+        if (profile != null) {
+            profileId = profile.getUniqueId();
+            // Update the AutoFill DB with the new profile.
+            new SaveProfileToDbTask(msg).execute(profile);
+        } else {
+            // Delete the current profile.
+            if (mAutoFillProfile != null) {
+                new DeleteProfileFromDbTask(msg).execute(mAutoFillProfile.getUniqueId());
+            }
+        }
+        // Make sure we set mAutoFillProfile before calling setActiveAutoFillProfileId
+        // Calling setActiveAutoFillProfileId will trigger an update of WebViews
+        // which will expect a new profile to be set
+        mAutoFillProfile = profile;
+        setActiveAutoFillProfileId(profileId);
+    }
+
+    public AutoFillProfile getAutoFillProfile() {
+        return mAutoFillProfile;
+    }
+
+    private void setActiveAutoFillProfileId(int activeProfileId) {
+        mAutoFillActiveProfileId = activeProfileId;
+        Editor ed = PreferenceManager.
+            getDefaultSharedPreferences(mContext).edit();
+        ed.putInt(PreferenceKeys.PREF_AUTOFILL_ACTIVE_PROFILE_ID, activeProfileId);
+        ed.apply();
+    }
+
+    private abstract class AutoFillProfileDbTask<T> extends AsyncTask<T, Void, Void> {
+        AutoFillProfileDatabase mAutoFillProfileDb;
+        Message mCompleteMessage;
+
+        public AutoFillProfileDbTask(Message msg) {
+            mCompleteMessage = msg;
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            if (mCompleteMessage != null) {
+                mCompleteMessage.sendToTarget();
+            }
+            mAutoFillProfileDb.close();
+        }
+
+        @Override
+        abstract protected Void doInBackground(T... values);
+    }
+
+
+    private class SaveProfileToDbTask extends AutoFillProfileDbTask<AutoFillProfile> {
+        public SaveProfileToDbTask(Message msg) {
+            super(msg);
+        }
+
+        @Override
+        protected Void doInBackground(AutoFillProfile... values) {
+            mAutoFillProfileDb = AutoFillProfileDatabase.getInstance(mContext);
+            assert mAutoFillActiveProfileId != NO_AUTOFILL_PROFILE_SET;
+            AutoFillProfile newProfile = values[0];
+            mAutoFillProfileDb.addOrUpdateProfile(mAutoFillActiveProfileId, newProfile);
+            return null;
+        }
+    }
+
+    private class DeleteProfileFromDbTask extends AutoFillProfileDbTask<Integer> {
+        public DeleteProfileFromDbTask(Message msg) {
+            super(msg);
+        }
+
+        @Override
+        protected Void doInBackground(Integer... values) {
+            mAutoFillProfileDb = AutoFillProfileDatabase.getInstance(mContext);
+            int id = values[0];
+            assert  id > 0;
+            mAutoFillProfileDb.dropProfile(id);
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 4f80e9d..f7d7a3c 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -16,22 +16,32 @@
 
 package com.android.browser;
 
+import com.android.browser.BrowserWebView.ScrollListener;
 import com.android.browser.Tab.LockIcon;
+import com.android.internal.view.menu.MenuBuilder;
 
 import android.animation.ObjectAnimator;
 import android.app.Activity;
+import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.graphics.drawable.PaintDrawable;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
@@ -49,7 +59,7 @@
 /**
  * UI interface definitions
  */
-public abstract class BaseUi implements UI, WebViewFactory {
+public abstract class BaseUi implements UI, WebViewFactory, ScrollListener {
 
     private static final String LOGTAG = "BaseUi";
 
@@ -64,6 +74,9 @@
         ViewGroup.LayoutParams.MATCH_PARENT,
         Gravity.CENTER);
 
+    private static final int MSG_HIDE_TITLEBAR = 1;
+    private static final int HIDE_TITLEBAR_DELAY = 1500; // in ms
+
     Activity mActivity;
     UiController mUiController;
     TabControl mTabControl;
@@ -72,13 +85,15 @@
 
     private Drawable mSecLockIcon;
     private Drawable mMixLockIcon;
+    protected Drawable mGenericFavicon;
 
     private FrameLayout mBrowserFrameLayout;
     protected FrameLayout mContentView;
-    private FrameLayout mCustomViewContainer;
+    protected FrameLayout mCustomViewContainer;
 
     private View mCustomView;
     private WebChromeClient.CustomViewCallback mCustomViewCallback;
+    private int mOriginalOrientation;
 
     private CombinedBookmarkHistoryView mComboView;
 
@@ -86,7 +101,8 @@
 
     private Toast mStopToast;
 
-    private boolean mTitleShowing;
+    private int mLastScrollY;
+    private int mTitlebarScrollTriggerSlop;
 
     // the default <video> poster
     private Bitmap mDefaultVideoPoster;
@@ -116,7 +132,29 @@
         mCustomViewContainer = (FrameLayout) mBrowserFrameLayout
                 .findViewById(R.id.fullscreen_custom_content);
         frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
-        mTitleShowing = false;
+        setFullscreen(BrowserSettings.getInstance().useFullscreen());
+        mGenericFavicon = res.getDrawable(
+                R.drawable.app_web_browser_sm);
+        ViewConfiguration config = ViewConfiguration.get(browser);
+        mTitlebarScrollTriggerSlop = Math.max(
+                config.getScaledOverflingDistance(),
+                config.getScaledOverscrollDistance());
+        mTitlebarScrollTriggerSlop = Math.max(mTitlebarScrollTriggerSlop,
+                config.getScaledTouchSlop());
+    }
+
+    @Override
+    public WebView createWebView(boolean privateBrowsing) {
+        // Create a new WebView
+        BrowserWebView w = new BrowserWebView(mActivity, null,
+                android.R.attr.webViewStyle, privateBrowsing);
+        initWebViewSettings(w);
+        return w;
+    }
+
+    @Override
+    public WebView createSubWebView(boolean privateBrowsing) {
+        return createWebView(privateBrowsing);
     }
 
     /**
@@ -129,11 +167,15 @@
         w.setMapTrackballToArrowKeys(false); // use trackball directly
         // Enable the built-in zoom
         w.getSettings().setBuiltInZoomControls(true);
+        boolean supportsMultiTouch = mActivity.getPackageManager()
+                .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);
+        w.getSettings().setDisplayZoomControls(!supportsMultiTouch);
+        w.setExpandedTileBounds(true);  // smoother scrolling
 
         // Add this WebView to the settings observer list and update the
         // settings
         final BrowserSettings s = BrowserSettings.getInstance();
-        s.addObserver(w.getSettings()).update(s, null);
+        s.startManagingSettings(w.getSettings());
     }
 
     private void cancelStopToast() {
@@ -164,8 +206,6 @@
     public void onConfigurationChanged(Configuration config) {
     }
 
-    public abstract void editUrl(boolean clearInput);
-
     // key handling
 
     @Override
@@ -183,6 +223,11 @@
         return false;
     }
 
+    @Override
+    public boolean onMenuKey() {
+        return false;
+    }
+
     // Tab callbacks
     @Override
     public void onTabDataChanged(Tab tab) {
@@ -212,7 +257,7 @@
 
     @Override
     public boolean needsRestoreAllTabs() {
-        return false;
+        return true;
     }
 
     @Override
@@ -221,17 +266,12 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
-        setActiveTab(tab, true);
-    }
-
-    void setActiveTab(Tab tab, boolean needsAttaching) {
+        mHandler.removeMessages(MSG_HIDE_TITLEBAR);
         if ((tab != mActiveTab) && (mActiveTab != null)) {
             removeTabFromContentView(mActiveTab);
         }
         mActiveTab = tab;
-        if (needsAttaching) {
-            attachTabToContentView(tab);
-        }
+        attachTabToContentView(tab);
         setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole());
         onTabDataChanged(tab);
         onProgressChanged(tab);
@@ -300,8 +340,6 @@
             Log.w(LOGTAG, "mContainer is already attached to content in"
                     + " attachTabToContentView!");
         }
-        mainView.setNextFocusUpId(R.id.url_focused);
-        mainView.setNextFocusDownId(R.id.url_focused);
         mUiController.attachSubWindow(tab);
     }
 
@@ -395,24 +433,47 @@
         mContentView.addView(container, COVER_SCREEN_PARAMS);
     }
 
+    protected void refreshWebView() {
+        WebView web = getWebView();
+        if (web != null) {
+            web.invalidate();
+        }
+    }
+
+    public void editUrl(boolean clearInput) {
+        if (mUiController.isInCustomActionMode()) {
+            mUiController.endActionMode();
+        }
+        showTitleBar();
+        getTitleBar().startEditingUrl(clearInput);
+    }
+
     boolean canShowTitleBar() {
         return !isTitleBarShowing()
                 && !isActivityPaused()
                 && (getActiveTab() != null)
-                && (getActiveTab().getWebView() != null)
+                && (getWebView() != null)
                 && !mUiController.isInCustomActionMode();
     }
 
     void showTitleBar() {
-        mTitleShowing = true;
+        if (canShowTitleBar()) {
+            getTitleBar().show();
+        }
     }
 
     protected void hideTitleBar() {
-        mTitleShowing = false;
+        if (getTitleBar().isShowing()) {
+            getTitleBar().hide();
+        }
     }
 
     protected boolean isTitleBarShowing() {
-        return mTitleShowing;
+        return getTitleBar().isShowing();
+    }
+
+    public boolean isEditingUrl() {
+        return getTitleBar().isEditingUrl();
     }
 
     protected abstract TitleBarBase getTitleBar();
@@ -421,24 +482,28 @@
         WebView web = getWebView();
         if (web != null) {
             web.setTitleBarGravity(gravity);
-            web.invalidate();
         }
     }
 
     @Override
-    public void showVoiceTitleBar(String title) {
-        getTitleBar().setInVoiceMode(true);
+    public void showVoiceTitleBar(String title, List<String> results) {
+        getTitleBar().setInVoiceMode(true, results);
         getTitleBar().setDisplayTitle(title);
     }
 
     @Override
     public void revertVoiceTitleBar(Tab tab) {
-        getTitleBar().setInVoiceMode(false);
+        getTitleBar().setInVoiceMode(false, null);
         String url = tab.getUrl();
         getTitleBar().setDisplayTitle(url);
     }
 
     @Override
+    public void registerDropdownChangeListener(DropdownChangeListener d) {
+        getTitleBar().registerDropdownChangeListener(d);
+    }
+
+    @Override
     public void showComboView(boolean startWithHistory, Bundle extras) {
         if (mComboView != null) {
             return;
@@ -452,10 +517,10 @@
         FrameLayout wrapper =
             (FrameLayout) mContentView.findViewById(R.id.webview_wrapper);
         wrapper.setVisibility(View.GONE);
-        hideTitleBar();
+        getTitleBar().stopEditingUrl();
         dismissIME();
+        hideTitleBar();
         if (mActiveTab != null) {
-            WebView web = mActiveTab.getWebView();
             mActiveTab.putInBackground();
         }
         mComboView.setAlpha(0f);
@@ -489,7 +554,7 @@
     }
 
     @Override
-    public void showCustomView(View view,
+    public void showCustomView(View view, int requestedOrientation,
             WebChromeClient.CustomViewCallback callback) {
         // if a view already exists then immediately terminate the new one
         if (mCustomView != null) {
@@ -497,6 +562,8 @@
             return;
         }
 
+        mOriginalOrientation = mActivity.getRequestedOrientation();
+
         // Add the custom view to its container.
         mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
         mCustomView = view;
@@ -505,6 +572,7 @@
         mContentView.setVisibility(View.GONE);
         // Finally show the custom view container.
         setStatusBarVisibility(false);
+        mActivity.setRequestedOrientation(requestedOrientation);
         mCustomViewContainer.setVisibility(View.VISIBLE);
         mCustomViewContainer.bringToFront();
     }
@@ -522,6 +590,7 @@
         mCustomViewContainer.setVisibility(View.GONE);
         mCustomViewCallback.onCustomViewHidden();
         // Show the content view.
+        mActivity.setRequestedOrientation(mOriginalOrientation);
         setStatusBarVisibility(true);
         mContentView.setVisibility(View.VISIBLE);
     }
@@ -559,7 +628,9 @@
     protected void updateNavigationState(Tab tab) {
     }
 
-    protected void updateAutoLogin(Tab tab, boolean animate) {}
+    protected void updateAutoLogin(Tab tab, boolean animate) {
+        getTitleBar().updateAutoLogin(tab, animate);
+    }
 
     /**
      * Update the lock icon to correspond to our latest state.
@@ -605,11 +676,6 @@
 
     @Override
     public void onActionModeFinished(boolean inLoad) {
-        if (inLoad) {
-            // the titlebar was removed when the CAB was shown
-            // if the page is loading, show it again
-            showTitleBar();
-        }
     }
 
     // active tabs page
@@ -718,16 +784,107 @@
         warning.show();
     }
 
-    @Override
-    public void registerDropdownChangeListener(DropdownChangeListener d) {
+    protected void captureTab(final Tab tab) {
+        captureTab(tab,
+                (int) mActivity.getResources()
+                        .getDimension(R.dimen.qc_thumb_width),
+                (int) mActivity.getResources()
+                        .getDimension(R.dimen.qc_thumb_height));
+    }
+
+    protected void captureTab(final Tab tab, int width, int height) {
+        if ((tab == null) || (tab.getWebView() == null)) return;
+        Bitmap sshot = Controller.createScreenshot(tab, width, height);
+        tab.setScreenshot(sshot);
     }
 
     protected WebView getWebView() {
-        Tab tab = getActiveTab();
-        if (tab != null) {
-            return tab.getWebView();
+        if (mActiveTab != null) {
+            return mActiveTab.getWebView();
+        } else {
+            return null;
         }
-        return null;
     }
 
+    protected Menu getMenu() {
+        MenuBuilder menu = new MenuBuilder(mActivity);
+        mActivity.getMenuInflater().inflate(R.menu.browser, menu);
+        return menu;
+    }
+
+    public void setFullscreen(boolean enabled) {
+        if (enabled) {
+            mActivity.getWindow().setFlags(
+                    WindowManager.LayoutParams.FLAG_FULLSCREEN,
+                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        } else {
+            mActivity.getWindow().clearFlags(
+                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        }
+    }
+
+    protected Drawable getFaviconDrawable(Bitmap icon) {
+        Drawable[] array = new Drawable[3];
+        array[0] = new PaintDrawable(Color.BLACK);
+        PaintDrawable p = new PaintDrawable(Color.WHITE);
+        array[1] = p;
+        if (icon == null) {
+            array[2] = mGenericFavicon;
+        } else {
+            array[2] = new BitmapDrawable(icon);
+        }
+        LayerDrawable d = new LayerDrawable(array);
+        d.setLayerInset(1, 1, 1, 1, 1);
+        d.setLayerInset(2, 2, 2, 2, 2);
+        return d;
+    }
+
+    public boolean isLoading() {
+        return mActiveTab != null ? mActiveTab.inPageLoad() : false;
+    }
+
+    /**
+     * Suggest to the UI that the title bar can be hidden. The UI will then
+     * decide whether or not to hide based off a number of factors, such
+     * as if the user is editing the URL bar or if the page is loading
+     */
+    public void suggestHideTitleBar() {
+        if (!isLoading() && !isEditingUrl()) {
+            hideTitleBar();
+        }
+    }
+
+    @Override
+    public void onScroll(int visibleTitleHeight, boolean userInitiated) {
+        WebView view = mActiveTab != null ? mActiveTab.getWebView() : null;
+        if (view == null || !userInitiated) {
+            return;
+        }
+        int scrollY = view.getScrollY();
+        if (scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) {
+            mLastScrollY = scrollY;
+            if (visibleTitleHeight == 0) {
+                mHandler.removeMessages(MSG_HIDE_TITLEBAR);
+                showTitleBar();
+                Message msg = Message.obtain(mHandler, MSG_HIDE_TITLEBAR);
+                mHandler.sendMessageDelayed(msg, HIDE_TITLEBAR_DELAY);
+            } else if (visibleTitleHeight == getTitleBar().getEmbeddedHeight()
+                    && mHandler.hasMessages(MSG_HIDE_TITLEBAR)) {
+                mHandler.removeMessages(MSG_HIDE_TITLEBAR);
+                hideTitleBar();
+            }
+        } else if (scrollY > mLastScrollY) {
+            mLastScrollY = scrollY;
+        }
+    }
+
+    private Handler mHandler = new Handler() {
+
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == MSG_HIDE_TITLEBAR) {
+                suggestHideTitleBar();
+            }
+        }
+    };
 }
diff --git a/src/com/android/browser/BookmarkDragHandler.java b/src/com/android/browser/BookmarkDragHandler.java
new file mode 100644
index 0000000..fc0752f
--- /dev/null
+++ b/src/com/android/browser/BookmarkDragHandler.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.ClipData;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.BrowserContract;
+import android.view.ActionMode;
+import android.view.ActionMode.Callback;
+import android.view.DragEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnDragListener;
+import android.view.ViewGroup;
+
+public class BookmarkDragHandler implements Callback {
+
+    public static interface BookmarkDragController {
+        boolean startDrag(Cursor item);
+
+        ViewGroup getActionModeView(ActionMode mode, BookmarkDragState state);
+        void actionItemClicked(View v, BookmarkDragState state);
+    }
+
+    public static interface BookmarkDragAdapter {
+        void setBookmarkDragHandler(BookmarkDragHandler handler);
+        Cursor getItemForView(View v);
+    }
+
+    public static class BookmarkDragState {
+        public long id;
+        public long parent;
+        public Object extraState;
+    }
+
+    static final String BOOKMARK_DRAG_LABEL = "com.android.browser.BOOKMARK_LABEL";
+
+    private Activity mActivity;
+    private BookmarkDragController mDragController;
+    private BookmarkDragAdapter mDragAdapter;
+    private ActionMode mActionMode;
+    private BookmarkDragState mDragState;
+
+    public BookmarkDragHandler(Activity activity, BookmarkDragController controller,
+            BookmarkDragAdapter adapter) {
+        mActivity = activity;
+        mDragController = controller;
+        mDragAdapter = adapter;
+        mDragAdapter.setBookmarkDragHandler(this);
+    }
+
+    public boolean startDrag(View view, Cursor item, long id, Object extraState) {
+        if (!mDragController.startDrag(item)) {
+            return false;
+        }
+        Uri uri = ContentUris.withAppendedId(
+                BrowserContract.Bookmarks.CONTENT_URI, id);
+        ClipData data = ClipData.newRawUri(BOOKMARK_DRAG_LABEL, uri);
+        BookmarkDragState state = new BookmarkDragState();
+        state.id = id;
+        state.parent = item.getLong(BookmarksLoader.COLUMN_INDEX_PARENT);
+        state.extraState = extraState;
+        mDragState = state;
+        view.startDrag(data, new View.DragShadowBuilder(view), state, 0);
+        mActionMode = view.startActionMode(this);
+        return true;
+    }
+
+    public void registerBookmarkDragHandler(View view) {
+        view.setOnDragListener(mBookmarkDragListener);
+    }
+
+    private OnDragListener mBookmarkDragListener = new OnDragListener() {
+
+        @Override
+        public boolean onDrag(View v, DragEvent event) {
+            Cursor c = mDragAdapter.getItemForView(v);
+            BookmarkDragState state = (BookmarkDragState) event.getLocalState();
+            switch (event.getAction()) {
+            case DragEvent.ACTION_DRAG_STARTED:
+                return true;
+            case DragEvent.ACTION_DROP:
+                long id = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
+                if (id == state.id) {
+                    // We dropped onto ourselves, show the context menu
+                    v.showContextMenu();
+                    return false;
+                }
+                long parent = c.getLong(BookmarksLoader.COLUMN_INDEX_PARENT);
+                if (isFolder(c)) {
+                    parent = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
+                }
+                if (parent != state.parent) {
+                    ContentResolver cr = mActivity.getContentResolver();
+                    ContentValues values = new ContentValues();
+                    values.put(BrowserContract.Bookmarks.PARENT, parent);
+                    Uri uri = event.getClipData().getItemAt(0).getUri();
+                    cr.update(uri, values, null, null);
+                }
+                break;
+            }
+            return false;
+        }
+    };
+
+    private OnDragListener mActionModeDragListener = new OnDragListener() {
+
+        @Override
+        public boolean onDrag(View v, DragEvent event) {
+            BookmarkDragState state = (BookmarkDragState) event.getLocalState();
+            switch (event.getAction()) {
+            case DragEvent.ACTION_DRAG_STARTED:
+                return true;
+            case DragEvent.ACTION_DROP:
+                mDragController.actionItemClicked(v, state);
+                // fall through
+            case DragEvent.ACTION_DRAG_ENDED:
+                if (mActionMode != null) {
+                    mActionMode.finish();
+                    mActionMode = null;
+                }
+                return true;
+            }
+            return false;
+        }
+    };
+
+    static boolean isFolder(Cursor c) {
+        return c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
+    }
+
+    @Override
+    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+        ViewGroup view = mDragController.getActionModeView(mode, mDragState);
+        int count = view.getChildCount();
+        for (int i = 0; i < count; i++) {
+            view.getChildAt(i).setOnDragListener(mActionModeDragListener);
+        }
+        mode.setCustomView(view);
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+        return true;
+    }
+
+    @Override
+    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+        return false;
+    }
+
+    @Override
+    public void onDestroyActionMode(ActionMode mode) {
+    }
+
+}
diff --git a/src/com/android/browser/BookmarkItem.java b/src/com/android/browser/BookmarkItem.java
index 4e60073..e7f37a5 100644
--- a/src/com/android/browser/BookmarkItem.java
+++ b/src/com/android/browser/BookmarkItem.java
@@ -30,6 +30,8 @@
  */
 class BookmarkItem extends LinearLayout {
 
+    final static int MAX_TEXTVIEW_LEN = 80;
+
     protected TextView    mTextView;
     protected TextView    mUrlText;
     protected ImageView   mImageView;
@@ -63,6 +65,16 @@
         item.mImageView.setImageDrawable(mImageView.getDrawable());
     }
 
+    public void startMarquee() {
+        mTextView.setSelected(true);
+        mUrlText.setSelected(true);
+    }
+
+    public void stopMarquee() {
+        mTextView.setSelected(false);
+        mUrlText.setSelected(false);
+    }
+
     /**
      * Return the name assigned to this bookmark item.
      */
@@ -111,8 +123,8 @@
 
         mTitle = name;
 
-        if (name.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
-            name = name.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
+        if (name.length() > MAX_TEXTVIEW_LEN) {
+            name = name.substring(0, MAX_TEXTVIEW_LEN);
         }
 
         mTextView.setText(name);
@@ -129,8 +141,8 @@
 
         mUrl = url;
 
-        if (url.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
-            url = url.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
+        if (url.length() > MAX_TEXTVIEW_LEN) {
+            url = url.substring(0, MAX_TEXTVIEW_LEN);
         }
 
         mUrlText.setText(url);
diff --git a/src/com/android/browser/BookmarkUtils.java b/src/com/android/browser/BookmarkUtils.java
index 3aaf5d4..491c16c 100644
--- a/src/com/android/browser/BookmarkUtils.java
+++ b/src/com/android/browser/BookmarkUtils.java
@@ -25,7 +25,6 @@
 import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
@@ -42,7 +41,6 @@
 import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.BrowserContract;
-import android.util.DisplayMetrics;
 
 public class BookmarkUtils {
     private final static String LOGTAG = "BookmarkUtils";
@@ -218,19 +216,7 @@
     }
 
     /* package */ static Uri getBookmarksUri(Context context) {
-        return addAccountInfo(context,
-                BrowserContract.Bookmarks.CONTENT_URI.buildUpon()).build();
-    }
-
-    public static Uri.Builder addAccountInfo(Context context, Uri.Builder ub) {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-        String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-        String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-        ub.appendQueryParameter(
-                BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME,accountName);
-        ub.appendQueryParameter(
-                BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
-        return ub;
+        return BrowserContract.Bookmarks.CONTENT_URI;
     }
 
     /**
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index e7dc729..bd3b872 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -72,10 +72,6 @@
         ContentValues values = new ContentValues();
         try {
             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-            String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-            String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-            values.put(BrowserContract.Bookmarks.ACCOUNT_TYPE, accountType);
-            values.put(BrowserContract.Bookmarks.ACCOUNT_NAME, accountName);
             values.put(BrowserContract.Bookmarks.TITLE, name);
             values.put(BrowserContract.Bookmarks.URL, url);
             values.put(BrowserContract.Bookmarks.IS_FOLDER, 0);
diff --git a/src/com/android/browser/BookmarksLoader.java b/src/com/android/browser/BookmarksLoader.java
index 7722392..bc06497 100644
--- a/src/com/android/browser/BookmarksLoader.java
+++ b/src/com/android/browser/BookmarksLoader.java
@@ -49,8 +49,8 @@
         ChromeSyncColumns.SERVER_UNIQUE, // 9
     };
 
-    private String mAccountType;
-    private String mAccountName;
+    String mAccountType;
+    String mAccountName;
 
     public BookmarksLoader(Context context, String accountType, String accountName) {
         super(context, addAccount(Bookmarks.CONTENT_URI_DEFAULT_FOLDER, accountType, accountName),
diff --git a/src/com/android/browser/BreadCrumbView.java b/src/com/android/browser/BreadCrumbView.java
index 9aaecd7..6706deb 100644
--- a/src/com/android/browser/BreadCrumbView.java
+++ b/src/com/android/browser/BreadCrumbView.java
@@ -41,8 +41,8 @@
 public class BreadCrumbView extends LinearLayout implements OnClickListener {
     private static final int DIVIDER_PADDING = 12; // dips
 
-    interface Controller {
-        public void onTop(int level, Object data);
+    public interface Controller {
+        public void onTop(BreadCrumbView view, int level, Object data);
     }
 
     private ImageButton mBackButton;
@@ -52,6 +52,7 @@
     private Drawable mSeparatorDrawable;
     private float mDividerPadding;
     private int mMaxVisible = -1;
+    private Context mContext;
 
     /**
      * @param context
@@ -81,12 +82,14 @@
     }
 
     private void init(Context ctx) {
+        mContext = ctx;
+        setFocusable(true);
         mUseBackButton = false;
         mCrumbs = new ArrayList<Crumb>();
-        TypedArray a = ctx.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
+        TypedArray a = mContext.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
         mSeparatorDrawable = a.getDrawable(com.android.internal.R.styleable.Theme_dividerVertical);
         a.recycle();
-        mDividerPadding = DIVIDER_PADDING * ctx.getResources().getDisplayMetrics().density;
+        mDividerPadding = DIVIDER_PADDING * mContext.getResources().getDisplayMetrics().density;
         addBackButton();
     }
 
@@ -134,9 +137,9 @@
     public void notifyController() {
         if (mController != null) {
             if (mCrumbs.size() > 0) {
-                mController.onTop(mCrumbs.size(), getTopCrumb().data);
+                mController.onTop(this, mCrumbs.size(), getTopCrumb().data);
             } else {
-                mController.onTop(0, null);
+                mController.onTop(this, 0, null);
             }
         }
     }
diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index f49da5d..65eb0ce 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -16,12 +16,9 @@
 
 package com.android.browser;
 
-import android.os.FileUtils;
-import android.util.Log;
-
 import android.app.Application;
 import android.content.Intent;
-import android.webkit.CookieManager;
+import android.util.Log;
 import android.webkit.CookieSyncManager;
 
 import dalvik.system.VMRuntime;
@@ -52,9 +49,6 @@
     public void onCreate() {
         super.onCreate();
 
-        // Set the umask so that native code creates files with the correct
-        // permissions (0660)
-        FileUtils.setUMask(FileUtils.S_IRWXO);
         if (LOGV_ENABLED)
             Log.v(LOGTAG, "Browser.onCreate: this=" + this);
 
@@ -63,7 +57,7 @@
                 TARGET_HEAP_UTILIZATION);
         // create CookieSyncManager with current Context
         CookieSyncManager.createInstance(this);
-        BrowserSettings.getInstance().asyncLoadFromDb(this);
+        BrowserSettings.initialize(getApplicationContext());
     }
 
     static Intent createBrowserViewIntent() {
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index a9b65fd..dbcae2e 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -62,11 +62,6 @@
 
         BrowserSettings settings = BrowserSettings.getInstance();
 
-        // We load the first set of BrowserSettings from the db asynchronously
-        // but if it has not completed at this point, we have no choice but
-        // to block waiting for them to finish loading. :(
-        settings.waitForLoadFromDbToComplete();
-
         // render the browser in OpenGL
         if (settings.isHardwareAccelerated()) {
             // Set the flag in the activity's window
@@ -77,12 +72,6 @@
             this.getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
         }
 
-        // enable this to test the browser in 32bit
-        if (false) {
-            getWindow().setFormat(PixelFormat.RGBX_8888);
-            BitmapFactory.setDefaultConfig(Bitmap.Config.ARGB_8888);
-        }
-
         // If this was a web search request, pass it on to the default web
         // search provider and finish this activity.
         if (IntentHandler.handleWebSearchIntent(this, null, getIntent())) {
@@ -126,7 +115,7 @@
     protected void onNewIntent(Intent intent) {
         if (ACTION_RESTART.equals(intent.getAction())) {
             Bundle outState = new Bundle();
-            mController.onSaveInstanceState(outState);
+            mController.onSaveInstanceState(outState, true);
             finish();
             getApplicationContext().startActivity(
                     new Intent(getApplicationContext(), BrowserActivity.class)
@@ -177,7 +166,7 @@
         if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
         }
-        mController.onSaveInstanceState(outState);
+        mController.onSaveInstanceState(outState, true);
     }
 
     @Override
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 9e71077..b3f8d98 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -20,7 +20,6 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -28,10 +27,9 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-class BrowserBookmarksAdapter extends CursorAdapter {
+public class BrowserBookmarksAdapter extends CursorAdapter {
     LayoutInflater mInflater;
     int mCurrentView;
-    Drawable mFaviconBackground;
 
     /**
      *  Create a new BrowserBookmarksAdapter.
@@ -42,8 +40,6 @@
         super(context, null, 0);
         mInflater = LayoutInflater.from(context);
         selectView(defaultView);
-        float density = context.getResources().getDisplayMetrics().density;
-        mFaviconBackground = BookmarkUtils.createListFaviconBackground(context);
     }
 
     @Override
@@ -56,6 +52,12 @@
     }
 
     void bindGridView(View view, Context context, Cursor cursor) {
+        // We need to set this to handle rotation and other configuration change
+        // events. If the padding didn't change, this is a no op.
+        int padding = context.getResources()
+                .getDimensionPixelSize(R.dimen.combo_horizontalSpacing);
+        view.setPadding(padding, view.getPaddingTop(),
+                padding, view.getPaddingBottom());
         ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
         TextView tv = (TextView) view.findViewById(R.id.label);
 
@@ -101,9 +103,7 @@
             } else {
                 favicon.setImageBitmap(faviconBitmap);
             }
-            //favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg);
-            // TODO: Switch to above instead of below once b/3353813 is fixed
-            favicon.setBackgroundDrawable(mFaviconBackground);
+            favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg);
         }
     }
 
@@ -124,6 +124,10 @@
         mCurrentView = view;
     }
 
+    public int getViewMode() {
+        return mCurrentView;
+    }
+
     @Override
     public Cursor getItem(int position) {
         return (Cursor) super.getItem(position);
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index c6bc2bc..b6a50da 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -16,8 +16,6 @@
 
 package com.android.browser;
 
-import com.android.browser.BreadCrumbView.Crumb;
-
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager;
@@ -25,11 +23,11 @@
 import android.content.ClipboardManager;
 import android.content.ContentUris;
 import android.content.Context;
+import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -40,7 +38,9 @@
 import android.os.Bundle;
 import android.preference.PreferenceManager;
 import android.provider.BrowserContract;
+import android.provider.BrowserContract.Accounts;
 import android.provider.BrowserContract.ChromeSyncColumns;
+import android.view.ActionMode;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.LayoutInflater;
@@ -49,169 +49,161 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.WebIconDatabase.IconListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.GridView;
-import android.widget.ListView;
+import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.OnChildClickListener;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.Toast;
 
+import com.android.browser.BookmarkDragHandler.BookmarkDragController;
+import com.android.browser.BookmarkDragHandler.BookmarkDragState;
+import com.android.browser.view.BookmarkExpandableView;
+import com.android.browser.view.BookmarkExpandableView.BookmarkContextMenuInfo;
+
+import java.util.HashMap;
+
 interface BookmarksPageCallbacks {
     // Return true if handled
     boolean onBookmarkSelected(Cursor c, boolean isFolder);
     // Return true if handled
     boolean onOpenInNewWindow(Cursor c);
-    void onFolderChanged(int level, Uri uri);
 }
 
 /**
  *  View showing the user's bookmarks in the browser.
  */
 public class BrowserBookmarksPage extends Fragment implements View.OnCreateContextMenuListener,
-        LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener, IconListener,
-        BreadCrumbView.Controller, OnMenuItemClickListener, OnSharedPreferenceChangeListener {
+        LoaderManager.LoaderCallbacks<Cursor>, BreadCrumbView.Controller,
+        OnMenuItemClickListener, OnChildClickListener {
+
+    public static class ExtraDragState {
+        public int childPosition;
+        public int groupPosition;
+    }
 
     static final String LOGTAG = "browser";
 
-    static final int LOADER_BOOKMARKS = 1;
+    static final int LOADER_ACCOUNTS = 1;
+    static final int LOADER_BOOKMARKS = 100;
 
     static final String EXTRA_DISABLE_WINDOW = "disable_new_window";
 
-    static final String ACCOUNT_NAME_UNSYNCED = "Unsynced";
+    static final String ACCOUNT_TYPE = "account_type";
+    static final String ACCOUNT_NAME = "account_name";
 
-    public static final String PREF_ACCOUNT_TYPE = "acct_type";
-    public static final String PREF_ACCOUNT_NAME = "acct_name";
-
-    static final int VIEW_THUMBNAILS = 1;
-    static final int VIEW_LIST = 2;
+    public static final int VIEW_THUMBNAILS = 1;
+    public static final int VIEW_LIST = 2;
     static final String PREF_SELECTED_VIEW = "bookmarks_view";
 
     BookmarksPageCallbacks mCallbacks;
     View mRoot;
-    GridView mGrid;
-    ListView mList;
-    BrowserBookmarksAdapter mAdapter;
+    BookmarkExpandableView mGrid;
     boolean mDisableNewWindow;
-    boolean mCanceled = false;
     boolean mEnableContextMenu = true;
-    boolean mShowRootFolder = false;
     View mEmptyView;
     int mCurrentView;
     View mHeader;
-    ViewGroup mHeaderContainer;
-    BreadCrumbView mCrumbs;
-    int mCrumbVisibility = View.VISIBLE;
-    int mCrumbMaxVisible = -1;
-    boolean mCrumbBackButton = false;
+    HashMap<Integer, BrowserBookmarksAdapter> mBookmarkAdapters = new HashMap<Integer, BrowserBookmarksAdapter>();
+    BookmarkDragHandler mDragHandler;
 
     static BrowserBookmarksPage newInstance(BookmarksPageCallbacks cb,
             Bundle args, ViewGroup headerContainer) {
         BrowserBookmarksPage bbp = new BrowserBookmarksPage();
         bbp.mCallbacks = cb;
-        bbp.mHeaderContainer = headerContainer;
         bbp.setArguments(args);
         return bbp;
     }
 
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-        switch (id) {
-            case LOADER_BOOKMARKS: {
-                SharedPreferences prefs = PreferenceManager
-                        .getDefaultSharedPreferences(getActivity());
-                String accountType = prefs.getString(PREF_ACCOUNT_TYPE, null);
-                String accountName = prefs.getString(PREF_ACCOUNT_NAME, null);
-                BookmarksLoader bl = new BookmarksLoader(getActivity(),
-                        accountType, accountName);
-                if (mCrumbs != null) {
-                    Uri uri = (Uri) mCrumbs.getTopData();
-                    if (uri != null) {
-                        bl.setUri(uri);
-                    }
-                }
-                return bl;
-            }
+        if (id == LOADER_ACCOUNTS) {
+            return new AccountsLoader(getActivity());
+        } else if (id >= LOADER_BOOKMARKS) {
+            String accountType = args.getString(ACCOUNT_TYPE);
+            String accountName = args.getString(ACCOUNT_NAME);
+            BookmarksLoader bl = new BookmarksLoader(getActivity(),
+                    accountType, accountName);
+            return bl;
+        } else {
+            throw new UnsupportedOperationException("Unknown loader id " + id);
         }
-        throw new UnsupportedOperationException("Unknown loader id " + id);
     }
 
     @Override
     public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
-        switch (loader.getId()) {
-            case LOADER_BOOKMARKS: {
-                // Set the visibility of the empty vs. content views
-                if (cursor == null || cursor.getCount() == 0) {
-                    mEmptyView.setVisibility(View.VISIBLE);
-                    mGrid.setVisibility(View.GONE);
-                    mList.setVisibility(View.GONE);
-                } else {
-                    mEmptyView.setVisibility(View.GONE);
-                    setupBookmarkView();
-                }
-
-                // Give the new data to the adapter
-                mAdapter.changeCursor(cursor);
-                break;
+        if (loader.getId() == LOADER_ACCOUNTS) {
+            LoaderManager lm = getLoaderManager();
+            int id = LOADER_BOOKMARKS;
+            while (cursor.moveToNext()) {
+                String accountName = cursor.getString(0);
+                String accountType = cursor.getString(1);
+                Bundle args = new Bundle();
+                args.putString(ACCOUNT_NAME, accountName);
+                args.putString(ACCOUNT_TYPE, accountType);
+                BrowserBookmarksAdapter adapter = new BrowserBookmarksAdapter(
+                        getActivity(), mCurrentView);
+                mBookmarkAdapters.put(id, adapter);
+                mGrid.addAccount(accountName, adapter);
+                lm.restartLoader(id, args, this);
+                id++;
             }
+            // TODO: Figure out what a reload of these means
+            // Currently, a reload is triggered whenever bookmarks change
+            // This is less than ideal
+            // It also causes UI flickering as a new adapter is created
+            // instead of re-using an existing one when the account_name is the
+            // same.
+            // For now, this is a one-shot load
+            getLoaderManager().destroyLoader(LOADER_ACCOUNTS);
+        } else if (loader.getId() >= LOADER_BOOKMARKS) {
+            BrowserBookmarksAdapter adapter = mBookmarkAdapters.get(loader.getId());
+            adapter.changeCursor(cursor);
         }
     }
 
     @Override
     public void onLoaderReset(Loader<Cursor> loader) {
-        onLoadFinished(loader, null);
-    }
-
-    long getFolderId() {
-        LoaderManager manager = getLoaderManager();
-        BookmarksLoader loader =
-                (BookmarksLoader) ((Loader<?>)manager.getLoader(LOADER_BOOKMARKS));
-
-        Uri uri = loader.getUri();
-        if (uri != null) {
-            try {
-                return ContentUris.parseId(uri);
-            } catch (NumberFormatException nfx) {
-                return -1;
-            }
-        }
-        return -1;
     }
 
     @Override
     public boolean onContextItemSelected(MenuItem item) {
-        final Activity activity = getActivity();
-        // It is possible that the view has been canceled when we get to
-        // this point as back has a higher priority
-        if (mCanceled) {
-            return false;
-        }
-        AdapterView.AdapterContextMenuInfo i =
-            (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
+        BookmarkContextMenuInfo i = (BookmarkContextMenuInfo)item.getMenuInfo();
         // If we have no menu info, we can't tell which item was selected.
         if (i == null) {
             return false;
         }
 
-        switch (item.getItemId()) {
+        if (handleContextItem(item.getItemId(), i.groupPosition, i.childPosition)) {
+            return true;
+        }
+        return super.onContextItemSelected(item);
+    }
+
+    public boolean handleContextItem(int itemId, int groupPosition,
+            int childPosition) {
+        final Activity activity = getActivity();
+        BrowserBookmarksAdapter adapter = getChildAdapter(groupPosition);
+
+        switch (itemId) {
         case R.id.open_context_menu_id:
-            loadUrl(i.position);
+            loadUrl(adapter, childPosition);
             break;
         case R.id.edit_context_menu_id:
-            editBookmark(i.position);
+            editBookmark(adapter, childPosition);
             break;
         case R.id.shortcut_context_menu_id:
-            Cursor c = mAdapter.getItem(i.position);
+            Cursor c = adapter.getItem(childPosition);
             activity.sendBroadcast(createShortcutIntent(getActivity(), c));
             break;
         case R.id.delete_context_menu_id:
-            displayRemoveBookmarkDialog(i.position);
+            displayRemoveBookmarkDialog(adapter, childPosition);
             break;
         case R.id.new_window_context_menu_id:
-            openInNewWindow(i.position);
+            openInNewWindow(adapter, childPosition);
             break;
         case R.id.share_link_context_menu_id: {
-            Cursor cursor = mAdapter.getItem(i.position);
+            Cursor cursor = adapter.getItem(childPosition);
             Controller.sharePage(activity,
                     cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE),
                     cursor.getString(BookmarksLoader.COLUMN_INDEX_URL),
@@ -220,16 +212,16 @@
             break;
         }
         case R.id.copy_url_context_menu_id:
-            copy(getUrl(i.position));
+            copy(getUrl(adapter, childPosition));
             break;
         case R.id.homepage_context_menu_id: {
-            BrowserSettings.getInstance().setHomePage(activity, getUrl(i.position));
+            BrowserSettings.getInstance().setHomePage(getUrl(adapter, childPosition));
             Toast.makeText(activity, R.string.homepage_set, Toast.LENGTH_LONG).show();
             break;
         }
         // Only for the Most visited page
         case R.id.save_to_bookmarks_menu_id: {
-            Cursor cursor = mAdapter.getItem(i.position);
+            Cursor cursor = adapter.getItem(childPosition);
             String name = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
             String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL);
             // If the site is bookmarked, the item becomes remove from
@@ -238,7 +230,7 @@
             break;
         }
         default:
-            return super.onContextItemSelected(item);
+            return false;
         }
         return true;
     }
@@ -262,16 +254,13 @@
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.bookmark, menu);
-        if (!BrowserActivity.isTablet(getActivity())) {
-            MenuItem item = menu.findItem(R.id.add_bookmark);
-            item.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-        }
     }
 
     @Override
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
-        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
-        Cursor cursor = mAdapter.getItem(info.position);
+        BookmarkContextMenuInfo info = (BookmarkContextMenuInfo) menuInfo;
+        BrowserBookmarksAdapter adapter = getChildAdapter(info.groupPosition);
+        Cursor cursor = adapter.getItem(info.childPosition);
         if (!canEdit(cursor)) {
             return;
         }
@@ -330,58 +319,33 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-
-        setHasOptionsMenu(true);
+        SharedPreferences prefs = PreferenceManager
+            .getDefaultSharedPreferences(getActivity());
+        mCurrentView = prefs.getInt(PREF_SELECTED_VIEW, getDefaultView());
 
         Bundle args = getArguments();
         mDisableNewWindow = args == null ? false : args.getBoolean(EXTRA_DISABLE_WINDOW, false);
+
+        setHasOptionsMenu(true);
     }
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        Context context = getActivity();
-
         mRoot = inflater.inflate(R.layout.bookmarks, container, false);
         mEmptyView = mRoot.findViewById(android.R.id.empty);
 
-        mGrid = (GridView) mRoot.findViewById(R.id.grid);
-        mGrid.setOnItemClickListener(this);
-        mGrid.setColumnWidth(Controller.getDesiredThumbnailWidth(getActivity()));
-        mList = (ListView) mRoot.findViewById(R.id.list);
-        mList.setOnItemClickListener(this);
+        mGrid = (BookmarkExpandableView) mRoot.findViewById(R.id.grid);
+        mGrid.setOnChildClickListener(this);
+        mGrid.setColumnWidthFromLayout(R.layout.bookmark_thumbnail);
+        mGrid.setBreadcrumbController(this);
         setEnableContextMenu(mEnableContextMenu);
+        mDragHandler = new BookmarkDragHandler(getActivity(), mDragController,
+                mGrid.getDragAdapter());
 
-        // Prep the header
-        ViewGroup hc = mHeaderContainer;
-        if (hc == null) {
-            hc = (ViewGroup) mRoot.findViewById(R.id.header_container);
-            hc.setVisibility(View.VISIBLE);
-        }
-        mHeader = inflater.inflate(R.layout.bookmarks_header, hc, false);
-        hc.addView(mHeader);
-        mCrumbs = (BreadCrumbView) mHeader.findViewById(R.id.crumbs);
-        mCrumbs.setController(this);
-        mCrumbs.setUseBackButton(mCrumbBackButton);
-        mCrumbs.setMaxVisible(mCrumbMaxVisible);
-        mCrumbs.setVisibility(mCrumbVisibility);
-        String name = getString(R.string.bookmarks);
-        mCrumbs.pushView(name, false, BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
-        if (mCallbacks != null) {
-            mCallbacks.onFolderChanged(1, BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
-        }
         // Start the loaders
         LoaderManager lm = getLoaderManager();
-        SharedPreferences prefs = PreferenceManager
-                .getDefaultSharedPreferences(getActivity());
-        prefs.registerOnSharedPreferenceChangeListener(this);
-        mCurrentView =
-            prefs.getInt(PREF_SELECTED_VIEW, getDefaultView());
-        mAdapter = new BrowserBookmarksAdapter(getActivity(), mCurrentView);
-        lm.restartLoader(LOADER_BOOKMARKS, null, this);
-
-        // Add our own listener in case there are favicons that have yet to be loaded.
-        CombinedBookmarkHistoryView.getIconListenerSet().addListener(this);
+        lm.restartLoader(LOADER_ACCOUNTS, null, this);
 
         return mRoot;
     }
@@ -396,52 +360,47 @@
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-        SharedPreferences prefs = PreferenceManager
-                .getDefaultSharedPreferences(getActivity());
-        prefs.unregisterOnSharedPreferenceChangeListener(this);
-        if (mHeaderContainer != null) {
-            mHeaderContainer.removeView(mHeader);
+        mGrid.setBreadcrumbController(null);
+        LoaderManager lm = getLoaderManager();
+        lm.destroyLoader(LOADER_ACCOUNTS);
+        for (int id : mBookmarkAdapters.keySet()) {
+            lm.destroyLoader(id);
         }
-        mCrumbs.setController(null);
-        mCrumbs = null;
-        getLoaderManager().destroyLoader(LOADER_BOOKMARKS);
-        mAdapter = null;
-        CombinedBookmarkHistoryView.getIconListenerSet().removeListener(this);
+        mBookmarkAdapters.clear();
+    }
+
+    private BrowserBookmarksAdapter getChildAdapter(int groupPosition) {
+        return mGrid.getChildAdapter(groupPosition);
+    }
+
+    private BreadCrumbView getBreadCrumbs(int groupPosition) {
+        return mGrid.getBreadCrumbs(groupPosition);
     }
 
     @Override
-    public void onReceivedIcon(String url, Bitmap icon) {
-        // A new favicon has been loaded, so let anything attached to the adapter know about it
-        // so new icons will be loaded.
-        mAdapter.notifyDataSetChanged();
-    }
-
-    @Override
-    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
-        // It is possible that the view has been canceled when we get to
-        // this point as back has a higher priority
-        if (mCanceled) {
-            android.util.Log.e(LOGTAG, "item clicked when dismissing");
-            return;
-        }
-
-        Cursor cursor = mAdapter.getItem(position);
+    public boolean onChildClick(ExpandableListView parent, View v,
+            int groupPosition, int childPosition, long id) {
+        BrowserBookmarksAdapter adapter = getChildAdapter(groupPosition);
+        Cursor cursor = adapter.getItem(childPosition);
         boolean isFolder = cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
         if (mCallbacks != null &&
                 mCallbacks.onBookmarkSelected(cursor, isFolder)) {
-            return;
+            return true;
         }
 
+        // TODO: Folder stuff
         if (isFolder) {
             String title = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
             Uri uri = ContentUris.withAppendedId(
                     BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER, id);
-            if (mCrumbs != null) {
+            BreadCrumbView crumbs = getBreadCrumbs(groupPosition);
+            if (crumbs != null) {
                 // update crumbs
-                mCrumbs.pushView(title, uri);
+                crumbs.pushView(title, uri);
             }
-            loadFolder(uri);
+            loadFolder(groupPosition, uri);
         }
+        return true;
     }
 
     /* package */ static Intent createShortcutIntent(Context context, Cursor cursor) {
@@ -452,15 +411,15 @@
         return BookmarkUtils.createAddToHomeIntent(context, url, title, touchIcon, favicon);
     }
 
-    private void loadUrl(int position) {
-        if (mCallbacks != null && mAdapter != null) {
-            mCallbacks.onBookmarkSelected(mAdapter.getItem(position), false);
+    private void loadUrl(BrowserBookmarksAdapter adapter, int position) {
+        if (mCallbacks != null && adapter != null) {
+            mCallbacks.onBookmarkSelected(adapter.getItem(position), false);
         }
     }
 
-    private void openInNewWindow(int position) {
+    private void openInNewWindow(BrowserBookmarksAdapter adapter, int position) {
         if (mCallbacks != null) {
-            Cursor c = mAdapter.getItem(position);
+            Cursor c = adapter.getItem(position);
             boolean isFolder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) == 1;
             if (isFolder) {
                 long id = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
@@ -497,9 +456,9 @@
 
     }
 
-    private void editBookmark(int position) {
+    private void editBookmark(BrowserBookmarksAdapter adapter, int position) {
         Intent intent = new Intent(getActivity(), AddBookmarkPage.class);
-        Cursor cursor = mAdapter.getItem(position);
+        Cursor cursor = adapter.getItem(position);
         Bundle item = new Bundle();
         item.putString(BrowserContract.Bookmarks.TITLE,
                 cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE));
@@ -520,18 +479,19 @@
         startActivity(intent);
     }
 
-    private void displayRemoveBookmarkDialog(final int position) {
+    private void displayRemoveBookmarkDialog(BrowserBookmarksAdapter adapter,
+            int position) {
         // Put up a dialog asking if the user really wants to
         // delete the bookmark
-        Cursor cursor = mAdapter.getItem(position);
+        Cursor cursor = adapter.getItem(position);
         long id = cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID);
         String title = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
         Context context = getActivity();
         BookmarkUtils.displayRemoveBookmarkDialog(id, title, context, null);
     }
 
-    private String getUrl(int position) {
-        return getUrl(mAdapter.getItem(position));
+    private String getUrl(BrowserBookmarksAdapter adapter, int position) {
+        return getUrl(adapter.getItem(position));
     }
 
     /* package */ static String getUrl(Cursor c) {
@@ -561,12 +521,9 @@
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         Resources res = getActivity().getResources();
-        int horizontalSpacing = (int) res.getDimension(R.dimen.combo_horizontalSpacing);
-        mGrid.setHorizontalSpacing(horizontalSpacing);
-        int paddingLeftRight = (int) res.getDimension(R.dimen.combo_paddingLeftRight);
+        mGrid.setColumnWidthFromLayout(R.layout.bookmark_thumbnail);
         int paddingTop = (int) res.getDimension(R.dimen.combo_paddingTop);
-        mRoot.setPadding(paddingLeftRight, paddingTop,
-                paddingLeftRight, 0);
+        mRoot.setPadding(0, paddingTop, 0, 0);
         getActivity().invalidateOptionsMenu();
     }
 
@@ -589,56 +546,33 @@
         if (mEmptyView.getVisibility() == View.VISIBLE) {
             return;
         }
-        setupBookmarkView();
-    }
-
-    private void setupBookmarkView() {
-        mAdapter.selectView(mCurrentView);
-        switch (mCurrentView) {
-        case VIEW_THUMBNAILS:
-            mList.setAdapter(null);
-            if (mGrid.getAdapter() != mAdapter) {
-                mGrid.setAdapter(mAdapter);
-            }
-            mGrid.setVisibility(View.VISIBLE);
-            mList.setVisibility(View.GONE);
-            break;
-        case VIEW_LIST:
-            mGrid.setAdapter(null);
-            if (mList.getAdapter() != mAdapter) {
-                mList.setAdapter(mAdapter);
-            }
-            mGrid.setVisibility(View.GONE);
-            mList.setVisibility(View.VISIBLE);
-            break;
-        }
+        mGrid.selectView(mCurrentView);
     }
 
     /**
      * BreadCrumb controller callback
      */
     @Override
-    public void onTop(int level, Object data) {
+    public void onTop(BreadCrumbView view, int level, Object data) {
+        int groupPosition = (Integer) view.getTag(R.id.group_position);
         Uri uri = (Uri) data;
         if (uri == null) {
             // top level
             uri = BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER;
         }
-        loadFolder(uri);
+        loadFolder(groupPosition, uri);
     }
 
     /**
      * @param uri
      */
-    private void loadFolder(Uri uri) {
+    private void loadFolder(int groupPosition, Uri uri) {
         LoaderManager manager = getLoaderManager();
-        BookmarksLoader loader =
-                (BookmarksLoader) ((Loader<?>) manager.getLoader(LOADER_BOOKMARKS));
+        // This assumes groups are ordered the same as loaders
+        BookmarksLoader loader = (BookmarksLoader) ((Loader<?>)
+                manager.getLoader(LOADER_BOOKMARKS + groupPosition));
         loader.setUri(uri);
         loader.forceLoad();
-        if (mCallbacks != null) {
-            mCallbacks.onFolderChanged(mCrumbs.getTopLevel(), uri);
-        }
     }
 
     @Override
@@ -655,18 +589,9 @@
     }
 
     public boolean onBackPressed() {
-        if (canGoBack()) {
-            mCrumbs.popView();
-            return true;
-        }
         return false;
     }
 
-    private boolean canGoBack() {
-        Crumb c = mCrumbs.getTopCrumb();
-        return c != null && c.canGoBack;
-    }
-
     public void setCallbackListener(BookmarksPageCallbacks callbackListener) {
         mCallbacks = callbackListener;
     }
@@ -681,15 +606,46 @@
                 mGrid.setLongClickable(false);
             }
         }
-        if (mList != null) {
-            if (mEnableContextMenu) {
-                registerForContextMenu(mList);
+    }
+
+    private BookmarkDragController mDragController = new BookmarkDragController() {
+
+        @Override
+        public boolean startDrag(Cursor item) {
+            return canEdit(item);
+        }
+
+        @Override
+        public ViewGroup getActionModeView(ActionMode mode,
+                BookmarkDragState state) {
+            LayoutInflater inflater = LayoutInflater.from(getActivity());
+            LinearLayout view = (LinearLayout) inflater.inflate(
+                    R.layout.bookmarks_drag_actionmode, null);
+            view.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
+            ExtraDragState extraState = (ExtraDragState) state.extraState;
+            BrowserBookmarksAdapter adapter = getChildAdapter(extraState.groupPosition);
+            Cursor c = adapter.getItem(extraState.childPosition);
+            boolean isFolder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
+            if (isFolder) {
+                view.findViewById(R.id.open_context_menu_id).setVisibility(View.GONE);
+                ImageView iv = (ImageView) view.findViewById(
+                        R.id.new_window_context_menu_id);
+                iv.setImageResource(R.drawable.ic_windows_holo_dark);
+            }
+            return view;
+        }
+
+        @Override
+        public void actionItemClicked(View v, BookmarkDragState state) {
+            if (v.getId() == R.id.info) {
+                mGrid.showContextMenuForState(state);
             } else {
-                unregisterForContextMenu(mList);
-                mList.setLongClickable(false);
+                ExtraDragState extraState = (ExtraDragState) state.extraState;
+                handleContextItem(v.getId(), extraState.groupPosition,
+                        extraState.childPosition);
             }
         }
-    }
+    };
 
     private static class LookupBookmarkCount extends AsyncTask<Long, Void, Integer> {
         Context mContext;
@@ -723,41 +679,17 @@
         }
     }
 
-    public void setBreadCrumbVisibility(int visibility) {
-        mCrumbVisibility = visibility;
-        if (mCrumbs != null) {
-            mCrumbs.setVisibility(mCrumbVisibility);
-        }
-    }
+    static class AccountsLoader extends CursorLoader {
 
-    public void setBreadCrumbUseBackButton(boolean use) {
-        mCrumbBackButton = use;
-        if (mCrumbs != null) {
-            mCrumbs.setUseBackButton(mCrumbBackButton);
-        }
-    }
+        static String[] ACCOUNTS_PROJECTION = new String[] {
+            Accounts.ACCOUNT_NAME,
+            Accounts.ACCOUNT_TYPE
+        };
 
-    public void setBreadCrumbMaxVisible(int max) {
-        mCrumbMaxVisible = max;
-        if (mCrumbs != null) {
-            mCrumbs.setMaxVisible(mCrumbMaxVisible);
+        public AccountsLoader(Context context) {
+            super(context, Accounts.CONTENT_URI, ACCOUNTS_PROJECTION, null, null,
+                    Accounts.ACCOUNT_NAME + " ASC");
         }
-    }
 
-    @Override
-    public void onSharedPreferenceChanged(
-            SharedPreferences sharedPreferences, String key) {
-        if (PREF_ACCOUNT_NAME.equals(key) || PREF_ACCOUNT_TYPE.equals(key)) {
-            mCrumbs.setController(null);
-            mCrumbs.clear();
-            LoaderManager lm = getLoaderManager();
-            lm.restartLoader(LOADER_BOOKMARKS, null, this);
-            mCrumbs.setController(this);
-            String name = getString(R.string.bookmarks);
-            mCrumbs.pushView(name, false, BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
-            if (mCallbacks != null) {
-                mCallbacks.onFolderChanged(1, BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
-            }
-        }
     }
 }
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 98be86d..bcc33e2 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -59,6 +59,9 @@
 import android.widget.AdapterView.AdapterContextMenuInfo;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.BaseAdapter;
+import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
+import android.widget.ExpandableListView.OnChildClickListener;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -68,7 +71,7 @@
  * days of viewing.
  */
 public class BrowserHistoryPage extends Fragment
-        implements LoaderCallbacks<Cursor> {
+        implements LoaderCallbacks<Cursor>, OnChildClickListener {
 
     static final int LOADER_HISTORY = 1;
     static final int LOADER_MOST_VISITED = 2;
@@ -82,6 +85,7 @@
     ListView mGroupList, mChildList;
     private ViewGroup mPrefsContainer;
     private FragmentBreadCrumbs mFragmentBreadCrumbs;
+    private ExpandableListView mHistoryList;
 
     // Implementation of WebIconDatabase.IconListener
     class IconReceiver implements IconListener {
@@ -132,11 +136,7 @@
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
                 getActivity());
-        String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-        String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
         Uri.Builder combinedBuilder = Combined.CONTENT_URI.buildUpon();
-        combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
-        combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME, accountName);
 
         switch (id) {
             case LOADER_HISTORY: {
@@ -187,7 +187,7 @@
         switch (loader.getId()) {
             case LOADER_HISTORY: {
                 mAdapter.changeCursor(data);
-                if (!mAdapter.isEmpty()
+                if (!mAdapter.isEmpty() && mGroupList != null
                         && mGroupList.getCheckedItemPosition() == ListView.INVALID_POSITION) {
                     selectGroup(0);
                 }
@@ -229,7 +229,31 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         mRoot = inflater.inflate(R.layout.history, container, false);
+        mAdapter = new HistoryAdapter(getActivity());
         ViewStub stub = (ViewStub) mRoot.findViewById(R.id.pref_stub);
+        if (stub != null) {
+            inflateTwoPane(stub);
+        } else {
+            inflateSinglePane();
+        }
+
+        // Start the loaders
+        getLoaderManager().restartLoader(LOADER_HISTORY, null, this);
+        getLoaderManager().restartLoader(LOADER_MOST_VISITED, null, this);
+
+        // Register to receive icons in case they haven't all been loaded.
+        CombinedBookmarkHistoryView.getIconListenerSet().addListener(mIconReceiver);
+        return mRoot;
+    }
+
+    private void inflateSinglePane() {
+        mHistoryList = (ExpandableListView) mRoot.findViewById(R.id.history);
+        mHistoryList.setAdapter(mAdapter);
+        mHistoryList.setOnChildClickListener(this);
+        registerForContextMenu(mHistoryList);
+    }
+
+    private void inflateTwoPane(ViewStub stub) {
         stub.setLayoutResource(R.layout.preference_list_content);
         stub.inflate();
         mGroupList = (ListView) mRoot.findViewById(android.R.id.list);
@@ -238,7 +262,6 @@
         mFragmentBreadCrumbs.setMaxVisible(1);
         mFragmentBreadCrumbs.setActivity(getActivity());
         mPrefsContainer.setVisibility(View.VISIBLE);
-        mAdapter = new HistoryAdapter(getActivity());
         mGroupList.setAdapter(new HistoryGroupWrapper(mAdapter));
         mGroupList.setOnItemClickListener(mGroupItemClickListener);
         mGroupList.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
@@ -249,14 +272,6 @@
         registerForContextMenu(mChildList);
         ViewGroup prefs = (ViewGroup) mRoot.findViewById(R.id.prefs);
         prefs.addView(mChildList);
-
-        // Start the loaders
-        getLoaderManager().restartLoader(LOADER_HISTORY, null, this);
-        getLoaderManager().restartLoader(LOADER_MOST_VISITED, null, this);
-
-        // Register to receive icons in case they haven't all been loaded.
-        CombinedBookmarkHistoryView.getIconListenerSet().addListener(mIconReceiver);
-        return mRoot;
     }
 
     private OnItemClickListener mGroupItemClickListener = new OnItemClickListener() {
@@ -279,6 +294,13 @@
     };
 
     @Override
+    public boolean onChildClick(ExpandableListView parent, View view,
+            int groupPosition, int childPosition, long id) {
+        mCallbacks.onUrlSelected(((HistoryItem) view).getUrl(), false);
+        return true;
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         CombinedBookmarkHistoryView.getIconListenerSet().removeListener(mIconReceiver);
@@ -341,17 +363,30 @@
         }
     }
 
+    View getTargetView(ContextMenuInfo menuInfo) {
+        if (menuInfo instanceof AdapterContextMenuInfo) {
+            return ((AdapterContextMenuInfo) menuInfo).targetView;
+        }
+        if (menuInfo instanceof ExpandableListContextMenuInfo) {
+            return ((ExpandableListContextMenuInfo) menuInfo).targetView;
+        }
+        return null;
+    }
+
     @Override
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
-        AdapterContextMenuInfo i = (AdapterContextMenuInfo) menuInfo;
+
+        View targetView = getTargetView(menuInfo);
+        if (!(targetView instanceof HistoryItem)) {
+            return;
+        }
+        HistoryItem historyItem = (HistoryItem) targetView;
 
         // Inflate the menu
         Activity parent = getActivity();
         MenuInflater inflater = parent.getMenuInflater();
         inflater.inflate(R.menu.historycontext, menu);
 
-        HistoryItem historyItem = (HistoryItem) i.targetView;
-
         // Setup the header
         if (mContextHeader == null) {
             mContextHeader = new HistoryItem(parent, false);
@@ -382,12 +417,11 @@
 
     @Override
     public boolean onContextItemSelected(MenuItem item) {
-        AdapterContextMenuInfo i =
-            (AdapterContextMenuInfo) item.getMenuInfo();
-        if (i == null) {
+        ContextMenuInfo menuInfo = item.getMenuInfo();
+        if (menuInfo == null) {
             return false;
         }
-        HistoryItem historyItem = (HistoryItem) i.targetView;
+        HistoryItem historyItem = (HistoryItem) getTargetView(menuInfo);
         String url = historyItem.getUrl();
         String title = historyItem.getName();
         Activity activity = getActivity();
@@ -417,7 +451,7 @@
                 Browser.deleteFromHistory(activity.getContentResolver(), url);
                 return true;
             case R.id.homepage_context_menu_id:
-                BrowserSettings.getInstance().setHomePage(activity, url);
+                BrowserSettings.getInstance().setHomePage(url);
                 Toast.makeText(activity, R.string.homepage_set, Toast.LENGTH_LONG).show();
                 return true;
             default:
@@ -636,6 +670,7 @@
                         item.getPaddingRight(),
                         item.getPaddingBottom());
                 item.setFaviconBackground(mFaviconBackground);
+                item.startMarquee();
             } else {
                 item = (HistoryItem) convertView;
             }
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index dae838f..8302011 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -21,7 +21,6 @@
 import android.app.ActionBar;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
-import android.preference.PreferenceManager;
 import android.view.MenuItem;
 
 import java.util.List;
@@ -48,7 +47,7 @@
     public void onBuildHeaders(List<Header> target) {
         loadHeadersFromResource(R.xml.preference_headers, target);
 
-        if (BrowserSettings.DEV_BUILD || BrowserSettings.getInstance().showDebugSettings()) {
+        if (BrowserSettings.getInstance().isDebugEnabled()) {
             Header debug = new Header();
             debug.title = getText(R.string.pref_development_title);
             debug.fragment = DebugPreferencesFragment.class.getName();
@@ -57,16 +56,6 @@
     }
 
     @Override
-    protected void onPause() {
-        super.onPause();
-
-        // sync the shared preferences back to BrowserSettings
-        BrowserSettings.getInstance().syncSharedPreferences(
-                getApplicationContext(),
-                PreferenceManager.getDefaultSharedPreferences(this));
-    }
-
-    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case android.R.id.home:
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 9ae2a25..fae59e2 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * 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.
@@ -17,410 +16,324 @@
 
 package com.android.browser;
 
-import com.android.browser.homepages.HomeProvider;
-import com.android.browser.search.SearchEngine;
-import com.android.browser.search.SearchEngines;
-
 import android.app.ActivityManager;
 import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.AsyncTask;
+import android.os.Build;
 import android.os.Message;
 import android.preference.PreferenceManager;
 import android.provider.Browser;
-import android.provider.BrowserContract.Bookmarks;
-import android.util.Log;
 import android.webkit.CookieManager;
 import android.webkit.GeolocationPermissions;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
 import android.webkit.WebSettings.AutoFillProfile;
+import android.webkit.WebSettings.LayoutAlgorithm;
+import android.webkit.WebSettings.PluginState;
+import android.webkit.WebSettings.TextSize;
+import android.webkit.WebSettings.ZoomDensity;
 import android.webkit.WebStorage;
 import android.webkit.WebView;
 import android.webkit.WebViewDatabase;
 
-import java.util.HashMap;
-import java.util.Observable;
+import com.android.browser.homepages.HomeProvider;
+import com.android.browser.provider.BrowserProvider;
+import com.android.browser.search.SearchEngine;
+import com.android.browser.search.SearchEngines;
 
-/*
- * Package level class for storing various WebView and Browser settings. To use
- * this class:
- * BrowserSettings s = BrowserSettings.getInstance();
- * s.addObserver(webView.getSettings());
- * s.loadFromDb(context); // Only needed on app startup
- * s.javaScriptEnabled = true;
- * ... // set any other settings
- * s.update(); // this will update all the observers
- *
- * To remove an observer:
- * s.deleteObserver(webView.getSettings());
+import java.lang.ref.WeakReference;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.WeakHashMap;
+
+/**
+ * Class for managing settings
  */
-public class BrowserSettings extends Observable implements OnSharedPreferenceChangeListener {
-    // Private variables for settings
-    // NOTE: these defaults need to be kept in sync with the XML
-    // until the performance of PreferenceManager.setDefaultValues()
-    // is improved.
-    // Note: boolean variables are set inside reset function.
-    private boolean loadsImagesAutomatically;
-    private boolean javaScriptEnabled;
-    private WebSettings.PluginState pluginState;
-    private boolean javaScriptCanOpenWindowsAutomatically;
-    private boolean showSecurityWarnings;
-    private boolean rememberPasswords;
-    private boolean saveFormData;
-    private boolean autoFillEnabled;
-    private boolean openInBackground;
-    private String defaultTextEncodingName;
-    private String homeUrl = "";
-    private SearchEngine searchEngine;
-    private boolean autoFitPage;
-    private boolean loadsPageInOverviewMode;
-    private boolean showDebugSettings;
-    // HTML5 API flags
-    private boolean appCacheEnabled;
-    private boolean databaseEnabled;
-    private boolean domStorageEnabled;
-    private boolean geolocationEnabled;
-    private boolean workersEnabled;  // only affects V8. JSC does not have a similar setting
-    // HTML5 API configuration params
-    private long appCacheMaxSize = Long.MAX_VALUE;
-    private String appCachePath;  // default value set in loadFromDb().
-    private String databasePath; // default value set in loadFromDb()
-    private String geolocationDatabasePath; // default value set in loadFromDb()
-    private WebStorageSizeManager webStorageSizeManager;
+public class BrowserSettings implements OnSharedPreferenceChangeListener,
+        PreferenceKeys {
 
-    private String jsFlags = "";
-
-    private final static String TAG = "BrowserSettings";
-
-    // Development settings
-    public WebSettings.LayoutAlgorithm layoutAlgorithm =
-        WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
-    private boolean useWideViewPort = true;
-    private int userAgent = 0;
-    private boolean tracing = false;
-    private boolean lightTouch = false;
-    private boolean navDump = false;
-    private boolean hardwareAccelerated = true;
-    private boolean showVisualIndicator = false;
-    // Lab settings
-    private boolean quickControls = false;
-    private boolean useMostVisitedHomepage = false;
-    private boolean useInstant = false;
-
-    // By default the error console is shown once the user navigates to about:debug.
-    // The setting can be then toggled from the settings menu.
-    private boolean showConsole = true;
-
-    // Private preconfigured values
-    private static int minimumFontSize = 1;
-    private static int minimumLogicalFontSize = 1;
-    private static int defaultFontSize = 16;
-    private static int defaultFixedFontSize = 13;
-    private static WebSettings.TextSize textSize =
-        WebSettings.TextSize.NORMAL;
-    private static WebSettings.ZoomDensity zoomDensity =
-        WebSettings.ZoomDensity.MEDIUM;
-    private static int pageCacheCapacity;
-
-
-    private AutoFillProfile autoFillProfile;
-    // Default to zero. In the case no profile is set up, the initial
-    // value will come from the AutoFillSettingsFragment when the user
-    // creates a profile. Otherwise, we'll read the ID of the last used
-    // profile from the prefs db.
-    private int autoFillActiveProfileId;
-    private static final int NO_AUTOFILL_PROFILE_SET = 0;
-
-    // Preference keys that are used outside this class
-    public final static String PREF_CLEAR_CACHE = "privacy_clear_cache";
-    public final static String PREF_CLEAR_COOKIES = "privacy_clear_cookies";
-    public final static String PREF_CLEAR_HISTORY = "privacy_clear_history";
-    public final static String PREF_HOMEPAGE = "homepage";
-    public final static String PREF_SEARCH_ENGINE = "search_engine";
-    public final static String PREF_CLEAR_FORM_DATA =
-            "privacy_clear_form_data";
-    public final static String PREF_CLEAR_PASSWORDS =
-            "privacy_clear_passwords";
-    public final static String PREF_EXTRAS_RESET_DEFAULTS =
-            "reset_default_preferences";
-    public final static String PREF_DEBUG_SETTINGS = "debug_menu";
-    public final static String PREF_WEBSITE_SETTINGS = "website_settings";
-    public final static String PREF_TEXT_SIZE = "text_size";
-    public final static String PREF_DEFAULT_ZOOM = "default_zoom";
-    public final static String PREF_DEFAULT_TEXT_ENCODING =
-            "default_text_encoding";
-    public final static String PREF_CLEAR_GEOLOCATION_ACCESS =
-            "privacy_clear_geolocation_access";
-    public final static String PREF_AUTOFILL_ENABLED = "autofill_enabled";
-    public final static String PREF_AUTOFILL_PROFILE = "autofill_profile";
-    public final static String PREF_AUTOFILL_ACTIVE_PROFILE_ID = "autofill_active_profile_id";
-    public final static String PREF_HARDWARE_ACCEL = "enable_hardware_accel";
-    public final static String PREF_VISUAL_INDICATOR = "enable_visual_indicator";
-    public final static String PREF_USER_AGENT = "user_agent";
-
-    public final static String PREF_QUICK_CONTROLS = "enable_quick_controls";
-    public final static String PREF_MOST_VISITED_HOMEPAGE = "use_most_visited_homepage";
-    public final static String PREF_PLUGIN_STATE = "plugin_state";
-    public final static String PREF_USE_INSTANT = "use_instant_search";
-
-    private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
-            "U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, " +
-            "like Gecko) Version/5.0 Safari/533.16";
+    // TODO: Do something with this UserAgent stuff
+    private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (X11; " +
+        "Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) " +
+        "Chrome/11.0.696.34 Safari/534.24";
 
     private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
-            "CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 " +
-            "(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7";
+        "CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 " +
+        "(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7";
 
     private static final String IPAD_USERAGENT = "Mozilla/5.0 (iPad; U; " +
-            "CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 " +
-            "(KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10";
+        "CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 " +
+        "(KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10";
 
     private static final String FROYO_USERAGENT = "Mozilla/5.0 (Linux; U; " +
-            "Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 " +
-            "(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
+        "Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 " +
+        "(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
 
-    // Value to truncate strings when adding them to a TextView within
-    // a ListView
-    public final static int MAX_TEXTVIEW_LEN = 80;
+    private static final String HONEYCOMB_USERAGENT = "Mozilla/5.0 (Linux; U; " +
+        "Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 " +
+        "(KHTML, like Gecko) Version/4.0 Safari/534.13";
 
-    public static final String RLZ_PROVIDER = "com.google.android.partnersetup.rlzappprovider";
+    private static final String USER_AGENTS[] = { null,
+            DESKTOP_USERAGENT,
+            IPHONE_USERAGENT,
+            IPAD_USERAGENT,
+            FROYO_USERAGENT,
+            HONEYCOMB_USERAGENT,
+    };
 
-    public static final Uri RLZ_PROVIDER_URI = Uri.parse("content://" + RLZ_PROVIDER + "/");
+    // The minimum min font size
+    // Aka, the lower bounds for the min font size range
+    // which is 1:5..24
+    private static final int MIN_FONT_SIZE_OFFSET = 5;
+    // The initial value in the text zoom range
+    // This is what represents 100% in the SeekBarPreference range
+    private static final int TEXT_ZOOM_START_VAL = 10;
+    // The size of a single step in the text zoom range, in percent
+    private static final int TEXT_ZOOM_STEP = 5;
 
-    // Set to true to enable some of the about:debug options
-    public static final boolean DEV_BUILD = false;
+    private static BrowserSettings sInstance;
 
+    private Context mContext;
+    private SharedPreferences mPrefs;
+    private LinkedList<WeakReference<WebSettings>> mManagedSettings;
     private Controller mController;
+    private WebStorageSizeManager mWebStorageSizeManager;
+    private AutofillHandler mAutofillHandler;
+    private WeakHashMap<WebSettings, String> mCustomUserAgents;
 
-    // Single instance of the BrowserSettings for use in the Browser app.
-    private static BrowserSettings sSingleton;
+    // Cached settings
+    private SearchEngine mSearchEngine;
 
-    // Private map of WebSettings to Observer objects used when deleting an
-    // observer.
-    private HashMap<WebSettings,Observer> mWebSettingsToObservers =
-        new HashMap<WebSettings,Observer>();
+    public static void initialize(final Context context) {
+        sInstance = new BrowserSettings(context);
+    }
 
-    private String mRlzValue = "";
+    public static BrowserSettings getInstance() {
+        return sInstance;
+    }
 
-    private boolean mLoadFromDbComplete;
-
-    public void waitForLoadFromDbToComplete() {
-        synchronized (sSingleton) {
-            while (!mLoadFromDbComplete) {
-                try {
-                    sSingleton.wait();
-                } catch (InterruptedException e) { }
+    private BrowserSettings(Context context) {
+        mContext = context;
+        mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
+        if (Build.VERSION.CODENAME.equals("REL")) {
+            // This is a release build, always startup with debug disabled
+            setDebugEnabled(false);
+        }
+        if (mPrefs.contains(PREF_TEXT_SIZE)) {
+            /*
+             * Update from TextSize enum to zoom percent
+             * SMALLEST is 50%
+             * SMALLER is 75%
+             * NORMAL is 100%
+             * LARGER is 150%
+             * LARGEST is 200%
+             */
+            switch (getTextSize()) {
+            case SMALLEST:
+                setTextZoom(50);
+                break;
+            case SMALLER:
+                setTextZoom(75);
+                break;
+            case LARGER:
+                setTextZoom(150);
+                break;
+            case LARGEST:
+                setTextZoom(200);
+                break;
             }
+            mPrefs.edit().remove(PREF_TEXT_SIZE).apply();
+        }
+        mAutofillHandler = new AutofillHandler(mContext);
+        mManagedSettings = new LinkedList<WeakReference<WebSettings>>();
+        mCustomUserAgents = new WeakHashMap<WebSettings, String>();
+        mWebStorageSizeManager = new WebStorageSizeManager(mContext,
+                new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()),
+                new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath()));
+        mPrefs.registerOnSharedPreferenceChangeListener(this);
+        mAutofillHandler.asyncLoadFromDb();
+    }
+
+    public void setController(Controller controller) {
+        mController = controller;
+        syncSharedSettings();
+
+        if (mController != null && (mSearchEngine instanceof InstantSearchEngine)) {
+             ((InstantSearchEngine) mSearchEngine).setController(mController);
         }
     }
 
-    /*
-     * An observer wrapper for updating a WebSettings object with the new
-     * settings after a call to BrowserSettings.update().
-     */
-    static class Observer implements java.util.Observer {
-        // Private WebSettings object that will be updated.
-        private WebSettings mSettings;
-
-        Observer(WebSettings w) {
-            mSettings = w;
-        }
-
-        public void update(Observable o, Object arg) {
-            BrowserSettings b = (BrowserSettings)o;
-            WebSettings s = mSettings;
-
-            s.setLayoutAlgorithm(b.layoutAlgorithm);
-            if (b.userAgent == 0) {
-                // use the default ua string
-                s.setUserAgentString(null);
-            } else if (b.userAgent == 1) {
-                s.setUserAgentString(DESKTOP_USERAGENT);
-            } else if (b.userAgent == 2) {
-                s.setUserAgentString(IPHONE_USERAGENT);
-            } else if (b.userAgent == 3) {
-                s.setUserAgentString(IPAD_USERAGENT);
-            } else if (b.userAgent == 4) {
-                s.setUserAgentString(FROYO_USERAGENT);
-            }
-            s.setUseWideViewPort(b.useWideViewPort);
-            s.setLoadsImagesAutomatically(b.loadsImagesAutomatically);
-            s.setJavaScriptEnabled(b.javaScriptEnabled);
-            s.setShowVisualIndicator(b.showVisualIndicator);
-            s.setPluginState(b.pluginState);
-            s.setJavaScriptCanOpenWindowsAutomatically(
-                    b.javaScriptCanOpenWindowsAutomatically);
-            s.setDefaultTextEncodingName(b.defaultTextEncodingName);
-            s.setMinimumFontSize(b.minimumFontSize);
-            s.setMinimumLogicalFontSize(b.minimumLogicalFontSize);
-            s.setDefaultFontSize(b.defaultFontSize);
-            s.setDefaultFixedFontSize(b.defaultFixedFontSize);
-            s.setNavDump(b.navDump);
-            s.setTextSize(b.textSize);
-            s.setDefaultZoom(b.zoomDensity);
-            s.setLightTouchEnabled(b.lightTouch);
-            s.setSaveFormData(b.saveFormData);
-            s.setAutoFillEnabled(b.autoFillEnabled);
-            s.setSavePassword(b.rememberPasswords);
-            s.setLoadWithOverviewMode(b.loadsPageInOverviewMode);
-            s.setPageCacheCapacity(pageCacheCapacity);
-
-            // WebView inside Browser doesn't want initial focus to be set.
-            s.setNeedInitialFocus(false);
-            // Browser supports multiple windows
-            s.setSupportMultipleWindows(true);
-            // enable smooth transition for better performance during panning or
-            // zooming
-            s.setEnableSmoothTransition(true);
-            // disable content url access
-            s.setAllowContentAccess(false);
-
-            // HTML5 API flags
-            s.setAppCacheEnabled(b.appCacheEnabled);
-            s.setDatabaseEnabled(b.databaseEnabled);
-            s.setDomStorageEnabled(b.domStorageEnabled);
-            s.setWorkersEnabled(b.workersEnabled);  // This only affects V8.
-            s.setGeolocationEnabled(b.geolocationEnabled);
-
-            // HTML5 configuration parameters.
-            s.setAppCacheMaxSize(b.appCacheMaxSize);
-            s.setAppCachePath(b.appCachePath);
-            s.setDatabasePath(b.databasePath);
-            s.setGeolocationDatabasePath(b.geolocationDatabasePath);
-
-            // Active AutoFill profile data.
-            s.setAutoFillProfile(b.autoFillProfile);
-
-            b.updateTabControlSettings();
+    public void startManagingSettings(WebSettings settings) {
+        synchronized (mManagedSettings) {
+            syncStaticSettings(settings);
+            syncSetting(settings);
+            mManagedSettings.add(new WeakReference<WebSettings>(settings));
         }
     }
 
     /**
-     * Load settings from the browser app's database. It is performed in
-     * an AsyncTask as it involves plenty of slow disk IO.
-     * NOTE: Strings used for the preferences must match those specified
-     * in the various preference XML files.
-     * @param ctx A Context object used to query the browser's settings
-     *            database. If the database exists, the saved settings will be
-     *            stored in this BrowserSettings object. This will update all
-     *            observers of this object.
+     * Syncs all the settings that have a Preference UI
      */
-    public void asyncLoadFromDb(final Context ctx) {
-        mLoadFromDbComplete = false;
-        // Run the initial settings load in an AsyncTask as it hits the
-        // disk multiple times through SharedPreferences and SQLite. We
-        // need to be certain though that this has completed before we start
-        // to load pages though, so in the worst case we will block waiting
-        // for it to finish in BrowserActivity.onCreate().
-         new LoadFromDbTask(ctx).execute();
+    private void syncSetting(WebSettings settings) {
+        settings.setGeolocationEnabled(enableGeolocation());
+        settings.setJavaScriptEnabled(enableJavascript());
+        settings.setLightTouchEnabled(enableLightTouch());
+        settings.setNavDump(enableNavDump());
+        settings.setShowVisualIndicator(enableVisualIndicator());
+        settings.setDefaultTextEncodingName(getDefaultTextEncoding());
+        settings.setDefaultZoom(getDefaultZoom());
+        settings.setMinimumFontSize(getMinimumFontSize());
+        settings.setMinimumLogicalFontSize(getMinimumFontSize());
+        settings.setForceUserScalable(forceEnableUserScalable());
+        settings.setPluginState(getPluginState());
+        settings.setTextZoom(getTextZoom());
+        settings.setAutoFillEnabled(isAutofillEnabled());
+        settings.setLayoutAlgorithm(getLayoutAlgorithm());
+        settings.setJavaScriptCanOpenWindowsAutomatically(blockPopupWindows());
+        settings.setLoadsImagesAutomatically(loadImages());
+        settings.setLoadWithOverviewMode(loadPageInOverviewMode());
+        settings.setSavePassword(rememberPasswords());
+        settings.setSaveFormData(saveFormdata());
+        settings.setUseWideViewPort(isWideViewport());
+        settings.setAutoFillProfile(getAutoFillProfile());
+
+        String ua = mCustomUserAgents.get(settings);
+        if (ua != null) {
+            settings.setUserAgentString(ua);
+        } else {
+            settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
+        }
     }
 
-    private class LoadFromDbTask extends AsyncTask<Void, Void, Void> {
-        private Context mContext;
+    /**
+     * Syncs all the settings that have no UI
+     * These cannot change, so we only need to set them once per WebSettings
+     */
+    private void syncStaticSettings(WebSettings settings) {
+        settings.setDefaultFontSize(16);
+        settings.setDefaultFixedFontSize(13);
+        settings.setPageCacheCapacity(getPageCacheCapacity());
 
-        public LoadFromDbTask(Context context) {
-            mContext = context;
+        // WebView inside Browser doesn't want initial focus to be set.
+        settings.setNeedInitialFocus(false);
+        // Browser supports multiple windows
+        settings.setSupportMultipleWindows(true);
+        // enable smooth transition for better performance during panning or
+        // zooming
+        settings.setEnableSmoothTransition(true);
+        // disable content url access
+        settings.setAllowContentAccess(false);
+
+        // HTML5 API flags
+        settings.setAppCacheEnabled(true);
+        settings.setDatabaseEnabled(true);
+        settings.setDomStorageEnabled(true);
+        settings.setWorkersEnabled(true);  // This only affects V8.
+
+        // HTML5 configuration parametersettings.
+        settings.setAppCacheMaxSize(mWebStorageSizeManager.getAppCacheMaxSize());
+        settings.setAppCachePath(getAppCachePath());
+        settings.setDatabasePath(mContext.getDir("databases", 0).getPath());
+        settings.setGeolocationDatabasePath(mContext.getDir("geolocation", 0).getPath());
+    }
+
+    private void syncSharedSettings() {
+        CookieManager.getInstance().setAcceptCookie(acceptCookies());
+        if (mController != null) {
+            mController.setShouldShowErrorConsole(enableJavascriptConsole());
         }
+    }
 
-        protected Void doInBackground(Void... unused) {
-            SharedPreferences p =
-                    PreferenceManager.getDefaultSharedPreferences(mContext);
-            // Set the default value for the Application Caches path.
-            appCachePath = mContext.getDir("appcache", 0).getPath();
-            // Determine the maximum size of the application cache.
-            webStorageSizeManager = new WebStorageSizeManager(
-                    mContext,
-                    new WebStorageSizeManager.StatFsDiskInfo(appCachePath),
-                    new WebStorageSizeManager.WebKitAppCacheInfo(appCachePath));
-            appCacheMaxSize = webStorageSizeManager.getAppCacheMaxSize();
-            // Set the default value for the Database path.
-            databasePath = mContext.getDir("databases", 0).getPath();
-            // Set the default value for the Geolocation database path.
-            geolocationDatabasePath = mContext.getDir("geolocation", 0).getPath();
-
-            if (p.getString(PREF_HOMEPAGE, null) == null) {
-                // No home page preferences is set, set it to default.
-                setHomePage(mContext, getFactoryResetHomeUrl(mContext));
+    private void syncManagedSettings() {
+        syncSharedSettings();
+        synchronized (mManagedSettings) {
+            Iterator<WeakReference<WebSettings>> iter = mManagedSettings.iterator();
+            while (iter.hasNext()) {
+                WeakReference<WebSettings> ref = iter.next();
+                WebSettings settings = ref.get();
+                if (settings == null) {
+                    iter.remove();
+                    continue;
+                }
+                syncSetting(settings);
             }
+        }
+    }
 
-            // the cost of one cached page is ~3M (measured using nytimes.com). For
-            // low end devices, we only cache one page. For high end devices, we try
-            // to cache more pages, currently choose 5.
-            ActivityManager am = (ActivityManager) mContext
-                    .getSystemService(Context.ACTIVITY_SERVICE);
-            if (am.getMemoryClass() > 16) {
-                pageCacheCapacity = 5;
+    @Override
+    public void onSharedPreferenceChanged(
+            SharedPreferences sharedPreferences, String key) {
+        syncManagedSettings();
+        if (PREF_SEARCH_ENGINE.equals(key)) {
+            updateSearchEngine(false);
+        }
+        if (PREF_USE_INSTANT_SEARCH.equals(key)) {
+            updateSearchEngine(true);
+        }
+        if (PREF_FULLSCREEN.equals(key)) {
+            if (mController.getUi() != null) {
+                mController.getUi().setFullscreen(useFullscreen());
+            }
+        }
+    }
+
+    static String getFactoryResetHomeUrl(Context context) {
+        String url = context.getResources().getString(R.string.homepage_base);
+        if (url.indexOf("{CID}") != -1) {
+            url = url.replace("{CID}",
+                    BrowserProvider.getClientId(context.getContentResolver()));
+        }
+        return url;
+    }
+
+    public LayoutAlgorithm getLayoutAlgorithm() {
+        LayoutAlgorithm layoutAlgorithm = LayoutAlgorithm.NORMAL;
+        if (autofitPages()) {
+            layoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
+        }
+        if (isDebugEnabled()) {
+            if (isSmallScreen()) {
+                layoutAlgorithm = LayoutAlgorithm.SINGLE_COLUMN;
             } else {
-                pageCacheCapacity = 1;
+                if (isNormalLayout()) {
+                    layoutAlgorithm = LayoutAlgorithm.NORMAL;
+                } else {
+                    layoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
+                }
             }
+        }
+        return layoutAlgorithm;
+    }
 
-            // Read the last active AutoFill profile id.
-            autoFillActiveProfileId = p.getInt(
-                    PREF_AUTOFILL_ACTIVE_PROFILE_ID, autoFillActiveProfileId);
-
-            // Load the autofill profile data from the database. We use a database separate
-            // to the browser preference DB to make it easier to support multiple profiles
-            // and switching between them.
-            AutoFillProfileDatabase autoFillDb = AutoFillProfileDatabase.getInstance(mContext);
-            Cursor c = autoFillDb.getProfile(autoFillActiveProfileId);
-
-            if (c.getCount() > 0) {
-                c.moveToFirst();
-
-                String fullName = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.FULL_NAME));
-                String email = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.EMAIL_ADDRESS));
-                String company = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.COMPANY_NAME));
-                String addressLine1 = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.ADDRESS_LINE_1));
-                String addressLine2 = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.ADDRESS_LINE_2));
-                String city = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.CITY));
-                String state = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.STATE));
-                String zip = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.ZIP_CODE));
-                String country = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.COUNTRY));
-                String phone = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.PHONE_NUMBER));
-                autoFillProfile = new AutoFillProfile(autoFillActiveProfileId,
-                        fullName, email, company, addressLine1, addressLine2, city,
-                        state, zip, country, phone);
-            }
-            c.close();
-            autoFillDb.close();
-
-            // PreferenceManager.setDefaultValues is TOO SLOW, need to manually keep
-            // the defaults in sync
-            p.registerOnSharedPreferenceChangeListener(BrowserSettings.this);
-            syncSharedPreferences(mContext, p);
-
-            synchronized (sSingleton) {
-                mLoadFromDbComplete = true;
-                sSingleton.notify();
-            }
-            return null;
+    // TODO: Cache
+    public int getPageCacheCapacity() {
+        // the cost of one cached page is ~3M (measured using nytimes.com). For
+        // low end devices, we only cache one page. For high end devices, we try
+        // to cache more pages, currently choose 5.
+        if (ActivityManager.staticGetMemoryClass() > 16) {
+            return 5;
+        } else {
+            return 1;
         }
     }
 
-    private void updateSearchEngine(Context ctx, String searchEngineName, boolean force) {
-        if (force || searchEngine == null ||
-                !searchEngine.getName().equals(searchEngineName)) {
-            if (searchEngine != null) {
-                if (searchEngine.supportsVoiceSearch()) {
+    public WebStorageSizeManager getWebStorageSizeManager() {
+        return mWebStorageSizeManager;
+    }
+
+    // TODO: Cache
+    private String getAppCachePath() {
+        return mContext.getDir("appcache", 0).getPath();
+    }
+
+    private void updateSearchEngine(boolean force) {
+        String searchEngineName = getSearchEngineName();
+        if (force || mSearchEngine == null ||
+                !mSearchEngine.getName().equals(searchEngineName)) {
+            if (mSearchEngine != null) {
+                if (mSearchEngine.supportsVoiceSearch()) {
                      // One or more tabs could have been in voice search mode.
                      // Clear it, since the new SearchEngine may not support
                      // it, or may handle it differently.
@@ -428,302 +341,32 @@
                          mController.getTabControl().getTab(i).revertVoiceSearchMode();
                      }
                  }
-                 searchEngine.close();
+                mSearchEngine.close();
              }
-             searchEngine = SearchEngines.get(ctx, searchEngineName);
+            mSearchEngine = SearchEngines.get(mContext, searchEngineName);
 
-             if (mController != null && (searchEngine instanceof InstantSearchEngine)) {
-                 ((InstantSearchEngine) searchEngine).setController(mController);
+             if (mController != null && (mSearchEngine instanceof InstantSearchEngine)) {
+                 ((InstantSearchEngine) mSearchEngine).setController(mController);
              }
          }
     }
 
-    /* package */ void syncSharedPreferences(Context ctx, SharedPreferences p) {
-
-        homeUrl =
-            p.getString(PREF_HOMEPAGE, homeUrl);
-
-        useInstant = p.getBoolean(PREF_USE_INSTANT, useInstant);
-        String searchEngineName = p.getString(PREF_SEARCH_ENGINE,
-               SearchEngine.GOOGLE);
-        updateSearchEngine(ctx, searchEngineName, false);
-
-        loadsImagesAutomatically = p.getBoolean("load_images",
-                loadsImagesAutomatically);
-        javaScriptEnabled = p.getBoolean("enable_javascript",
-                javaScriptEnabled);
-        pluginState = WebSettings.PluginState.valueOf(
-                p.getString(PREF_PLUGIN_STATE, pluginState.name()));
-        javaScriptCanOpenWindowsAutomatically = !p.getBoolean(
-            "block_popup_windows",
-            !javaScriptCanOpenWindowsAutomatically);
-        showSecurityWarnings = p.getBoolean("show_security_warnings",
-                showSecurityWarnings);
-        rememberPasswords = p.getBoolean("remember_passwords",
-                rememberPasswords);
-        saveFormData = p.getBoolean("save_formdata",
-                saveFormData);
-        autoFillEnabled = p.getBoolean("autofill_enabled", autoFillEnabled);
-        boolean accept_cookies = p.getBoolean("accept_cookies",
-                CookieManager.getInstance().acceptCookie());
-        CookieManager.getInstance().setAcceptCookie(accept_cookies);
-        openInBackground = p.getBoolean("open_in_background", openInBackground);
-        textSize = WebSettings.TextSize.valueOf(
-                p.getString(PREF_TEXT_SIZE, textSize.name()));
-        zoomDensity = WebSettings.ZoomDensity.valueOf(
-                p.getString(PREF_DEFAULT_ZOOM, zoomDensity.name()));
-        autoFitPage = p.getBoolean("autofit_pages", autoFitPage);
-        loadsPageInOverviewMode = p.getBoolean("load_page",
-                loadsPageInOverviewMode);
-        useWideViewPort = true; // use wide view port for either setting
-        if (autoFitPage) {
-            layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
-        } else {
-            layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL;
-        }
-        defaultTextEncodingName =
-                p.getString(PREF_DEFAULT_TEXT_ENCODING,
-                        defaultTextEncodingName);
-
-        showDebugSettings =
-                p.getBoolean(PREF_DEBUG_SETTINGS, showDebugSettings);
-        // Debug menu items have precidence if the menu is visible
-        if (showDebugSettings) {
-            boolean small_screen = p.getBoolean("small_screen",
-                    layoutAlgorithm ==
-                    WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
-            if (small_screen) {
-                layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN;
-            } else {
-                boolean normal_layout = p.getBoolean("normal_layout",
-                        layoutAlgorithm == WebSettings.LayoutAlgorithm.NORMAL);
-                if (normal_layout) {
-                    layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL;
-                } else {
-                    layoutAlgorithm =
-                            WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
-                }
-            }
-            useWideViewPort = p.getBoolean("wide_viewport", useWideViewPort);
-            tracing = p.getBoolean("enable_tracing", tracing);
-            lightTouch = p.getBoolean("enable_light_touch", lightTouch);
-            navDump = p.getBoolean("enable_nav_dump", navDump);
-            showVisualIndicator = p.getBoolean(PREF_VISUAL_INDICATOR, showVisualIndicator);
-        }
-
-        quickControls = p.getBoolean(PREF_QUICK_CONTROLS, quickControls);
-        useMostVisitedHomepage = p.getBoolean(PREF_MOST_VISITED_HOMEPAGE, useMostVisitedHomepage);
-
-        // Only set these if this is a dev build or debug is enabled
-        if (DEV_BUILD || showDebugSettings()) {
-            userAgent = Integer.parseInt(p.getString(PREF_USER_AGENT, "0"));
-            hardwareAccelerated = p.getBoolean(PREF_HARDWARE_ACCEL, hardwareAccelerated);
-        }
-
-        // JS flags is loaded from DB even if showDebugSettings is false,
-        // so that it can be set once and be effective all the time.
-        jsFlags = p.getString("js_engine_flags", "");
-
-        // Read the setting for showing/hiding the JS Console always so that should the
-        // user enable debug settings, we already know if we should show the console.
-        // The user will never see the console unless they navigate to about:debug,
-        // regardless of the setting we read here. This setting is only used after debug
-        // is enabled.
-        showConsole = p.getBoolean("javascript_console", showConsole);
-
-        // HTML5 API flags
-        appCacheEnabled = p.getBoolean("enable_appcache", appCacheEnabled);
-        databaseEnabled = p.getBoolean("enable_database", databaseEnabled);
-        domStorageEnabled = p.getBoolean("enable_domstorage", domStorageEnabled);
-        geolocationEnabled = p.getBoolean("enable_geolocation", geolocationEnabled);
-        workersEnabled = p.getBoolean("enable_workers", workersEnabled);
-
-        update();
-    }
-
-    public String getHomePage() {
-        if (useMostVisitedHomepage) {
-            return HomeProvider.MOST_VISITED;
-        }
-        return homeUrl;
-    }
-
     public SearchEngine getSearchEngine() {
-        return searchEngine;
-    }
-
-    public String getJsFlags() {
-        return jsFlags;
-    }
-
-    public WebStorageSizeManager getWebStorageSizeManager() {
-        return webStorageSizeManager;
-    }
-
-    public void setHomePage(Context context, String url) {
-        Editor ed = PreferenceManager.
-                getDefaultSharedPreferences(context).edit();
-        ed.putString(PREF_HOMEPAGE, url);
-        ed.apply();
-        homeUrl = url;
-    }
-
-    public WebSettings.TextSize getTextSize() {
-        return textSize;
-    }
-
-    public WebSettings.ZoomDensity getDefaultZoom() {
-        return zoomDensity;
-    }
-
-    public boolean openInBackground() {
-        return openInBackground;
-    }
-
-    public boolean showSecurityWarnings() {
-        return showSecurityWarnings;
-    }
-
-    public boolean isTracing() {
-        return tracing;
-    }
-
-    public boolean isLightTouch() {
-        return lightTouch;
-    }
-
-    public boolean isNavDump() {
-        return navDump;
-    }
-
-    public boolean isHardwareAccelerated() {
-        return hardwareAccelerated;
-    }
-
-    public boolean showVisualIndicator() {
-        return showVisualIndicator;
-    }
-
-    public boolean useQuickControls() {
-        return quickControls;
-    }
-
-    public boolean useMostVisitedHomepage() {
-        return useMostVisitedHomepage;
-    }
-
-    public boolean useInstant() {
-        return useInstant;
-    }
-
-    public boolean showDebugSettings() {
-        return showDebugSettings;
-    }
-
-    public void toggleDebugSettings(Context context) {
-        showDebugSettings = !showDebugSettings;
-        navDump = showDebugSettings;
-        syncSharedPreferences(context,
-                PreferenceManager.getDefaultSharedPreferences(context));
-        update();
-    }
-
-    public void setAutoFillProfile(Context ctx, AutoFillProfile profile, Message msg) {
-        if (profile != null) {
-            setActiveAutoFillProfileId(ctx, profile.getUniqueId());
-            // Update the AutoFill DB with the new profile.
-            new SaveProfileToDbTask(ctx, msg).execute(profile);
-        } else {
-            // Delete the current profile.
-            if (autoFillProfile != null) {
-                new DeleteProfileFromDbTask(ctx, msg).execute(autoFillProfile.getUniqueId());
-                setActiveAutoFillProfileId(ctx, NO_AUTOFILL_PROFILE_SET);
-            }
+        if (mSearchEngine == null) {
+            updateSearchEngine(false);
         }
-        autoFillProfile = profile;
+        return mSearchEngine;
     }
 
-    public AutoFillProfile getAutoFillProfile() {
-        return autoFillProfile;
+    public boolean isDebugEnabled() {
+        return mPrefs.getBoolean(PREF_DEBUG_MENU, false);
     }
 
-    private void setActiveAutoFillProfileId(Context context, int activeProfileId) {
-        autoFillActiveProfileId = activeProfileId;
-        Editor ed = PreferenceManager.
-            getDefaultSharedPreferences(context).edit();
-        ed.putInt(PREF_AUTOFILL_ACTIVE_PROFILE_ID, activeProfileId);
-        ed.apply();
+    public void setDebugEnabled(boolean value) {
+        mPrefs.edit().putBoolean(PREF_DEBUG_MENU, value).apply();
     }
 
-    /* package */ void disableAutoFill(Context ctx) {
-        autoFillEnabled = false;
-        Editor ed = PreferenceManager.getDefaultSharedPreferences(ctx).edit();
-        ed.putBoolean(PREF_AUTOFILL_ENABLED, false);
-        ed.apply();
-    }
-
-    /**
-     * Add a WebSettings object to the list of observers that will be updated
-     * when update() is called.
-     *
-     * @param s A WebSettings object that is strictly tied to the life of a
-     *            WebView.
-     */
-    public Observer addObserver(WebSettings s) {
-        Observer old = mWebSettingsToObservers.get(s);
-        if (old != null) {
-            super.deleteObserver(old);
-        }
-        Observer o = new Observer(s);
-        mWebSettingsToObservers.put(s, o);
-        super.addObserver(o);
-        return o;
-    }
-
-    /**
-     * Delete the given WebSettings observer from the list of observers.
-     * @param s The WebSettings object to be deleted.
-     */
-    public void deleteObserver(WebSettings s) {
-        Observer o = mWebSettingsToObservers.get(s);
-        if (o != null) {
-            mWebSettingsToObservers.remove(s);
-            super.deleteObserver(o);
-        }
-    }
-
-    /*
-     * Application level method for obtaining a single app instance of the
-     * BrowserSettings.
-     */
-    public static BrowserSettings getInstance() {
-        if (sSingleton == null ) {
-            sSingleton = new BrowserSettings();
-        }
-        return sSingleton;
-    }
-
-    /*
-     * Package level method for associating the BrowserSettings with TabControl
-     */
-    /* package */void setController(Controller ctrl) {
-        mController = ctrl;
-        updateTabControlSettings();
-
-        if (mController != null && (searchEngine instanceof InstantSearchEngine)) {
-             ((InstantSearchEngine) searchEngine).setController(mController);
-        }
-    }
-
-    /*
-     * Update all the observers of the object.
-     */
-    /*package*/ void update() {
-        setChanged();
-        notifyObservers();
-    }
-
-    /*package*/ void clearCache(Context context) {
+    public void clearCache() {
         WebIconDatabase.getInstance().removeAllIcons();
         if (mController != null) {
             WebView current = mController.getCurrentWebView();
@@ -733,18 +376,18 @@
         }
     }
 
-    /*package*/ void clearCookies(Context context) {
+    public void clearCookies() {
         CookieManager.getInstance().removeAllCookie();
     }
 
-    /* package */void clearHistory(Context context) {
-        ContentResolver resolver = context.getContentResolver();
+    public void clearHistory() {
+        ContentResolver resolver = mContext.getContentResolver();
         Browser.clearHistory(resolver);
         Browser.clearSearches(resolver);
     }
 
-    /* package */ void clearFormData(Context context) {
-        WebViewDatabase.getInstance(context).clearFormData();
+    public void clearFormData() {
+        WebViewDatabase.getInstance(mContext).clearFormData();
         if (mController!= null) {
             WebView currentTopView = mController.getCurrentTopWebView();
             if (currentTopView != null) {
@@ -753,260 +396,300 @@
         }
     }
 
-    /*package*/ void clearPasswords(Context context) {
-        WebViewDatabase db = WebViewDatabase.getInstance(context);
+    public void clearPasswords() {
+        WebViewDatabase db = WebViewDatabase.getInstance(mContext);
         db.clearUsernamePassword();
         db.clearHttpAuthUsernamePassword();
     }
 
-    private void updateTabControlSettings() {
-        // Enable/disable the error console.
-        mController.setShouldShowErrorConsole(
-            showDebugSettings && showConsole);
-    }
-
-    /*package*/ void clearDatabases(Context context) {
+    public void clearDatabases() {
         WebStorage.getInstance().deleteAllData();
     }
 
-    /*package*/ void clearLocationAccess(Context context) {
+    public void clearLocationAccess() {
         GeolocationPermissions.getInstance().clearAll();
     }
 
-    /*package*/ void resetDefaultPreferences(Context ctx) {
-        reset();
-        SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(ctx);
-        p.edit().clear().apply();
-        PreferenceManager.setDefaultValues(ctx, R.xml.general_preferences, true);
-        PreferenceManager.setDefaultValues(ctx, R.xml.privacy_security_preferences, true);
-        PreferenceManager.setDefaultValues(ctx, R.xml.advanced_preferences, true);
-        // reset homeUrl
-        setHomePage(ctx, getFactoryResetHomeUrl(ctx));
-        // reset appcache max size
-        appCacheMaxSize = webStorageSizeManager.getAppCacheMaxSize();
-        setActiveAutoFillProfileId(ctx, NO_AUTOFILL_PROFILE_SET);
+    public void resetDefaultPreferences() {
+        mPrefs.edit().clear().apply();
+        syncManagedSettings();
     }
 
-    /*package*/ static String getFactoryResetHomeUrl(Context context) {
-        String url = context.getResources().getString(R.string.homepage_base);
-        if (url.indexOf("{CID}") != -1) {
-            url = url.replace("{CID}",
-                    BrowserProvider.getClientId(context.getContentResolver()));
+    public AutoFillProfile getAutoFillProfile() {
+        mAutofillHandler.waitForLoad();
+        return mAutofillHandler.getAutoFillProfile();
+    }
+
+    public void setAutoFillProfile(AutoFillProfile profile, Message msg) {
+        mAutofillHandler.waitForLoad();
+        mAutofillHandler.setAutoFillProfile(profile, msg);
+    }
+
+    public void toggleDebugSettings() {
+        setDebugEnabled(!isDebugEnabled());
+    }
+
+    public boolean hasDesktopUseragent(WebView view) {
+        return view != null && mCustomUserAgents.get(view.getSettings()) != null;
+    }
+
+    public void toggleDesktopUseragent(WebView view) {
+        if (view == null) {
+            return;
         }
-        return url;
-    }
-
-    // Private constructor that does nothing.
-    private BrowserSettings() {
-        reset();
-    }
-
-    private void reset() {
-        // Private variables for settings
-        // NOTE: these defaults need to be kept in sync with the XML
-        // until the performance of PreferenceManager.setDefaultValues()
-        // is improved.
-        loadsImagesAutomatically = true;
-        javaScriptEnabled = true;
-        pluginState = WebSettings.PluginState.ON;
-        javaScriptCanOpenWindowsAutomatically = false;
-        showSecurityWarnings = true;
-        rememberPasswords = true;
-        saveFormData = true;
-        autoFillEnabled = true;
-        openInBackground = false;
-        autoFitPage = true;
-        loadsPageInOverviewMode = true;
-        showDebugSettings = false;
-        // HTML5 API flags
-        appCacheEnabled = true;
-        databaseEnabled = true;
-        domStorageEnabled = true;
-        geolocationEnabled = true;
-        workersEnabled = true;  // only affects V8. JSC does not have a similar setting
-    }
-
-    private abstract class AutoFillProfileDbTask<T> extends AsyncTask<T, Void, Void> {
-        Context mContext;
-        AutoFillProfileDatabase mAutoFillProfileDb;
-        Message mCompleteMessage;
-
-        public AutoFillProfileDbTask(Context ctx, Message msg) {
-            mContext = ctx;
-            mCompleteMessage = msg;
-        }
-
-        protected void onPostExecute(Void result) {
-            if (mCompleteMessage != null) {
-                mCompleteMessage.sendToTarget();
-            }
-            mAutoFillProfileDb.close();
-        }
-
-        abstract protected Void doInBackground(T... values);
-    }
-
-
-    private class SaveProfileToDbTask extends AutoFillProfileDbTask<AutoFillProfile> {
-        public SaveProfileToDbTask(Context ctx, Message msg) {
-            super(ctx, msg);
-        }
-
-        protected Void doInBackground(AutoFillProfile... values) {
-            mAutoFillProfileDb = AutoFillProfileDatabase.getInstance(mContext);
-            assert autoFillActiveProfileId != NO_AUTOFILL_PROFILE_SET;
-            AutoFillProfile newProfile = values[0];
-            mAutoFillProfileDb.addOrUpdateProfile(autoFillActiveProfileId, newProfile);
-            return null;
+        WebSettings settings = view.getSettings();
+        if (mCustomUserAgents.get(settings) != null) {
+            mCustomUserAgents.remove(settings);
+            settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
+        } else {
+            mCustomUserAgents.put(settings, DESKTOP_USERAGENT);
+            settings.setUserAgentString(DESKTOP_USERAGENT);
         }
     }
 
-    private class DeleteProfileFromDbTask extends AutoFillProfileDbTask<Integer> {
-        public DeleteProfileFromDbTask(Context ctx, Message msg) {
-            super(ctx, msg);
+    public static int getAdjustedMinimumFontSize(int rawValue) {
+        rawValue++; // Preference starts at 0, min font at 1
+        if (rawValue > 1) {
+            rawValue += (MIN_FONT_SIZE_OFFSET - 2);
         }
-
-        protected Void doInBackground(Integer... values) {
-            mAutoFillProfileDb = AutoFillProfileDatabase.getInstance(mContext);
-            int id = values[0];
-            assert  id > 0;
-            mAutoFillProfileDb.dropProfile(id);
-            return null;
-        }
+        return rawValue;
     }
 
-    @Override
-    public void onSharedPreferenceChanged(
-            SharedPreferences p, String key) {
-        if (PREF_HARDWARE_ACCEL.equals(key)) {
-            hardwareAccelerated = p.getBoolean(PREF_HARDWARE_ACCEL, hardwareAccelerated);
-        } else if (PREF_VISUAL_INDICATOR.equals(key)) {
-            showVisualIndicator = p.getBoolean(PREF_VISUAL_INDICATOR, showVisualIndicator);
-        } else if (PREF_USER_AGENT.equals(key)) {
-            userAgent = Integer.parseInt(p.getString(PREF_USER_AGENT, "0"));
-            update();
-        } else if (PREF_QUICK_CONTROLS.equals(key)) {
-            quickControls = p.getBoolean(PREF_QUICK_CONTROLS, quickControls);
-        } else if (PREF_MOST_VISITED_HOMEPAGE.equals(key)) {
-            useMostVisitedHomepage = p.getBoolean(PREF_MOST_VISITED_HOMEPAGE, useMostVisitedHomepage);
-        } else if (PREF_USE_INSTANT.equals(key)) {
-            useInstant = p.getBoolean(PREF_USE_INSTANT, useInstant);
-            updateSearchEngine(mController.getActivity(), SearchEngine.GOOGLE, true);
-        } else if (PREF_SEARCH_ENGINE.equals(key)) {
-            final String searchEngineName = p.getString(PREF_SEARCH_ENGINE,
-                    SearchEngine.GOOGLE);
-            updateSearchEngine(mController.getActivity(), searchEngineName, false);
-        }
+    public static int getAdjustedTextZoom(int rawValue) {
+        rawValue = (rawValue - TEXT_ZOOM_START_VAL) * TEXT_ZOOM_STEP;
+        return rawValue + 100;
     }
 
-    /*package*/ String getRlzValue() {
-        return mRlzValue;
+    static int getRawTextZoom(int percent) {
+        return (percent - 100) / TEXT_ZOOM_STEP + TEXT_ZOOM_START_VAL;
     }
 
-    /*package*/ void updateRlzValues(Context context) {
-        // Use AsyncTask because this queries both RlzProvider and Bookmarks URIs
-        new RlzUpdateTask(context).execute();
+    // -----------------------------
+    // getter/setters for accessibility_preferences.xml
+    // -----------------------------
+
+    @Deprecated
+    private TextSize getTextSize() {
+        String textSize = mPrefs.getString(PREF_TEXT_SIZE, "NORMAL");
+        return TextSize.valueOf(textSize);
     }
 
-    private class RlzUpdateTask extends AsyncTask<Void, Void, Void> {
-        private final Context context;
-
-        public RlzUpdateTask(Context context) {
-            this.context = context;
-        }
-
-        @Override
-        protected Void doInBackground(Void...unused) {
-            String rlz = retrieveRlzValue(context);
-            if (!rlz.isEmpty()) {
-                mRlzValue = rlz;
-                updateHomePageRlzParameter(context);
-                updateBookmarksRlzParameter(context);
-            }
-            return null;
-        }
+    public int getMinimumFontSize() {
+        int minFont = mPrefs.getInt(PREF_MIN_FONT_SIZE, 0);
+        return getAdjustedMinimumFontSize(minFont);
     }
 
-    // Update RLZ value if present in Home page
-    private void updateHomePageRlzParameter(Context context) {
-        Uri uri = Uri.parse(homeUrl);
-        if ((uri.getQueryParameter("rlz") != null) && UrlUtils.isGoogleUri(uri)) {
-            String newHomeUrl = updateRlzParameter(homeUrl);
-            if (!homeUrl.equals(newHomeUrl)) {
-                setHomePage(context, newHomeUrl);
-            }
-        }
+    public boolean forceEnableUserScalable() {
+        return mPrefs.getBoolean(PREF_FORCE_USERSCALABLE, false);
     }
 
-    // Update RLZ value if present in bookmarks
-    private void updateBookmarksRlzParameter(Context context) {
-        Cursor cur = null;
-        try {
-            cur = context.getContentResolver().query(Bookmarks.CONTENT_URI_DEFAULT_FOLDER,
-                new String[] { Bookmarks._ID, Bookmarks.URL }, "url LIKE '%rlz=%'", null, null);
-            if ((cur == null) || (cur.getCount() == 0)) {
-                return;
-            }
-            for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
-                long id = cur.getLong(0);
-                String url = cur.getString(1);
-                if ((url == null) || url.isEmpty()) {
-                    continue;
-                }
-
-                Uri uri = Uri.parse(url);
-                if ((uri.getQueryParameter("rlz") != null) && UrlUtils.isGoogleUri(uri)) {
-                    String newUrl = updateRlzParameter(url);
-                    if (!url.equals(newUrl)) {
-                        ContentValues values = new ContentValues();
-                        values.put(Bookmarks.URL, newUrl);
-                        Uri bookmarkUri = ContentUris.withAppendedId(
-                            BookmarkUtils.getBookmarksUri(context), id);
-                        context.getContentResolver().update(bookmarkUri, values, null, null);
-                    }
-                }
-            }
-        } finally {
-            if (cur != null) {
-                cur.close();
-            }
-        }
+    public int getTextZoom() {
+        int textZoom = mPrefs.getInt(PREF_TEXT_ZOOM, 10);
+        return getAdjustedTextZoom(textZoom);
     }
 
-    private String updateRlzParameter(String url) {
-        Uri uri = Uri.parse(url);
-        String oldRlz = uri.getQueryParameter("rlz");
-        if (oldRlz != null) {
-            return url.replace("rlz=" + oldRlz, "rlz=" + mRlzValue);
-        }
-        return url;
+    public void setTextZoom(int percent) {
+        mPrefs.edit().putInt(PREF_TEXT_ZOOM, getRawTextZoom(percent)).apply();
     }
 
-    // Retrieve the RLZ value from the Rlz Provider
-    private static String retrieveRlzValue(Context context) {
-        String rlz = "";
-        PackageManager pm = context.getPackageManager();
-        if (pm.resolveContentProvider(RLZ_PROVIDER, 0) == null) {
-            return rlz;
-        }
+    // -----------------------------
+    // getter/setters for advanced_preferences.xml
+    // -----------------------------
 
-        String ap = context.getResources().getString(R.string.rlz_access_point);
-        if (ap.isEmpty()) {
-            return rlz;
-        }
-
-        Uri rlzUri = Uri.withAppendedPath(RLZ_PROVIDER_URI, ap);
-        Cursor cur = null;
-        try {
-            cur = context.getContentResolver().query(rlzUri, null, null, null, null);
-            if (cur != null && cur.moveToFirst() && !cur.isNull(0)) {
-                rlz = cur.getString(0);
-            }
-        } finally {
-            if (cur != null) {
-                cur.close();
-            }
-        }
-        return rlz;
+    public String getSearchEngineName() {
+        return mPrefs.getString(PREF_SEARCH_ENGINE, SearchEngine.GOOGLE);
     }
+
+    public boolean openInBackground() {
+        return mPrefs.getBoolean(PREF_OPEN_IN_BACKGROUND, false);
+    }
+
+    public boolean enableJavascript() {
+        return mPrefs.getBoolean(PREF_ENABLE_JAVASCRIPT, true);
+    }
+
+    // TODO: Cache
+    public PluginState getPluginState() {
+        String state = mPrefs.getString(PREF_PLUGIN_STATE, "ON");
+        return PluginState.valueOf(state);
+    }
+
+    // TODO: Cache
+    public ZoomDensity getDefaultZoom() {
+        String zoom = mPrefs.getString(PREF_DEFAULT_ZOOM, "MEDIUM");
+        return ZoomDensity.valueOf(zoom);
+    }
+
+    public boolean loadPageInOverviewMode() {
+        return mPrefs.getBoolean(PREF_LOAD_PAGE, true);
+    }
+
+    public boolean autofitPages() {
+        return mPrefs.getBoolean(PREF_AUTOFIT_PAGES, true);
+    }
+
+    public boolean blockPopupWindows() {
+        return mPrefs.getBoolean(PREF_BLOCK_POPUP_WINDOWS, true);
+    }
+
+    public boolean loadImages() {
+        return mPrefs.getBoolean(PREF_LOAD_IMAGES, true);
+    }
+
+    public String getDefaultTextEncoding() {
+        return mPrefs.getString(PREF_DEFAULT_TEXT_ENCODING, null);
+    }
+
+    // -----------------------------
+    // getter/setters for general_preferences.xml
+    // -----------------------------
+
+    public String getHomePage() {
+        if (useMostVisitedHomepage()) {
+            return HomeProvider.MOST_VISITED;
+        }
+        return mPrefs.getString(PREF_HOMEPAGE, getFactoryResetHomeUrl(mContext));
+    }
+
+    public void setHomePage(String value) {
+        mPrefs.edit().putString(PREF_HOMEPAGE, value).apply();
+    }
+
+    public boolean isAutofillEnabled() {
+        return mPrefs.getBoolean(PREF_AUTOFILL_ENABLED, true);
+    }
+
+    public void setAutofillEnabled(boolean value) {
+        mPrefs.edit().putBoolean(PREF_AUTOFILL_ENABLED, value).apply();
+    }
+
+    // -----------------------------
+    // getter/setters for debug_preferences.xml
+    // -----------------------------
+
+    public boolean isHardwareAccelerated() {
+        if (!isDebugEnabled()) {
+            return true;
+        }
+        return mPrefs.getBoolean(PREF_ENABLE_HARDWARE_ACCEL, true);
+    }
+
+    public int getUserAgent() {
+        if (!isDebugEnabled()) {
+            return 0;
+        }
+        return Integer.parseInt(mPrefs.getString(PREF_USER_AGENT, "0"));
+    }
+
+    // -----------------------------
+    // getter/setters for hidden_debug_preferences.xml
+    // -----------------------------
+
+    public boolean enableVisualIndicator() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_ENABLE_VISUAL_INDICATOR, false);
+    }
+
+    public boolean enableJavascriptConsole() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_JAVASCRIPT_CONSOLE, true);
+    }
+
+    public boolean isSmallScreen() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_SMALL_SCREEN, false);
+    }
+
+    public boolean isWideViewport() {
+        if (!isDebugEnabled()) {
+            return true;
+        }
+        return mPrefs.getBoolean(PREF_WIDE_VIEWPORT, true);
+    }
+
+    public boolean isNormalLayout() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_NORMAL_LAYOUT, false);
+    }
+
+    public boolean isTracing() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_ENABLE_TRACING, false);
+    }
+
+    public boolean enableLightTouch() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_ENABLE_LIGHT_TOUCH, false);
+    }
+
+    public boolean enableNavDump() {
+        if (!isDebugEnabled()) {
+            return false;
+        }
+        return mPrefs.getBoolean(PREF_ENABLE_NAV_DUMP, false);
+    }
+
+    public String getJsEngineFlags() {
+        if (!isDebugEnabled()) {
+            return "";
+        }
+        return mPrefs.getString(PREF_JS_ENGINE_FLAGS, "");
+    }
+
+    // -----------------------------
+    // getter/setters for lab_preferences.xml
+    // -----------------------------
+
+    public boolean useQuickControls() {
+        return mPrefs.getBoolean(PREF_ENABLE_QUICK_CONTROLS, false);
+    }
+
+    public boolean useMostVisitedHomepage() {
+        return mPrefs.getBoolean(PREF_USE_MOST_VISITED_HOMEPAGE, false);
+    }
+
+    public boolean useInstantSearch() {
+        return mPrefs.getBoolean(PREF_USE_INSTANT_SEARCH, false);
+    }
+
+    public boolean useFullscreen() {
+        return mPrefs.getBoolean(PREF_FULLSCREEN, false);
+    }
+
+    // -----------------------------
+    // getter/setters for privacy_security_preferences.xml
+    // -----------------------------
+
+    public boolean showSecurityWarnings() {
+        return mPrefs.getBoolean(PREF_SHOW_SECURITY_WARNINGS, true);
+    }
+
+    public boolean acceptCookies() {
+        return mPrefs.getBoolean(PREF_ACCEPT_COOKIES, true);
+    }
+
+    public boolean saveFormdata() {
+        return mPrefs.getBoolean(PREF_SAVE_FORMDATA, true);
+    }
+
+    public boolean enableGeolocation() {
+        return mPrefs.getBoolean(PREF_ENABLE_GEOLOCATION, true);
+    }
+
+    public boolean rememberPasswords() {
+        return mPrefs.getBoolean(PREF_REMEMBER_PASSWORDS, true);
+    }
+
 }
diff --git a/src/com/android/browser/ScrollWebView.java b/src/com/android/browser/BrowserWebView.java
similarity index 70%
rename from src/com/android/browser/ScrollWebView.java
rename to src/com/android/browser/BrowserWebView.java
index 8c89e51..55dd24a 100644
--- a/src/com/android/browser/ScrollWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -18,24 +18,29 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
 import android.webkit.WebView;
 
+import com.android.browser.NavTabView.WebProxyView;
+
 import java.util.Map;
 
 /**
  * Manage WebView scroll events
  */
-public class ScrollWebView extends WebView implements Runnable {
+public class BrowserWebView extends WebView implements Runnable {
 
     private ScrollListener mScrollListener;
     private boolean mIsCancelled;
     private boolean mBackgroundRemoved = false;
     private boolean mUserInitiated = false;
     private TitleBarBase mTitleBar;
-    private Bitmap mBitmap;
+    private int mCaptureSize;
+    private Bitmap mCapture;
+    private WebProxyView mProxyView;
 
     /**
      * @param context
@@ -43,7 +48,7 @@
      * @param defStyle
      * @param javascriptInterfaces
      */
-    public ScrollWebView(Context context, AttributeSet attrs, int defStyle,
+    public BrowserWebView(Context context, AttributeSet attrs, int defStyle,
             Map<String, Object> javascriptInterfaces, boolean privateBrowsing) {
         super(context, attrs, defStyle, javascriptInterfaces, privateBrowsing);
     }
@@ -53,24 +58,45 @@
      * @param attrs
      * @param defStyle
      */
-    public ScrollWebView(
+    public BrowserWebView(
             Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
         super(context, attrs, defStyle, privateBrowsing);
+        init();
     }
 
     /**
      * @param context
      * @param attrs
      */
-    public ScrollWebView(Context context, AttributeSet attrs) {
+    public BrowserWebView(Context context, AttributeSet attrs) {
         super(context, attrs);
+        init();
     }
 
     /**
      * @param context
      */
-    public ScrollWebView(Context context) {
+    public BrowserWebView(Context context) {
         super(context);
+        init();
+    }
+
+    private void init() {
+        mCaptureSize = mContext.getResources().getDimensionPixelSize(R.dimen.tab_capture_size);
+        mCapture = Bitmap.createBitmap(mCaptureSize, mCaptureSize,
+                Bitmap.Config.RGB_565);
+    }
+
+    protected void setProxyView(WebProxyView p) {
+        mProxyView = p;
+    }
+
+    @Override
+    public void invalidate() {
+        super.invalidate();
+        if (mProxyView != null) {
+            mProxyView.invalidate();
+        }
     }
 
     @Override
@@ -140,6 +166,18 @@
         public void onScroll(int visibleTitleHeight, boolean userInitiated);
     }
 
+    protected Bitmap capture() {
+        if (mCapture == null) return null;
+        Canvas c = new Canvas(mCapture);
+        final int left = getScrollX();
+        final int top = getScrollY() + getVisibleTitleHeight();
+        c.translate(-left, -top);
+        float scale = mCaptureSize / (float) Math.max(getWidth(), getHeight());
+        c.scale(scale, scale, left, top);
+        onDraw(c);
+        return mCapture;
+    }
+
     @Override
     protected void onDraw(android.graphics.Canvas c) {
         super.onDraw(c);
@@ -153,4 +191,13 @@
         }
     }
 
+    @Override
+    protected void updateCachedTextfield(String updatedText) {
+        super.updateCachedTextfield(updatedText);
+        CrashRecoveryHandler handler = CrashRecoveryHandler.getInstance();
+        if (handler != null) {
+            handler.backupState();
+        }
+    }
+
 }
diff --git a/src/com/android/browser/BrowserYesNoPreference.java b/src/com/android/browser/BrowserYesNoPreference.java
index caea092..d5d5205 100644
--- a/src/com/android/browser/BrowserYesNoPreference.java
+++ b/src/com/android/browser/BrowserYesNoPreference.java
@@ -35,25 +35,25 @@
         if (positiveResult) {
             setEnabled(false);
 
-            Context context = getContext();
-            if (BrowserSettings.PREF_CLEAR_CACHE.equals(getKey())) {
-                BrowserSettings.getInstance().clearCache(context);
-                BrowserSettings.getInstance().clearDatabases(context);
-            } else if (BrowserSettings.PREF_CLEAR_COOKIES.equals(getKey())) {
-                BrowserSettings.getInstance().clearCookies(context);
-            } else if (BrowserSettings.PREF_CLEAR_HISTORY.equals(getKey())) {
-                BrowserSettings.getInstance().clearHistory(context);
-            } else if (BrowserSettings.PREF_CLEAR_FORM_DATA.equals(getKey())) {
-                BrowserSettings.getInstance().clearFormData(context);
-            } else if (BrowserSettings.PREF_CLEAR_PASSWORDS.equals(getKey())) {
-                BrowserSettings.getInstance().clearPasswords(context);
-            } else if (BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS.equals(
+            BrowserSettings settings = BrowserSettings.getInstance();
+            if (PreferenceKeys.PREF_PRIVACY_CLEAR_CACHE.equals(getKey())) {
+                settings.clearCache();
+                settings.clearDatabases();
+            } else if (PreferenceKeys.PREF_PRIVACY_CLEAR_COOKIES.equals(getKey())) {
+                settings.clearCookies();
+            } else if (PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY.equals(getKey())) {
+                settings.clearHistory();
+            } else if (PreferenceKeys.PREF_PRIVACY_CLEAR_FORM_DATA.equals(getKey())) {
+                settings.clearFormData();
+            } else if (PreferenceKeys.PREF_PRIVACY_CLEAR_PASSWORDS.equals(getKey())) {
+                settings.clearPasswords();
+            } else if (PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES.equals(
                     getKey())) {
-                BrowserSettings.getInstance().resetDefaultPreferences(context);
+                settings.resetDefaultPreferences();
                 setEnabled(true);
-            } else if (BrowserSettings.PREF_CLEAR_GEOLOCATION_ACCESS.equals(
+            } else if (PreferenceKeys.PREF_PRIVACY_CLEAR_GEOLOCATION_ACCESS.equals(
                     getKey())) {
-                BrowserSettings.getInstance().clearLocationAccess(context);
+                settings.clearLocationAccess();
             }
         }
     }
diff --git a/src/com/android/browser/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java
index febf75b..785b2cd 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryView.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryView.java
@@ -204,27 +204,11 @@
             mUiController.onUrlSelected(BrowserBookmarksPage.getUrl(c), false);
             return true;
         }
-
-        @Override
-        public void onFolderChanged(int level, Uri uri) {
-            final int toggleFlags = ActionBar.DISPLAY_SHOW_CUSTOM
-                    | ActionBar.DISPLAY_HOME_AS_UP;
-            // 1 is "bookmarks" root folder
-            if (level <= 1) {
-                mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-                mActionBar.setDisplayOptions(0, toggleFlags);
-            } else {
-                mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
-                mActionBar.setDisplayOptions(toggleFlags, toggleFlags);
-            }
-        }
     };
 
     private void initFragments(Bundle extras) {
         mBookmarks = BrowserBookmarksPage.newInstance(mBookmarkCallbackWrapper,
                 extras, mBookmarksHeader);
-        mBookmarks.setBreadCrumbMaxVisible(2);
-        mBookmarks.setBreadCrumbUseBackButton(false);
         mHistory = BrowserHistoryPage.newInstance(mUiController, extras);
     }
 
@@ -328,7 +312,7 @@
             mUiController.onUrlSelected(settings.getHomePage(), false);
             return true;
         case R.id.add_bookmark:
-            mUiController.bookmarkCurrentPage(mBookmarks.getFolderId(), false);
+            mUiController.bookmarkCurrentPage(false);
             return true;
         case R.id.preferences_menu_id:
             Intent intent = new Intent(mActivity, BrowserPreferencesPage.class);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 2765fe0..9a015b2 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -16,11 +16,6 @@
 
 package com.android.browser;
 
-import com.android.browser.IntentHandler.UrlData;
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.search.SearchEngine;
-import com.android.common.Search;
-
 import android.app.Activity;
 import android.app.DownloadManager;
 import android.app.SearchManager;
@@ -28,6 +23,7 @@
 import android.content.ContentProvider;
 import android.content.ContentProviderClient;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -56,7 +52,6 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Intents.Insert;
 import android.speech.RecognizerIntent;
-import android.speech.RecognizerResultsIntent;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Patterns;
@@ -80,12 +75,21 @@
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.widget.Toast;
+
+import com.android.browser.IntentHandler.UrlData;
+import com.android.browser.UI.DropdownChangeListener;
+import com.android.browser.provider.BrowserProvider;
+import com.android.browser.provider.BrowserProvider2.Snapshots;
+import com.android.browser.search.SearchEngine;
+import com.android.common.Search;
+
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.net.URLEncoder;
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Controller for browser
@@ -96,6 +100,7 @@
     private static final String LOGTAG = "Controller";
     private static final String SEND_APP_ID_EXTRA =
         "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
+    private static final String INCOGNITO_URI = "browser:incognito";
 
 
     // public message ids
@@ -132,6 +137,9 @@
     // "source" parameter for Google search through simplily type
     final static String GOOGLE_SEARCH_SOURCE_TYPE = "browser-type";
 
+    // "no-crash-recovery" parameter in intetnt to suppress crash recovery
+    final static String NO_CRASH_RECOVERY = "no-crash-recovery";
+
     private Activity mActivity;
     private UI mUi;
     private TabControl mTabControl;
@@ -146,6 +154,7 @@
     private IntentHandler mIntentHandler;
     private PageDialogsHandler mPageDialogsHandler;
     private NetworkStateHandler mNetworkHandler;
+    private NfcHandler mNfcHandler;
 
     private Message mAutoFillSetupMessage;
 
@@ -197,6 +206,7 @@
     // Tabs' notion of whether they represent bookmarked sites.
     private ContentObserver mBookmarksObserver;
     private DataController mDataController;
+    private CrashRecoveryHandler mCrashRecoveryHandler;
 
     private static class ClearThumbnails extends AsyncTask<File, Void, Void> {
         @Override
@@ -218,11 +228,12 @@
         mDataController = DataController.getInstance(mActivity);
         mTabControl = new TabControl(this);
         mSettings.setController(this);
-        mSettings.updateRlzValues(mActivity);
+        mCrashRecoveryHandler = CrashRecoveryHandler.initialize(this);
 
         mUrlHandler = new UrlHandler(this);
         mIntentHandler = new IntentHandler(mActivity, this);
         mPageDialogsHandler = new PageDialogsHandler(mActivity, this);
+        mNfcHandler = new NfcHandler(mActivity, this);
 
         PowerManager pm = (PowerManager) mActivity
                 .getSystemService(Context.POWER_SERVICE);
@@ -252,6 +263,15 @@
     }
 
     void start(final Bundle icicle, final Intent intent) {
+        boolean noCrashRecovery = intent.getBooleanExtra(NO_CRASH_RECOVERY, false);
+        if (icicle != null || noCrashRecovery) {
+            doStart(icicle, intent);
+        } else {
+            mCrashRecoveryHandler.startRecovery(intent);
+        }
+    }
+
+    void doStart(final Bundle icicle, final Intent intent) {
         // Unless the last browser usage was within 24 hours, destroy any
         // remaining incognito tabs.
 
@@ -266,10 +286,10 @@
             || lastActiveDate.after(today));
 
         // Find out if we will restore any state and remember the tab.
-        final int currentTab =
+        final long currentTabId =
                 mTabControl.canRestoreState(icicle, restoreIncognitoTabs);
 
-        if (currentTab == -1) {
+        if (currentTabId == -1) {
             // Not able to restore so we go ahead and clear session cookies.  We
             // must do this before trying to login the user as we don't want to
             // clear any session cookies set during login.
@@ -279,31 +299,29 @@
         GoogleAccountLogin.startLoginIfNeeded(mActivity,
                 new Runnable() {
                     @Override public void run() {
-                        start(icicle, intent, currentTab, restoreIncognitoTabs);
+                        onPreloginFinished(icicle, intent, currentTabId, restoreIncognitoTabs);
                     }
                 });
     }
 
-    private void start(Bundle icicle, Intent intent, int currentTab,
+    private void onPreloginFinished(Bundle icicle, Intent intent, long currentTabId,
             boolean restoreIncognitoTabs) {
-        if (currentTab == -1) {
+        if (currentTabId == -1) {
             final Bundle extra = intent.getExtras();
             // Create an initial tab.
             // If the intent is ACTION_VIEW and data is not null, the Browser is
             // invoked to view the content by another application. In this case,
             // the tab will be close when exit.
             UrlData urlData = mIntentHandler.getUrlDataFromIntent(intent);
-
-            String action = intent.getAction();
-            final Tab t = mTabControl.createNewTab(
-                    (Intent.ACTION_VIEW.equals(action) &&
-                    intent.getData() != null)
-                    || RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS
-                    .equals(action),
-                    intent.getStringExtra(Browser.EXTRA_APPLICATION_ID),
-                    urlData.mUrl, false);
-            addTab(t);
-            setActiveTab(t);
+            Tab t = null;
+            if (urlData.isEmpty()) {
+                t = openTabToHomePage();
+            } else {
+                t = openTab(urlData);
+            }
+            if (t != null) {
+                t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID));
+            }
             WebView webView = t.getWebView();
             if (extra != null) {
                 int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0);
@@ -311,17 +329,10 @@
                     webView.setInitialScale(scale);
                 }
             }
-
-            if (urlData.isEmpty()) {
-                loadUrl(webView, mSettings.getHomePage());
-            } else {
-                // monkey protection against delayed start
-                if (t != null) {
-                    loadUrlDataIn(t, urlData);
-                }
-            }
+            mTabControl.loadSnapshotTabs();
+            mUi.updateTabs(mTabControl.getTabs());
         } else {
-            mTabControl.restoreState(icicle, currentTab, restoreIncognitoTabs,
+            mTabControl.restoreState(icicle, currentTabId, restoreIncognitoTabs,
                     mUi.needsRestoreAllTabs());
             mUi.updateTabs(mTabControl.getTabs());
             // TabControl.restoreState() will create a new tab even if
@@ -334,7 +345,7 @@
         new ClearThumbnails().execute(mTabControl.getThumbnailDir()
                 .listFiles());
         // Read JavaScript flags if it exists.
-        String jsFlags = getSettings().getJsFlags();
+        String jsFlags = getSettings().getJsEngineFlags();
         if (jsFlags.trim().length() != 0) {
             getCurrentWebView().setJsFlags(jsFlags);
         }
@@ -468,17 +479,15 @@
                         }
                         switch (msg.arg1) {
                             case R.id.open_context_menu_id:
-                                loadUrlFromContext(getCurrentTopWebView(), url);
+                                loadUrlFromContext(url);
                                 break;
                             case R.id.view_image_context_menu_id:
-                                loadUrlFromContext(getCurrentTopWebView(), src);
+                                loadUrlFromContext(src);
                                 break;
                             case R.id.open_newtab_context_menu_id:
                                 final Tab parent = mTabControl.getCurrentTab();
-                                final Tab newTab = openTab(parent, url, false);
-                                if (newTab != null && newTab != parent) {
-                                    parent.addChildTab(newTab);
-                                }
+                                openTab(url, parent,
+                                        !mSettings.openInBackground(), true);
                                 break;
                             case R.id.copy_link_context_menu_id:
                                 copy(url);
@@ -494,7 +503,7 @@
                     }
 
                     case LOAD_URL:
-                        loadUrlFromContext(getCurrentTopWebView(), (String) msg.obj);
+                        loadUrlFromContext((String) msg.obj);
                         break;
 
                     case STOP_LOAD:
@@ -523,6 +532,11 @@
 
     }
 
+
+    public Tab getCurrentTab() {
+        return mTabControl.getCurrentTab();
+    }
+
     @Override
     public void shareCurrentPage() {
         shareCurrentPage(mTabControl.getCurrentTab());
@@ -608,11 +622,14 @@
         }
         mUi.onPause();
         mNetworkHandler.onPause();
+        mNfcHandler.onPause();
 
         WebView.disablePlatformNotifications();
+        mCrashRecoveryHandler.backupState();
+
     }
 
-    void onSaveInstanceState(Bundle outState) {
+    void onSaveInstanceState(Bundle outState, boolean saveImages) {
         // the default implementation requires each view to have an id. As the
         // browser handles the state itself and it doesn't use id for the views,
         // don't call the default implementation. Otherwise it will trigger the
@@ -620,9 +637,11 @@
         // focused view XXX has no id".
 
         // Save all the tabs
-        mTabControl.saveState(outState);
-        // Save time so that we know how old incognito tabs (if any) are.
-        outState.putSerializable("lastActiveDate", Calendar.getInstance());
+        mTabControl.saveState(outState, saveImages);
+        if (!outState.isEmpty()) {
+            // Save time so that we know how old incognito tabs (if any) are.
+            outState.putSerializable("lastActiveDate", Calendar.getInstance());
+        }
     }
 
     void onResume() {
@@ -640,8 +659,10 @@
             mHandler.removeMessages(RELEASE_WAKELOCK);
             mWakeLock.release();
         }
+
         mUi.onResume();
         mNetworkHandler.onResume();
+        mNfcHandler.onResume();
         WebView.enablePlatformNotifications();
     }
 
@@ -792,7 +813,8 @@
     public void onPageFinished(Tab tab) {
         mUi.onTabDataChanged(tab);
         if (!tab.isPrivateBrowsingEnabled()
-                && !TextUtils.isEmpty(tab.getUrl())) {
+                && !TextUtils.isEmpty(tab.getUrl())
+                && !tab.isSnapshot()) {
             if (tab.inForeground() && !didUserStopLoading()
                     || !tab.inForeground()) {
                 // Only update the bookmark screenshot if the user did not
@@ -810,6 +832,7 @@
                 mWakeLock.release();
             }
         }
+
         // Performance probe
         if (false) {
             Performance.onPageFinished(tab.getUrl());
@@ -911,6 +934,11 @@
         }
         mDataController.updateVisitedHistory(url);
         WebIconDatabase.getInstance().retainIconForPageUrl(url);
+        if (!mActivityPaused) {
+            // Since we clear the state in onPause, don't backup the current
+            // state if we are already paused
+            mCrashRecoveryHandler.backupState();
+        }
     }
 
     @Override
@@ -1056,22 +1084,28 @@
         mActivity.startActivity(intent);
     }
 
-    public void activateVoiceSearchMode(String title) {
-        mUi.showVoiceTitleBar(title);
+    @Override
+    public void activateVoiceSearchMode(String title, List<String> results) {
+        mUi.showVoiceTitleBar(title, results);
     }
 
     public void revertVoiceSearchMode(Tab tab) {
         mUi.revertVoiceTitleBar(tab);
     }
 
-    public void showCustomView(Tab tab, View view,
+    public boolean supportsVoiceSearch() {
+        SearchEngine searchEngine = getSettings().getSearchEngine();
+        return (searchEngine != null && searchEngine.supportsVoiceSearch());
+    }
+
+    public void showCustomView(Tab tab, View view, int requestedOrientation,
             WebChromeClient.CustomViewCallback callback) {
         if (tab.inForeground()) {
             if (mUi.isCustomViewShowing()) {
                 callback.onCustomViewHidden();
                 return;
             }
-            mUi.showCustomView(view, callback);
+            mUi.showCustomView(view, requestedOrientation, callback);
             // Save the menu state and set it to empty while the custom
             // view is showing.
             mOldMenuState = mMenuState;
@@ -1098,7 +1132,7 @@
             case PREFERENCES_PAGE:
                 if (resultCode == Activity.RESULT_OK && intent != null) {
                     String action = intent.getStringExtra(Intent.EXTRA_TEXT);
-                    if (BrowserSettings.PREF_CLEAR_HISTORY.equals(action)) {
+                    if (PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY.equals(action)) {
                         mTabControl.removeParentChildRelationShips();
                     }
                 }
@@ -1161,11 +1195,14 @@
         removeComboView();
         if (!TextUtils.isEmpty(url)) {
             if (newTab) {
-                openTab(mTabControl.getCurrentTab(), url, false);
+                final Tab parent = mTabControl.getCurrentTab();
+                openTab(url,
+                        (parent != null) && parent.isPrivateBrowsingEnabled(),
+                        !mSettings.openInBackground(),
+                        true);
             } else {
                 final Tab currentTab = mTabControl.getCurrentTab();
-                dismissSubWindow(currentTab);
-                loadUrl(getCurrentTopWebView(), url);
+                loadUrl(currentTab, url);
             }
         }
     }
@@ -1216,6 +1253,10 @@
         }
     }
 
+    protected boolean onMenuKey() {
+        return mUi.onMenuKey();
+    }
+
     // menu handling and state
     // TODO: maybe put into separate handler
 
@@ -1335,8 +1376,7 @@
                 boolean showNewTab = mTabControl.canCreateNewTab();
                 MenuItem newTabItem
                         = menu.findItem(R.id.open_newtab_context_menu_id);
-                newTabItem.setTitle(
-                        BrowserSettings.getInstance().openInBackground()
+                newTabItem.setTitle(getSettings().openInBackground()
                         ? R.string.contextmenu_openlink_newwindow_background
                         : R.string.contextmenu_openlink_newwindow);
                 newTabItem.setVisible(showNewTab);
@@ -1363,11 +1403,9 @@
                                     @Override
                                     public boolean onMenuItemClick(MenuItem item) {
                                         final Tab parent = mTabControl.getCurrentTab();
-                                        final Tab newTab = openTab(parent,
-                                                extra, false);
-                                        if (newTab != parent) {
-                                            parent.addChildTab(newTab);
-                                        }
+                                        openTab(extra, parent,
+                                                !mSettings.openInBackground(),
+                                                true);
                                         return true;
                                     }
                                 });
@@ -1465,12 +1503,12 @@
                         PackageManager.MATCH_DEFAULT_ONLY);
                 menu.findItem(R.id.share_page_menu_id).setVisible(ri != null);
 
-                boolean isNavDump = mSettings.isNavDump();
+                boolean isNavDump = mSettings.enableNavDump();
                 final MenuItem nav = menu.findItem(R.id.dump_nav_menu_id);
                 nav.setVisible(isNavDump);
                 nav.setEnabled(isNavDump);
 
-                boolean showDebugSettings = mSettings.showDebugSettings();
+                boolean showDebugSettings = mSettings.isDebugEnabled();
                 final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
                 counter.setVisible(showDebugSettings);
                 counter.setEnabled(showDebugSettings);
@@ -1533,7 +1571,7 @@
                 break;
 
             case R.id.add_bookmark_menu_id:
-                bookmarkCurrentPage(AddBookmarkPage.DEFAULT_FOLDER_ID, false);
+                bookmarkCurrentPage(false);
                 break;
 
             case R.id.stop_reload_menu_id:
@@ -1563,10 +1601,7 @@
 
             case R.id.homepage_menu_id:
                 Tab current = mTabControl.getCurrentTab();
-                if (current != null) {
-                    dismissSubWindow(current);
-                    loadUrl(current.getWebView(), mSettings.getHomePage());
-                }
+                loadUrl(current, mSettings.getHomePage());
                 break;
 
             case R.id.preferences_menu_id:
@@ -1580,6 +1615,34 @@
                 getCurrentTopWebView().showFindDialog(null, true);
                 break;
 
+            case R.id.freeze_tab_menu_id:
+                // TODO: Show error messages
+                Tab source = getTabControl().getCurrentTab();
+                if (source == null) break;
+                final ContentResolver cr = mActivity.getContentResolver();
+                final ContentValues values = source.createSnapshotValues();
+                new AsyncTask<Tab, Void, Long>() {
+                    @Override
+                    protected Long doInBackground(Tab... params) {
+                        Tab t = params[0];
+                        if (values == null) {
+                            return t.isSnapshot()
+                                    ? ((SnapshotTab)t).getSnapshotId()
+                                    : -1;
+                        }
+                        Uri result = cr.insert(Snapshots.CONTENT_URI, values);
+                        long id = ContentUris.parseId(result);
+                        return id;
+                    }
+
+                    protected void onPostExecute(Long id) {
+                        if (id > 0) {
+                            createNewSnapshotTab(id, true);
+                        }
+                    };
+                }.execute(source);
+                break;
+
             case R.id.save_webarchive_menu_id:
                 String state = Environment.getExternalStorageState();
                 if (!Environment.MEDIA_MOUNTED.equals(state)) {
@@ -1683,7 +1746,7 @@
                             Tab desiredTab = mTabControl.getTab(id);
                             if (desiredTab != null &&
                                     desiredTab != mTabControl.getCurrentTab()) {
-                                switchToTab(id);
+                                switchToTab(desiredTab);
                             }
                             break;
                         }
@@ -1774,7 +1837,6 @@
                     // title bar once again.
                     mExtendedMenuOpen = false;
                     mUi.onExtendedMenuClosed(mInLoad);
-                    mUi.onOptionsMenuOpened();
                 }
             }
         } else {
@@ -1867,7 +1929,7 @@
      *          existing bookmark.
      */
     @Override
-    public void bookmarkCurrentPage(long folderId, boolean canBeAnEdit) {
+    public void bookmarkCurrentPage(boolean canBeAnEdit) {
         Intent i = new Intent(mActivity,
                 AddBookmarkPage.class);
         WebView w = getCurrentTopWebView();
@@ -1886,8 +1948,6 @@
                 createScreenshot(w, getDesiredThumbnailWidth(mActivity),
                 getDesiredThumbnailHeight(mActivity)));
         i.putExtra(BrowserContract.Bookmarks.FAVICON, w.getFavicon());
-        i.putExtra(BrowserContract.Bookmarks.PARENT,
-                folderId);
         if (canBeAnEdit) {
             i.putExtra(AddBookmarkPage.CHECK_FOR_DUPE, true);
         }
@@ -2101,9 +2161,23 @@
     protected void removeTab(Tab tab) {
         mUi.removeTab(tab);
         mTabControl.removeTab(tab);
+        mCrashRecoveryHandler.backupState();
+        if (tab.isSnapshot()) {
+            SnapshotTab st = (SnapshotTab) tab;
+            final Uri uri = ContentUris.withAppendedId(
+                    Snapshots.CONTENT_URI, st.getSnapshotId());
+            final ContentResolver cr = mActivity.getContentResolver();
+            new Thread() {
+                @Override
+                public void run() {
+                    cr.delete(uri, null, null);
+                }
+            }.start();
+        }
     }
 
-    protected void setActiveTab(Tab tab) {
+    @Override
+    public void setActiveTab(Tab tab) {
         // monkey protection against delayed start
         if (tab != null) {
             mTabControl.setCurrentTab(tab);
@@ -2116,15 +2190,15 @@
         Tab current = mTabControl.getCurrentTab();
         if (current != null
                 && current.getWebView().copyBackForwardList().getSize() == 0) {
-            Tab parent = current.getParentTab();
+            Tab parent = current.getParent();
             if (parent != null) {
-                switchToTab(mTabControl.getTabIndex(parent));
+                switchToTab(parent);
                 closeTab(current);
             }
         }
     }
 
-    protected void reuseTab(Tab appTab, String appId, UrlData urlData) {
+    protected void reuseTab(Tab appTab, UrlData urlData) {
         // Dismiss the subwindow if applicable.
         dismissSubWindow(appTab);
         // Since we might kill the WebView, remove it from the
@@ -2135,7 +2209,7 @@
         // TODO: analyze why the remove and add are necessary
         mUi.attachTab(appTab);
         if (mTabControl.getCurrentTab() != appTab) {
-            switchToTab(mTabControl.getTabIndex(appTab));
+            switchToTab(appTab);
             loadUrlDataIn(appTab, urlData);
         } else {
             // If the tab was the current tab, we have to attach
@@ -2169,89 +2243,96 @@
         }
     }
 
+    // open a non inconito tab with the given url data
+    // and set as active tab
+    public Tab openTab(UrlData urlData) {
+        Tab tab = createNewTab(false, true, true);
+        if ((tab != null) && !urlData.isEmpty()) {
+            loadUrlDataIn(tab, urlData);
+        }
+        return tab;
+    }
+
     @Override
     public Tab openTabToHomePage() {
-        // check for max tabs
-        if (mTabControl.canCreateNewTab()) {
-            return openTabAndShow(null, new UrlData(mSettings.getHomePage()),
-                    false, null);
-        } else {
-            mUi.showMaxTabsWarning();
-            return null;
-        }
-    }
-
-    protected Tab openTab(Tab parent, String url, boolean forceForeground) {
-        if (mSettings.openInBackground() && !forceForeground) {
-            Tab tab = mTabControl.createNewTab(false, null, null,
-                    (parent != null) && parent.isPrivateBrowsingEnabled());
-            if (tab != null) {
-                addTab(tab);
-                WebView view = tab.getWebView();
-                loadUrl(view, url);
-            }
-            return tab;
-        } else {
-            return openTabAndShow(parent, new UrlData(url), false, null);
-        }
-    }
-
-
-    // This method does a ton of stuff. It will attempt to create a new tab
-    // if we haven't reached MAX_TABS. Otherwise it uses the current tab. If
-    // url isn't null, it will load the given url.
-    public Tab openTabAndShow(Tab parent, final UrlData urlData,
-            boolean closeOnExit, String appId) {
-        final Tab currentTab = mTabControl.getCurrentTab();
-        if (mTabControl.canCreateNewTab()) {
-            final Tab tab = mTabControl.createNewTab(closeOnExit, appId,
-                    urlData.mUrl,
-                    (parent != null) && parent.isPrivateBrowsingEnabled());
-            WebView webview = tab.getWebView();
-            // We must set the new tab as the current tab to reflect the old
-            // animation behavior.
-            addTab(tab);
-            setActiveTab(tab);
-            if (!urlData.isEmpty()) {
-                loadUrlDataIn(tab, urlData);
-            }
-            return tab;
-        } else {
-            // Get rid of the subwindow if it exists
-            dismissSubWindow(currentTab);
-            reuseTab(currentTab, appId, urlData);
-            return currentTab;
-        }
+        return openTab(mSettings.getHomePage(), false, true, false);
     }
 
     @Override
     public Tab openIncognitoTab() {
-        if (mTabControl.canCreateNewTab()) {
-            Tab currentTab = mTabControl.getCurrentTab();
-            Tab tab = mTabControl.createNewTab(false, null,
-                    null, true);
-            addTab(tab);
-            setActiveTab(tab);
-            loadUrlDataIn(tab, new UrlData("browser:incognito"));
-            return tab;
-        } else {
-            mUi.showMaxTabsWarning();
-            return null;
+        return openTab(INCOGNITO_URI, true, true, false);
+    }
+
+    @Override
+    public Tab openTab(String url, boolean incognito, boolean setActive,
+            boolean useCurrent) {
+        return openTab(url, incognito, setActive, useCurrent, null);
+    }
+
+    @Override
+    public Tab openTab(String url, Tab parent, boolean setActive,
+            boolean useCurrent) {
+        return openTab(url, (parent != null) && parent.isPrivateBrowsingEnabled(),
+                setActive, useCurrent, parent);
+    }
+
+    public Tab openTab(String url, boolean incognito, boolean setActive,
+            boolean useCurrent, Tab parent) {
+        Tab tab = createNewTab(incognito, setActive, useCurrent);
+        if (tab != null) {
+            if (parent != null && parent != tab) {
+                parent.addChildTab(tab);
+            }
+            if (url != null) {
+                loadUrl(tab, url);
+            }
         }
+        return tab;
+    }
+
+    // this method will attempt to create a new tab
+    // incognito: private browsing tab
+    // setActive: ste tab as current tab
+    // useCurrent: if no new tab can be created, return current tab
+    private Tab createNewTab(boolean incognito, boolean setActive,
+            boolean useCurrent) {
+        Tab tab = null;
+        if (mTabControl.canCreateNewTab()) {
+            tab = mTabControl.createNewTab(incognito);
+            addTab(tab);
+            if (setActive) {
+                setActiveTab(tab);
+            }
+        } else {
+            if (useCurrent) {
+                tab = mTabControl.getCurrentTab();
+                reuseTab(tab, null);
+            } else {
+                mUi.showMaxTabsWarning();
+            }
+        }
+        return tab;
+    }
+
+    private SnapshotTab createNewSnapshotTab(long snapshotId, boolean setActive) {
+        SnapshotTab tab = mTabControl.createSnapshotTab(snapshotId);
+        addTab(tab);
+        if (setActive) {
+            setActiveTab(tab);
+        }
+        return tab;
     }
 
     /**
-     * @param index Index of the tab to change to, as defined by
-     *              mTabControl.getTabIndex(Tab t).
+     * @param tab the tab to switch to
      * @return boolean True if we successfully switched to a different tab.  If
      *                 the indexth tab is null, or if that tab is the same as
      *                 the current one, return false.
      */
     @Override
-    public boolean switchToTab(int index) {
+    public boolean switchToTab(Tab tab) {
         // hide combo view if open
         removeComboView();
-        Tab tab = mTabControl.getTab(index);
         Tab currentTab = mTabControl.getCurrentTab();
         if (tab == null || tab == currentTab) {
             return false;
@@ -2264,25 +2345,20 @@
     public void closeCurrentTab() {
         // hide combo view if open
         removeComboView();
-        final Tab current = mTabControl.getCurrentTab();
         if (mTabControl.getTabCount() == 1) {
             mActivity.finish();
             return;
         }
-        final Tab parent = current.getParentTab();
-        int indexToShow = -1;
-        if (parent != null) {
-            indexToShow = mTabControl.getTabIndex(parent);
-        } else {
-            final int currentIndex = mTabControl.getCurrentIndex();
-            // Try to move to the tab to the right
-            indexToShow = currentIndex + 1;
-            if (indexToShow > mTabControl.getTabCount() - 1) {
-                // Try to move to the tab to the left
-                indexToShow = currentIndex - 1;
+        final Tab current = mTabControl.getCurrentTab();
+        final int pos = mTabControl.getCurrentPosition();
+        Tab newTab = current.getParent();
+        if (newTab == null) {
+            newTab = mTabControl.getTab(pos + 1);
+            if (newTab == null) {
+                newTab = mTabControl.getTab(pos - 1);
             }
         }
-        if (switchToTab(indexToShow)) {
+        if (switchToTab(newTab)) {
             // Close window
             closeTab(current);
         }
@@ -2296,22 +2372,18 @@
     public void closeTab(Tab tab) {
         // hide combo view if open
         removeComboView();
-        int currentIndex = mTabControl.getCurrentIndex();
-        int removeIndex = mTabControl.getTabIndex(tab);
-        Tab newtab = mTabControl.getTab(currentIndex);
-        setActiveTab(newtab);
         removeTab(tab);
     }
 
-    /**************** TODO: Url loading clean up *******************************/
-
     // Called when loading from context menu or LOAD_URL message
-    protected void loadUrlFromContext(WebView view, String url) {
+    protected void loadUrlFromContext(String url) {
+        Tab tab = getCurrentTab();
+        WebView view = tab != null ? tab.getWebView() : null;
         // In case the user enters nothing.
-        if (url != null && url.length() != 0 && view != null) {
+        if (url != null && url.length() != 0 && tab != null && view != null) {
             url = UrlUtils.smartUrlFilter(url);
             if (!view.getWebViewClient().shouldOverrideUrlLoading(view, url)) {
-                loadUrl(view, url);
+                loadUrl(tab, url);
             }
         }
     }
@@ -2323,8 +2395,15 @@
      * @param view The WebView used to load url.
      * @param url The URL to load.
      */
-    protected void loadUrl(WebView view, String url) {
-        view.loadUrl(url);
+    protected void loadUrl(Tab tab, String url) {
+        loadUrl(tab, url, null);
+    }
+
+    protected void loadUrl(Tab tab, String url, Map<String, String> headers) {
+        if (tab != null) {
+            dismissSubWindow(tab);
+            tab.loadUrl(url, headers);
+        }
     }
 
     /**
@@ -2334,7 +2413,13 @@
      * @param data The UrlData being loaded.
      */
     protected void loadUrlDataIn(Tab t, UrlData data) {
-        data.loadIn(t);
+        if (data != null) {
+            if (data.mVoiceIntent != null) {
+                t.activateVoiceSearchMode(data.mVoiceIntent);
+            } else {
+                loadUrl(t, data.mUrl, data.mHeaders);
+            }
+        }
     }
 
     @Override
@@ -2367,18 +2452,12 @@
         } else {
             // Check to see if we are closing a window that was created by
             // another window. If so, we switch back to that window.
-            Tab parent = current.getParentTab();
+            Tab parent = current.getParent();
             if (parent != null) {
-                switchToTab(mTabControl.getTabIndex(parent));
+                switchToTab(parent);
                 // Now we close the other tab
                 closeTab(current);
             } else {
-                if (current.closeOnExit()) {
-                    // This will finish the activity if there is only one tab
-                    // open or it will switch to the next available tab if
-                    // available.
-                    closeCurrentTab();
-                }
                 /*
                  * Instead of finishing the activity, simply push this to the back
                  * of the stack and let ActivityManager to choose the foreground
@@ -2411,12 +2490,6 @@
         startSearch(result, false, bundle, false);
     }
 
-    @Override
-    public void startSearch(String url) {
-        startSearch(mSettings.getHomePage().equals(url) ? null : url, true,
-                null, false);
-    }
-
     private void startSearch(String initialQuery, boolean selectInitialQuery,
             Bundle appSearchData, boolean globalSearch) {
         if (appSearchData == null) {
@@ -2438,21 +2511,22 @@
         return bundle;
     }
 
-   /**
+    /**
      * helper method for key handler
      * returns the current tab if it can't advance
      */
-    private int getNextTabIndex() {
-        return Math.min(mTabControl.getTabCount() - 1,
-                mTabControl.getCurrentIndex() + 1);
+    private Tab getNextTab() {
+        return mTabControl.getTab(Math.min(mTabControl.getTabCount() - 1,
+                mTabControl.getCurrentPosition() + 1));
     }
 
     /**
      * helper method for key handler
      * returns the current tab if it can't advance
      */
-    private int getPrevTabIndex() {
-        return  Math.max(0, mTabControl.getCurrentIndex() - 1);
+    private Tab getPrevTab() {
+        return  mTabControl.getTab(Math.max(0,
+                mTabControl.getCurrentPosition() - 1));
     }
 
     /**
@@ -2464,9 +2538,16 @@
      */
     boolean onKeyDown(int keyCode, KeyEvent event) {
         boolean noModifiers = event.hasNoModifiers();
-
         // Even if MENU is already held down, we need to call to super to open
         // the IME on long press.
+        if (KeyEvent.KEYCODE_MENU == keyCode) {
+            if (mOptionsMenuHandler != null) {
+                return false;
+            } else {
+                event.startTracking();
+                return true;
+            }
+        }
         if (!noModifiers
                 && ((KeyEvent.KEYCODE_MENU == keyCode)
                         || (KeyEvent.KEYCODE_CTRL_LEFT == keyCode)
@@ -2486,10 +2567,10 @@
                 if (event.isCtrlPressed()) {
                     if (event.isShiftPressed()) {
                         // prev tab
-                        switchToTab(getPrevTabIndex());
+                        switchToTab(getPrevTab());
                     } else {
                         // next tab
-                        switchToTab(getNextTabIndex());
+                        switchToTab(getNextTab());
                     }
                     return true;
                 }
@@ -2590,11 +2671,14 @@
     }
 
     boolean onKeyUp(int keyCode, KeyEvent event) {
+        if (KeyEvent.KEYCODE_MENU == keyCode) {
+            mMenuIsDown = false;
+            if (event.isTracking() && !event.isCanceled()) {
+                return onMenuKey();
+            }
+        }
         if (!event.hasNoModifiers()) return false;
         switch(keyCode) {
-            case KeyEvent.KEYCODE_MENU:
-                mMenuIsDown = false;
-                break;
             case KeyEvent.KEYCODE_BACK:
                 if (event.isTracking() && !event.isCanceled()) {
                     onBackKey();
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
new file mode 100644
index 0000000..6d8d921
--- /dev/null
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnCancelListener;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Parcel;
+import android.os.Process;
+import android.util.Log;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+
+public class CrashRecoveryHandler {
+
+    private static final String LOGTAG = "BrowserCrashRecovery";
+    private static final String STATE_FILE = "browser_state.parcel";
+    private static final int BUFFER_SIZE = 4096;
+    private static final long BACKUP_DELAY = 500; // 500ms between writes
+
+    private static CrashRecoveryHandler sInstance;
+
+    private Controller mController;
+    private Handler mForegroundHandler;
+    private Handler mBackgroundHandler;
+
+    public static CrashRecoveryHandler initialize(Controller controller) {
+        if (sInstance == null) {
+            sInstance = new CrashRecoveryHandler(controller);
+        } else {
+            sInstance.mController = controller;
+        }
+        return sInstance;
+    }
+
+    public static CrashRecoveryHandler getInstance() {
+        return sInstance;
+    }
+
+    private CrashRecoveryHandler(Controller controller) {
+        mController = controller;
+        mForegroundHandler = new Handler();
+        HandlerThread thread = new HandlerThread(LOGTAG,
+                Process.THREAD_PRIORITY_BACKGROUND);
+        thread.start();
+        mBackgroundHandler = new Handler(thread.getLooper());
+    }
+
+    public void backupState() {
+        mForegroundHandler.postDelayed(mCreateState, BACKUP_DELAY);
+    }
+
+    private Runnable mCreateState = new Runnable() {
+
+        @Override
+        public void run() {
+            try {
+                final Bundle state = new Bundle();
+                mController.onSaveInstanceState(state, false);
+                Context context = mController.getActivity()
+                        .getApplicationContext();
+                mBackgroundHandler.post(new WriteState(context, state));
+                // Remove any queued up saves
+                mForegroundHandler.removeCallbacks(mCreateState);
+            } catch (Throwable t) {
+                Log.w(LOGTAG, "Failed to save state", t);
+                return;
+            }
+        }
+
+    };
+
+    static class WriteState implements Runnable {
+        private Context mContext;
+        private Bundle mState;
+
+        WriteState(Context context, Bundle state) {
+            mContext = context;
+            mState = state;
+        }
+
+        @Override
+        public void run() {
+            if (mState.isEmpty()) {
+                clearState(mContext);
+                return;
+            }
+            Parcel p = Parcel.obtain();
+            try {
+                mState.writeToParcel(p, 0);
+                FileOutputStream fout = mContext.openFileOutput(STATE_FILE,
+                        Context.MODE_PRIVATE);
+                fout.write(p.marshall());
+                fout.close();
+            } catch (Throwable e) {
+                Log.i(LOGTAG, "Failed to save persistent state", e);
+            } finally {
+                p.recycle();
+            }
+        }
+
+    }
+
+    private static void clearState(Context context) {
+        context.deleteFile(STATE_FILE);
+    }
+
+    public void promptToRecover(final Bundle state, final Intent intent) {
+        new AlertDialog.Builder(mController.getActivity())
+                .setTitle(R.string.recover_title)
+                .setMessage(R.string.recover_prompt)
+                .setIcon(R.mipmap.ic_launcher_browser)
+                .setPositiveButton(R.string.recover_yes, new OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        mController.doStart(state, intent);
+                    }
+                })
+                .setNegativeButton(R.string.recover_no, new OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.cancel();
+                    }
+                })
+                .setOnCancelListener(new OnCancelListener() {
+                    @Override
+                    public void onCancel(DialogInterface dialog) {
+                        clearState(mController.getActivity());
+                        mController.doStart(null, intent);
+                    }
+                })
+                .show();
+    }
+
+    public void startRecovery(Intent intent) {
+        Parcel parcel = Parcel.obtain();
+        try {
+            Context context = mController.getActivity();
+            FileInputStream fin = context.openFileInput(STATE_FILE);
+            ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
+            byte[] buffer = new byte[BUFFER_SIZE];
+            int read;
+            while ((read = fin.read(buffer)) > 0) {
+                dataStream.write(buffer, 0, read);
+            }
+            byte[] data = dataStream.toByteArray();
+            parcel.unmarshall(data, 0, data.length);
+            parcel.setDataPosition(0);
+            Bundle state = parcel.readBundle();
+            promptToRecover(state, intent);
+        } catch (FileNotFoundException e) {
+            // No state to recover
+            mController.doStart(null, intent);
+        } catch (Exception e) {
+            Log.w(LOGTAG, "Failed to recover state!", e);
+            mController.doStart(null, intent);
+        } finally {
+            parcel.recycle();
+        }
+    }
+}
diff --git a/src/com/android/browser/InstantSearchEngine.java b/src/com/android/browser/InstantSearchEngine.java
index 85e494a..e2e9c8a 100644
--- a/src/com/android/browser/InstantSearchEngine.java
+++ b/src/com/android/browser/InstantSearchEngine.java
@@ -18,6 +18,7 @@
 import com.android.browser.Controller;
 import com.android.browser.R;
 import com.android.browser.UI.DropdownChangeListener;
+import com.android.browser.provider.BrowserProvider;
 import com.android.browser.search.SearchEngine;
 
 import android.app.SearchManager;
@@ -174,7 +175,12 @@
      * visible tab.
      */
     private void switchSearchboxIfNeeded() {
-        final SearchBox searchBox = getCurrentWebview().getSearchBox();
+        final WebView current = getCurrentWebview();
+        if (current == null) {
+            return;
+        }
+
+        final SearchBox searchBox = current.getSearchBox();
         if (searchBox != mSearchBox) {
             if (mSearchBox != null) {
                 mSearchBox.removeSearchBoxListener(mListener);
@@ -188,7 +194,12 @@
     }
 
     private boolean isInstantPage() {
-        String currentUrl = getCurrentWebview().getUrl();
+        final WebView current = getCurrentWebview();
+        if (current == null) {
+            return false;
+        }
+
+        final String currentUrl = current.getUrl();
 
         if (currentUrl != null) {
             Uri uri = Uri.parse(currentUrl);
@@ -210,7 +221,10 @@
         mController.getActivity().runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getCurrentWebview().loadUrl(getInstantBaseUrl());
+                final WebView current = getCurrentWebview();
+                if (current != null) {
+                    current.loadUrl(getInstantBaseUrl());
+                }
             }
         });
     }
@@ -292,7 +306,12 @@
     }
 
     private int rescaleHeight(int height) {
-        final float scale = getCurrentWebview().getScale();
+        final WebView current = getCurrentWebview();
+        if (current == null) {
+            return 0;
+        }
+
+        final float scale = current.getScale();
         if (scale != 0) {
             return (int) (height / scale);
         }
@@ -306,8 +325,10 @@
 
         if (rescaledHeight != mHeight) {
             mHeight = rescaledHeight;
-            mSearchBox.setDimensions(0, 0, 0, rescaledHeight);
-            mSearchBox.onresize();
+            if (mSearchBox != null) {
+                mSearchBox.setDimensions(0, 0, 0, rescaledHeight);
+                mSearchBox.onresize();
+            }
         }
     }
 
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index e0486e6..54711d9 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -27,6 +27,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.nfc.NfcAdapter;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.provider.Browser;
@@ -95,6 +96,7 @@
         boolean activateVoiceSearch = RecognizerResultsIntent
                 .ACTION_VOICE_SEARCH_RESULTS.equals(action);
         if (Intent.ACTION_VIEW.equals(action)
+                || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)
                 || Intent.ACTION_SEARCH.equals(action)
                 || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                 || Intent.ACTION_WEB_SEARCH.equals(action)
@@ -134,7 +136,7 @@
             }
 
             if (intent.getBooleanExtra(Browser.EXTRA_CREATE_NEW_TAB, false)) {
-                mController.openTabAndShow(mTabControl.getCurrentTab(), urlData, false, null);
+                mController.openTab(urlData);
                 return;
             }
             final String appId = intent
@@ -142,7 +144,7 @@
             if (!TextUtils.isEmpty(urlData.mUrl) &&
                     urlData.mUrl.startsWith("javascript:")) {
                 // Always open javascript: URIs in new tabs
-                mController.openTabAndShow(null, urlData, true, appId);
+                mController.openTab(urlData);
                 return;
             }
             if ((Intent.ACTION_VIEW.equals(action)
@@ -152,12 +154,15 @@
                     && !mActivity.getPackageName().equals(appId)
                     && (flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
                 if (activateVoiceSearch) {
-                    Tab appTab = mTabControl.getTabFromId(appId);
+                    Tab appTab = mTabControl.getTabFromAppId(appId);
                     if (appTab != null) {
-                        mController.reuseTab(appTab, appId, urlData);
+                        mController.reuseTab(appTab, urlData);
                         return;
                     } else {
-                        mController.openTabAndShow(null, urlData, false, appId);
+                        Tab tab = mController.openTab(urlData);
+                        if (tab != null) {
+                            tab.setAppId(appId);
+                        }
                     }
                 } else {
                     // No matching application tab, try to find a regular tab
@@ -165,7 +170,7 @@
                     Tab appTab = mTabControl.findUnusedTabWithUrl(urlData.mUrl);
                     if (appTab != null) {
                         if (current != appTab) {
-                            mController.switchToTab(mTabControl.getTabIndex(appTab));
+                            mController.switchToTab(appTab);
                         }
                         // Otherwise, we are already viewing the correct tab.
                     } else {
@@ -174,7 +179,10 @@
                         // MAX_TABS. Then the url will be opened in the current
                         // tab. If a new tab is created, it will have "true" for
                         // exit on close.
-                        mController.openTabAndShow(null, urlData, false, appId);
+                        Tab tab = mController.openTab(urlData);
+                        if (tab != null) {
+                            tab.setAppId(appId);
+                        }
                     }
                 }
             } else {
@@ -193,7 +201,7 @@
                     } else if ("about:debug.nav".equals(urlData.mUrl)) {
                         current.getWebView().debugDump();
                     } else {
-                        mSettings.toggleDebugSettings(mActivity);
+                        mSettings.toggleDebugSettings();
                     }
                     return;
                 }
@@ -214,7 +222,8 @@
         if (intent != null
                 && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
             final String action = intent.getAction();
-            if (Intent.ACTION_VIEW.equals(action)) {
+            if (Intent.ACTION_VIEW.equals(action) ||
+                    NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
                 url = UrlUtils.smartUrlFilter(intent.getData());
                 if (url != null && url.startsWith("http")) {
                     final Bundle pairs = intent
@@ -227,17 +236,6 @@
                             headers.put(key, pairs.getString(key));
                         }
                     }
-
-                    // AppId will be set to the Browser for Search Bar initiated searches
-                    final String appId = intent.getStringExtra(Browser.EXTRA_APPLICATION_ID);
-                    if (mActivity.getPackageName().equals(appId)) {
-                        String rlz = mSettings.getRlzValue();
-                        Uri uri = Uri.parse(url);
-                        if (!rlz.isEmpty() && needsRlz(uri)) {
-                            Uri rlzUri = addRlzParameter(uri, rlz);
-                            url = rlzUri.toString();
-                        }
-                    }
                 }
             } else if (Intent.ACTION_SEARCH.equals(action)
                     || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
@@ -367,33 +365,6 @@
         boolean isEmpty() {
             return mVoiceIntent == null && (mUrl == null || mUrl.length() == 0);
         }
-
-        /**
-         * Load this UrlData into the given Tab.  Use loadUrlDataIn to update
-         * the title bar as well.
-         */
-        public void loadIn(Tab t) {
-            if (mVoiceIntent != null) {
-                t.activateVoiceSearchMode(mVoiceIntent);
-            } else {
-                t.getWebView().loadUrl(mUrl, mHeaders);
-            }
-        }
     }
 
-    private static boolean needsRlz(Uri uri) {
-        if ((uri.getQueryParameter("rlz") == null) &&
-            (uri.getQueryParameter("q") != null) &&
-            UrlUtils.isGoogleUri(uri)) {
-            return true;
-        }
-        return false;
-    }
-
-    private static Uri addRlzParameter(Uri uri, String rlz) {
-        if (rlz.isEmpty()) {
-            return uri;
-        }
-        return uri.buildUpon().appendQueryParameter("rlz", rlz).build();
-    }
 }
diff --git a/src/com/android/browser/KeyChainLookup.java b/src/com/android/browser/KeyChainLookup.java
new file mode 100644
index 0000000..52be25a
--- /dev/null
+++ b/src/com/android/browser/KeyChainLookup.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 201 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.browser;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.security.KeyChain;
+import android.security.KeyChainException;
+import android.webkit.ClientCertRequestHandler;
+import java.security.PrivateKey;
+import java.security.cert.X509Certificate;
+
+final class KeyChainLookup extends AsyncTask<Void, Void, Void> {
+    private final Context mContext;
+    private final ClientCertRequestHandler mHandler;
+    private final String mAlias;
+    KeyChainLookup(Context context, ClientCertRequestHandler handler, String alias) {
+        mContext = context;
+        mHandler = handler;
+        mAlias = alias;
+    }
+    @Override protected Void doInBackground(Void... params) {
+        PrivateKey privateKey;
+        X509Certificate[] certificateChain;
+        try {
+            privateKey = KeyChain.getPrivateKey(mContext, mAlias);
+            certificateChain = KeyChain.getCertificateChain(mContext, mAlias);
+        } catch (InterruptedException e) {
+            mHandler.ignore();
+            return null;
+        } catch (KeyChainException e) {
+            mHandler.ignore();
+            return null;
+        }
+        mHandler.proceed(privateKey, certificateChain);
+        return null;
+    }
+}
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
new file mode 100644
index 0000000..a841989
--- /dev/null
+++ b/src/com/android/browser/NavScreen.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.webkit.WebView;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.Gallery;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListPopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.android.browser.view.Gallery.OnItemSelectedListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class NavScreen extends RelativeLayout implements OnClickListener {
+
+    UiController mUiController;
+    PhoneUi mUi;
+    Tab mTab;
+    Activity mActivity;
+
+    ImageButton mRefresh;
+    ImageButton mForward;
+    ImageButton mBookmarks;
+    ImageButton mMore;
+    ImageButton mNewTab;
+    ImageButton mNewIncognito;
+    FrameLayout mHolder;
+
+    TextView mTitle;
+    ImageView mFavicon;
+    ImageButton mCloseTab;
+
+    NavTabGallery mScroller;
+    float mTabAspect = 0.66f;
+    int mTabWidth;
+    int mTabHeight;
+    TabAdapter mAdapter;
+    ListPopupWindow mPopup;
+    int mOrientation;
+
+    public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
+        super(activity);
+        mActivity = activity;
+        mUiController = ctl;
+        mUi = ui;
+        mOrientation = activity.getResources().getConfiguration().orientation;
+        init();
+    }
+
+    protected Tab getSelectedTab() {
+        return (Tab) mScroller.getSelectedItem();
+    }
+
+    protected void showMenu() {
+        Menu menu = mUi.getMenu();
+        menu.setGroupVisible(R.id.NAV_MENU, false);
+
+        MenuAdapter menuAdapter = new MenuAdapter(mContext);
+        menuAdapter.setMenu(menu);
+        ListPopupWindow popup = new ListPopupWindow(mContext);
+        popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+        popup.setAdapter(menuAdapter);
+        popup.setModal(true);
+        popup.setAnchorView(mMore);
+        popup.setWidth((int) mContext.getResources().getDimension(
+                R.dimen.menu_width));
+        popup.show();
+        mPopup = popup;
+    }
+
+    protected float getToolbarHeight() {
+        return mActivity.getResources().getDimension(R.dimen.toolbar_height);
+    }
+
+    protected void dismissMenu() {
+        if (mPopup != null) {
+            mPopup.dismiss();
+        }
+    }
+
+    // for configuration changes
+    @Override
+    protected void onConfigurationChanged(Configuration newconfig) {
+        if (newconfig.orientation != mOrientation) {
+            int selIx = mScroller.getSelectionIndex();
+            removeAllViews();
+            mOrientation = newconfig.orientation;
+            init();
+            mScroller.setSelection(selIx);
+            mAdapter.notifyDataSetChanged();
+        }
+    }
+
+    private void init() {
+        LayoutInflater.from(mContext).inflate(R.layout.nav_screen, this);
+        mBookmarks = (ImageButton) findViewById(R.id.bookmarks);
+        mNewTab = (ImageButton) findViewById(R.id.newtab);
+        mNewIncognito = (ImageButton) findViewById(R.id.newincognito);
+        mMore = (ImageButton) findViewById(R.id.more);
+        mBookmarks.setOnClickListener(this);
+        mNewTab.setOnClickListener(this);
+        mNewIncognito.setOnClickListener(this);
+        mMore.setOnClickListener(this);
+        mScroller = (NavTabGallery) findViewById(R.id.scroller);
+        mAdapter = new TabAdapter(mContext, mUiController.getTabControl());
+        mScroller.setAdapter(mAdapter);
+        mScroller.setOrientation(mOrientation == Configuration.ORIENTATION_LANDSCAPE
+                ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
+        // update state for active tab
+        mScroller.setSelection(mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
+    }
+
+    @Override
+    public void onClick(View v) {
+        WebView web = (mTab != null) ? mTab.getWebView() : null;
+        if (web != null) {
+            if (mForward == v) {
+                mUi.hideNavScreen(true);
+                web.goForward();
+            } else if (mRefresh == v) {
+                mUi.hideNavScreen(true);
+                web.reload();
+            }
+        }
+        if (mBookmarks == v) {
+            mUi.hideNavScreen(false);
+            switchToSelected();
+            mUiController.bookmarksOrHistoryPicker(false);
+        } else if (mNewTab == v) {
+            openNewTab();
+        } else if (mMore == v) {
+            showMenu();
+        } else if (mNewIncognito == v) {
+            mUi.hideNavScreen(true);
+            mUiController.openIncognitoTab();
+        } else if (mTitle == v) {
+            mUi.getTitleBar().setSkipTitleBarAnimations(true);
+            close(false);
+            mUi.editUrl(false);
+            mUi.getTitleBar().setSkipTitleBarAnimations(false);
+        }
+    }
+
+    private void onCloseTab(Tab tab) {
+        if (tab != null) {
+            switchToSelected();
+            mUiController.closeCurrentTab();
+            mAdapter.notifyDataSetChanged();
+        }
+    }
+
+    private void openNewTab() {
+        // need to call openTab explicitely with setactive false
+        Tab tab = mUiController.openTab(BrowserSettings.getInstance().getHomePage(),
+                false, false, false);
+        mAdapter.notifyDataSetChanged();
+        if (tab != null) {
+            // set tab as the selected in flipper, then hide
+            final int tix = mUi.mTabControl.getTabPosition(tab);
+            mScroller.setSelection(tix);
+            postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    mUi.hideNavScreen(true);
+                    switchToSelected();
+                }
+            }, 100);
+        }
+    }
+
+    private void switchToSelected() {
+        Tab tab = (Tab) mScroller.getSelectedItem();
+        if (tab != mUi.getActiveTab()) {
+            mUiController.setActiveTab(tab);
+        }
+    }
+
+    protected void close() {
+        close(true);
+    }
+
+    protected void close(boolean animate) {
+        mUi.hideNavScreen(animate);
+    }
+
+    class TabGallery extends Gallery {
+
+        public TabGallery(Context ctx) {
+            super(ctx);
+            setUnselectedAlpha(0.3f);
+        }
+
+       @Override
+       protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
+           return new Gallery.LayoutParams(mTabWidth, mTabHeight);
+       }
+
+       @Override
+       protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
+           return generateDefaultLayoutParams();
+       }
+
+    }
+
+    class TabAdapter extends BaseAdapter {
+
+        Context context;
+        TabControl tabControl;
+
+        public TabAdapter(Context ctx, TabControl tc) {
+            context = ctx;
+            tabControl = tc;
+        }
+
+        @Override
+        public int getCount() {
+            return tabControl.getTabCount();
+        }
+
+        @Override
+        public Tab getItem(int position) {
+            return tabControl.getTab(position);
+        }
+
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(final int position, View convertView, ViewGroup parent) {
+            final NavTabView tabview = new NavTabView(mActivity);
+            final Tab tab = getItem(position);
+            final BrowserWebView web = (BrowserWebView) tab.getWebView();
+            tabview.setWebView(mUi, tab);
+            tabview.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (tabview.isClose(v)) {
+                        onCloseTab((Tab) (mScroller.getSelectedItem()));
+                    } else if (tabview.isTitle(v)) {
+                        mUi.getTitleBar().setSkipTitleBarAnimations(true);
+                        close(false);
+                        mUi.editUrl(false);
+                        mUi.getTitleBar().setSkipTitleBarAnimations(false);
+                    } else if (tabview.isWebView(v)) {
+                        mScroller.setSelection(position);
+                        close();
+
+                    }
+                }
+            });
+            return tabview;
+        }
+
+    }
+
+    private class MenuAdapter extends BaseAdapter implements OnClickListener {
+
+        List<MenuItem> mItems;
+        LayoutInflater mInflater;
+
+        public MenuAdapter(Context ctx) {
+            mInflater = LayoutInflater.from(ctx);
+            mItems = new ArrayList<MenuItem>();
+        }
+
+        public void setMenu(Menu menu) {
+            mItems.clear();
+            for (int i = 0; i < menu.size(); i++) {
+                MenuItem item = menu.getItem(i);
+                if (item.isEnabled() && item.isVisible()) {
+                    mItems.add(item);
+                }
+            }
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public int getCount() {
+            return mItems.size();
+        }
+
+        @Override
+        public MenuItem getItem(int position) {
+            return mItems.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public void onClick(View v) {
+            if (v.getTag() != null) {
+                dismissMenu();
+                mActivity.closeOptionsMenu();
+                mUi.hideNavScreen(false);
+                mUiController.onOptionsItemSelected((MenuItem) v.getTag());
+            }
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final MenuItem item = mItems.get(position);
+            View view = mInflater.inflate(R.layout.qc_menu_item, null);
+            TextView label = (TextView) view.findViewById(R.id.title);
+            label.setText(item.getTitle());
+            label.setTag(item);
+            label.setOnClickListener(this);
+            return label;
+        }
+
+    }
+
+
+}
diff --git a/src/com/android/browser/NavTabGallery.java b/src/com/android/browser/NavTabGallery.java
new file mode 100644
index 0000000..3014eaf
--- /dev/null
+++ b/src/com/android/browser/NavTabGallery.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.browser.view.Gallery;
+
+/**
+ * custom view for displaying tabs in the nav screen
+ */
+public class NavTabGallery extends Gallery {
+
+    public NavTabGallery(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public NavTabGallery(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public NavTabGallery(Context context) {
+        super(context);
+    }
+
+    protected void setSelection(int ix) {
+        super.setSelectedPositionInt(ix);
+    }
+
+    protected int getSelectionIndex() {
+        return getSelectedItemPosition();
+    }
+
+    protected Tab getSelectedItem() {
+        return (Tab) mAdapter.getItem(getSelectedItemPosition());
+    }
+
+    View getSelectedTab() {
+        return getSelectedView();
+    }
+
+}
diff --git a/src/com/android/browser/NavTabView.java b/src/com/android/browser/NavTabView.java
new file mode 100644
index 0000000..7b547b8
--- /dev/null
+++ b/src/com/android/browser/NavTabView.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class NavTabView extends LinearLayout {
+
+    private Tab mTab;
+    private BrowserWebView mWebView;
+    private WebProxyView mProxy;
+    private ImageView mClose;
+    private FrameLayout mContainer;
+    private TextView mTitle;
+    private View mTitleBar;
+    private OnClickListener mClickListener;
+    private boolean mHighlighted;
+
+    public NavTabView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init();
+    }
+
+    public NavTabView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public NavTabView(Context context) {
+        super(context);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(mContext).inflate(R.layout.nav_tab_view, this);
+        mContainer = (FrameLayout) findViewById(R.id.tab_view);
+        mClose = (ImageView) findViewById(R.id.closetab);
+        mTitle = (TextView) findViewById(R.id.title);
+        mTitleBar = findViewById(R.id.titlebar);
+    }
+
+    protected boolean isClose(View v) {
+        return v == mClose;
+    }
+
+    protected boolean isTitle(View v) {
+        return v == mTitleBar;
+    }
+
+    protected boolean isWebView(View v) {
+        return v == mProxy;
+    }
+
+    protected void setHighlighted(boolean highlighted) {
+        if (highlighted == mHighlighted) return;
+        mHighlighted = highlighted;
+    }
+
+    private void setTitle() {
+        if (mTab == null) return;
+        if (mHighlighted) {
+            mTitle.setText(mTab.getUrl());
+        } else {
+            String txt = mTab.getTitle();
+            if (txt == null) {
+                txt = mTab.getUrl();
+            }
+            mTitle.setText(txt);
+        }
+    }
+
+    protected boolean isHighlighted() {
+        return mHighlighted;
+    }
+
+    protected void setWebView(PhoneUi ui, Tab tab) {
+        mTab = tab;
+        setTitle();
+        BrowserWebView web = (BrowserWebView) tab.getWebView();
+        if (web != null) {
+            mWebView = web;
+            removeFromParent(mWebView);
+            mProxy = new WebProxyView(mContext, mWebView);
+            mContainer.addView(mProxy, 0);
+        }
+    }
+
+    protected void hideTitle() {
+        mTitleBar.setVisibility(View.INVISIBLE);
+    }
+
+    @Override
+    public void setOnClickListener(OnClickListener listener) {
+        mClickListener = listener;
+        mTitleBar.setOnClickListener(mClickListener);
+        mClose.setOnClickListener(mClickListener);
+        if (mProxy != null) {
+            mProxy.setOnClickListener(mClickListener);
+        }
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+        if (mWebView != null) {
+            mWebView.setProxyView(null);
+        }
+    }
+
+    @Override
+    public void onAttachedToWindow() {
+        if (mWebView != null) {
+            mWebView.invalidate();
+        }
+    }
+
+    private static void removeFromParent(View v) {
+        if (v.getParent() != null) {
+            ((ViewGroup) v.getParent()).removeView(v);
+        }
+    }
+
+    static class WebProxyView extends View {
+
+        private BrowserWebView mWeb;
+
+        public WebProxyView(Context context, BrowserWebView web) {
+            super(context);
+            setWillNotDraw(false);
+            mWeb = web;
+            mWeb.setProxyView(this);
+
+        }
+
+        public void onDraw(Canvas c) {
+            float scale = 0.7f;
+            int sx = mWeb.getScrollX();
+            int sy = mWeb.getScrollY();
+            c.scale(scale, scale);
+            c.translate(-sx, -sy);
+            mWeb.onDraw(c);
+        }
+
+    }
+
+}
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
new file mode 100644
index 0000000..bdfe25e
--- /dev/null
+++ b/src/com/android/browser/NfcHandler.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+
+/** This class implements sharing the URL of the currently
+  * shown browser page over NFC. Sharing is only active
+  * when the activity is in the foreground and resumed.
+  * Incognito tabs will not be shared over NFC.
+  */
+public class NfcHandler implements NfcAdapter.NdefPushCallback {
+    private NfcAdapter mNfcAdapter;
+    private Activity mActivity;
+    private Controller mController;
+
+    public NfcHandler(Activity browser, Controller controller) {
+        mActivity = browser;
+        mController = controller;
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity);
+    }
+
+    void onPause() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.disableForegroundNdefPush(mActivity);
+        }
+    }
+
+    void onResume() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.enableForegroundNdefPush(mActivity, this);
+        }
+    }
+
+    @Override
+    public NdefMessage createMessage() {
+        Tab currentTab = mController.getCurrentTab();
+        if (currentTab == null) {
+            return null;
+        }
+        String currentUrl = currentTab.getUrl();
+        if (currentUrl != null && currentTab.getWebView() != null &&
+                    !currentTab.getWebView().isPrivateBrowsingEnabled()) {
+            NdefRecord record = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI,
+                    NdefRecord.RTD_URI, new byte[] {}, currentUrl.getBytes());
+            NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
+            return msg;
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public void onMessagePushed() {
+    }
+}
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index f1939e4..d0b0f77 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -17,17 +17,15 @@
 package com.android.browser;
 
 import android.app.Activity;
-import android.content.Context;
-import android.graphics.PixelFormat;
+import android.os.Bundle;
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
-import android.view.MotionEvent;
 import android.view.View;
-import android.view.WindowManager;
 import android.webkit.WebView;
+import android.widget.FrameLayout;
 
 /**
  * Ui for regular phone screen sizes
@@ -36,12 +34,15 @@
 
     private static final String LOGTAG = "PhoneUi";
 
-    private TitleBar mTitleBar;
+    private TitleBarPhone mTitleBar;
     private ActiveTabsPage mActiveTabsPage;
-    private TouchProxy mTitleOverlay;
+    private boolean mUseQuickControls;
+    private PieControl mPieControl;
+    private NavScreen mNavScreen;
 
     boolean mExtendedMenuOpen;
     boolean mOptionsMenuOpen;
+    boolean mAnimating;
 
     /**
      * @param browser
@@ -49,11 +50,13 @@
      */
     public PhoneUi(Activity browser, UiController controller) {
         super(browser, controller);
-        mTitleBar = new TitleBar(mActivity, mUiController, this);
+        mTitleBar = new TitleBarPhone(mActivity, mUiController, this,
+                mContentView);
         // mTitleBar will be always be shown in the fully loaded mode on
         // phone
         mTitleBar.setProgress(100);
         mActivity.getActionBar().hide();
+        setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
     }
 
     @Override
@@ -62,23 +65,6 @@
         mActivity.getActionBar().hide();
     }
 
-    // webview factory
-
-    @Override
-    public WebView createWebView(boolean privateBrowsing) {
-        // Create a new WebView
-        WebView w = new WebView(mActivity, null,
-                android.R.attr.webViewStyle, privateBrowsing);
-        initWebViewSettings(w);
-        return w;
-    }
-
-    @Override
-    public WebView createSubWebView(boolean privateBrowsing) {
-        WebView web = createWebView(privateBrowsing);
-        return web;
-    }
-
     // lifecycle
 
     @Override
@@ -100,8 +86,10 @@
 
     @Override
     public void editUrl(boolean clearInput) {
-        String url = getActiveTab().getUrl();
-        mUiController.startSearch(url);
+        if (mUseQuickControls) {
+            getTitleBar().setShowProgressOnly(false);
+        }
+        super.editUrl(clearInput);
     }
 
     @Override
@@ -110,21 +98,52 @@
             // if tab page is showing, hide it
             mUiController.removeActiveTabsPage(true);
             return true;
+        } else if (mNavScreen != null) {
+            mNavScreen.close();
+            return true;
         }
         return super.onBackKey();
     }
 
     @Override
+    public boolean onMenuKey() {
+        if (!isComboViewShowing()) {
+            if (mNavScreen == null) {
+                showNavScreen();
+            } else {
+                mNavScreen.close();
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public boolean dispatchKey(int code, KeyEvent event) {
+        if (!isComboViewShowing()) {
+        }
+        return false;
+    }
+
+    @Override
     public void onProgressChanged(Tab tab) {
         if (tab.inForeground()) {
             int progress = tab.getLoadProgress();
             mTitleBar.setProgress(progress);
             if (progress == 100) {
                 if (!mOptionsMenuOpen || !mExtendedMenuOpen) {
-                    hideTitleBar();
+                    suggestHideTitleBar();
+                    if (mUseQuickControls) {
+                        mTitleBar.setShowProgressOnly(false);
+                    }
                 }
             } else {
                 if (!mOptionsMenuOpen || mExtendedMenuOpen) {
+                    if (mUseQuickControls && !mTitleBar.isEditingUrl()) {
+                        mTitleBar.setShowProgressOnly(true);
+                        setTitleGravity(Gravity.TOP);
+                    }
                     showTitleBar();
                 }
             }
@@ -132,41 +151,37 @@
     }
 
     @Override
-    public void setActiveTab(Tab tab) {
+    public void setActiveTab(final Tab tab) {
+        captureTab(mActiveTab);
         super.setActiveTab(tab);
-        WebView view = tab.getWebView();
+        BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
         // so the tab is guaranteed to have a webview
         if (view == null) {
             Log.e(LOGTAG, "active tab with no webview detected");
             return;
         }
-        view.setEmbeddedTitleBar(getTitleBar());
+        // Request focus on the top window.
+        if (mUseQuickControls) {
+            mPieControl.forceToTop(mContentView);
+            view.setScrollListener(null);
+        } else {
+            // check if title bar is already attached by animation
+            if (mTitleBar.getParent() == null) {
+                view.setEmbeddedTitleBar(mTitleBar);
+            }
+            view.setScrollListener(this);
+        }
         if (tab.isInVoiceSearchMode()) {
-            showVoiceTitleBar(tab.getVoiceDisplayTitle());
+            showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults());
         } else {
             revertVoiceTitleBar(tab);
         }
+        updateLockIconToLatest(tab);
         tab.getTopWindow().requestFocus();
     }
 
     @Override
-    protected void showTitleBar() {
-        if (canShowTitleBar()) {
-            setTitleGravity(Gravity.TOP);
-            super.showTitleBar();
-        }
-    }
-
-    @Override
-    protected void hideTitleBar() {
-        if (isTitleBarShowing()) {
-            setTitleGravity(Gravity.NO_GRAVITY);
-            super.hideTitleBar();
-        }
-    }
-
-    @Override
     protected TitleBarBase getTitleBar() {
         return mTitleBar;
     }
@@ -175,6 +190,7 @@
 
     @Override
     public void showActiveTabsPage() {
+        captureTab(mActiveTab);
         mActiveTabsPage = new ActiveTabsPage(mActivity, mUiController);
         mTitleBar.setVisibility(View.GONE);
         hideTitleBar();
@@ -193,6 +209,14 @@
     }
 
     @Override
+    public void showComboView(boolean startWithHistory, Bundle extras) {
+        if (mNavScreen != null) {
+            hideNavScreen(false);
+        }
+        super.showComboView(startWithHistory, extras);
+    }
+
+    @Override
     public boolean showsWeb() {
         return super.showsWeb() && mActiveTabsPage == null;
     }
@@ -200,42 +224,6 @@
     // menu handling callbacks
 
     @Override
-    public void onOptionsMenuOpened() {
-        mOptionsMenuOpen = true;
-        // options menu opened, show title bar
-        showTitleBar();
-        if (mTitleOverlay == null) {
-            // This assumes that getTitleBar always returns the same View
-            mTitleOverlay = new TouchProxy(mActivity, getTitleBar());
-        }
-        mActivity.getWindowManager().addView(mTitleOverlay,
-                mTitleOverlay.getWindowLayoutParams());
-    }
-
-    @Override
-    public void onExtendedMenuOpened() {
-        // Switching the menu to expanded view, so hide the
-        // title bar.
-        mExtendedMenuOpen = true;
-        hideTitleBar();
-    }
-
-    @Override
-    public void onOptionsMenuClosed(boolean inLoad) {
-        mOptionsMenuOpen = false;
-        mActivity.getWindowManager().removeView(mTitleOverlay);
-        if (!inLoad && !getTitleBar().hasFocus()) {
-            hideTitleBar();
-        }
-    }
-
-    @Override
-    public void onExtendedMenuClosed(boolean inLoad) {
-        mExtendedMenuOpen = false;
-        showTitleBar();
-    }
-
-    @Override
     public void onContextMenuCreated(Menu menu) {
         hideTitleBar();
     }
@@ -255,36 +243,78 @@
     }
 
     @Override
-    public boolean dispatchKey(int code, KeyEvent event) {
-        return false;
+    public void onActionModeFinished(boolean inLoad) {
+        if (inLoad) {
+            if (mUseQuickControls) {
+                mTitleBar.setShowProgressOnly(true);
+            }
+            showTitleBar();
+        }
+        mActivity.getActionBar().hide();
     }
 
-    static class TouchProxy extends View {
-
-        View mTarget;
-
-        TouchProxy(Context context, View target) {
-            super(context);
-            mTarget = target;
-        }
-
-        @Override
-        public boolean dispatchTouchEvent(MotionEvent event) {
-            return mTarget.dispatchTouchEvent(event);
-        }
-
-        WindowManager.LayoutParams getWindowLayoutParams() {
-            WindowManager.LayoutParams params =
-                new WindowManager.LayoutParams(
-                        mTarget.getWidth(),
-                        mTarget.getHeight(),
-                        WindowManager.LayoutParams.TYPE_APPLICATION,
-                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
-                        PixelFormat.TRANSPARENT);
-            params.gravity = Gravity.TOP | Gravity.LEFT;
-            params.y = mTarget.getTop();
-            params.x = mTarget.getLeft();
-            return params;
+    @Override
+    protected void setTitleGravity(int gravity) {
+        if (mUseQuickControls) {
+            FrameLayout.LayoutParams lp =
+                    (FrameLayout.LayoutParams) getTitleBar().getLayoutParams();
+            lp.gravity = gravity;
+            getTitleBar().setLayoutParams(lp);
+        } else {
+            super.setTitleGravity(gravity);
         }
     }
+
+    private void setUseQuickControls(boolean useQuickControls) {
+        mUseQuickControls = useQuickControls;
+        getTitleBar().setUseQuickControls(mUseQuickControls);
+        if (useQuickControls) {
+            mPieControl = new PieControl(mActivity, mUiController, this);
+            mPieControl.attachToContainer(mContentView);
+            WebView web = getWebView();
+            if (web != null) {
+                web.setEmbeddedTitleBar(null);
+            }
+        } else {
+            if (mPieControl != null) {
+                mPieControl.removeFromContainer(mContentView);
+            }
+            WebView web = getWebView();
+            if (web != null) {
+                web.setEmbeddedTitleBar(mTitleBar);
+            }
+            setTitleGravity(Gravity.NO_GRAVITY);
+        }
+    }
+
+    @Override
+    protected void captureTab(final Tab tab) {
+        if (tab == null) return;
+        BrowserWebView web = (BrowserWebView) tab.getWebView();
+        if (web != null) {
+            tab.setScreenshot(web.capture());
+        }
+    }
+
+    void showNavScreen() {
+        detachTab(mActiveTab);
+        mNavScreen = new NavScreen(mActivity, mUiController, this);
+        // Add the custom view to its container.
+        mCustomViewContainer.addView(mNavScreen, COVER_SCREEN_PARAMS);
+        mContentView.setVisibility(View.GONE);
+        mCustomViewContainer.setVisibility(View.VISIBLE);
+        mCustomViewContainer.bringToFront();
+    }
+
+    void hideNavScreen(boolean animate) {
+        if (mNavScreen == null) return;
+        Tab tab = mNavScreen.getSelectedTab();
+        mCustomViewContainer.removeView(mNavScreen);
+        mNavScreen = null;
+        mCustomViewContainer.setVisibility(View.GONE);
+        mUiController.setActiveTab(tab);
+        // Show the content view.
+        mContentView.setVisibility(View.VISIBLE);
+    }
+
 }
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
index 38ed1bb..8bcd972 100644
--- a/src/com/android/browser/PieControl.java
+++ b/src/com/android/browser/PieControl.java
@@ -50,7 +50,7 @@
 
     private Activity mActivity;
     private UiController mUiController;
-    private XLargeUi mUi;
+    private BaseUi mUi;
     private PieMenu mPie;
     private PieItem mBack;
     private PieItem mForward;
@@ -66,7 +66,7 @@
     private TextView mTabsCount;
     private int mItemSize;
 
-    public PieControl(Activity activity, UiController controller, XLargeUi ui) {
+    public PieControl(Activity activity, UiController controller, BaseUi ui) {
         mActivity = activity;
         mUiController = controller;
         mUi = ui;
@@ -107,7 +107,7 @@
             menuview.setLayoutListener(new OnLayoutListener() {
                 @Override
                 public void onLayout(int ax, int ay, boolean left) {
-                    mActivity.openOptionsMenu();
+                    buildMenu();
                 }
             });
 
@@ -128,10 +128,10 @@
             // level 2
             mPie.addItem(mForward);
             mPie.addItem(mRefresh);
+            mPie.addItem(mOptions);
             mPie.addItem(mShowTabs);
             mPie.addItem(mNewTab);
             mPie.addItem(mClose);
-            mPie.addItem(mOptions);
             mPie.setController(this);
         }
         container.addView(mPie);
@@ -142,11 +142,13 @@
         mUi.captureTab(mUi.getActiveTab());
         mTabAdapter.setTabs(tabs);
         PieStackView sym = (PieStackView) mShowTabs.getPieView();
-        sym.setCurrent(mUiController.getTabControl().getCurrentIndex());
+        sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
 
     }
 
-    protected void onMenuOpened(Menu menu) {
+    private void buildMenu() {
+        Menu menu = mUi.getMenu();
+        menu.setGroupVisible(R.id.NAV_MENU, false);
         mMenuAdapter.setMenu(menu);
     }
 
@@ -205,12 +207,12 @@
                 web.reload();
             }
         } else if (mUrl.getView() == v) {
-            mUi.showTitleBarAndEdit();
+            mUi.editUrl(false);
         } else if (mBookmarks.getView() == v) {
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mNewTab.getView() == v) {
             mUiController.openTabToHomePage();
-            mUi.showTitleBarAndEdit();
+            mUi.editUrl(false);
         } else if (mClose.getView() == v) {
             mUiController.closeCurrentTab();
         }
@@ -279,8 +281,7 @@
             view.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    mUiController.switchToTab(mUiController.getTabControl()
-                            .getTabIndex(tab));
+                    mUiController.switchToTab(tab);
                 }
             });
             return view;
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
new file mode 100644
index 0000000..c90213f
--- /dev/null
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+public interface PreferenceKeys {
+
+    static final String PREF_AUTOFILL_ACTIVE_PROFILE_ID = "autofill_active_profile_id";
+    static final String PREF_DEBUG_MENU = "debug_menu";
+
+    // ----------------------
+    // Keys for accessibility_preferences.xml
+    // ----------------------
+    static final String PREF_MIN_FONT_SIZE = "min_font_size";
+    static final String PREF_TEXT_SIZE = "text_size";
+    static final String PREF_TEXT_ZOOM = "text_zoom";
+    static final String PREF_FORCE_USERSCALABLE = "force_userscalable";
+
+    // ----------------------
+    // Keys for advanced_preferences.xml
+    // ----------------------
+    static final String PREF_AUTOFIT_PAGES = "autofit_pages";
+    static final String PREF_BLOCK_POPUP_WINDOWS = "block_popup_windows";
+    static final String PREF_DEFAULT_TEXT_ENCODING = "default_text_encoding";
+    static final String PREF_DEFAULT_ZOOM = "default_zoom";
+    static final String PREF_ENABLE_JAVASCRIPT = "enable_javascript";
+    static final String PREF_LOAD_IMAGES = "load_images";
+    static final String PREF_LOAD_PAGE = "load_page";
+    static final String PREF_OPEN_IN_BACKGROUND = "open_in_background";
+    static final String PREF_PLUGIN_STATE = "plugin_state";
+    static final String PREF_RESET_DEFAULT_PREFERENCES = "reset_default_preferences";
+    static final String PREF_SEARCH_ENGINE = "search_engine";
+    static final String PREF_WEBSITE_SETTINGS = "website_settings";
+
+    // ----------------------
+    // Keys for debug_preferences.xml
+    // ----------------------
+    static final String PREF_ENABLE_HARDWARE_ACCEL = "enable_hardware_accel";
+    static final String PREF_USER_AGENT = "user_agent";
+
+    // ----------------------
+    // Keys for general_preferences.xml
+    // ----------------------
+    static final String PREF_AUTOFILL_ENABLED = "autofill_enabled";
+    static final String PREF_AUTOFILL_PROFILE = "autofill_profile";
+    static final String PREF_HOMEPAGE = "homepage";
+    static final String PREF_SYNC_WITH_CHROME = "sync_with_chrome";
+
+    // ----------------------
+    // Keys for hidden_debug_preferences.xml
+    // ----------------------
+    static final String PREF_ENABLE_LIGHT_TOUCH = "enable_light_touch";
+    static final String PREF_ENABLE_NAV_DUMP = "enable_nav_dump";
+    static final String PREF_ENABLE_TRACING = "enable_tracing";
+    static final String PREF_ENABLE_VISUAL_INDICATOR = "enable_visual_indicator";
+    static final String PREF_JAVASCRIPT_CONSOLE = "javascript_console";
+    static final String PREF_JS_ENGINE_FLAGS = "js_engine_flags";
+    static final String PREF_NORMAL_LAYOUT = "normal_layout";
+    static final String PREF_SMALL_SCREEN = "small_screen";
+    static final String PREF_WIDE_VIEWPORT = "wide_viewport";
+
+    // ----------------------
+    // Keys for lab_preferences.xml
+    // ----------------------
+    static final String PREF_ENABLE_QUICK_CONTROLS = "enable_quick_controls";
+    static final String PREF_USE_MOST_VISITED_HOMEPAGE = "use_most_visited_homepage";
+    static final String PREF_USE_INSTANT_SEARCH = "use_instant_search";
+    static final String PREF_FULLSCREEN = "fullscreen";
+
+    // ----------------------
+    // Keys for privacy_security_preferences.xml
+    // ----------------------
+    static final String PREF_ACCEPT_COOKIES = "accept_cookies";
+    static final String PREF_ENABLE_GEOLOCATION = "enable_geolocation";
+    static final String PREF_PRIVACY_CLEAR_CACHE = "privacy_clear_cache";
+    static final String PREF_PRIVACY_CLEAR_COOKIES = "privacy_clear_cookies";
+    static final String PREF_PRIVACY_CLEAR_FORM_DATA = "privacy_clear_form_data";
+    static final String PREF_PRIVACY_CLEAR_GEOLOCATION_ACCESS = "privacy_clear_geolocation_access";
+    static final String PREF_PRIVACY_CLEAR_HISTORY = "privacy_clear_history";
+    static final String PREF_PRIVACY_CLEAR_PASSWORDS = "privacy_clear_passwords";
+    static final String PREF_REMEMBER_PASSWORDS = "remember_passwords";
+    static final String PREF_SAVE_FORMDATA = "save_formdata";
+    static final String PREF_SHOW_SECURITY_WARNINGS = "show_security_warnings";
+
+}
diff --git a/src/com/android/browser/RlzReceiver.java b/src/com/android/browser/RlzReceiver.java
deleted file mode 100644
index 1dfb11a..0000000
--- a/src/com/android/browser/RlzReceiver.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * This {@link BroadcastReceiver} handles RLZ broadcast notifications.
- */
-public class RlzReceiver extends BroadcastReceiver {
-    public static final String RLZ_VALUES_UPDATED_ACTION =
-        "android.intent.action.RLZ_VALUES_UPDATED";
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-        if (RLZ_VALUES_UPDATED_ACTION.equals(action)) {
-            BrowserSettings settings = BrowserSettings.getInstance();
-            settings.updateRlzValues(context);
-        }
-    }
-}
diff --git a/src/com/android/browser/ShortcutActivity.java b/src/com/android/browser/ShortcutActivity.java
index 16a4cbe..af1788d 100644
--- a/src/com/android/browser/ShortcutActivity.java
+++ b/src/com/android/browser/ShortcutActivity.java
@@ -38,8 +38,6 @@
         mBookmarks = (BrowserBookmarksPage) getFragmentManager()
                 .findFragmentById(R.id.bookmarks);
         mBookmarks.setEnableContextMenu(false);
-        mBookmarks.setBreadCrumbMaxVisible(2);
-        mBookmarks.setBreadCrumbUseBackButton(true);
         mBookmarks.setCallbackListener(this);
         View cancel = findViewById(R.id.cancel);
         if (cancel != null) {
@@ -73,10 +71,6 @@
     }
 
     @Override
-    public void onFolderChanged(int level, Uri uri) {
-    }
-
-    @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.cancel:
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java
new file mode 100644
index 0000000..52a5c5f
--- /dev/null
+++ b/src/com/android/browser/SnapshotTab.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.browser;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.webkit.WebView;
+
+import com.android.browser.provider.BrowserProvider2.Snapshots;
+
+import java.io.ByteArrayInputStream;
+
+
+public class SnapshotTab extends Tab {
+
+    private long mSnapshotId;
+    private LoadData mLoadTask;
+    private WebViewFactory mWebViewFactory;
+    // TODO: Support non-persistent webview's on phone
+    private boolean mPersistentWebview;
+    private int mBackgroundColor;
+
+    public SnapshotTab(WebViewController wvcontroller, long snapshotId) {
+        super(wvcontroller, null);
+        mSnapshotId = snapshotId;
+        mWebViewFactory = mWebViewController.getWebViewFactory();
+        mPersistentWebview = !BrowserActivity.isTablet(wvcontroller.getActivity());
+        if (mPersistentWebview) {
+            WebView web = mWebViewFactory.createWebView(false);
+            setWebView(web);
+        }
+        loadData();
+    }
+
+    @Override
+    void putInForeground() {
+        if (getWebView() == null) {
+            WebView web = mWebViewFactory.createWebView(false);
+            if (mBackgroundColor != 0) {
+                web.setBackgroundColor(mBackgroundColor);
+            }
+            setWebView(web);
+            loadData();
+        }
+        super.putInForeground();
+    }
+
+    @Override
+    void putInBackground() {
+        if (getWebView() == null) return;
+        super.putInBackground();
+        if (!mPersistentWebview) {
+            super.destroy();
+        }
+    }
+
+    void loadData() {
+        if (mLoadTask == null) {
+            mLoadTask = new LoadData(this, mActivity.getContentResolver());
+            mLoadTask.execute();
+        }
+    }
+
+    @Override
+    void addChildTab(Tab child) {
+        throw new IllegalStateException("Snapshot tabs cannot have child tabs!");
+    }
+
+    @Override
+    public boolean isSnapshot() {
+        return true;
+    }
+
+    public long getSnapshotId() {
+        return mSnapshotId;
+    }
+
+    @Override
+    public ContentValues createSnapshotValues() {
+        return null;
+    }
+
+    @Override
+    boolean saveState() {
+        return false;
+    }
+
+    static class LoadData extends AsyncTask<Void, Void, Cursor> {
+
+        static final String[] PROJECTION = new String[] {
+            Snapshots._ID, // 0
+            Snapshots.TITLE, // 1
+            Snapshots.URL, // 2
+            Snapshots.FAVICON, // 3
+            Snapshots.VIEWSTATE, // 4
+            Snapshots.BACKGROUND, // 5
+        };
+
+        private SnapshotTab mTab;
+        private ContentResolver mContentResolver;
+
+        public LoadData(SnapshotTab t, ContentResolver cr) {
+            mTab = t;
+            mContentResolver = cr;
+        }
+
+        @Override
+        protected Cursor doInBackground(Void... params) {
+            long id = mTab.mSnapshotId;
+            Uri uri = ContentUris.withAppendedId(Snapshots.CONTENT_URI, id);
+            return mContentResolver.query(uri, PROJECTION, null, null, null);
+        }
+
+        @Override
+        protected void onPostExecute(Cursor result) {
+            try {
+                if (result.moveToFirst()) {
+                    mTab.mCurrentState.mTitle = result.getString(1);
+                    mTab.mCurrentState.mUrl = result.getString(2);
+                    byte[] favicon = result.getBlob(3);
+                    if (favicon != null) {
+                        mTab.mCurrentState.mFavicon = BitmapFactory
+                                .decodeByteArray(favicon, 0, favicon.length);
+                    }
+                    WebView web = mTab.getWebView();
+                    if (web != null) {
+                        byte[] data = result.getBlob(4);
+                        ByteArrayInputStream stream = new ByteArrayInputStream(data);
+                        web.loadViewState(stream);
+                    }
+                    mTab.mBackgroundColor = result.getInt(5);
+                    mTab.mWebViewController.onPageFinished(mTab);
+                }
+            } finally {
+                if (result != null) {
+                    result.close();
+                }
+                mTab.mLoadTask = null;
+            }
+        }
+
+    }
+}
diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index ecdaa15..242e170 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -71,6 +71,7 @@
     final Object mResultsLock = new Object();
     List<String> mVoiceResults;
     boolean mIncognitoMode;
+    BrowserSettings mSettings;
 
     interface CompletionListener {
 
@@ -82,6 +83,7 @@
 
     public SuggestionsAdapter(Context ctx, CompletionListener listener) {
         mContext = ctx;
+        mSettings = BrowserSettings.getInstance();
         mListener = listener;
         mLinesPortrait = mContext.getResources().
                 getInteger(R.integer.max_suggest_lines_portrait);
@@ -276,7 +278,7 @@
         }
 
         private boolean shouldProcessEmptyQuery() {
-            final SearchEngine searchEngine = BrowserSettings.getInstance().getSearchEngine();
+            final SearchEngine searchEngine = mSettings.getSearchEngine();
             return searchEngine.wantsEmptyQuery();
         }
 
@@ -470,7 +472,6 @@
             Uri.Builder ub = BrowserContract.Combined.CONTENT_URI.buildUpon();
             ub.appendQueryParameter(BrowserContract.PARAM_LIMIT,
                     Integer.toString(Math.max(mLinesLandscape, mLinesPortrait)));
-            BookmarkUtils.addAccountInfo(mContext, ub);
             mCursor =
                     mContext.getContentResolver().query(ub.build(), COMBINED_PROJECTION,
                             selection,
@@ -541,7 +542,7 @@
             if (mCursor != null) {
                 mCursor.close();
             }
-            SearchEngine searchEngine = BrowserSettings.getInstance().getSearchEngine();
+            SearchEngine searchEngine = mSettings.getSearchEngine();
             if (!TextUtils.isEmpty(constraint)) {
                 if (searchEngine != null && searchEngine.supportsSuggestions()) {
                     mCursor = searchEngine.getSuggestions(mContext, constraint.toString());
@@ -560,7 +561,7 @@
     }
 
     private boolean useInstant() {
-        return BrowserSettings.getInstance().useInstant();
+        return mSettings.useInstantSearch();
     }
 
     public void clearCache() {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 863fc95..bc5868f 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -16,13 +16,11 @@
 
 package com.android.browser;
 
-import com.android.browser.homepages.HomeProvider;
-import com.android.common.speech.LoggingEvents;
-
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.SearchManager;
 import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
@@ -34,12 +32,16 @@
 import android.os.Bundle;
 import android.os.Message;
 import android.os.SystemClock;
+import android.security.KeyChain;
+import android.security.KeyChainAliasCallback;
 import android.speech.RecognizerResultsIntent;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewStub;
+import android.webkit.ClientCertRequestHandler;
 import android.webkit.ConsoleMessage;
 import android.webkit.DownloadListener;
 import android.webkit.GeolocationPermissions;
@@ -60,6 +62,11 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.android.browser.homepages.HomeProvider;
+import com.android.browser.provider.BrowserProvider2.Snapshots;
+import com.android.common.speech.LoggingEvents;
+
+import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -86,7 +93,10 @@
     }
 
     Activity mActivity;
-    private WebViewController mWebViewController;
+    protected WebViewController mWebViewController;
+
+    // The tab ID
+    private long mId = -1;
 
     // The Geolocation permissions prompt
     private GeolocationPermissionsPrompt mGeolocationPermissionsPrompt;
@@ -104,12 +114,10 @@
     private Bundle mSavedState;
     // Parent Tab. This is the Tab that created this Tab, or null if the Tab was
     // created by the UI
-    private Tab mParentTab;
+    private Tab mParent;
     // Tab that constructed by this Tab. This is used when this Tab is
     // destroyed, it clears all mParentTab values in the children.
-    private Vector<Tab> mChildTabs;
-    // If true, the tab will be removed when back out of the first page.
-    private boolean mCloseOnExit;
+    private Vector<Tab> mChildren;
     // If true, the tab is in the foreground of the current activity.
     private boolean mInForeground;
     // If true, the tab is in page loading state (after onPageStarted,
@@ -139,9 +147,10 @@
     DownloadTouchIcon mTouchIconLoader;
 
     private Bitmap mScreenshot;
+    private BrowserSettings mSettings;
 
     // All the state needed for a page
-    private static class PageState {
+    protected static class PageState {
         String mUrl;
         String mTitle;
         LockIcon mLockIcon;
@@ -179,23 +188,17 @@
     }
 
     // The current/loading page's state
-    private PageState mCurrentState;
+    protected PageState mCurrentState;
 
     // Used for saving and restoring each Tab
-    // TODO: Figure out who uses what and where
-    //       Some of these aren't use in this class, and some are only used in
-    //       restoring state but not saving it - FIX THIS
-    static final String WEBVIEW = "webview";
-    static final String NUMTABS = "numTabs";
-    static final String CURRTAB = "currentTab";
+    static final String ID = "ID";
     static final String CURRURL = "currentUrl";
     static final String CURRTITLE = "currentTitle";
-    static final String CLOSEONEXIT = "closeonexit";
     static final String PARENTTAB = "parentTab";
     static final String APPID = "appid";
-    static final String ORIGINALURL = "originalUrl";
     static final String INCOGNITO = "privateBrowsingEnabled";
     static final String SCREENSHOT = "screenshot";
+    static final String USERAGENT = "useragent";
 
     // -------------------------------------------------------------------------
 
@@ -313,7 +316,9 @@
         mVoiceSearchData.mLastVoiceSearchTitle
                 = mVoiceSearchData.mVoiceSearchResults.get(index);
         if (mInForeground) {
-            mWebViewController.activateVoiceSearchMode(mVoiceSearchData.mLastVoiceSearchTitle);
+            mWebViewController.activateVoiceSearchMode(
+                    mVoiceSearchData.mLastVoiceSearchTitle,
+                    mVoiceSearchData.mVoiceSearchResults);
         }
         if (mVoiceSearchData.mVoiceSearchHtmls != null) {
             // When index was found it was already ensured that it was valid
@@ -709,7 +714,7 @@
                 setLockIconType(LockIcon.LOCK_ICON_UNSECURE);
                 return;
             }
-            if (BrowserSettings.getInstance().showSecurityWarnings()) {
+            if (mSettings.showSecurityWarnings()) {
                 final LayoutInflater factory =
                     LayoutInflater.from(mActivity);
                 final View warningsView =
@@ -785,6 +790,27 @@
         }
 
         /**
+         * Displays client certificate request to the user.
+         */
+        @Override
+        public void onReceivedClientCertRequest(final WebView view,
+                final ClientCertRequestHandler handler, final String host_and_port) {
+            if (!mInForeground) {
+                handler.ignore();
+                return;
+            }
+            KeyChain.choosePrivateKeyAlias(mActivity, new KeyChainAliasCallback() {
+                @Override public void alias(String alias) {
+                    if (alias == null) {
+                        handler.cancel();
+                        return;
+                    }
+                    new KeyChainLookup(mActivity, handler, alias).execute();
+                }
+            }, null, null, null, -1);
+        }
+
+        /**
          * Handles an HTTP authentication request.
          *
          * @param handler The authentication handler
@@ -856,12 +882,8 @@
                 mWebViewController.attachSubWindow(Tab.this);
                 transport.setWebView(mSubView);
             } else {
-                final Tab newTab = mWebViewController.openTabAndShow(
-                        Tab.this,
-                        IntentHandler.EMPTY_URL_DATA, false, null);
-                if (newTab != Tab.this) {
-                    Tab.this.addChildTab(newTab);
-                }
+                final Tab newTab = mWebViewController.openTab(null,
+                        Tab.this, true, true);
                 transport.setWebView(newTab.getWebView());
             }
             msg.sendToTarget();
@@ -935,18 +957,16 @@
         @Override
         public void onRequestFocus(WebView view) {
             if (!mInForeground) {
-                mWebViewController.switchToTab(mWebViewController.getTabControl().getTabIndex(
-                        Tab.this));
+                mWebViewController.switchToTab(Tab.this);
             }
         }
 
         @Override
         public void onCloseWindow(WebView window) {
-            if (mParentTab != null) {
+            if (mParent != null) {
                 // JavaScript can only close popup window.
                 if (mInForeground) {
-                    mWebViewController.switchToTab(mWebViewController.getTabControl()
-                            .getTabIndex(mParentTab));
+                    mWebViewController.switchToTab(mParent);
                 }
                 mWebViewController.closeTab(Tab.this);
             }
@@ -991,8 +1011,14 @@
         @Override
         public void onShowCustomView(View view,
                 WebChromeClient.CustomViewCallback callback) {
+            onShowCustomView(view, mActivity.getRequestedOrientation(), callback);
+        }
+
+        @Override
+        public void onShowCustomView(View view, int requestedOrientation,
+                WebChromeClient.CustomViewCallback callback) {
             if (mInForeground) mWebViewController.showCustomView(Tab.this, view,
-                    callback);
+                    requestedOrientation, callback);
         }
 
         @Override
@@ -1015,7 +1041,7 @@
         public void onExceededDatabaseQuota(String url,
             String databaseIdentifier, long currentQuota, long estimatedSize,
             long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
-            BrowserSettings.getInstance().getWebStorageSizeManager()
+            mSettings.getWebStorageSizeManager()
                     .onExceededDatabaseQuota(url, databaseIdentifier,
                             currentQuota, estimatedSize, totalUsedQuota,
                             quotaUpdater);
@@ -1034,7 +1060,7 @@
         @Override
         public void onReachedMaxAppCacheSize(long spaceNeeded,
                 long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
-            BrowserSettings.getInstance().getWebStorageSizeManager()
+            mSettings.getWebStorageSizeManager()
                     .onReachedMaxAppCacheSize(spaceNeeded, totalUsedQuota,
                             quotaUpdater);
         }
@@ -1172,10 +1198,7 @@
 
                         if (disableAutoFill.isChecked()) {
                             // Disable autofill and show a toast with how to turn it on again.
-                            BrowserSettings s = BrowserSettings.getInstance();
-                            s.addObserver(mMainView.getSettings());
-                            s.disableAutoFill(mActivity);
-                            s.update();
+                            mSettings.setAutofillEnabled(false);
                             Toast.makeText(mActivity,
                                     R.string.autofill_setup_dialog_negative_toast,
                                     Toast.LENGTH_LONG).show();
@@ -1229,6 +1252,11 @@
             mClient.onReceivedSslError(view, handler, error);
         }
         @Override
+        public void onReceivedClientCertRequest(WebView view,
+                ClientCertRequestHandler handler, String host_and_port) {
+            mClient.onReceivedClientCertRequest(view, handler, host_and_port);
+        }
+        @Override
         public void onReceivedHttpAuthRequest(WebView view,
                 HttpAuthHandler handler, String host, String realm) {
             mClient.onReceivedHttpAuthRequest(view, handler, host, realm);
@@ -1290,14 +1318,13 @@
     // remove later
 
     // Construct a new tab
-    Tab(WebViewController wvcontroller, WebView w, boolean closeOnExit, String appId,
-            String url) {
+    Tab(WebViewController wvcontroller, WebView w) {
         mWebViewController = wvcontroller;
         mActivity = mWebViewController.getActivity();
-        mCloseOnExit = closeOnExit;
-        mAppId = appId;
+        mSettings = BrowserSettings.getInstance();
         mDataController = DataController.getInstance(mActivity);
-        mCurrentState = new PageState(mActivity, w.isPrivateBrowsingEnabled());
+        mCurrentState = new PageState(mActivity, w != null
+                ? w.isPrivateBrowsingEnabled() : false);
         mInPageLoad = false;
         mInForeground = false;
 
@@ -1328,6 +1355,14 @@
         setWebView(w);
     }
 
+    public void setId(long id) {
+        mId = id;
+    }
+
+    public long getId() {
+        return mId;
+    }
+
     /**
      * Sets the WebView for this tab, correctly removing the old WebView from
      * the container view.
@@ -1366,7 +1401,6 @@
     void destroy() {
         if (mMainView != null) {
             dismissSubWindow();
-            BrowserSettings.getInstance().deleteObserver(mMainView.getSettings());
             // save the WebView to call destroy() after detach it from the tab
             WebView webView = mMainView;
             setWebView(null);
@@ -1379,14 +1413,14 @@
      */
     void removeFromTree() {
         // detach the children
-        if (mChildTabs != null) {
-            for(Tab t : mChildTabs) {
-                t.setParentTab(null);
+        if (mChildren != null) {
+            for(Tab t : mChildren) {
+                t.setParent(null);
             }
         }
         // remove itself from the parent list
-        if (mParentTab != null) {
-            mParentTab.mChildTabs.remove(this);
+        if (mParent != null) {
+            mParent.mChildren.remove(this);
         }
     }
 
@@ -1428,8 +1462,6 @@
     void dismissSubWindow() {
         if (mSubView != null) {
             mWebViewController.endActionMode();
-            BrowserSettings.getInstance().deleteObserver(
-                    mSubView.getSettings());
             mSubView.destroy();
             mSubView = null;
             mSubViewContainer = null;
@@ -1440,20 +1472,34 @@
     /**
      * Set the parent tab of this tab.
      */
-    void setParentTab(Tab parent) {
-        mParentTab = parent;
+    void setParent(Tab parent) {
+        mParent = parent;
         // This tab may have been freed due to low memory. If that is the case,
-        // the parent tab index is already saved. If we are changing that index
+        // the parent tab id is already saved. If we are changing that id
         // (most likely due to removing the parent tab) we must update the
-        // parent tab index in the saved Bundle.
+        // parent tab id in the saved Bundle.
         if (mSavedState != null) {
             if (parent == null) {
                 mSavedState.remove(PARENTTAB);
             } else {
-                mSavedState.putInt(PARENTTAB, mWebViewController.getTabControl()
-                        .getTabIndex(parent));
+                mSavedState.putLong(PARENTTAB, parent.getId());
             }
         }
+
+        // Sync the WebView useragent with the parent
+        if (parent != null && mSettings.hasDesktopUseragent(parent.getWebView())
+                != mSettings.hasDesktopUseragent(getWebView())) {
+            mSettings.toggleDesktopUseragent(getWebView());
+        }
+    }
+
+    /**
+     * If this Tab was created through another Tab, then this method returns
+     * that Tab.
+     * @return the Tab parent or null
+     */
+    public Tab getParent() {
+        return mParent;
     }
 
     /**
@@ -1462,15 +1508,15 @@
      * @param child the Tab that was created from this Tab
      */
     void addChildTab(Tab child) {
-        if (mChildTabs == null) {
-            mChildTabs = new Vector<Tab>();
+        if (mChildren == null) {
+            mChildren = new Vector<Tab>();
         }
-        mChildTabs.add(child);
-        child.setParentTab(this);
+        mChildren.add(child);
+        child.setParent(this);
     }
 
-    Vector<Tab> getChildTabs() {
-        return mChildTabs;
+    Vector<Tab> getChildren() {
+        return mChildren;
     }
 
     void resume() {
@@ -1658,24 +1704,6 @@
         return mErrorConsole;
     }
 
-    /**
-     * If this Tab was created through another Tab, then this method returns
-     * that Tab.
-     * @return the Tab parent or null
-     */
-    public Tab getParentTab() {
-        return mParentTab;
-    }
-
-    /**
-     * Return whether this tab should be closed when it is backing out of the
-     * first page.
-     * @return TRUE if this tab should be closed when exit.
-     */
-    boolean closeOnExit() {
-        return mCloseOnExit;
-    }
-
     private void setLockIconType(LockIcon icon) {
         mCurrentState.mLockIcon = icon;
         mWebViewController.onUpdatedLockIcon(this);
@@ -1717,6 +1745,15 @@
         return mSavedState;
     }
 
+    Bundle getSavedState(boolean saveImages) {
+        if (saveImages && mScreenshot != null) {
+            Bundle b = new Bundle(mSavedState);
+            b.putParcelable(SCREENSHOT, mScreenshot);
+            return b;
+        }
+        return mSavedState;
+    }
+
     /**
      * Set the saved state.
      */
@@ -1733,27 +1770,28 @@
         if (mMainView == null) {
             return mSavedState != null;
         }
+        // If the tab is the homepage or has no URL, don't save it
+        String homepage = BrowserSettings.getInstance().getHomePage();
+        if (TextUtils.equals(homepage, mCurrentState.mUrl)
+                || TextUtils.isEmpty(mCurrentState.mUrl)) {
+            return false;
+        }
 
         mSavedState = new Bundle();
-        final WebBackForwardList list = mMainView.saveState(mSavedState);
+        mMainView.saveState(mSavedState);
 
-        // Store some extra info for displaying the tab in the picker.
-        final WebHistoryItem item = list != null ? list.getCurrentItem() : null;
-
+        mSavedState.putLong(ID, mId);
         mSavedState.putString(CURRURL, mCurrentState.mUrl);
         mSavedState.putString(CURRTITLE, mCurrentState.mTitle);
-        mSavedState.putBoolean(CLOSEONEXIT, mCloseOnExit);
         if (mAppId != null) {
             mSavedState.putString(APPID, mAppId);
         }
         // Remember the parent tab so the relationship can be restored.
-        if (mParentTab != null) {
-            mSavedState.putInt(PARENTTAB, mWebViewController.getTabControl().getTabIndex(
-                    mParentTab));
+        if (mParent != null) {
+            mSavedState.putLong(PARENTTAB, mParent.mId);
         }
-        if (mScreenshot != null) {
-            mSavedState.putParcelable(SCREENSHOT, mScreenshot);
-        }
+        mSavedState.putBoolean(USERAGENT,
+                mSettings.hasDesktopUseragent(getWebView()));
         return true;
     }
 
@@ -1767,9 +1805,13 @@
         // Restore the internal state even if the WebView fails to restore.
         // This will maintain the app id, original url and close-on-exit values.
         mSavedState = null;
-        mCloseOnExit = b.getBoolean(CLOSEONEXIT);
+        mId = b.getLong(ID);
         mAppId = b.getString(APPID);
         mScreenshot = b.getParcelable(SCREENSHOT);
+        if (b.getBoolean(USERAGENT)
+                != mSettings.hasDesktopUseragent(getWebView())) {
+            mSettings.toggleDesktopUseragent(getWebView());
+        }
 
         final WebBackForwardList list = mMainView.restoreState(b);
         if (list == null) {
@@ -1801,4 +1843,31 @@
         return mScreenshot;
     }
 
+    public boolean isSnapshot() {
+        return false;
+    }
+
+    public ContentValues createSnapshotValues() {
+        if (mMainView == null) return null;
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        if (!mMainView.saveViewState(stream)) {
+            return null;
+        }
+        byte[] data = stream.toByteArray();
+        ContentValues values = new ContentValues();
+        values.put(Snapshots.TITLE, mCurrentState.mTitle);
+        values.put(Snapshots.URL, mCurrentState.mUrl);
+        values.put(Snapshots.VIEWSTATE, data);
+        values.put(Snapshots.BACKGROUND, mMainView.getPageBackgroundColor());
+        return values;
+    }
+
+    public void loadUrl(String url, Map<String, String> headers) {
+        if (mMainView != null) {
+            mCurrentState = new PageState(mActivity, false, url, null);
+            mWebViewController.onPageStarted(this, mMainView, null);
+            mMainView.loadUrl(url, headers);
+        }
+    }
+
 }
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 7abb203..1ea6071 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -16,7 +16,7 @@
 
 package com.android.browser;
 
-import com.android.browser.ScrollWebView.ScrollListener;
+import com.android.browser.BrowserWebView.ScrollListener;
 
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
@@ -111,7 +111,6 @@
         mInactiveDrawable = res.getDrawable(R.drawable.browsertab_inactive);
 
         mTabMap = new HashMap<Tab, TabView>();
-        Resources resources = activity.getResources();
         LayoutInflater factory = LayoutInflater.from(activity);
         factory.inflate(R.layout.tab_bar, this);
         setPadding(0, (int) res.getDimension(R.dimen.tab_padding_top), 0, 0);
@@ -166,7 +165,7 @@
             TabView tv = buildTabView(tab);
             mTabs.addTab(tv);
         }
-        mTabs.setSelectedTab(mTabControl.getCurrentIndex());
+        mTabs.setSelectedTab(mTabControl.getCurrentPosition());
     }
 
     @Override
@@ -213,7 +212,7 @@
                     mUi.hideTitleBar();
                 } else {
                     mUi.stopWebViewScrolling();
-                    mUi.showTitleBarAndEdit();
+                    mUi.editUrl(false);
                 }
             } else if (mUi.isTitleBarShowing() && !isLoading()) {
                 mUi.stopEditingUrl();
@@ -221,11 +220,12 @@
             } else {
                 showUrlBar();
             }
-        } else {
+        } else if (view instanceof TabView) {
+            final Tab tab = ((TabView) view).mTab;
             int ix = mTabs.getChildIndex(view);
             if (ix >= 0) {
                 mTabs.setSelectedTab(ix);
-                mUiController.switchToTab(ix);
+                mUiController.switchToTab(tab);
             }
         }
     }
@@ -237,7 +237,7 @@
 
     void showTitleBarIndicator(boolean show) {
         Tab tab = mTabControl.getCurrentTab();
-        if (tab != null) {
+        if (tab != null && !tab.isSnapshot()) {
             TabView tv = mTabMap.get(tab);
             if (tv != null) {
                 tv.showIndicator(show);
@@ -324,6 +324,7 @@
         TextView mTitle;
         View mIndicator;
         View mIncognito;
+        View mSnapshot;
         ImageView mIconView;
         ImageView mLock;
         ImageView mClose;
@@ -354,6 +355,7 @@
             mClose = (ImageView) mTabContent.findViewById(R.id.close);
             mClose.setOnClickListener(this);
             mIncognito = mTabContent.findViewById(R.id.incognito);
+            mSnapshot = mTabContent.findViewById(R.id.snapshot);
             mIndicator = mTabContent.findViewById(R.id.chevron);
             mSelected = false;
             mInLoad = false;
@@ -398,11 +400,15 @@
             if (mTab.getFavicon() != null) {
                 setFavicon(renderFavicon(mTab.getFavicon()));
             }
-            if (mTab != null) {
-                mIncognito.setVisibility(
-                        mTab.isPrivateBrowsingEnabled() ?
-                        View.VISIBLE : View.GONE);
-            }
+            updateTabIcons();
+        }
+
+        private void updateTabIcons() {
+            mIncognito.setVisibility(
+                    mTab.isPrivateBrowsingEnabled() ?
+                    View.VISIBLE : View.GONE);
+            mSnapshot.setVisibility(mTab.isSnapshot()
+                    ? View.VISIBLE : View.GONE);
         }
 
         @Override
@@ -616,7 +622,7 @@
     // TabChangeListener implementation
 
     public void onSetActiveTab(Tab tab) {
-        mTabs.setSelectedTab(mTabControl.getTabIndex(tab));
+        mTabs.setSelectedTab(mTabControl.getTabPosition(tab));
         TabView tv = mTabMap.get(tab);
         if (tv != null) {
             tv.setProgress(tv.mTab.getLoadProgress());
@@ -665,6 +671,7 @@
             } else if (url != null) {
                 tv.setDisplayTitle(UrlUtils.stripUrl(url));
             }
+            tv.updateTabIcons();
         }
     }
 
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index af9928a..1367ba2 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -16,13 +16,14 @@
 
 package com.android.browser;
 
-import com.android.browser.IntentHandler.UrlData;
-
+import android.content.ContentResolver;
+import android.database.Cursor;
 import android.os.Bundle;
 import android.util.Log;
-import android.webkit.WebBackForwardList;
 import android.webkit.WebView;
 
+import com.android.browser.provider.BrowserProvider2.Snapshots;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -32,6 +33,13 @@
 class TabControl {
     // Log Tag
     private static final String LOGTAG = "TabControl";
+
+    // next Tab ID, starting at 1
+    private static long sNextId = 1;
+
+    private static final String POSITIONS = "positions";
+    private static final String CURRENT = "current";
+
     // Maximum number of tabs.
     private int mMaxTabs;
     // Private array of WebViews that are used as tabs.
@@ -57,6 +65,10 @@
         mTabQueue = new ArrayList<Tab>(mMaxTabs);
     }
 
+    static long getNextId() {
+        return sNextId++;
+    }
+
     File getThumbnailDir() {
         return mThumbnailDir;
     }
@@ -107,13 +119,13 @@
     }
 
     /**
-     * Return the tab at the specified index.
-     * @return The Tab for the specified index or null if the tab does not
+     * Return the tab at the specified position.
+     * @return The Tab for the specified position or null if the tab does not
      *         exist.
      */
-    Tab getTab(int index) {
-        if (index >= 0 && index < mTabs.size()) {
-            return mTabs.get(index);
+    Tab getTab(int position) {
+        if (position >= 0 && position < mTabs.size()) {
+            return mTabs.get(position);
         }
         return null;
     }
@@ -127,19 +139,19 @@
     }
 
     /**
-     * Return the current tab index.
-     * @return The current tab index
+     * Return the current tab position.
+     * @return The current tab position
      */
-    int getCurrentIndex() {
+    int getCurrentPosition() {
         return mCurrentTab;
     }
 
     /**
-     * Given a Tab, find it's index
+     * Given a Tab, find it's position
      * @param Tab to find
-     * @return index of Tab or -1 if not found
+     * @return position of Tab or -1 if not found
      */
-    int getTabIndex(Tab tab) {
+    int getTabPosition(Tab tab) {
         if (tab == null) {
             return -1;
         }
@@ -156,7 +168,8 @@
      */
     boolean hasAnyOpenIncognitoTabs() {
         for (Tab tab : mTabs) {
-            if (tab.getWebView() != null && tab.getWebView().isPrivateBrowsingEnabled()) {
+            if (tab.getWebView() != null
+                    && tab.getWebView().isPrivateBrowsingEnabled()) {
                 return true;
             }
         }
@@ -168,8 +181,7 @@
      * @return The newly createTab or null if we have reached the maximum
      *         number of open tabs.
      */
-    Tab createNewTab(boolean closeOnExit, String appId, String url,
-            boolean privateBrowsing) {
+    Tab createNewTab(boolean privateBrowsing) {
         int size = mTabs.size();
         // Return false if we have maxed out on tabs
         if (mMaxTabs == size) {
@@ -178,7 +190,8 @@
         final WebView w = createNewWebView(privateBrowsing);
 
         // Create a new tab and add it to the tab list
-        Tab t = new Tab(mController, w, closeOnExit, appId, url);
+        Tab t = new Tab(mController, w);
+        t.setId(getNextId());
         mTabs.add(t);
         // Initially put the tab in the background.
         t.putInBackground();
@@ -190,7 +203,15 @@
      * appId(null), url(null), and privateBrowsing(false).
      */
     Tab createNewTab() {
-        return createNewTab(false, null, null, false);
+        return createNewTab(false);
+    }
+
+    SnapshotTab createSnapshotTab(long snapshotId) {
+        // TODO: Don't count this against the limit
+        SnapshotTab t = new SnapshotTab(mController, snapshotId);
+        t.setId(getNextId());
+        mTabs.add(t);
+        return t;
     }
 
     /**
@@ -225,7 +246,7 @@
         } else {
             // If a tab that is earlier in the list gets removed, the current
             // index no longer points to the correct tab.
-            mCurrentTab = getTabIndex(current);
+            mCurrentTab = getTabPosition(current);
         }
 
         // destroy the tab
@@ -233,17 +254,6 @@
         // clear it's references to parent and children
         t.removeFromTree();
 
-        // The tab indices have shifted, update all the saved state so we point
-        // to the correct index.
-        for (Tab tab : mTabs) {
-            Vector<Tab> children = tab.getChildTabs();
-            if (children != null) {
-                for (Tab child : children) {
-                    child.setParentTab(tab);
-                }
-            }
-        }
-
         // Remove it from the queue of viewed tabs.
         mTabQueue.remove(t);
         return true;
@@ -268,61 +278,70 @@
         return mTabs.size();
     }
 
-
     /**
-     * Save the state of all the Tabs.
-     * @param outState The Bundle to save the state to.
+     * save the tab state:
+     * current position
+     * position sorted array of tab ids
+     * for each tab id, save the tab state
+     * @param outState
+     * @param saveImages
      */
-    void saveState(Bundle outState) {
+    void saveState(Bundle outState, boolean saveImages) {
         final int numTabs = getTabCount();
-        outState.putInt(Tab.NUMTABS, numTabs);
-        final int index = getCurrentIndex();
-        outState.putInt(Tab.CURRTAB, (index >= 0 && index < numTabs) ? index : 0);
-        for (int i = 0; i < numTabs; i++) {
-            final Tab t = getTab(i);
-            if (t.saveState()) {
-                outState.putBundle(Tab.WEBVIEW + i, t.getSavedState());
+        if (numTabs == 0) {
+            return;
+        }
+        long[] ids = new long[numTabs];
+        int i = 0;
+        for (Tab tab : mTabs) {
+            ids[i++] = tab.getId();
+            if (tab.saveState()) {
+                outState.putBundle(Long.toString(tab.getId()),
+                        tab.getSavedState(saveImages));
             }
         }
+        if (!outState.isEmpty()) {
+            outState.putLongArray(POSITIONS, ids);
+            Tab current = getCurrentTab();
+            long cid = -1;
+            if (current != null) {
+                cid = current.getId();
+            }
+            outState.putLong(CURRENT, cid);
+        }
     }
 
     /**
      * Check if the state can be restored.  If the state can be restored, the
-     * current tab index is returned.  This can be passed to restoreState below
+     * current tab id is returned.  This can be passed to restoreState below
      * in order to restore the correct tab.  Otherwise, -1 is returned and the
      * state cannot be restored.
      */
-    int canRestoreState(Bundle inState, boolean restoreIncognitoTabs) {
-        final int numTabs = (inState == null)
-                ? - 1 : inState.getInt(Tab.NUMTABS, -1);
-        if (numTabs == -1) {
+    long canRestoreState(Bundle inState, boolean restoreIncognitoTabs) {
+        final long[] ids = (inState == null) ? null : inState.getLongArray(POSITIONS);
+        if (ids == null) {
             return -1;
         }
-        final int oldCurrentTab = inState.getInt(Tab.CURRTAB, -1);
-
-        // Determine whether the saved current tab can be restored, and if not,
-        // which tab will take its place.
-        int currentTab = -1;
+        final long oldcurrent = inState.getLong(CURRENT);
+        long current = -1;
         if (restoreIncognitoTabs ||
-                !inState.getBundle(Tab.WEBVIEW + oldCurrentTab)
-                .getBoolean(Tab.INCOGNITO)) {
-            currentTab = oldCurrentTab;
+                !inState.getBundle(Long.toString(oldcurrent)).getBoolean(Tab.INCOGNITO)) {
+                current = oldcurrent;
         } else {
-            for (int i = 0; i < numTabs; i++) {
-                if (!inState.getBundle(Tab.WEBVIEW + i)
-                        .getBoolean(Tab.INCOGNITO)) {
-                    currentTab = i;
+            // pick first non incognito tab
+            for (long id : ids) {
+                if (!inState.getBundle(Long.toString(id)).getBoolean(Tab.INCOGNITO)) {
+                    current = id;
                     break;
                 }
             }
         }
-
-        return currentTab;
+        return current;
     }
 
     /**
      * Restore the state of all the tabs.
-     * @param currentTab The tab index to restore.
+     * @param currentId The tab id to restore.
      * @param inState The saved state of all the tabs.
      * @param restoreIncognitoTabs Restoring private browsing tabs
      * @param restoreAll All webviews get restored, not just the current tab
@@ -330,29 +349,32 @@
      * @return True if there were previous tabs that were restored. False if
      *         there was no saved state or restoring the state failed.
      */
-    void restoreState(Bundle inState, int currentTab,
+    void restoreState(Bundle inState, long currentId,
             boolean restoreIncognitoTabs, boolean restoreAll) {
-        if (currentTab == -1) {
+        if (currentId == -1) {
             return;
         }
-
-        // If currentTab is valid, numTabs must be present.
-        final int numTabs = inState.getInt(Tab.NUMTABS, -1);
-
-        // Map saved tab indices to new indices, in case any incognito tabs
-        // need to not be restored.
-        HashMap<Integer, Integer> originalTabIndices = new HashMap<Integer, Integer>();
-        originalTabIndices.put(-1, -1);
-        for (int i = 0; i < numTabs; i++) {
-            Bundle state = inState.getBundle(Tab.WEBVIEW + i);
-
-            if (!restoreIncognitoTabs && state != null && state.getBoolean(Tab.INCOGNITO)) {
-                originalTabIndices.put(i, -1);
-            } else if (i == currentTab || restoreAll) {
+        long[] ids = inState.getLongArray(POSITIONS);
+        long maxId = -Long.MAX_VALUE;
+        HashMap<Long, Tab> tabMap = new HashMap<Long, Tab>();
+        for (long id : ids) {
+            if (id > maxId) {
+                maxId = id;
+            }
+            final String idkey = Long.toString(id);
+            Bundle state = inState.getBundle(idkey);
+            if (state == null || state.isEmpty()) {
+                // Skip tab
+                continue;
+            } else if (!restoreIncognitoTabs
+                    && state.getBoolean(Tab.INCOGNITO)) {
+                // ignore tab
+            } else if (id == currentId || restoreAll) {
                 Tab t = createNewTab();
+                tabMap.put(id, t);
                 // Me must set the current tab before restoring the state
                 // so that all the client classes are set.
-                if (i == currentTab) {
+                if (id == currentId) {
                     setCurrentTab(t);
                 }
                 if (!t.restoreState(state)) {
@@ -360,11 +382,12 @@
                     t.getWebView().loadUrl(BrowserSettings.getInstance()
                             .getHomePage());
                 }
-                originalTabIndices.put(i, getTabCount() - 1);
             } else {
                 // Create a new tab and don't restore the state yet, add it
                 // to the tab list
-                Tab t = new Tab(mController, null, false, null, null);
+                Tab t = new Tab(mController, null);
+                t.setId(id);
+                tabMap.put(id, t);
                 if (state != null) {
                     t.setSavedState(state);
                     // Need to maintain the app id and original url so we
@@ -374,25 +397,51 @@
                 mTabs.add(t);
                 // added the tab to the front as they are not current
                 mTabQueue.add(0, t);
-                originalTabIndices.put(i, getTabCount() - 1);
+            }
+            // make sure that there is no id overlap between the restored
+            // and new tabs
+            sNextId = maxId + 1;
+
+        }
+        if (mCurrentTab == -1) {
+            if (getTabCount() > 0) {
+                setCurrentTab(getTab(0));
+            } else {
+                Tab t = createNewTab();
+                setCurrentTab(t);
+                t.getWebView().loadUrl(BrowserSettings.getInstance()
+                        .getHomePage());
             }
         }
-
-        // Rebuild the tree of tabs. Do this after all tabs have been
-        // created/restored so that the parent tab exists.
-        for (int i = 0; i < numTabs; i++) {
-            final Bundle b = inState.getBundle(Tab.WEBVIEW + i);
-            final Tab t = getTab(i);
-            if (b != null && t != null) {
-                final Integer parentIndex = originalTabIndices.get(b.getInt(Tab.PARENTTAB, -1));
-                if (parentIndex != -1) {
-                    final Tab parent = getTab(parentIndex);
+        // restore parent/child relationships
+        for (long id : ids) {
+            final Tab tab = tabMap.get(id);
+            final Bundle b = inState.getBundle(Long.toString(id));
+            if ((b != null) && (tab != null)) {
+                final long parentId = b.getLong(Tab.PARENTTAB, -1);
+                if (parentId != -1) {
+                    final Tab parent = tabMap.get(parentId);
                     if (parent != null) {
-                        parent.addChildTab(t);
+                        parent.addChildTab(tab);
                     }
                 }
             }
         }
+        loadSnapshotTabs();
+
+    }
+
+    void loadSnapshotTabs() {
+        ContentResolver cr = mController.getActivity().getContentResolver();
+        Cursor c = cr.query(Snapshots.CONTENT_URI, new String[] { "_id" },
+                null, null, null);
+        try {
+            while (c.moveToNext()) {
+                createSnapshotTab(c.getLong(0));
+            }
+        } finally {
+            c.close();
+        }
     }
 
     /**
@@ -443,7 +492,7 @@
         for (Tab t : mTabQueue) {
             if (t != null && t.getWebView() != null) {
                 openTabCount++;
-                if (t != current && t != current.getParentTab()) {
+                if (t != current && t != current.getParent()) {
                     tabsToGo.add(t);
                 }
             }
@@ -462,9 +511,7 @@
      * @param view The WebView used to find the tab.
      */
     Tab getTabFromView(WebView view) {
-        final int size = getTabCount();
-        for (int i = 0; i < size; i++) {
-            final Tab t = getTab(i);
+        for (Tab t : mTabs) {
             if (t.getSubWebView() == view || t.getWebView() == view) {
                 return t;
             }
@@ -476,13 +523,11 @@
      * Return the tab with the matching application id.
      * @param id The application identifier.
      */
-    Tab getTabFromId(String id) {
+    Tab getTabFromAppId(String id) {
         if (id == null) {
             return null;
         }
-        final int size = getTabCount();
-        for (int i = 0; i < size; i++) {
-            final Tab t = getTab(i);
+        for (Tab t : mTabs) {
             if (id.equals(t.getAppId())) {
                 return t;
             }
@@ -494,9 +539,7 @@
      * Stop loading in all opened WebView including subWindows.
      */
     void stopAllLoading() {
-        final int size = getTabCount();
-        for (int i = 0; i < size; i++) {
-            final Tab t = getTab(i);
+        for (Tab t : mTabs) {
             final WebView webview = t.getWebView();
             if (webview != null) {
                 webview.stopLoading();
@@ -539,10 +582,8 @@
             return t;
         }
         // Now check all the rest.
-        final int size = getTabCount();
-        for (int i = 0; i < size; i++) {
-            t = getTab(i);
-            if (tabMatchesUrl(t, url)) {
+        for (Tab tab : mTabs) {
+            if (tabMatchesUrl(tab, url)) {
                 return t;
             }
         }
@@ -618,7 +659,7 @@
         // Display the new current tab
         mCurrentTab = mTabs.indexOf(newTab);
         WebView mainView = newTab.getWebView();
-        boolean needRestore = (mainView == null);
+        boolean needRestore = !newTab.isSnapshot() && (mainView == null);
         if (needRestore) {
             // Same work as in createNewTab() except don't do new Tab()
             mainView = createNewWebView();
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
deleted file mode 100644
index 686416c..0000000
--- a/src/com/android/browser/TitleBar.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.speech.RecognizerIntent;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.style.ImageSpan;
-import android.view.ContextMenu;
-import android.view.LayoutInflater;
-import android.view.MenuInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnFocusChangeListener;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-
-/**
- * This class represents a title bar for a particular "tab" or "window" in the
- * browser.
- */
-public class TitleBar extends TitleBarBase implements OnFocusChangeListener,
-        OnClickListener {
-
-    private Activity mActivity;
-    private ImageButton mBookmarkButton;
-    private PageProgressView mHorizontalProgress;
-    private ImageButton mStopButton;
-    private Drawable mBookmarkDrawable;
-    private Drawable mVoiceDrawable;
-    private boolean mInLoad;
-    private Intent mVoiceSearchIntent;
-    private ImageSpan mArcsSpan;
-
-    public TitleBar(Activity activity, UiController controller, PhoneUi ui) {
-        super(activity, controller, ui);
-        LayoutInflater factory = LayoutInflater.from(activity);
-        factory.inflate(R.layout.title_bar, this);
-        mActivity = activity;
-
-        mUrlInput = (UrlInputView) findViewById(R.id.url_input);
-        mUrlInput.setCompoundDrawablePadding(5);
-        mUrlInput.setContainer(this);
-        mUrlInput.setSelectAllOnFocus(true);
-        mUrlInput.setController(mUiController);
-        mUrlInput.setUrlInputListener(this);
-        mUrlInput.setOnFocusChangeListener(this);
-
-        mLockIcon = (ImageView) findViewById(R.id.lock);
-        mFavicon = (ImageView) findViewById(R.id.favicon);
-        mStopButton = (ImageButton) findViewById(R.id.stop);
-        mBookmarkButton = (ImageButton) findViewById(R.id.bookmark);
-        mStopButton.setOnClickListener(this);
-        mBookmarkButton.setOnClickListener(this);
-
-        mHorizontalProgress = (PageProgressView) findViewById(
-                R.id.progress_horizontal);
-        mVoiceSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
-        mVoiceSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
-                RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
-        // This extra tells voice search not to send the application id in its
-        // results intent - http://b/2546173
-        //
-        // TODO: Make a constant for this extra.
-        mVoiceSearchIntent.putExtra("android.speech.extras.SEND_APPLICATION_ID_EXTRA",
-                false);
-        PackageManager pm = activity.getPackageManager();
-        ResolveInfo ri = pm.resolveActivity(mVoiceSearchIntent,
-                PackageManager.MATCH_DEFAULT_ONLY);
-        Resources resources = getResources();
-        if (ri == null) {
-            mVoiceSearchIntent = null;
-        } else {
-            mVoiceDrawable = resources.getDrawable(
-                    android.R.drawable.ic_btn_speak_now);
-        }
-        mBookmarkDrawable = mBookmarkButton.getDrawable();
-        mArcsSpan = new ImageSpan(activity, R.drawable.arcs,
-                ImageSpan.ALIGN_BASELINE);
-    }
-
-    @Override
-    public void createContextMenu(ContextMenu menu) {
-        MenuInflater inflater = mActivity.getMenuInflater();
-        inflater.inflate(R.menu.title_context, menu);
-        mActivity.onCreateContextMenu(menu, this, null);
-    }
-
-    /**
-     * Change the TitleBar to or from voice mode.  If there is no package to
-     * handle voice search, the TitleBar cannot be set to voice mode.
-     */
-    @Override
-    void setInVoiceMode(boolean inVoiceMode) {
-        if (mInVoiceMode == inVoiceMode) return;
-        mInVoiceMode = inVoiceMode && mVoiceSearchIntent != null;
-        Drawable titleDrawable;
-        if (mInVoiceMode) {
-            mBookmarkButton.setImageDrawable(mVoiceDrawable);
-            mUrlInput.setEllipsize(null);
-            mBookmarkButton.setVisibility(View.VISIBLE);
-            mStopButton.setVisibility(View.GONE);
-        } else {
-            if (mInLoad) {
-                mBookmarkButton.setVisibility(View.GONE);
-                mStopButton.setVisibility(View.VISIBLE);
-            } else {
-                mBookmarkButton.setVisibility(View.VISIBLE);
-                mStopButton.setVisibility(View.GONE);
-                mBookmarkButton.setImageDrawable(mBookmarkDrawable);
-            }
-            mUrlInput.setEllipsize(TextUtils.TruncateAt.END);
-        }
-        mUrlInput.setSingleLine(!mInVoiceMode);
-    }
-
-    /**
-     * Update the progress, from 0 to 100.
-     */
-    @Override
-    void setProgress(int newProgress) {
-        if (newProgress >= PROGRESS_MAX) {
-            mHorizontalProgress.setVisibility(View.GONE);
-            if (!mInVoiceMode) {
-                mBookmarkButton.setImageDrawable(mBookmarkDrawable);
-                mBookmarkButton.setVisibility(View.VISIBLE);
-                mStopButton.setVisibility(View.GONE);
-            }
-            mInLoad = false;
-        } else {
-            mHorizontalProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS
-                    / PROGRESS_MAX);
-            if (!mInLoad) {
-                mHorizontalProgress.setVisibility(View.VISIBLE);
-                if (!mInVoiceMode) {
-                    mBookmarkButton.setVisibility(View.GONE);
-                    mStopButton.setVisibility(View.VISIBLE);
-                }
-                mInLoad = true;
-            }
-        }
-    }
-
-    /**
-     * Update the text displayed in the title bar.
-     * @param title String to display.  If null, the new tab string will be
-     *      shown.
-     */
-    @Override
-    void setDisplayTitle(String title) {
-        if (title == null) {
-            mUrlInput.setText(R.string.new_tab);
-        } else {
-            if (mInVoiceMode) {
-                // Add two spaces.  The second one will be replaced with an
-                // image, and the first one will put space between it and the
-                // text
-                SpannableString spannable = new SpannableString(title + "  ");
-                int end = spannable.length();
-                spannable.setSpan(mArcsSpan, end - 1, end,
-                        Spanned.SPAN_MARK_POINT);
-                mUrlInput.setText(spannable);
-            } else {
-                mUrlInput.setText(title);
-            }
-        }
-    }
-
-    @Override
-    public void onFocusChange(View v, boolean hasFocus) {
-        if (v == mUrlInput && hasFocus) {
-            mActivity.closeOptionsMenu();
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mStopButton) {
-            mUiController.stopLoading();
-        } else if (v == mBookmarkButton) {
-            mUiController.bookmarkCurrentPage(AddBookmarkPage.DEFAULT_FOLDER_ID,
-                    true);
-        }
-    }
-
-    @Override
-    public void setCurrentUrlIsBookmark(boolean isBookmark) {
-        mBookmarkButton.setActivated(isBookmark);
-    }
-}
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index b905d4e..e2c3432 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -16,27 +16,56 @@
 
 package com.android.browser;
 
+import com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.UrlInputView.UrlInputListener;
+import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
 
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ObjectAnimator;
 import android.app.SearchManager;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.graphics.drawable.PaintDrawable;
 import android.os.Bundle;
 import android.speech.RecognizerResultsIntent;
+import android.text.TextUtils;
+import android.view.ContextThemeWrapper;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.webkit.WebView;
+import android.widget.AbsoluteLayout;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnMenuItemClickListener;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import java.util.List;
 
 /**
  * Base class for a title bar used by the browser.
  */
-public class TitleBarBase extends LinearLayout implements UrlInputListener {
+public class TitleBarBase extends RelativeLayout
+        implements OnClickListener, OnFocusChangeListener, UrlInputListener,
+        TextChangeWatcher, DeviceAccountLogin.AutoLoginCallback,
+        OnMenuItemClickListener {
 
     protected static final int PROGRESS_MAX = 100;
 
@@ -44,22 +73,208 @@
     protected ImageView mFavicon;
     protected ImageView mLockIcon;
 
-    protected Drawable mGenericFavicon;
     protected UiController mUiController;
     protected BaseUi mBaseUi;
+    protected FrameLayout mParent;
+    protected PageProgressView mProgress;
     protected UrlInputView mUrlInput;
     protected boolean mInVoiceMode;
+    protected View mContainer;
+    private View mUaSwitcher;
 
-    public TitleBarBase(Context context, UiController controller, BaseUi ui) {
+    // Auto-login UI
+    protected View mAutoLogin;
+    protected Spinner mAutoLoginAccount;
+    protected Button mAutoLoginLogin;
+    protected ProgressBar mAutoLoginProgress;
+    protected TextView mAutoLoginError;
+    protected View mAutoLoginCancel;
+    protected DeviceAccountLogin mAutoLoginHandler;
+    protected ArrayAdapter<String> mAccountsAdapter;
+    protected boolean mUseQuickControls;
+
+    //state
+    protected boolean mShowing;
+    protected boolean mInLoad;
+    protected boolean mSkipTitleBarAnimations;
+    private Animator mTitleBarAnimator;
+
+    public TitleBarBase(Context context, UiController controller, BaseUi ui,
+            FrameLayout parent) {
         super(context, null);
         mUiController = controller;
         mBaseUi = ui;
-        mGenericFavicon = context.getResources().getDrawable(
-                R.drawable.app_web_browser_sm);
+        mParent = parent;
     }
 
-    /* package */ void setProgress(int newProgress) {}
-    /* package */ void setDisplayTitle(String title) {}
+    protected void initLayout(Context context, int layoutId) {
+        LayoutInflater factory = LayoutInflater.from(context);
+        factory.inflate(layoutId, this);
+        mContainer = findViewById(R.id.taburlbar);
+        mProgress = (PageProgressView) findViewById(R.id.progress);
+        mUrlInput = (UrlInputView) findViewById(R.id.url);
+        mLockIcon = (ImageView) findViewById(R.id.lock);
+        mUrlInput.setUrlInputListener(this);
+        mUrlInput.setController(mUiController);
+        mUrlInput.setOnFocusChangeListener(this);
+        mUrlInput.setSelectAllOnFocus(true);
+        mUrlInput.addQueryTextWatcher(this);
+        mAutoLogin = findViewById(R.id.autologin);
+        mAutoLoginAccount = (Spinner) findViewById(R.id.autologin_account);
+        mAutoLoginLogin = (Button) findViewById(R.id.autologin_login);
+        mAutoLoginLogin.setOnClickListener(this);
+        mAutoLoginProgress = (ProgressBar) findViewById(R.id.autologin_progress);
+        mAutoLoginError = (TextView) findViewById(R.id.autologin_error);
+        mAutoLoginCancel = mAutoLogin.findViewById(R.id.autologin_close);
+        mAutoLoginCancel.setOnClickListener(this);
+    }
+
+    protected void setupUrlInput() {
+    }
+
+    protected void setUseQuickControls(boolean use) {
+        mUseQuickControls = use;
+        setLayoutParams(makeLayoutParams());
+    }
+
+    void setShowProgressOnly(boolean progress) {
+        if (progress && !inAutoLogin()) {
+            mContainer.setVisibility(View.GONE);
+        } else {
+            mContainer.setVisibility(View.VISIBLE);
+        }
+    }
+
+    void setSkipTitleBarAnimations(boolean skip) {
+        mSkipTitleBarAnimations = skip;
+    }
+
+    void show() {
+        if (mUseQuickControls) {
+            mParent.addView(this);
+        } else {
+            if (!mSkipTitleBarAnimations) {
+                cancelTitleBarAnimation(false);
+                int visibleHeight = getVisibleTitleHeight();
+                float startPos = (-getEmbeddedHeight() + visibleHeight);
+                if (getTranslationY() != 0) {
+                    startPos = Math.max(startPos, getTranslationY());
+                }
+                mTitleBarAnimator = ObjectAnimator.ofFloat(this,
+                        "translationY",
+                        startPos, 0);
+                mTitleBarAnimator.start();
+            }
+            mBaseUi.setTitleGravity(Gravity.TOP);
+        }
+        mShowing = true;
+    }
+
+    void hide() {
+        if (mUseQuickControls) {
+            mParent.removeView(this);
+        } else {
+            if (!mSkipTitleBarAnimations) {
+                cancelTitleBarAnimation(false);
+                int visibleHeight = getVisibleTitleHeight();
+                mTitleBarAnimator = ObjectAnimator.ofFloat(this,
+                        "translationY", getTranslationY(),
+                        (-getEmbeddedHeight() + visibleHeight));
+                mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
+                mTitleBarAnimator.start();
+            } else {
+                mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
+            }
+        }
+        mShowing = false;
+    }
+
+    boolean isShowing() {
+        return mShowing;
+    }
+
+    void cancelTitleBarAnimation(boolean reset) {
+        if (mTitleBarAnimator != null) {
+            mTitleBarAnimator.cancel();
+            mTitleBarAnimator = null;
+        }
+        if (reset) {
+            setTranslationY(0);
+        }
+    }
+
+    private AnimatorListener mHideTileBarAnimatorListener = new AnimatorListener() {
+
+        boolean mWasCanceled;
+        @Override
+        public void onAnimationStart(Animator animation) {
+            mWasCanceled = false;
+            mUrlInput.setEnabled(false);
+        }
+
+        @Override
+        public void onAnimationRepeat(Animator animation) {
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            if (!mWasCanceled) {
+                setTranslationY(0);
+            }
+            mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
+            mUrlInput.setEnabled(true);
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mWasCanceled = true;
+        }
+    };
+
+    private int getVisibleTitleHeight() {
+        Tab tab = mBaseUi.getActiveTab();
+        WebView webview = tab != null ? tab.getWebView() : null;
+        return webview != null ? webview.getVisibleTitleHeight() : 0;
+    }
+
+    /**
+     * Update the progress, from 0 to 100.
+     */
+    void setProgress(int newProgress) {
+        if (newProgress >= PROGRESS_MAX) {
+            mProgress.setProgress(PageProgressView.MAX_PROGRESS);
+            mProgress.setVisibility(View.GONE);
+            mInLoad = false;
+            onProgressStopped();
+            // check if needs to be hidden
+            if (!isEditingUrl() && !inAutoLogin()) {
+                hide();
+                if (mUseQuickControls) {
+                    setShowProgressOnly(false);
+                }
+            }
+        } else {
+            if (!mInLoad) {
+                mProgress.setVisibility(View.VISIBLE);
+                mInLoad = true;
+                onProgressStarted();
+            }
+            mProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS
+                    / PROGRESS_MAX);
+            if (!mShowing) {
+                if (mUseQuickControls && !isEditingUrl()) {
+                    setShowProgressOnly(true);
+                }
+                show();
+            }
+        }
+    }
+
+    protected void onProgressStarted() {
+    }
+
+    protected void onProgressStopped() {
+    }
 
     /* package */ void setLock(Drawable d) {
         assert mLockIcon != null;
@@ -72,28 +287,249 @@
     }
 
     /* package */ void setFavicon(Bitmap icon) {
-        assert mFavicon != null;
-        Drawable[] array = new Drawable[3];
-        array[0] = new PaintDrawable(Color.BLACK);
-        PaintDrawable p = new PaintDrawable(Color.WHITE);
-        array[1] = p;
-        if (icon == null) {
-            array[2] = mGenericFavicon;
-        } else {
-            array[2] = new BitmapDrawable(icon);
-        }
-        LayerDrawable d = new LayerDrawable(array);
-        d.setLayerInset(1, 1, 1, 1, 1);
-        d.setLayerInset(2, 2, 2, 2, 2);
-        mFavicon.setImageDrawable(d);
+        mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
     }
 
-    /* package */ void setInVoiceMode(boolean inVoiceMode) {}
-
-    /* package */ void setIncognitoMode(boolean incognito) {}
-
     public int getEmbeddedHeight() {
-        return getHeight();
+        int height = mContainer.getHeight();
+        if (mAutoLogin.getVisibility() == View.VISIBLE) {
+            height += mAutoLogin.getHeight();
+        }
+        return height;
+    }
+
+    protected void updateAutoLogin(Tab tab, boolean animate) {
+        DeviceAccountLogin login = tab.getDeviceAccountLogin();
+        if (login != null) {
+            mAutoLoginHandler = login;
+            ContextThemeWrapper wrapper = new ContextThemeWrapper(mContext,
+                    android.R.style.Theme_Holo_Light);
+            mAccountsAdapter = new ArrayAdapter<String>(wrapper,
+                    android.R.layout.simple_spinner_item, login.getAccountNames());
+            mAccountsAdapter.setDropDownViewResource(
+                    android.R.layout.simple_spinner_dropdown_item);
+            mAutoLoginAccount.setAdapter(mAccountsAdapter);
+            mAutoLoginAccount.setSelection(0);
+            mAutoLoginAccount.setEnabled(true);
+            mAutoLoginLogin.setEnabled(true);
+            mAutoLoginProgress.setVisibility(View.INVISIBLE);
+            mAutoLoginError.setVisibility(View.GONE);
+            switch (login.getState()) {
+                case DeviceAccountLogin.PROCESSING:
+                    mAutoLoginAccount.setEnabled(false);
+                    mAutoLoginLogin.setEnabled(false);
+                    mAutoLoginProgress.setVisibility(View.VISIBLE);
+                    break;
+                case DeviceAccountLogin.FAILED:
+                    mAutoLoginProgress.setVisibility(View.INVISIBLE);
+                    mAutoLoginError.setVisibility(View.VISIBLE);
+                    break;
+                case DeviceAccountLogin.INITIAL:
+                    break;
+                default:
+                    throw new IllegalStateException();
+            }
+            showAutoLogin(animate);
+        } else {
+            hideAutoLogin(animate);
+        }
+    }
+
+    protected void showAutoLogin(boolean animate) {
+        if (mUseQuickControls) {
+            mBaseUi.showTitleBar();
+        }
+        mAutoLogin.setVisibility(View.VISIBLE);
+        if (animate) {
+            mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
+                    getContext(), R.anim.autologin_enter));
+        }
+    }
+
+    protected void hideAutoLogin(boolean animate) {
+        mAutoLoginHandler = null;
+        if (mUseQuickControls) {
+            mBaseUi.hideTitleBar();
+            mAutoLogin.setVisibility(View.GONE);
+            mBaseUi.refreshWebView();
+        } else {
+            if (animate) {
+                Animation anim = AnimationUtils.loadAnimation(getContext(),
+                        R.anim.autologin_exit);
+                anim.setAnimationListener(new AnimationListener() {
+                    @Override
+                    public void onAnimationEnd(Animation a) {
+                        mAutoLogin.setVisibility(View.GONE);
+                        mBaseUi.refreshWebView();
+                    }
+
+                    @Override
+                    public void onAnimationStart(Animation a) {
+                    }
+
+                    @Override
+                    public void onAnimationRepeat(Animation a) {
+                    }
+                });
+                mAutoLogin.startAnimation(anim);
+            } else if (mAutoLogin.getAnimation() == null) {
+                mAutoLogin.setVisibility(View.GONE);
+                mBaseUi.refreshWebView();
+            }
+        }
+    }
+
+    @Override
+    public void loginFailed() {
+        mAutoLoginAccount.setEnabled(true);
+        mAutoLoginLogin.setEnabled(true);
+        mAutoLoginProgress.setVisibility(View.INVISIBLE);
+        mAutoLoginError.setVisibility(View.VISIBLE);
+    }
+
+
+    protected boolean inAutoLogin() {
+        return mAutoLoginHandler != null;
+    }
+
+    public void setUaSwitcher(View v) {
+        if (mUaSwitcher != null) {
+            mUaSwitcher.setOnClickListener(null);
+        }
+        mUaSwitcher = v;
+        mUaSwitcher.setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (mAutoLoginCancel == v) {
+            if (mAutoLoginHandler != null) {
+                mAutoLoginHandler.cancel();
+                mAutoLoginHandler = null;
+            }
+            hideAutoLogin(true);
+        } else if (mAutoLoginLogin == v) {
+            if (mAutoLoginHandler != null) {
+                mAutoLoginAccount.setEnabled(false);
+                mAutoLoginLogin.setEnabled(false);
+                mAutoLoginProgress.setVisibility(View.VISIBLE);
+                mAutoLoginError.setVisibility(View.GONE);
+                mAutoLoginHandler.login(
+                        mAutoLoginAccount.getSelectedItemPosition(), this);
+            }
+        } else if (mUaSwitcher == v) {
+            BrowserSettings settings = BrowserSettings.getInstance();
+            WebView web = getCurrentWebView();
+            if (web == null) return;
+            boolean desktop = settings.hasDesktopUseragent(web);
+            PopupMenu popup = new PopupMenu(mContext, mUaSwitcher);
+            Menu menu = popup.getMenu();
+            popup.getMenuInflater().inflate(R.menu.ua_switcher, menu);
+            menu.findItem(R.id.ua_mobile_menu_id).setChecked(!desktop);
+            menu.findItem(R.id.ua_desktop_menu_id).setChecked(desktop);
+            popup.setOnMenuItemClickListener(this);
+            popup.show();
+        }
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        BrowserSettings settings = BrowserSettings.getInstance();
+        WebView web = getCurrentWebView();
+        if (web == null) return false;
+        boolean desktop = settings.hasDesktopUseragent(web);
+        switch (item.getItemId()) {
+        case R.id.ua_mobile_menu_id:
+            if (desktop) {
+                settings.toggleDesktopUseragent(web);
+                web.loadUrl(web.getOriginalUrl());
+            }
+            return true;
+        case R.id.ua_desktop_menu_id:
+            if (!desktop) {
+                settings.toggleDesktopUseragent(web);
+                web.loadUrl(web.getOriginalUrl());
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void onFocusChange(View view, boolean hasFocus) {
+        // if losing focus and not in touch mode, leave as is
+        if (hasFocus || view.isInTouchMode() || mUrlInput.needsUpdate()) {
+            setFocusState(hasFocus);
+        }
+        if (hasFocus) {
+            mUrlInput.forceIme();
+            if (mInVoiceMode) {
+                mUrlInput.forceFilter();
+            }
+        } else if (!mUrlInput.needsUpdate()) {
+            mUrlInput.dismissDropDown();
+            mUrlInput.hideIME();
+            if (mUrlInput.getText().length() == 0) {
+                Tab currentTab = mUiController.getTabControl().getCurrentTab();
+                if (currentTab != null) {
+                    mUrlInput.setText(currentTab.getUrl(), false);
+                }
+            }
+        }
+        mUrlInput.clearNeedsUpdate();
+    }
+
+    protected void setFocusState(boolean focus) {
+        if (focus) {
+            updateSearchMode(false);
+        }
+    }
+
+    protected void updateSearchMode(boolean userEdited) {
+        setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getUserText()));
+    }
+
+    protected void setSearchMode(boolean voiceSearchEnabled) {}
+
+    boolean isEditingUrl() {
+        return mUrlInput.hasFocus();
+    }
+
+    void stopEditingUrl() {
+        mUrlInput.clearFocus();
+    }
+
+    void setDisplayTitle(String title) {
+        if (!isEditingUrl()) {
+            mUrlInput.setText(title, false);
+        }
+    }
+
+    // UrlInput text watcher
+
+    @Override
+    public void onTextChanged(String newText) {
+        if (mUrlInput.hasFocus()) {
+            // check if input field is empty and adjust voice search state
+            updateSearchMode(true);
+            // clear voice mode when user types
+            setInVoiceMode(false, null);
+        }
+    }
+
+    // voicesearch
+
+    public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
+        mInVoiceMode = voicemode;
+        mUrlInput.setVoiceResults(voiceResults);
+    }
+
+    void setIncognitoMode(boolean incognito) {
+        mUrlInput.setIncognitoMode(incognito);
+    }
+
+    void clearCompletions() {
+        mUrlInput.setSuggestedText(null);
     }
 
     // UrlInputListener implementation
@@ -157,4 +593,58 @@
     public void setCurrentUrlIsBookmark(boolean isBookmark) {
     }
 
+    @Override
+    public boolean dispatchKeyEventPreIme(KeyEvent evt) {
+        if (evt.getKeyCode() == KeyEvent.KEYCODE_BACK) {
+            // catch back key in order to do slightly more cleanup than usual
+            mUrlInput.clearFocus();
+            return true;
+        }
+        return super.dispatchKeyEventPreIme(evt);
+    }
+
+    protected WebView getCurrentWebView() {
+        Tab t = mBaseUi.getActiveTab();
+        if (t != null) {
+            return t.getWebView();
+        } else {
+            return null;
+        }
+    }
+
+    void registerDropdownChangeListener(DropdownChangeListener d) {
+        mUrlInput.registerDropdownChangeListener(d);
+    }
+
+    /**
+     * called from the Ui when the user wants to edit
+     * @param clearInput clear the input field
+     */
+    void startEditingUrl(boolean clearInput) {
+        // editing takes preference of progress
+        mContainer.setVisibility(View.VISIBLE);
+        if (mUseQuickControls) {
+            mProgress.setVisibility(View.GONE);
+        }
+        if (!mUrlInput.hasFocus()) {
+            mUrlInput.requestFocus();
+        }
+        if (clearInput) {
+            mUrlInput.setText("");
+        } else if (mInVoiceMode) {
+            mUrlInput.showDropDown();
+        }
+    }
+
+    private ViewGroup.LayoutParams makeLayoutParams() {
+        if (mUseQuickControls) {
+            return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+                    LayoutParams.WRAP_CONTENT);
+        } else {
+            return new AbsoluteLayout.LayoutParams(
+                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
+                    0, 0);
+        }
+    }
+
 }
diff --git a/src/com/android/browser/TitleBarPhone.java b/src/com/android/browser/TitleBarPhone.java
new file mode 100644
index 0000000..de5fb7f
--- /dev/null
+++ b/src/com/android/browser/TitleBarPhone.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.view.ContextMenu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.webkit.WebView;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+
+import java.util.List;
+
+/**
+ * This class represents a title bar for a particular "tab" or "window" in the
+ * browser.
+ */
+public class TitleBarPhone extends TitleBarBase implements OnFocusChangeListener,
+        OnClickListener, TextChangeWatcher {
+
+    private Activity mActivity;
+    private ImageView mStopButton;
+    private ImageView mVoiceButton;
+    private boolean mHasLockIcon;
+    private ImageButton mForward;
+    private Drawable mStopDrawable;
+    private Drawable mRefreshDrawable;
+
+    public TitleBarPhone(Activity activity, UiController controller, PhoneUi ui,
+            FrameLayout parent) {
+        super(activity, controller, ui, parent);
+        mActivity = activity;
+        initLayout(activity, R.layout.title_bar);
+    }
+
+    @Override
+    protected void initLayout(Context context, int layoutId) {
+        super.initLayout(context, layoutId);
+        mLockIcon = (ImageView) findViewById(R.id.lock);
+        mFavicon = (ImageView) findViewById(R.id.favicon);
+        mStopButton = (ImageView) findViewById(R.id.stop);
+        mStopButton.setOnClickListener(this);
+        mVoiceButton = (ImageView) findViewById(R.id.voice);
+        mVoiceButton.setOnClickListener(this);
+        mForward = (ImageButton) findViewById(R.id.forward);
+        mForward.setOnClickListener(this);
+        setFocusState(false);
+        Resources res = context.getResources();
+        mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark);
+        mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark);
+        setUaSwitcher(mFavicon);
+        mUrlInput.setContainer(this);
+    }
+
+    @Override
+    public void createContextMenu(ContextMenu menu) {
+        MenuInflater inflater = mActivity.getMenuInflater();
+        inflater.inflate(R.menu.title_context, menu);
+        mActivity.onCreateContextMenu(menu, this, null);
+    }
+
+    @Override
+    public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
+        super.setInVoiceMode(voicemode, voiceResults);
+    }
+
+    @Override
+    protected void setSearchMode(boolean voiceSearchEnabled) {
+        boolean showvoicebutton = voiceSearchEnabled &&
+                mUiController.supportsVoiceSearch();
+        mVoiceButton.setVisibility(showvoicebutton ? View.VISIBLE :
+                View.GONE);
+    }
+
+    @Override
+    protected void setFocusState(boolean focus) {
+        super.setFocusState(focus);
+        if (focus) {
+            mHasLockIcon = (mLockIcon.getVisibility() == View.VISIBLE);
+            mLockIcon.setVisibility(View.GONE);
+            mStopButton.setVisibility(View.GONE);
+            mVoiceButton.setVisibility(View.VISIBLE);
+        } else {
+            mLockIcon.setVisibility(mHasLockIcon ? View.VISIBLE : View.GONE);
+            mStopButton.setVisibility(View.VISIBLE);
+            mVoiceButton.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
+    void setProgress(int progress) {
+        super.setProgress(progress);
+        if (progress == 100) {
+            mStopButton.setImageDrawable(mRefreshDrawable);
+        } else if (mStopButton.getDrawable() != mStopDrawable) {
+            mStopButton.setImageDrawable(mStopDrawable);
+        }
+        updateNavigationState();
+    }
+
+    /**
+     * Update the text displayed in the title bar.
+     * @param title String to display.  If null, the new tab string will be
+     *      shown.
+     */
+    @Override
+    void setDisplayTitle(String title) {
+        if (!isEditingUrl()) {
+            if (title == null) {
+                mUrlInput.setText(R.string.new_tab);
+            } else {
+                mUrlInput.setText(title);
+            }
+            mUrlInput.setSelection(0);
+            updateNavigationState();
+        }
+    }
+
+    @Override
+    public void onFocusChange(View v, boolean hasFocus) {
+        if (v == mUrlInput) {
+            if (hasFocus) {
+                mActivity.closeOptionsMenu();
+            }
+        }
+        super.onFocusChange(v, hasFocus);
+        if (!hasFocus) {
+            mBaseUi.hideTitleBar();
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mStopButton) {
+            if (mInLoad) {
+                mUiController.stopLoading();
+            } else {
+                WebView web = mBaseUi.getWebView();
+                if (web != null) {
+                    web.reload();
+                }
+            }
+        } else if (v == mVoiceButton) {
+            mUiController.startVoiceSearch();
+        } else if (v == mForward) {
+            WebView web = mBaseUi.getWebView();
+            if (web != null) {
+                web.goForward();
+            }
+        } else {
+            super.onClick(v);
+        }
+    }
+
+    private void updateNavigationState() {
+        WebView web = mBaseUi.getWebView();
+        if (web != null) {
+          mForward.setVisibility(web.canGoForward() ? View.VISIBLE : View.GONE);
+        }
+    }
+
+}
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index e91597f..69f6949 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -16,41 +16,24 @@
 
 package com.android.browser;
 
-import com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-import com.android.browser.search.SearchEngine;
 
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
 import android.app.Activity;
 import android.content.Context;
-import android.content.res.Configuration;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.preference.PreferenceManager;
 import android.text.TextUtils;
-import android.view.ContextThemeWrapper;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
-import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
 import android.webkit.WebView;
-import android.widget.AbsoluteLayout;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.ImageView;
-import android.widget.ProgressBar;
-import android.widget.Spinner;
-import android.widget.TextView;
 
 import java.util.List;
 
@@ -66,39 +49,23 @@
     private Drawable mStopDrawable;
     private Drawable mReloadDrawable;
 
-    private View mContainer;
+    private View mUrlContainer;
     private ImageButton mBackButton;
     private ImageButton mForwardButton;
     private ImageView mStar;
     private ImageView mUrlIcon;
     private ImageView mSearchButton;
-    private View mUrlContainer;
-    private View mNavButtons;
     private View mGoButton;
     private ImageView mStopButton;
     private View mAllButton;
     private View mClearButton;
     private ImageView mVoiceSearch;
-    private PageProgressView mProgressView;
     private Drawable mFocusDrawable;
     private Drawable mUnfocusDrawable;
-    // Auto-login UI
-    private View mAutoLogin;
-    private Spinner mAutoLoginAccount;
-    private Button mAutoLoginLogin;
-    private ProgressBar mAutoLoginProgress;
-    private TextView mAutoLoginError;
-    private ImageButton mAutoLoginCancel;
-    private DeviceAccountLogin mAutoLoginHandler;
-    private ArrayAdapter<String> mAccountsAdapter;
-
-    private boolean mInLoad;
-    private boolean mUseQuickControls;
-    private boolean mHideNavButtons;
 
     public TitleBarXLarge(Activity activity, UiController controller,
-            XLargeUi ui) {
-        super(activity, controller, ui);
+            XLargeUi ui, FrameLayout parent) {
+        super(activity, controller, ui, parent);
         mUi = ui;
         Resources resources = activity.getResources();
         mStopDrawable = resources.getDrawable(R.drawable.ic_stop_holo_dark);
@@ -108,17 +75,12 @@
         mUnfocusDrawable = resources.getDrawable(
                 R.drawable.textfield_default_holo_dark);
         mInVoiceMode = false;
-        initLayout(activity);
+        initLayout(activity, R.layout.url_bar);
     }
 
-    private void initLayout(Context context) {
-        Resources res = mContext.getResources();
-        mHideNavButtons = res.getBoolean(R.bool.hide_nav_buttons);
-        LayoutInflater factory = LayoutInflater.from(context);
-        factory.inflate(R.layout.url_bar, this);
-
-        mContainer = findViewById(R.id.taburlbar);
-        mUrlInput = (UrlInputView) findViewById(R.id.url_focused);
+    @Override
+    protected void initLayout(Context context, int layoutId) {
+        super.initLayout(context, layoutId);
         mAllButton = findViewById(R.id.all_btn);
         // TODO: Change enabled states based on whether you can go
         // back/forward.  Probably should be done inside onPageStarted.
@@ -132,8 +94,6 @@
         mGoButton = findViewById(R.id.go);
         mClearButton = findViewById(R.id.clear);
         mVoiceSearch = (ImageView) findViewById(R.id.voicesearch);
-        mProgressView = (PageProgressView) findViewById(R.id.progress);
-        mNavButtons = findViewById(R.id.navbuttons);
         mUrlContainer = findViewById(R.id.urlbar_focused);
         mBackButton.setOnClickListener(this);
         mForwardButton.setOnClickListener(this);
@@ -144,45 +104,11 @@
         mGoButton.setOnClickListener(this);
         mClearButton.setOnClickListener(this);
         mVoiceSearch.setOnClickListener(this);
-        mUrlInput.setUrlInputListener(this);
+        setUaSwitcher(mUrlIcon);
         mUrlInput.setContainer(mUrlContainer);
-        mUrlInput.setController(mUiController);
-        mUrlInput.setOnFocusChangeListener(this);
-        mUrlInput.setSelectAllOnFocus(true);
-        mUrlInput.addQueryTextWatcher(this);
-        mAutoLogin = findViewById(R.id.autologin);
-        mAutoLoginAccount = (Spinner) findViewById(R.id.autologin_account);
-        mAutoLoginLogin = (Button) findViewById(R.id.autologin_login);
-        mAutoLoginLogin.setOnClickListener(this);
-        mAutoLoginProgress =
-                (ProgressBar) findViewById(R.id.autologin_progress);
-        mAutoLoginError = (TextView) findViewById(R.id.autologin_error);
-        mAutoLoginCancel =
-                (ImageButton) mAutoLogin.findViewById(R.id.autologin_close);
-        mAutoLoginCancel.setOnClickListener(this);
-
         setFocusState(false);
     }
 
-    @Override
-    public void onConfigurationChanged(Configuration config) {
-        super.onConfigurationChanged(config);
-        Resources res = mContext.getResources();
-        mHideNavButtons = res.getBoolean(R.bool.hide_nav_buttons);
-        if (mUrlInput.hasFocus()) {
-            if (mHideNavButtons && (mNavButtons.getVisibility() == View.VISIBLE)) {
-                int aw = mNavButtons.getMeasuredWidth();
-                mNavButtons.setVisibility(View.GONE);
-                mNavButtons.setAlpha(0f);
-                mNavButtons.setTranslationX(-aw);
-            } else if (!mHideNavButtons && (mNavButtons.getVisibility() == View.GONE)) {
-                mNavButtons.setVisibility(View.VISIBLE);
-                mNavButtons.setAlpha(1f);
-                mNavButtons.setTranslationX(0);
-            }
-        }
-    }
-
     void updateNavigationState(Tab tab) {
         WebView web = tab.getWebView();
         if (web != null) {
@@ -193,100 +119,7 @@
                     ? R.drawable.ic_forward_holo_dark
                     : R.drawable.ic_forward_disabled_holo_dark);
         }
-    }
-
-    void updateAutoLogin(Tab tab, boolean animate) {
-        DeviceAccountLogin login = tab.getDeviceAccountLogin();
-        if (login != null) {
-            mAutoLoginHandler = login;
-            mAutoLogin.setVisibility(View.VISIBLE);
-            ContextThemeWrapper wrapper = new ContextThemeWrapper(mContext,
-                    android.R.style.Theme_Holo_Light);
-            mAccountsAdapter = new ArrayAdapter<String>(wrapper,
-                    android.R.layout.simple_spinner_item, login.getAccountNames());
-            mAccountsAdapter.setDropDownViewResource(
-                    android.R.layout.simple_spinner_dropdown_item);
-            mAutoLoginAccount.setAdapter(mAccountsAdapter);
-            mAutoLoginAccount.setSelection(0);
-            mAutoLoginAccount.setEnabled(true);
-            mAutoLoginLogin.setEnabled(true);
-            mAutoLoginProgress.setVisibility(View.GONE);
-            mAutoLoginError.setVisibility(View.GONE);
-            switch (login.getState()) {
-                case DeviceAccountLogin.PROCESSING:
-                    mAutoLoginAccount.setEnabled(false);
-                    mAutoLoginLogin.setEnabled(false);
-                    mAutoLoginProgress.setVisibility(View.VISIBLE);
-                    break;
-                case DeviceAccountLogin.FAILED:
-                    mAutoLoginProgress.setVisibility(View.GONE);
-                    mAutoLoginError.setVisibility(View.VISIBLE);
-                    break;
-                case DeviceAccountLogin.INITIAL:
-                    break;
-                default:
-                    throw new IllegalStateException();
-            }
-            if (mUseQuickControls) {
-                mUi.showTitleBar();
-            } else {
-                if (animate) {
-                    mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
-                            getContext(), R.anim.autologin_enter));
-                }
-            }
-        } else {
-            mAutoLoginHandler = null;
-            if (mUseQuickControls) {
-                mUi.hideTitleBar();
-                mAutoLogin.setVisibility(View.GONE);
-                mUi.refreshWebView();
-            } else {
-                if (animate) {
-                    hideAutoLogin();
-                } else if (mAutoLogin.getAnimation() == null) {
-                    mAutoLogin.setVisibility(View.GONE);
-                    mUi.refreshWebView();
-                }
-            }
-        }
-    }
-
-    boolean inAutoLogin() {
-        return mAutoLoginHandler != null;
-    }
-
-    private ViewGroup.LayoutParams makeLayoutParams() {
-        if (mUseQuickControls) {
-            return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
-                    LayoutParams.WRAP_CONTENT);
-        } else {
-            return new AbsoluteLayout.LayoutParams(
-                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
-                    0, 0);
-        }
-    }
-
-    @Override
-    public int getEmbeddedHeight() {
-        int height = mContainer.getHeight();
-        if (mAutoLogin.getVisibility() == View.VISIBLE) {
-            height += mAutoLogin.getHeight();
-        }
-        return height;
-    }
-
-    void setUseQuickControls(boolean useQuickControls) {
-        mUseQuickControls = useQuickControls;
-        setLayoutParams(makeLayoutParams());
-    }
-
-    void setShowProgressOnly(boolean progress) {
-        if (progress && !inAutoLogin()) {
-            mContainer.setVisibility(View.GONE);
-        } else {
-            mContainer.setVisibility(View.VISIBLE);
-        }
+        updateUrlIcon();
     }
 
     @Override
@@ -324,47 +157,6 @@
         mStar.setActivated(isBookmark);
     }
 
-    /**
-     * called from the Ui when the user wants to edit
-     * @param clearInput clear the input field
-     */
-    void startEditingUrl(boolean clearInput) {
-        // editing takes preference of progress
-        mContainer.setVisibility(View.VISIBLE);
-        if (mUseQuickControls) {
-            mProgressView.setVisibility(View.GONE);
-        }
-        if (!mUrlInput.hasFocus()) {
-            mUrlInput.requestFocus();
-        }
-        if (clearInput) {
-            mUrlInput.setText("");
-        } else if (mInVoiceMode) {
-            mUrlInput.showDropDown();
-        }
-    }
-
-    boolean isEditingUrl() {
-        return mUrlInput.hasFocus();
-    }
-
-    void stopEditingUrl() {
-        mUrlInput.clearFocus();
-    }
-
-    private void hideAutoLogin() {
-        Animation anim = AnimationUtils.loadAnimation(
-                getContext(), R.anim.autologin_exit);
-        anim.setAnimationListener(new AnimationListener() {
-            @Override public void onAnimationEnd(Animation a) {
-                mAutoLogin.setVisibility(View.GONE);
-                mUi.refreshWebView();
-            }
-            @Override public void onAnimationStart(Animation a) {}
-            @Override public void onAnimationRepeat(Animation a) {}
-        });
-        mAutoLogin.startAnimation(anim);
-    }
 
     @Override
     public void onClick(View v) {
@@ -373,8 +165,7 @@
         } else if (mForwardButton == v) {
             mUiController.getCurrentTopWebView().goForward();
         } else if (mStar == v) {
-            mUiController.bookmarkCurrentPage(
-                    AddBookmarkPage.DEFAULT_FOLDER_ID, true);
+            mUiController.bookmarkCurrentPage(true);
         } else if (mAllButton == v) {
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mSearchButton == v) {
@@ -390,33 +181,12 @@
             clearOrClose();
         } else if (mVoiceSearch == v) {
             mUiController.startVoiceSearch();
-        } else if (mAutoLoginCancel == v) {
-            if (mAutoLoginHandler != null) {
-                mAutoLoginHandler.cancel();
-                mAutoLoginHandler = null;
-            }
-            hideAutoLogin();
-        } else if (mAutoLoginLogin == v) {
-            if (mAutoLoginHandler != null) {
-                mAutoLoginAccount.setEnabled(false);
-                mAutoLoginLogin.setEnabled(false);
-                mAutoLoginProgress.setVisibility(View.VISIBLE);
-                mAutoLoginError.setVisibility(View.GONE);
-                mAutoLoginHandler.login(
-                        mAutoLoginAccount.getSelectedItemPosition(), this);
-            }
+        } else {
+            super.onClick(v);
         }
     }
 
     @Override
-    public void loginFailed() {
-        mAutoLoginAccount.setEnabled(true);
-        mAutoLoginLogin.setEnabled(true);
-        mAutoLoginProgress.setVisibility(View.GONE);
-        mAutoLoginError.setVisibility(View.VISIBLE);
-    }
-
-    @Override
     void setFavicon(Bitmap icon) { }
 
     private void clearOrClose() {
@@ -429,22 +199,22 @@
         }
     }
 
-    private void setFocusState(boolean focus) {
+    void updateUrlIcon() {
+        mUrlIcon.setImageResource(mInVoiceMode ?
+                R.drawable.ic_search_holo_dark
+                : R.drawable.ic_web_holo_dark);
+    }
+
+    @Override
+    protected void setFocusState(boolean focus) {
+        super.setFocusState(focus);
         if (focus) {
-            if (mHideNavButtons) {
-                hideNavButtons();
-            }
-            mUrlInput.setDropDownWidth(mUrlContainer.getWidth());
-            mUrlInput.setDropDownHorizontalOffset(-mUrlInput.getLeft());
             mSearchButton.setVisibility(View.GONE);
             mStar.setVisibility(View.GONE);
             mClearButton.setVisibility(View.VISIBLE);
             mUrlIcon.setImageResource(R.drawable.ic_search_holo_dark);
             updateSearchMode(false);
         } else {
-            if (mHideNavButtons) {
-                showNavButtons();
-            }
             mGoButton.setVisibility(View.GONE);
             mVoiceSearch.setVisibility(View.GONE);
             mStar.setVisibility(View.VISIBLE);
@@ -454,9 +224,7 @@
             } else {
                 mSearchButton.setVisibility(View.VISIBLE);
             }
-            mUrlIcon.setImageResource(mInVoiceMode ?
-                    R.drawable.ic_search_holo_dark
-                    : R.drawable.ic_web_holo_dark);
+            updateUrlIcon();
         }
     }
 
@@ -468,41 +236,25 @@
         }
     }
 
-    /**
-     * Update the progress, from 0 to 100.
-     */
     @Override
-    void setProgress(int newProgress) {
-        boolean blockvisuals = mUseQuickControls && isEditingUrl();
-        if (newProgress >= PROGRESS_MAX) {
-            if (!blockvisuals) {
-                mProgressView.setProgress(PageProgressView.MAX_PROGRESS);
-                mProgressView.setVisibility(View.GONE);
-                mStopButton.setImageDrawable(mReloadDrawable);
-            }
-            mInLoad = false;
-        } else {
-            if (!mInLoad) {
-                if (!blockvisuals) {
-                    mProgressView.setVisibility(View.VISIBLE);
-                    mStopButton.setImageDrawable(mStopDrawable);
-                }
-                mInLoad = true;
-            }
-            mProgressView.setProgress(newProgress * PageProgressView.MAX_PROGRESS
-                    / PROGRESS_MAX);
-        }
+    protected void onProgressStarted() {
+        mStopButton.setImageDrawable(mStopDrawable);
     }
 
-    private void updateSearchMode(boolean userEdited) {
+    @Override
+    protected void onProgressStopped() {
+        mStopButton.setImageDrawable(mReloadDrawable);
+    }
+
+    @Override
+    protected void updateSearchMode(boolean userEdited) {
         setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getUserText()));
     }
 
-    private void setSearchMode(boolean voiceSearchEnabled) {
-        SearchEngine searchEngine = BrowserSettings.getInstance()
-                .getSearchEngine();
+    @Override
+    protected void setSearchMode(boolean voiceSearchEnabled) {
         boolean showvoicebutton = voiceSearchEnabled &&
-                (searchEngine != null && searchEngine.supportsVoiceSearch());
+                mUiController.supportsVoiceSearch();
         mVoiceSearch.setVisibility(showvoicebutton ? View.VISIBLE :
                 View.GONE);
         mGoButton.setVisibility(voiceSearchEnabled ? View.GONE :
@@ -510,45 +262,14 @@
     }
 
     @Override
-    /* package */ void setDisplayTitle(String title) {
-        if (!isEditingUrl()) {
-            mUrlInput.setText(title, false);
-        }
-    }
-
-    // UrlInput text watcher
-
-    @Override
-    public void onTextChanged(String newText) {
-        if (mUrlInput.hasFocus()) {
-            // check if input field is empty and adjust voice search state
-            updateSearchMode(true);
-            // clear voice mode when user types
-            setInVoiceMode(false, null);
-        }
-    }
-
-    // voicesearch
-
-    @Override
-    public void setInVoiceMode(boolean voicemode) {
-        setInVoiceMode(voicemode, null);
-    }
-
     public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
-        mInVoiceMode = voicemode;
-        mUrlInput.setVoiceResults(voiceResults);
+        super.setInVoiceMode(voicemode, voiceResults);
         if (voicemode) {
             mUrlIcon.setImageDrawable(mSearchButton.getDrawable());
         }
     }
 
     @Override
-    void setIncognitoMode(boolean incognito) {
-        mUrlInput.setIncognitoMode(incognito);
-    }
-
-    @Override
     public View focusSearch(View focused, int dir) {
         if (FOCUS_DOWN == dir && hasFocus()) {
             return getCurrentWebView();
@@ -556,74 +277,4 @@
         return super.focusSearch(focused, dir);
     }
 
-    void clearCompletions() {
-        mUrlInput.setSuggestedText(null);
-    }
-
-    @Override
-    public boolean dispatchKeyEventPreIme(KeyEvent evt) {
-        if (evt.getKeyCode() == KeyEvent.KEYCODE_BACK) {
-            // catch back key in order to do slightly more cleanup than usual
-            mUrlInput.clearFocus();
-            return true;
-        }
-        return super.dispatchKeyEventPreIme(evt);
-    }
-
-    private WebView getCurrentWebView() {
-        Tab t = mUi.getActiveTab();
-        if (t != null) {
-            return t.getWebView();
-        } else {
-            return null;
-        }
-    }
-
-    void registerDropdownChangeListener(DropdownChangeListener d) {
-        mUrlInput.registerDropdownChangeListener(d);
-    }
-
-    private void hideNavButtons() {
-        int awidth = mNavButtons.getMeasuredWidth();
-        Animator anim1 = ObjectAnimator.ofFloat(mNavButtons, "translationX", 0, - awidth);
-        Animator anim2 = ObjectAnimator.ofInt(mUrlContainer, "left", mUrlContainer.getLeft(),
-                mUrlContainer.getPaddingLeft());
-        Animator anim3 = ObjectAnimator.ofFloat(mNavButtons, "alpha", 1f, 0f);
-        AnimatorSet combo = new AnimatorSet();
-        combo.playTogether(anim1, anim2, anim3);
-        combo.addListener(new AnimatorListener() {
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mNavButtons.setVisibility(View.GONE);
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) {
-            }
-
-            @Override
-            public void onAnimationStart(Animator animation) {
-            }
-        });
-        combo.setDuration(150);
-        combo.start();
-    }
-
-    private void showNavButtons() {
-        int awidth = mNavButtons.getMeasuredWidth();
-        Animator anim1 = ObjectAnimator.ofFloat(mNavButtons, "translationX", -awidth, 0);
-        Animator anim2 = ObjectAnimator.ofInt(mUrlContainer, "left", 0, awidth);
-        Animator anim3 = ObjectAnimator.ofFloat(mNavButtons, "alpha", 0f, 1f);
-        AnimatorSet combo = new AnimatorSet();
-        combo.playTogether(anim1, anim2, anim3);
-        mNavButtons.setVisibility(View.VISIBLE);
-        combo.setDuration(150);
-        combo.start();
-    }
-
 }
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 368c829..a6356a3 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -43,6 +43,8 @@
 
     public boolean onBackKey();
 
+    public boolean onMenuKey();
+
     public boolean needsRestoreAllTabs();
 
     public void addTab(Tab tab);
@@ -79,13 +81,14 @@
 
     public void hideComboView();
 
-    public void showCustomView(View view, CustomViewCallback callback);
+    public void showCustomView(View view, int requestedOrientation,
+            CustomViewCallback callback);
 
     public void onHideCustomView();
 
     public boolean isCustomViewShowing();
 
-    public void showVoiceTitleBar(String title);
+    public void showVoiceTitleBar(String title, List<String> results);
 
     public void revertVoiceTitleBar(Tab tab);
 
@@ -132,4 +135,6 @@
     void showAutoLogin(Tab tab);
 
     void hideAutoLogin(Tab tab);
+
+    void setFullscreen(boolean enabled);
 }
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index 65fa5f8..05eaf8e 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -44,7 +44,12 @@
 
     Tab openIncognitoTab();
 
-    boolean switchToTab(int tabIndex);
+    Tab openTab(String url, boolean incognito, boolean setActive,
+            boolean useCurrent);
+
+    void setActiveTab(Tab tab);
+
+    boolean switchToTab(Tab tab);
 
     void closeCurrentTab();
 
@@ -52,14 +57,14 @@
 
     void stopLoading();
 
-    void bookmarkCurrentPage(long folderId, boolean canBeAnEdit);
+    void bookmarkCurrentPage(boolean canBeAnEdit);
 
     void bookmarksOrHistoryPicker(boolean openHistory);
 
-    void startSearch(String url);
-
     void startVoiceSearch();
 
+    boolean supportsVoiceSearch();
+
     void showVoiceSearchResults(String title);
 
     void editUrl();
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index b5b69ba..17d4062 100644
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -22,7 +22,9 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.database.Cursor;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.util.Log;
 import android.webkit.WebView;
 
@@ -35,6 +37,9 @@
  */
 public class UrlHandler {
 
+    static final String RLZ_PROVIDER = "com.google.android.partnersetup.rlzappprovider";
+    static final Uri RLZ_PROVIDER_URI = Uri.parse("content://" + RLZ_PROVIDER + "/");
+
     // Use in overrideUrlLoading
     /* package */ final static String SCHEME_WTAI = "wtai://wp/";
     /* package */ final static String SCHEME_WTAI_MC = "wtai://wp/mc;";
@@ -44,6 +49,9 @@
     Controller mController;
     Activity mActivity;
 
+    private Boolean mIsProviderPresent = null;
+    private Uri mRlzUri = null;
+
     public UrlHandler(Controller controller) {
         mController = controller;
         mActivity = mController.getActivity();
@@ -87,12 +95,25 @@
         }
 
         // The "about:" schemes are internal to the browser; don't want these to
-        // be dispatched to other apps. Similarly, javascript: schemas are private
-        // to the page
-        if (url.startsWith("about:") || url.startsWith("javascript:")) {
+        // be dispatched to other apps.
+        if (url.startsWith("about:")) {
             return false;
         }
 
+        // If this is a Google search, attempt to add an RLZ string
+        // (if one isn't already present).
+        if (rlzProviderPresent()) {
+            Uri siteUri = Uri.parse(url);
+            if (needsRlzString(siteUri)) {
+                // Need to look up the RLZ info from a database, so do it in an
+                // AsyncTask. Although we are not overriding the URL load synchronously,
+                // we guarantee that we will handle this URL load after the task executes,
+                // so it's safe to just return true to WebCore now to stop its own loading.
+                new RLZTask(tab, siteUri, view).execute();
+                return true;
+            }
+        }
+
         if (startActivityForUrl(url)) {
             return true;
         }
@@ -193,11 +214,120 @@
     // depressed by opening in a new tab
     boolean handleMenuClick(Tab tab, String url) {
         if (mController.isMenuDown()) {
-            mController.openTab(tab, url, false);
+            mController.openTab(url,
+                    (tab != null) && tab.isPrivateBrowsingEnabled(),
+                    !BrowserSettings.getInstance().openInBackground(), true);
             mActivity.closeOptionsMenu();
             return true;
         }
 
         return false;
     }
+
+    // TODO: Move this class into Tab, where it can be properly stopped upon
+    // closure of the tab
+    private class RLZTask extends AsyncTask<Void, Void, String> {
+        private Tab mTab;
+        private Uri mSiteUri;
+        private WebView mWebView;
+
+        public RLZTask(Tab tab, Uri uri, WebView webView) {
+            mTab = tab;
+            mSiteUri = uri;
+            mWebView = webView;
+        }
+
+        protected String doInBackground(Void... unused) {
+            String result = mSiteUri.toString();
+            Cursor cur = null;
+            try {
+                cur = mActivity.getContentResolver()
+                        .query(getRlzUri(), null, null, null, null);
+                if (cur != null && cur.moveToFirst() && !cur.isNull(0)) {
+                    result = mSiteUri.buildUpon()
+                           .appendQueryParameter("rlz", cur.getString(0))
+                           .build().toString();
+                }
+            } finally {
+                if (cur != null) {
+                    cur.close();
+                }
+            }
+            return result;
+        }
+
+        protected void onPostExecute(String result) {
+            // Make sure the Tab was not closed while handling the task
+            if (mController.getTabControl().getTabPosition(mTab) != -1) {
+                // If the Activity Manager is not invoked, load the URL directly
+                if (!startActivityForUrl(result)) {
+                    if (!handleMenuClick(mTab, result)) {
+                        mController.loadUrl(mTab, result);
+                    }
+                }
+            }
+        }
+    }
+
+    // Determine whether the RLZ provider is present on the system.
+    private boolean rlzProviderPresent() {
+        if (mIsProviderPresent == null) {
+            PackageManager pm = mActivity.getPackageManager();
+            mIsProviderPresent = pm.resolveContentProvider(RLZ_PROVIDER, 0) != null;
+        }
+        return mIsProviderPresent;
+    }
+
+    // Retrieve the RLZ access point string and cache the URI used to
+    // retrieve RLZ values.
+    private Uri getRlzUri() {
+        if (mRlzUri == null) {
+            String ap = mActivity.getResources()
+                    .getString(R.string.rlz_access_point);
+            mRlzUri = Uri.withAppendedPath(RLZ_PROVIDER_URI, ap);
+        }
+        return mRlzUri;
+    }
+
+    // Determine if this URI appears to be for a Google search
+    // and does not have an RLZ parameter.
+    // Taken largely from Chrome source, src/chrome/browser/google_url_tracker.cc
+    private static boolean needsRlzString(Uri uri) {
+        String scheme = uri.getScheme();
+        if (("http".equals(scheme) || "https".equals(scheme)) &&
+            (uri.getQueryParameter("q") != null) &&
+                    (uri.getQueryParameter("rlz") == null)) {
+            String host = uri.getHost();
+            if (host == null) {
+                return false;
+            }
+            String[] hostComponents = host.split("\\.");
+
+            if (hostComponents.length < 2) {
+                return false;
+            }
+            int googleComponent = hostComponents.length - 2;
+            String component = hostComponents[googleComponent];
+            if (!"google".equals(component)) {
+                if (hostComponents.length < 3 ||
+                        (!"co".equals(component) && !"com".equals(component))) {
+                    return false;
+                }
+                googleComponent = hostComponents.length - 3;
+                if (!"google".equals(hostComponents[googleComponent])) {
+                    return false;
+                }
+            }
+
+            // Google corp network handling.
+            if (googleComponent > 0 && "corp".equals(
+                    hostComponents[googleComponent - 1])) {
+                return false;
+            }
+
+            return true;
+        }
+        return false;
+    }
+
 }
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 9c5d338..7545e6a 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -175,7 +175,7 @@
 
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        if (BrowserSettings.getInstance().useInstant() &&
+        if (BrowserSettings.getInstance().useInstantSearch() &&
                 (actionId == EditorInfo.IME_ACTION_NEXT)) {
             // When instant is turned on AND the user chooses to complete
             // using the tab key, then use the completion rather than the
@@ -298,11 +298,11 @@
     }
 
     /*
-     * no-op to prevent scrolling of webview when embedded titlebar is edited
+     * no-op to prevent scrolling of webview when embedded titlebar
+     * gets edited
      */
     @Override
     public boolean requestRectangleOnScreen(Rect rect, boolean immediate) {
         return false;
     }
-
 }
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index 8c789db..ccf9710 100644
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -16,8 +16,6 @@
 
 package com.android.browser;
 
-import com.android.browser.homepages.HomeProvider;
-
 import android.net.Uri;
 import android.util.Patterns;
 import android.webkit.URLUtil;
@@ -59,7 +57,7 @@
      * @return a stripped url like "www.google.com", or the original string if it could
      *         not be stripped
      */
-    /* package */ static String stripUrl(String url) {
+    public static String stripUrl(String url) {
         if (url == null) return null;
         Matcher m = STRIP_URL_PATTERN.matcher(url);
         if (m.matches() && m.groupCount() == 3) {
@@ -159,34 +157,4 @@
         return inUrl;
     }
 
-    // Determine if this URI appears to be a Google property
-    /* package */ static boolean isGoogleUri(Uri uri) {
-        String scheme = uri.getScheme();
-        if (!"http".equals(scheme) && !"https".equals(scheme)) {
-            return false;
-        }
-
-        String host = uri.getHost();
-        if (host == null) {
-            return false;
-        }
-        String[] hostComponents = host.split("\\.");
-        if (hostComponents.length < 2) {
-            return false;
-        }
-
-        int googleComponent = hostComponents.length - 2;
-        String component = hostComponents[googleComponent];
-        if (!"google".equals(component)) {
-            if (hostComponents.length < 3 ||
-                (!"co".equals(component) && !"com".equals(component))) {
-                return false;
-            }
-            googleComponent = hostComponents.length - 3;
-            if (!"google".equals(hostComponents[googleComponent])) {
-                return false;
-            }
-        }
-        return true;
-    }
 }
diff --git a/src/com/android/browser/WallpaperHandler.java b/src/com/android/browser/WallpaperHandler.java
index 2cb223a..cd896da 100644
--- a/src/com/android/browser/WallpaperHandler.java
+++ b/src/com/android/browser/WallpaperHandler.java
@@ -68,7 +68,7 @@
 
     @Override
     public boolean onMenuItemClick(MenuItem item) {
-        if (mUrl != null) {
+        if (mUrl != null && getState() == State.NEW) {
             // The user may have tried to set a image with a large file size as
             // their background so it may take a few moments to perform the
             // operation.
diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java
index 6b44207..018af99 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -16,8 +16,6 @@
 
 package com.android.browser;
 
-import com.android.browser.IntentHandler.UrlData;
-
 import android.app.Activity;
 import android.graphics.Bitmap;
 import android.net.Uri;
@@ -31,6 +29,8 @@
 import android.webkit.WebChromeClient;
 import android.webkit.WebView;
 
+import java.util.List;
+
 /**
  * WebView aspect of the controller
  */
@@ -72,7 +72,8 @@
     void onDownloadStart(Tab tab, String url, String useragent, String contentDisposition,
             String mimeType, long contentLength);
 
-    void showCustomView(Tab tab, View view, WebChromeClient.CustomViewCallback callback);
+    void showCustomView(Tab tab, View view, int requestedOrientation, 
+            WebChromeClient.CustomViewCallback callback);
 
     void hideCustomView();
 
@@ -85,7 +86,7 @@
 
     void onUserCanceledSsl(Tab tab);
 
-    void activateVoiceSearchMode(String title);
+    void activateVoiceSearchMode(String title, List<String> results);
 
     void revertVoiceSearchMode(Tab tab);
 
@@ -101,10 +102,13 @@
 
     void dismissSubWindow(Tab tab);
 
-    Tab openTabAndShow(Tab parent, UrlData urlData, boolean closeOnExit,
-            String appId);
+    Tab openTab(String url, boolean incognito, boolean setActive,
+            boolean useCurrent);
 
-    boolean switchToTab(int tabindex);
+    Tab openTab(String url, Tab parent, boolean setActive,
+            boolean useCurrent);
+
+    boolean switchToTab(Tab tab);
 
     void closeTab(Tab tab);
 
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 8c34fc9..84ad6ea 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -16,33 +16,26 @@
 
 package com.android.browser;
 
-import com.android.browser.ScrollWebView.ScrollListener;
+import com.android.browser.BrowserWebView.ScrollListener;
 
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.ObjectAnimator;
 import android.app.ActionBar;
 import android.app.Activity;
-import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.KeyEvent;
-import android.view.Menu;
 import android.view.View;
 import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebView;
-import android.widget.FrameLayout;
 
 import java.util.List;
 
 /**
  * Ui for xlarge screen sizes
  */
-public class XLargeUi extends BaseUi implements ScrollListener {
+public class XLargeUi extends BaseUi {
 
     private static final String LOGTAG = "XLargeUi";
 
@@ -50,8 +43,6 @@
     private TabBar mTabBar;
 
     private TitleBarXLarge mTitleBar;
-    private Animator mTitleBarAnimator;
-    private boolean mSkipTitleBarAnimations;
 
     private boolean mUseQuickControls;
     private PieControl mPieControl;
@@ -64,7 +55,8 @@
     public XLargeUi(Activity browser, UiController controller) {
         super(browser, controller);
         mHandler = new Handler();
-        mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
+        mTitleBar = new TitleBarXLarge(mActivity, mUiController, this,
+                mContentView);
         mTitleBar.setProgress(100);
         mTabBar = new TabBar(mActivity, mUiController, this);
         mActionBar = mActivity.getActionBar();
@@ -103,16 +95,16 @@
             checkTabCount();
             mPieControl = new PieControl(mActivity, mUiController, this);
             mPieControl.attachToContainer(mContentView);
-            Tab tab = getActiveTab();
-            if ((tab != null) && (tab.getWebView() != null)) {
-                tab.getWebView().setEmbeddedTitleBar(null);
+            WebView web = getWebView();
+            if (web != null) {
+                web.setEmbeddedTitleBar(null);
             }
         } else {
             mActivity.getActionBar().show();
             if (mPieControl != null) {
                 mPieControl.removeFromContainer(mContentView);
             }
-            WebView web = mTabControl.getCurrentWebView();
+            WebView web = getWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(mTitleBar);
             }
@@ -134,7 +126,7 @@
     @Override
     public void onResume() {
         super.onResume();
-        if (!BrowserSettings.getInstance().useInstant()) {
+        if (!BrowserSettings.getInstance().useInstantSearch()) {
             mTitleBar.clearCompletions();
         }
     }
@@ -149,32 +141,24 @@
     @Override
     public WebView createWebView(boolean privateBrowsing) {
         // Create a new WebView
-        ScrollWebView w = new ScrollWebView(mActivity, null,
-                android.R.attr.webViewStyle, privateBrowsing);
-        initWebViewSettings(w);
+        BrowserWebView w = (BrowserWebView) super.createWebView(privateBrowsing);
         w.setScrollListener(this);
-        boolean supportsMultiTouch = mActivity.getPackageManager()
-                .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);
-        w.getSettings().setDisplayZoomControls(!supportsMultiTouch);
-        w.setExpandedTileBounds(true);  // smoother scrolling
         return w;
     }
 
     @Override
     public WebView createSubWebView(boolean privateBrowsing) {
-        ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing);
-        // no scroll listener for subview
-        web.setScrollListener(null);
-        return web;
+        return super.createWebView(privateBrowsing);
     }
 
     @Override
     public void onScroll(int visibleTitleHeight, boolean userInitiated) {
+        super.onScroll(visibleTitleHeight, userInitiated);
         mTabBar.onScroll(visibleTitleHeight, userInitiated);
     }
 
     void stopWebViewScrolling() {
-        ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView();
+        BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView();
         if (web != null) {
             web.stopScroll();
         }
@@ -188,31 +172,10 @@
         mTabBar.onProgress(tab, progress);
         if (tab.inForeground()) {
             mTitleBar.setProgress(progress);
-            if (progress == 100) {
-                if (!mTitleBar.isEditingUrl() && !mTitleBar.inAutoLogin()) {
-                    hideTitleBar();
-                    if (mUseQuickControls) {
-                        mTitleBar.setShowProgressOnly(false);
-                    }
-                }
-            } else {
-                if (!isTitleBarShowing()) {
-                    if (mUseQuickControls && !mTitleBar.isEditingUrl()) {
-                        mTitleBar.setShowProgressOnly(true);
-                        setTitleGravity(Gravity.TOP);
-                    }
-                    showTitleBar();
-                }
-            }
         }
     }
 
     @Override
-    public boolean needsRestoreAllTabs() {
-        return true;
-    }
-
-    @Override
     public void addTab(Tab tab) {
         mTabBar.onNewTab(tab);
     }
@@ -223,22 +186,15 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
-        cancelTitleBarAnimation(true);
-        mSkipTitleBarAnimations = true;
-        stopEditingUrl();
+        mTitleBar.cancelTitleBarAnimation(true);
+        mTitleBar.setSkipTitleBarAnimations(true);
         if (mUseQuickControls) {
             if (mActiveTab != null) {
                 captureTab(mActiveTab);
             }
         }
-        super.setActiveTab(tab, true);
-        setActiveTab(tab, true);
-        mSkipTitleBarAnimations = false;
-    }
-
-    @Override
-    void setActiveTab(Tab tab, boolean needsAttaching) {
-        ScrollWebView view = (ScrollWebView) tab.getWebView();
+        super.setActiveTab(tab);
+        BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
         // so the tab is guaranteed to have a webview
         if (view == null) {
@@ -252,28 +208,20 @@
             mTabBar.showTitleBarIndicator(false);
         } else {
             // check if title bar is already attached by animation
-            if (mTitleBar.getParent() == null) {
+            if (mTitleBar.getParent() == null && !tab.isSnapshot()) {
                 view.setEmbeddedTitleBar(mTitleBar);
             }
             view.setScrollListener(this);
         }
         mTabBar.onSetActiveTab(tab);
         if (tab.isInVoiceSearchMode()) {
-            showVoiceTitleBar(tab.getVoiceDisplayTitle());
+            showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults());
         } else {
             revertVoiceTitleBar(tab);
         }
         updateLockIconToLatest(tab);
         tab.getTopWindow().requestFocus();
-    }
-
-    public void captureTab(final Tab tab) {
-        Bitmap sshot = Controller.createScreenshot(tab,
-                (int) mActivity.getResources()
-                        .getDimension(R.dimen.qc_thumb_width),
-                (int) mActivity.getResources()
-                        .getDimension(R.dimen.qc_thumb_height));
-        tab.setScreenshot(sshot);
+        mTitleBar.setSkipTitleBarAnimations(false);
     }
 
     @Override
@@ -284,11 +232,11 @@
 
     @Override
     public void removeTab(Tab tab) {
-        cancelTitleBarAnimation(true);
-        mSkipTitleBarAnimations = true;
+        mTitleBar.cancelTitleBarAnimation(true);
+        mTitleBar.setSkipTitleBarAnimations(true);
         super.removeTab(tab);
         mTabBar.onRemoveTab(tab);
-        mSkipTitleBarAnimations = false;
+        mTitleBar.setSkipTitleBarAnimations(false);
     }
 
     protected void onRemoveTabCompleted(Tab tab) {
@@ -304,17 +252,10 @@
 
     @Override
     public void editUrl(boolean clearInput) {
-        if (mUiController.isInCustomActionMode()) {
-            mUiController.endActionMode();
+        if (mUseQuickControls) {
+            getTitleBar().setShowProgressOnly(false);
         }
-        showTitleBar();
-        mTitleBar.startEditingUrl(clearInput);
-    }
-
-    void showTitleBarAndEdit() {
-        mTitleBar.setShowProgressOnly(false);
-        showTitleBar();
-        mTitleBar.startEditingUrl(false);
+        super.editUrl(clearInput);
     }
 
     void stopEditingUrl() {
@@ -324,24 +265,7 @@
     @Override
     protected void showTitleBar() {
         if (canShowTitleBar()) {
-            if (mUseQuickControls) {
-                mContentView.addView(mTitleBar);
-            } else {
-                if (!mSkipTitleBarAnimations) {
-                    cancelTitleBarAnimation(false);
-                    int visibleHeight = getVisibleTitleHeight();
-                    float startPos = (-mTitleBar.getEmbeddedHeight() + visibleHeight);
-                    if (mTitleBar.getTranslationY() != 0) {
-                        startPos = Math.max(startPos, mTitleBar.getTranslationY());
-                    }
-                    mTitleBarAnimator = ObjectAnimator.ofFloat(mTitleBar,
-                            "translationY",
-                            startPos, 0);
-                    mTitleBarAnimator.start();
-                }
-                setTitleGravity(Gravity.TOP);
-            }
-            super.showTitleBar();
+            mTitleBar.show();
             mTabBar.onShowTitleBar();
         }
     }
@@ -350,70 +274,10 @@
     protected void hideTitleBar() {
         if (isTitleBarShowing()) {
             mTabBar.onHideTitleBar();
-            if (mUseQuickControls) {
-                mContentView.removeView(mTitleBar);
-            } else {
-                if (!mSkipTitleBarAnimations) {
-                    cancelTitleBarAnimation(false);
-                    int visibleHeight = getVisibleTitleHeight();
-                    mTitleBarAnimator = ObjectAnimator.ofFloat(mTitleBar,
-                            "translationY", mTitleBar.getTranslationY(),
-                            (-mTitleBar.getEmbeddedHeight() + visibleHeight));
-                    mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
-                    mTitleBarAnimator.start();
-                } else {
-                    setTitleGravity(Gravity.NO_GRAVITY);
-                }
-            }
-            super.hideTitleBar();
+            mTitleBar.hide();
         }
     }
 
-    private void cancelTitleBarAnimation(boolean reset) {
-        if (mTitleBarAnimator != null) {
-            mTitleBarAnimator.cancel();
-            mTitleBarAnimator = null;
-        }
-        if (reset) {
-            mTitleBar.setTranslationY(0);
-        }
-    }
-
-    private int getVisibleTitleHeight() {
-        WebView webview = mActiveTab != null ? mActiveTab.getWebView() : null;
-        return webview != null ? webview.getVisibleTitleHeight() : 0;
-    }
-
-    private AnimatorListener mHideTileBarAnimatorListener = new AnimatorListener() {
-
-        boolean mWasCanceled;
-        @Override
-        public void onAnimationStart(Animator animation) {
-            mWasCanceled = false;
-        }
-
-        @Override
-        public void onAnimationRepeat(Animator animation) {
-        }
-
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            if (!mWasCanceled) {
-                mTitleBar.setTranslationY(0);
-            }
-            setTitleGravity(Gravity.NO_GRAVITY);
-        }
-
-        @Override
-        public void onAnimationCancel(Animator animation) {
-            mWasCanceled = true;
-        }
-    };
-
-    public boolean isEditingUrl() {
-        return mTitleBar.isEditingUrl();
-    }
-
     @Override
     protected TitleBarBase getTitleBar() {
         return mTitleBar;
@@ -421,12 +285,7 @@
 
     @Override
     protected void setTitleGravity(int gravity) {
-        if (mUseQuickControls) {
-            FrameLayout.LayoutParams lp =
-                (FrameLayout.LayoutParams) mTitleBar.getLayoutParams();
-            lp.gravity = gravity;
-            mTitleBar.setLayoutParams(lp);
-        } else {
+        if (!mUseQuickControls) {
             super.setTitleGravity(gravity);
         }
     }
@@ -460,18 +319,6 @@
     }
 
     @Override
-    protected void updateAutoLogin(Tab tab, boolean animate) {
-        mTitleBar.updateAutoLogin(tab, animate);
-    }
-
-    protected void refreshWebView() {
-        Tab tab = getActiveTab();
-        if ((tab != null) && (tab.getWebView() != null)) {
-            tab.getWebView().invalidate();
-        }
-    }
-
-    @Override
     public void setUrlTitle(Tab tab) {
         super.setUrlTitle(tab);
         mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle());
@@ -485,11 +332,7 @@
     }
 
     @Override
-    public void showVoiceTitleBar(String title) {
-        List<String> vsresults = null;
-        if (getActiveTab() != null) {
-            vsresults = getActiveTab().getVoiceSearchResults();
-        }
+    public void showVoiceTitleBar(String title, List<String> vsresults) {
         mTitleBar.setInVoiceMode(true, vsresults);
         mTitleBar.setDisplayTitle(title);
     }
@@ -502,8 +345,9 @@
     }
 
     @Override
-    public void showCustomView(View view, CustomViewCallback callback) {
-        super.showCustomView(view, callback);
+    public void showCustomView(View view, int requestedOrientation,
+            CustomViewCallback callback) {
+        super.showCustomView(view, requestedOrientation, callback);
         mActivity.getActionBar().hide();
     }
 
@@ -549,19 +393,4 @@
         return mTabBar;
     }
 
-    @Override
-    public void registerDropdownChangeListener(DropdownChangeListener d) {
-        mTitleBar.registerDropdownChangeListener(d);
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        if (mUseQuickControls) {
-            mPieControl.onMenuOpened(menu);
-            return false;
-        } else {
-            return true;
-        }
-    }
-
 }
diff --git a/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
index 261aa62..67563c0 100644
--- a/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
+++ b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
@@ -19,33 +19,37 @@
 import com.android.browser.R;
 
 import android.content.Context;
-import android.content.res.Resources;
-import android.database.DataSetObserver;
 import android.graphics.drawable.Drawable;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.SpinnerAdapter;
+import android.widget.BaseAdapter;
 import android.widget.TextView;
 
 /**
  * SpinnerAdapter used in the AddBookmarkPage to select where to save a
  * bookmark/folder.
  */
-public class FolderSpinnerAdapter implements SpinnerAdapter {
-    private boolean mIncludeHomeScreen;
-    private boolean mIncludesRecentFolder;
-    private long mRecentFolderId;
-    private String mRecentFolderName;
+public class FolderSpinnerAdapter extends BaseAdapter {
 
     public static final int HOME_SCREEN = 0;
     public static final int ROOT_FOLDER = 1;
     public static final int OTHER_FOLDER = 2;
     public static final int RECENT_FOLDER = 3;
 
-    public FolderSpinnerAdapter(boolean includeHomeScreen) {
+    private boolean mIncludeHomeScreen;
+    private boolean mIncludesRecentFolder;
+    private long mRecentFolderId;
+    private String mRecentFolderName;
+    private LayoutInflater mInflater;
+    private Context mContext;
+    private String mOtherFolderDisplayText;
+
+    public FolderSpinnerAdapter(Context context, boolean includeHomeScreen) {
         mIncludeHomeScreen = includeHomeScreen;
+        mContext = context;
+        mInflater = LayoutInflater.from(mContext);
     }
 
     public void addRecentFolder(long folderId, String folderName) {
@@ -56,8 +60,7 @@
 
     public long recentFolderId() { return mRecentFolderId; }
 
-    @Override
-    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+    private void bindView(int position, View view, boolean isDropDown) {
         int labelResource;
         int drawableResource;
         if (!mIncludeHomeScreen) {
@@ -84,26 +87,39 @@
                 // assert
                 break;
         }
-        Context context = parent.getContext();
-        LayoutInflater factory = LayoutInflater.from(context);
-        TextView textView = (TextView) factory.inflate(R.layout.add_to_option, null);
+        TextView textView = (TextView) view;
         if (position == RECENT_FOLDER) {
             textView.setText(mRecentFolderName);
+        } else if (position == OTHER_FOLDER && !isDropDown
+                && mOtherFolderDisplayText != null) {
+            textView.setText(mOtherFolderDisplayText);
         } else {
             textView.setText(labelResource);
         }
-        Drawable drawable = context.getResources().getDrawable(drawableResource);
+        textView.setGravity(Gravity.CENTER_VERTICAL);
+        Drawable drawable = mContext.getResources().getDrawable(drawableResource);
         textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null,
                 null, null);
-        return textView;
     }
 
     @Override
-    public void registerDataSetObserver(DataSetObserver observer) {
+    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+        if (convertView == null) {
+            convertView = mInflater.inflate(
+                    android.R.layout.simple_spinner_dropdown_item, parent, false);
+        }
+        bindView(position, convertView, true);
+        return convertView;
     }
 
     @Override
-    public void unregisterDataSetObserver(DataSetObserver observer) {
+    public View getView(int position, View convertView, ViewGroup parent) {
+        if (convertView == null) {
+            convertView = mInflater.inflate(android.R.layout.simple_spinner_item,
+                    parent, false);
+        }
+        bindView(position, convertView, false);
+        return convertView;
     }
 
     @Override
@@ -133,24 +149,9 @@
         return true;
     }
 
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        return getDropDownView(position, convertView, parent);
+    public void setOtherFolderDisplayText(String parentTitle) {
+        mOtherFolderDisplayText = parentTitle;
+        notifyDataSetChanged();
     }
 
-    @Override
-    public int getItemViewType(int position) {
-        // Never want to recycle views
-        return Adapter.IGNORE_ITEM_VIEW_TYPE;
-    }
-
-    @Override
-    public int getViewTypeCount() {
-        return 1;
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return false;
-    }
 }
diff --git a/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java b/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java
index e51a629..50ba758 100644
--- a/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java
+++ b/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java
@@ -752,7 +752,7 @@
     }
 
     private void updateText(SuggestionsAdapter adapter) {
-        if (!BrowserSettings.getInstance().useInstant()) {
+        if (!BrowserSettings.getInstance().useInstantSearch()) {
             return;
         }
 
diff --git a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
new file mode 100644
index 0000000..b7d06a1
--- /dev/null
+++ b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.browser.preferences;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+
+import com.android.browser.BrowserSettings;
+import com.android.browser.PreferenceKeys;
+import com.android.browser.R;
+
+import java.text.NumberFormat;
+
+public class AccessibilityPreferencesFragment extends PreferenceFragment
+        implements Preference.OnPreferenceChangeListener {
+
+    NumberFormat mFormat;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.accessibility_preferences);
+        BrowserSettings settings = BrowserSettings.getInstance();
+        mFormat = NumberFormat.getPercentInstance();
+
+        Preference e = findPreference(PreferenceKeys.PREF_MIN_FONT_SIZE);
+        e.setOnPreferenceChangeListener(this);
+        updateMinFontSummary(e, settings.getMinimumFontSize());
+        e = findPreference(PreferenceKeys.PREF_TEXT_ZOOM);
+        e.setOnPreferenceChangeListener(this);
+        updateTextZoomSummary(e, settings.getTextZoom());
+    }
+
+    void updateMinFontSummary(Preference pref, int minFontSize) {
+        Context c = getActivity();
+        pref.setSummary(c.getString(R.string.pref_min_font_size_value, minFontSize));
+    }
+
+    void updateTextZoomSummary(Preference pref, int textZoom) {
+        pref.setSummary(mFormat.format(textZoom / 100.0));
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference pref, Object objValue) {
+        if (getActivity() == null) {
+            // We aren't attached, so don't accept preferences changes from the
+            // invisible UI.
+            return false;
+        }
+
+        if (PreferenceKeys.PREF_MIN_FONT_SIZE.equals(pref.getKey())) {
+            updateMinFontSummary(pref, BrowserSettings
+                    .getAdjustedMinimumFontSize((Integer) objValue));
+        }
+        if (PreferenceKeys.PREF_TEXT_ZOOM.equals(pref.getKey())) {
+            updateTextZoomSummary(pref, BrowserSettings
+                    .getAdjustedTextZoom((Integer) objValue));
+        }
+        return true;
+    }
+
+}
\ No newline at end of file
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index e2e45f5..2cc504e 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -17,7 +17,7 @@
 package com.android.browser.preferences;
 
 import com.android.browser.BrowserActivity;
-import com.android.browser.BrowserSettings;
+import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
 import android.content.Intent;
@@ -46,28 +46,22 @@
         addPreferencesFromResource(R.xml.advanced_preferences);
 
         PreferenceScreen websiteSettings = (PreferenceScreen) findPreference(
-                BrowserSettings.PREF_WEBSITE_SETTINGS);
+                PreferenceKeys.PREF_WEBSITE_SETTINGS);
         websiteSettings.setFragment(WebsiteSettingsFragment.class.getName());
 
-        Preference e = findPreference(BrowserSettings.PREF_TEXT_SIZE);
-        e.setOnPreferenceChangeListener(this);
-        e.setSummary(getVisualTextSizeName(
-                getPreferenceScreen().getSharedPreferences()
-                .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
-
-        e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM);
+        Preference e = findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM);
         e.setOnPreferenceChangeListener(this);
         e.setSummary(getVisualDefaultZoomName(
                 getPreferenceScreen().getSharedPreferences()
-                .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) );
+                .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)) );
 
-        e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
+        e = findPreference(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING);
         e.setOnPreferenceChangeListener(this);
 
-        e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS);
+        e = findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES);
         e.setOnPreferenceChangeListener(this);
 
-        e = findPreference(BrowserSettings.PREF_PLUGIN_STATE);
+        e = findPreference(PreferenceKeys.PREF_PLUGIN_STATE);
         e.setOnPreferenceChangeListener(this);
         updatePluginSummary((ListPreference) e);
     }
@@ -85,7 +79,7 @@
     public void onResume() {
         super.onResume();
         final PreferenceScreen websiteSettings = (PreferenceScreen) findPreference(
-                BrowserSettings.PREF_WEBSITE_SETTINGS);
+                PreferenceKeys.PREF_WEBSITE_SETTINGS);
         websiteSettings.setEnabled(false);
         WebStorage.getInstance().getOrigins(new ValueCallback<Map>() {
             @Override
@@ -114,23 +108,20 @@
             return false;
         }
 
-        if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
-            pref.setSummary(getVisualTextSizeName((String) objValue));
-            return true;
-        } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) {
+        if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) {
             pref.setSummary(getVisualDefaultZoomName((String) objValue));
             return true;
-        } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
+        } else if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING)) {
             pref.setSummary((String) objValue);
             return true;
-        } else if (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) {
+        } else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
             Boolean value = (Boolean) objValue;
             if (value.booleanValue() == true) {
                 startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
                         getActivity(), BrowserActivity.class));
                 return true;
             }
-        } else if (pref.getKey().equals(BrowserSettings.PREF_PLUGIN_STATE)) {
+        } else if (pref.getKey().equals(PreferenceKeys.PREF_PLUGIN_STATE)) {
             ListPreference lp = (ListPreference) pref;
             lp.setValue((String) objValue);
             updatePluginSummary(lp);
@@ -139,26 +130,6 @@
         return false;
     }
 
-    private CharSequence getVisualTextSizeName(String enumName) {
-        Resources res = getActivity().getResources();
-        CharSequence[] visualNames = res.getTextArray(R.array.pref_text_size_choices);
-        CharSequence[] enumNames = res.getTextArray(R.array.pref_text_size_values);
-
-        // Sanity check
-        if (visualNames.length != enumNames.length) {
-            return "";
-        }
-
-        int length = enumNames.length;
-        for (int i = 0; i < length; i++) {
-            if (enumNames[i].equals(enumName)) {
-                return visualNames[i];
-            }
-        }
-
-        return "";
-    }
-
     private CharSequence getVisualDefaultZoomName(String enumName) {
         Resources res = getActivity().getResources();
         CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices);
diff --git a/src/com/android/browser/preferences/DebugPreferencesFragment.java b/src/com/android/browser/preferences/DebugPreferencesFragment.java
index 0a82371..984c12a 100644
--- a/src/com/android/browser/preferences/DebugPreferencesFragment.java
+++ b/src/com/android/browser/preferences/DebugPreferencesFragment.java
@@ -18,21 +18,14 @@
 
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
-import com.android.browser.Controller;
+import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
-import android.content.Context;
 import android.content.Intent;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceActivity.Header;
 import android.preference.PreferenceFragment;
-import android.preference.PreferenceManager.OnActivityResultListener;
-
-import java.io.IOException;
-import java.io.Serializable;
 
 public class DebugPreferencesFragment extends PreferenceFragment
         implements OnPreferenceChangeListener {
@@ -43,11 +36,7 @@
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.debug_preferences);
 
-        if (BrowserSettings.getInstance().showDebugSettings()) {
-            addPreferencesFromResource(R.xml.hidden_debug_preferences);
-        }
-
-        Preference e = findPreference(BrowserSettings.PREF_HARDWARE_ACCEL);
+        Preference e = findPreference(PreferenceKeys.PREF_ENABLE_HARDWARE_ACCEL);
         e.setOnPreferenceChangeListener(this);
     }
 
diff --git a/src/com/android/browser/preferences/FontSizePreference.java b/src/com/android/browser/preferences/FontSizePreference.java
new file mode 100644
index 0000000..0ff1e6d
--- /dev/null
+++ b/src/com/android/browser/preferences/FontSizePreference.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.preferences;
+
+import android.content.Context;
+import android.preference.SeekBarPreference;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+import com.android.browser.R;
+
+public class FontSizePreference extends SeekBarPreference {
+
+    CharSequence mSummary;
+    TextView mSummaryView;
+
+    public FontSizePreference(
+            Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init();
+    }
+
+    public FontSizePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public FontSizePreference(Context context) {
+        super(context);
+        init();
+    }
+
+    void init() {
+        setWidgetLayoutResource(R.layout.font_size_widget);
+    }
+
+    @Override
+    public void setSummary(CharSequence summary) {
+        mSummary = summary;
+        if (mSummaryView != null) {
+            mSummaryView.setText(mSummary);
+        }
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return null;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        mSummaryView = (TextView) view.findViewById(R.id.text);
+        if (TextUtils.isEmpty(mSummary)) {
+            mSummaryView.setVisibility(View.GONE);
+        } else {
+            mSummaryView.setVisibility(View.VISIBLE);
+            mSummaryView.setText(mSummary);
+        }
+    }
+
+    @Override
+    public void onStartTrackingTouch(SeekBar seekBar) {
+        // Intentionally blank - prevent super.onStartTrackingTouch from running
+    }
+
+    @Override
+    public void onStopTrackingTouch(SeekBar seekBar) {
+        // Intentionally blank - prevent onStopTrackingTouch from running
+    }
+
+}
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 0c63ab5..af0fc50 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -16,45 +16,21 @@
 
 package com.android.browser.preferences;
 
-import com.android.browser.BrowserBookmarksPage;
-import com.android.browser.BrowserHomepagePreference;
-import com.android.browser.BrowserPreferencesPage;
-import com.android.browser.BrowserSettings;
-import com.android.browser.R;
-import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AccountManagerCallback;
-import android.accounts.AccountManagerFuture;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
-import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
-import android.provider.BrowserContract;
 import android.util.Log;
 
+import com.android.browser.BrowserHomepagePreference;
+import com.android.browser.BrowserPreferencesPage;
+import com.android.browser.PreferenceKeys;
+import com.android.browser.R;
+
 public class GeneralPreferencesFragment extends PreferenceFragment
-        implements OnPreferenceClickListener, Preference.OnPreferenceChangeListener {
+        implements Preference.OnPreferenceChangeListener {
     static final String TAG = "PersonalPreferencesFragment";
 
-    static final String PREF_CHROME_SYNC = "sync_with_chrome";
-
-    Preference mChromeSync;
-    boolean mEnabled;
-    SharedPreferences mSharedPrefs;
-    Account[] mAccounts;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -62,14 +38,12 @@
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.general_preferences);
 
-        Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE);
+        Preference e = findPreference(PreferenceKeys.PREF_HOMEPAGE);
         e.setOnPreferenceChangeListener(this);
         e.setSummary(getPreferenceScreen().getSharedPreferences()
-                .getString(BrowserSettings.PREF_HOMEPAGE, null));
+                .getString(PreferenceKeys.PREF_HOMEPAGE, null));
         ((BrowserHomepagePreference) e).setCurrentPage(
                 getActivity().getIntent().getStringExtra(BrowserPreferencesPage.CURRENT_PAGE));
-        mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-        mSharedPrefs.registerOnSharedPreferenceChangeListener(mListener);
     }
 
     @Override
@@ -81,7 +55,7 @@
             return false;
         }
 
-        if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) {
+        if (pref.getKey().equals(PreferenceKeys.PREF_HOMEPAGE)) {
             pref.setSummary((String) objValue);
             return true;
         }
@@ -93,171 +67,12 @@
     public void onResume() {
         super.onResume();
 
-        // Setup the proper state for the sync with chrome item
-        mChromeSync = findPreference(PREF_CHROME_SYNC);
         refreshUi();
     }
 
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        mSharedPrefs.unregisterOnSharedPreferenceChangeListener(mListener);
-    }
-
-    OnSharedPreferenceChangeListener mListener
-            = new OnSharedPreferenceChangeListener() {
-        @Override
-        public void onSharedPreferenceChanged(
-                SharedPreferences sharedPreferences, String key) {
-            if (BrowserBookmarksPage.PREF_ACCOUNT_NAME.equals(key)
-                    || BrowserBookmarksPage.PREF_ACCOUNT_TYPE.equals(key)) {
-                refreshUi();
-                BookmarkThumbnailWidgetProvider.refreshWidgets(getActivity(), true);
-            }
-        }
-
-    };
-
-    private AccountManagerCallback<Bundle> mCallback =
-            new AccountManagerCallback<Bundle>() {
-
-        @Override
-        public void run(AccountManagerFuture<Bundle> future) {
-            try {
-                Bundle bundle = future.getResult();
-                String name = bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
-                String type = bundle.getString(AccountManager.KEY_ACCOUNT_TYPE);
-                Account account = new Account(name, type);
-                mAccounts = new Account[] { account };
-                ImportWizard wizard = ImportWizard.newInstance(mAccounts);
-                wizard.show(getFragmentManager(), null);
-            } catch (Exception ex) {
-                // Canceled or failed to login, doesn't matter to us
-            }
-        }
-    };
-
-    OnPreferenceClickListener mAddAccount = new OnPreferenceClickListener() {
-
-        @Override
-        public boolean onPreferenceClick(Preference preference) {
-            AccountManager am = AccountManager.get(getActivity());
-            am.addAccount("com.google", null, null, null, getActivity(),
-                    mCallback, null);
-            return true;
-        }
-    };
-
-    private class GetAccountsTask extends AsyncTask<Void, Void, String> {
-        private Context mContext;
-
-        GetAccountsTask(Context ctx) {
-            mContext = ctx;
-        }
-
-        @Override
-        protected String doInBackground(Void... unused) {
-            AccountManager am = (AccountManager) mContext.getSystemService(Context.ACCOUNT_SERVICE);
-            Account[] accounts = am.getAccountsByType("com.google");
-            if (accounts == null || accounts.length == 0) {
-                // No Google accounts setup, don't offer Chrome sync
-                if (mChromeSync != null) {
-                    mChromeSync.setOnPreferenceClickListener(mAddAccount);
-                }
-            } else {
-                // Google accounts are present.
-                mAccounts = accounts;
-                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
-                Bundle args = mChromeSync.getExtras();
-                args.putParcelableArray("accounts", accounts);
-                mEnabled = BrowserContract.Settings.isSyncEnabled(mContext);
-                mChromeSync.setOnPreferenceClickListener(GeneralPreferencesFragment.this);
-
-                if (!mEnabled) {
-                    // Setup a link to the enable wizard
-                    return mContext.getResources().getString(
-                            R.string.pref_personal_sync_with_chrome_summary);
-                } else {
-                    // Chrome sync is enabled, setup a link to account switcher
-                    String accountName = prefs.getString(
-                            BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-                    args.putString("curAccount", accountName);
-                    return accountName;
-                }
-            }
-
-            return null;
-        }
-
-        @Override
-        protected void onPostExecute(String summary) {
-            if (summary != null) {
-                mChromeSync.setSummary(summary);
-            }
-        }
-    }
-
     void refreshUi() {
-        new GetAccountsTask(getActivity()).execute();
-
         PreferenceScreen autoFillSettings =
-                (PreferenceScreen)findPreference(BrowserSettings.PREF_AUTOFILL_PROFILE);
-        autoFillSettings.setDependency(BrowserSettings.PREF_AUTOFILL_ENABLED);
-    }
-
-    @Override
-    public boolean onPreferenceClick(Preference preference) {
-        if (mAccounts == null) {
-            Log.w(TAG, "NULL accounts!");
-            return true;
-        }
-        DialogFragment frag;
-        if (mEnabled) {
-            frag = new AccountChooserDialog();
-            frag.setArguments(preference.getExtras());
-        } else {
-            frag = ImportWizard.newInstance(mAccounts);
-        }
-        frag.show(getFragmentManager(), null);
-        return true;
-    }
-
-    public static class AccountChooserDialog extends DialogFragment
-            implements DialogInterface.OnClickListener {
-
-        AlertDialog mDialog;
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            Bundle args = getArguments();
-            Account[] accounts = (Account[]) args.getParcelableArray("accounts");
-            String curAccount = args.getString("curAccount");
-            int length = accounts.length;
-            int curAccountOffset = 0;
-            CharSequence[] accountNames = new CharSequence[length];
-            for (int i = 0; i < length; i++) {
-                String name = accounts[i].name;
-                if (name.equals(curAccount)) {
-                    curAccountOffset = i;
-                }
-                accountNames[i] = name;
-            }
-
-            mDialog = new AlertDialog.Builder(getActivity())
-                    .setIcon(android.R.drawable.ic_dialog_alert)
-                    .setTitle(R.string.account_chooser_dialog_title)
-                    .setSingleChoiceItems(accountNames, curAccountOffset, this)
-                    .create();
-            return mDialog;
-        }
-
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            String accountName = mDialog.getListView().getAdapter().getItem(which).toString();
-            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-            prefs.edit().putString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, accountName).apply();
-            dismiss();
-        }
+                (PreferenceScreen)findPreference(PreferenceKeys.PREF_AUTOFILL_PROFILE);
+        autoFillSettings.setDependency(PreferenceKeys.PREF_AUTOFILL_ENABLED);
     }
 }
diff --git a/src/com/android/browser/preferences/ImportWizard.java b/src/com/android/browser/preferences/ImportWizard.java
deleted file mode 100644
index 7105f4d..0000000
--- a/src/com/android/browser/preferences/ImportWizard.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.browser.preferences;
-
-import com.android.browser.BrowserBookmarksPage;
-import com.android.browser.R;
-import com.android.browser.view.EventRedirectingFrameLayout;
-
-import android.accounts.Account;
-import android.animation.LayoutTransition;
-import android.animation.ObjectAnimator;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.ContentProviderOperation;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnKeyListener;
-import android.content.DialogInterface.OnShowListener;
-import android.content.OperationApplicationException;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.provider.BrowserContract;
-import android.provider.BrowserContract.Bookmarks;
-import android.provider.BrowserContract.ChromeSyncColumns;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-
-public class ImportWizard extends DialogFragment implements OnClickListener,
-        OnItemClickListener {
-
-    static final String TAG = "BookmarkImportWizard";
-
-    static final int PAGE_IMPORT_OR_DELETE = 0;
-    static final int PAGE_SELECT_ACCOUNT = 1;
-    static final int PAGE_CONFIRMATION = 2;
-
-    static final String STATE_CURRENT_PAGE = "wizard.current_page";
-    static final String STATE_IMPORT_OR_DELETE = "wizard.import_or_delete";
-    static final String STATE_SELECTED_ACCOUNT = "wizard.selected_account";
-
-    static final String ARG_ACCOUNTS = "accounts";
-
-    AlertDialog mDialog;
-    EventRedirectingFrameLayout mPages;
-    int mCurrentPage;
-    Button mPositiveButton, mNegativeButton;
-    ListView mImportOrDelete, mSelectAccount;
-    Account[] mAccounts;
-    TextView mSelectAccountDescription, mConfirmation;
-
-    static ImportWizard newInstance(Account[] accounts) {
-        ImportWizard wizard = new ImportWizard();
-        Bundle args = new Bundle();
-        args.putParcelableArray(ARG_ACCOUNTS, accounts);
-        wizard.setArguments(args);
-        return wizard;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mAccounts = (Account[]) getArguments().getParcelableArray(ARG_ACCOUNTS);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        mDialog = new AlertDialog.Builder(getActivity())
-                .setTitle(R.string.import_bookmarks_dialog_title)
-                .setView(createView(savedInstanceState))
-                .setPositiveButton("?", null) // This is just a placeholder
-                .setNegativeButton("?", null) // Ditto
-                .setOnKeyListener(new OnKeyListener() {
-                    @Override
-                    public boolean onKey(DialogInterface arg0, int arg1, KeyEvent key) {
-                        if (key.getKeyCode() == KeyEvent.KEYCODE_BACK) {
-                            if (key.getAction() == KeyEvent.ACTION_UP
-                                    && !key.isCanceled()) {
-                                mNegativeButton.performClick();
-                            }
-                            return true;
-                        }
-                        return false;
-                    }
-                })
-                .create();
-        mDialog.setOnShowListener(new OnShowListener() {
-            @Override
-            public void onShow(DialogInterface dialog) {
-                mPositiveButton = mDialog.getButton(AlertDialog.BUTTON_POSITIVE);
-                mNegativeButton = mDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
-                mPositiveButton.setOnClickListener(ImportWizard.this);
-                mNegativeButton.setOnClickListener(ImportWizard.this);
-                setupAnimations();
-                updateNavigation();
-            }
-        });
-        return mDialog;
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putInt(STATE_CURRENT_PAGE, mCurrentPage);
-        outState.putInt(STATE_IMPORT_OR_DELETE, mImportOrDelete.getCheckedItemPosition());
-        outState.putInt(STATE_SELECTED_ACCOUNT, mSelectAccount.getCheckedItemPosition());
-    }
-
-    public View createView(Bundle savedInstanceState) {
-        LayoutInflater inflater = LayoutInflater.from(getActivity());
-        View root = inflater.inflate(R.layout.bookmark_sync_wizard, null);
-        mPages = (EventRedirectingFrameLayout) root.findViewById(R.id.pages);
-        if (mPages.getChildCount() < 1) {
-            throw new IllegalStateException("no pages in wizard!");
-        }
-        if (savedInstanceState != null) {
-            mCurrentPage = savedInstanceState.getInt(STATE_CURRENT_PAGE);
-        } else {
-            mCurrentPage = 0;
-        }
-        setupPage1(savedInstanceState);
-        setupPage2(savedInstanceState);
-        setupPage3(savedInstanceState);
-        for (int i = 0; i < mPages.getChildCount(); i++) {
-            View v = mPages.getChildAt(i);
-            if (i <= mCurrentPage) {
-                preparePage();
-                v.setVisibility(View.VISIBLE);
-            } else {
-                v.setVisibility(View.GONE);
-            }
-        }
-        mPages.setTargetChild(mCurrentPage);
-        return root;
-    }
-
-    void setupPage1(Bundle savedInstanceState) {
-        mImportOrDelete = (ListView) mPages.findViewById(R.id.add_remove_bookmarks);
-        // Add an empty header so we get a divider above the list
-        mImportOrDelete.addHeaderView(new View(getActivity()));
-        Resources res = getActivity().getResources();
-        String[] choices = new String[] {
-                res.getString(R.string.import_bookmarks_dialog_add),
-                res.getString(R.string.import_bookmarks_dialog_remove)
-        };
-        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
-                R.layout.bookmark_sync_wizard_item, choices);
-        mImportOrDelete.setAdapter(adapter);
-        if (savedInstanceState != null) {
-            int position = savedInstanceState.getInt(STATE_IMPORT_OR_DELETE);
-            if (position == ListView.INVALID_POSITION) {
-                mImportOrDelete.clearChoices();
-            } else {
-                mImportOrDelete.setItemChecked(position, true);
-            }
-        }
-        mImportOrDelete.setOnItemClickListener(this);
-    }
-
-    void setupPage2(Bundle savedInstanceState) {
-        mSelectAccount = (ListView) mPages.findViewById(R.id.select_account);
-        mSelectAccountDescription =
-                (TextView) mPages.findViewById(R.id.select_account_description);
-        // Add an empty header so we get a divider above the list
-        mSelectAccount.addHeaderView(new View(getActivity()));
-        Resources res = getActivity().getResources();
-        String[] accountNames = new String[mAccounts.length];
-        for (int i = 0; i < mAccounts.length; i++) {
-            accountNames[i] = mAccounts[i].name;
-        }
-        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
-                R.layout.bookmark_sync_wizard_item, accountNames);
-        mSelectAccount.setAdapter(adapter);
-        mSelectAccount.setItemChecked(mSelectAccount.getHeaderViewsCount(), true);
-        if (savedInstanceState != null) {
-            int position = savedInstanceState.getInt(STATE_SELECTED_ACCOUNT);
-            if (position != ListView.INVALID_POSITION) {
-                mSelectAccount.setItemChecked(position, true);
-            }
-        }
-        mSelectAccount.setOnItemClickListener(this);
-    }
-
-    void setupPage3(Bundle savedInstanceState) {
-        mConfirmation = (TextView) mPages.findViewById(R.id.confirm);
-    }
-
-    void preparePage() {
-        switch (mCurrentPage) {
-        case PAGE_SELECT_ACCOUNT:
-            if (shouldDeleteBookmarks()) {
-                mSelectAccountDescription.setText(
-                        R.string.import_bookmarks_dialog_delete_select_account);
-            } else {
-                mSelectAccountDescription.setText(
-                        R.string.import_bookmarks_dialog_select_add_account);
-            }
-            break;
-        case PAGE_CONFIRMATION:
-            String account = getSelectedAccount().name;
-            String confirmationMessage;
-            if (shouldDeleteBookmarks()) {
-                confirmationMessage = getActivity().getString(
-                        R.string.import_bookmarks_dialog_confirm_delete, account);
-            } else {
-                confirmationMessage = getActivity().getString(
-                        R.string.import_bookmarks_dialog_confirm_add, account);
-            }
-            mConfirmation.setText(confirmationMessage);
-            break;
-        }
-    }
-
-    int getAdjustedCheckedItemPosition(ListView list) {
-        int position = list.getCheckedItemPosition();
-        if (position != ListView.INVALID_POSITION) {
-            position -= list.getHeaderViewsCount();
-        }
-        return position;
-    }
-
-    Account getSelectedAccount() {
-        return mAccounts[getAdjustedCheckedItemPosition(mSelectAccount)];
-    }
-
-    boolean shouldDeleteBookmarks() {
-        return getAdjustedCheckedItemPosition(mImportOrDelete) == 1;
-    }
-
-    @Override
-    public void onItemClick(
-            AdapterView<?> parent, View view, int position, long id) {
-        validate();
-    }
-
-    void updateNavigation() {
-        if (mCurrentPage == 0) {
-            mNegativeButton.setText(R.string.import_bookmarks_wizard_cancel);
-        } else {
-            mNegativeButton.setText(R.string.import_bookmarks_wizard_previous);
-        }
-        if ((mCurrentPage + 1) == mPages.getChildCount()) {
-            mPositiveButton.setText(R.string.import_bookmarks_wizard_done);
-        } else {
-            mPositiveButton.setText(R.string.import_bookmarks_wizard_next);
-        }
-        validate();
-    }
-
-    void validate() {
-        switch (mCurrentPage) {
-        case PAGE_IMPORT_OR_DELETE:
-            mPositiveButton.setEnabled(
-                    mImportOrDelete.getCheckedItemPosition() != ListView.INVALID_POSITION);
-            break;
-        case PAGE_SELECT_ACCOUNT:
-            mPositiveButton.setEnabled(
-                    mSelectAccount.getCheckedItemPosition() != ListView.INVALID_POSITION);
-            break;
-        }
-    }
-
-    void setupAnimations() {
-        float animX = mPages.getMeasuredWidth();
-        final LayoutTransition transitioner = new LayoutTransition();
-        ObjectAnimator appearing = ObjectAnimator.ofFloat(this, "translationX",
-                animX, 0);
-        ObjectAnimator disappearing = ObjectAnimator.ofFloat(this, "translationX",
-                0, animX);
-        transitioner.setAnimator(LayoutTransition.APPEARING, appearing);
-        transitioner.setAnimator(LayoutTransition.DISAPPEARING, disappearing);
-        mPages.setLayoutTransition(transitioner);
-    }
-
-    boolean next() {
-        if (mCurrentPage + 1 < mPages.getChildCount()) {
-            mCurrentPage++;
-            preparePage();
-            mPages.getChildAt(mCurrentPage).setVisibility(View.VISIBLE);
-            mPages.setTargetChild(mCurrentPage);
-            return true;
-        }
-        return false;
-    }
-
-    boolean prev() {
-        if (mCurrentPage > 0) {
-            mPages.getChildAt(mCurrentPage).setVisibility(View.GONE);
-            mCurrentPage--;
-            mPages.setTargetChild(mCurrentPage);
-            return true;
-        }
-        return false;
-    }
-
-    void done() {
-        ContentResolver resolver = getActivity().getContentResolver();
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-        String accountName = getSelectedAccount().name;
-        if (shouldDeleteBookmarks()) {
-            // The user chose to remove their old bookmarks, delete them now
-            resolver.delete(Bookmarks.CONTENT_URI,
-                    Bookmarks.PARENT + "=1 AND " + Bookmarks.ACCOUNT_NAME + " IS NULL", null);
-        } else {
-            // The user chose to migrate their old bookmarks to the account they're syncing
-            migrateBookmarks(resolver, accountName);
-        }
-
-        // Record the fact that we turned on sync
-        BrowserContract.Settings.setSyncEnabled(getActivity(), true);
-        prefs.edit()
-                .putString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, "com.google")
-                .putString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, accountName)
-                .apply();
-
-        // Enable bookmark sync on all accounts
-        Account[] accounts = (Account[]) getArguments().getParcelableArray("accounts");
-        for (Account account : accounts) {
-            if (ContentResolver.getIsSyncable(account, BrowserContract.AUTHORITY) == 0) {
-                // Account wasn't syncable, enable it
-                ContentResolver.setIsSyncable(account, BrowserContract.AUTHORITY, 1);
-                ContentResolver.setSyncAutomatically(account, BrowserContract.AUTHORITY, true);
-            }
-        }
-
-        dismiss();
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mNegativeButton) {
-            if (prev()) {
-                updateNavigation();
-            } else {
-                dismiss();
-            }
-        } else if (v == mPositiveButton) {
-            if (next()) {
-                updateNavigation();
-            } else {
-                done();
-            }
-        }
-    }
-
-    /**
-     * Migrates bookmarks to the given account
-     */
-    void migrateBookmarks(ContentResolver resolver, String accountName) {
-        Cursor cursor = null;
-        try {
-            // Re-parent the bookmarks in the default root folder
-            cursor = resolver.query(Bookmarks.CONTENT_URI, new String[] { Bookmarks._ID },
-                    Bookmarks.ACCOUNT_NAME + " =? AND " +
-                        ChromeSyncColumns.SERVER_UNIQUE + " =?",
-                    new String[] { accountName,
-                        ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR },
-                    null);
-            ContentValues values = new ContentValues();
-            if (cursor == null || !cursor.moveToFirst()) {
-                // The root folders don't exist for the account, create them now
-                ArrayList<ContentProviderOperation> ops =
-                        new ArrayList<ContentProviderOperation>();
-
-                // Chrome sync root folder
-                values.clear();
-                values.put(ChromeSyncColumns.SERVER_UNIQUE, ChromeSyncColumns.FOLDER_NAME_ROOT);
-                values.put(Bookmarks.TITLE, "Google Chrome");
-                values.put(Bookmarks.POSITION, 0);
-                values.put(Bookmarks.IS_FOLDER, true);
-                values.put(Bookmarks.DIRTY, true);
-                ops.add(ContentProviderOperation.newInsert(
-                        Bookmarks.CONTENT_URI.buildUpon().appendQueryParameter(
-                                BrowserContract.CALLER_IS_SYNCADAPTER, "true").build())
-                        .withValues(values)
-                        .build());
-
-                // Bookmarks folder
-                values.clear();
-                values.put(ChromeSyncColumns.SERVER_UNIQUE,
-                        ChromeSyncColumns.FOLDER_NAME_BOOKMARKS);
-                values.put(Bookmarks.TITLE, "Bookmarks");
-                values.put(Bookmarks.POSITION, 0);
-                values.put(Bookmarks.IS_FOLDER, true);
-                values.put(Bookmarks.DIRTY, true);
-                ops.add(ContentProviderOperation.newInsert(Bookmarks.CONTENT_URI)
-                        .withValues(values)
-                        .withValueBackReference(Bookmarks.PARENT, 0)
-                        .build());
-
-                // Bookmarks Bar folder
-                values.clear();
-                values.put(ChromeSyncColumns.SERVER_UNIQUE,
-                        ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR);
-                values.put(Bookmarks.TITLE, "Bookmarks Bar");
-                values.put(Bookmarks.POSITION, 0);
-                values.put(Bookmarks.IS_FOLDER, true);
-                values.put(Bookmarks.DIRTY, true);
-                ops.add(ContentProviderOperation.newInsert(Bookmarks.CONTENT_URI)
-                        .withValues(values)
-                        .withValueBackReference(Bookmarks.PARENT, 1)
-                        .build());
-
-                // Other Bookmarks folder
-                values.clear();
-                values.put(ChromeSyncColumns.SERVER_UNIQUE,
-                        ChromeSyncColumns.FOLDER_NAME_OTHER_BOOKMARKS);
-                values.put(Bookmarks.TITLE, "Other Bookmarks");
-                values.put(Bookmarks.POSITION, 1000);
-                values.put(Bookmarks.IS_FOLDER, true);
-                values.put(Bookmarks.DIRTY, true);
-                ops.add(ContentProviderOperation.newInsert(Bookmarks.CONTENT_URI)
-                        .withValues(values)
-                        .withValueBackReference(Bookmarks.PARENT, 1)
-                        .build());
-
-                // Re-parent the existing bookmarks to the newly create bookmarks bar folder
-                ops.add(ContentProviderOperation.newUpdate(Bookmarks.CONTENT_URI)
-                        .withValueBackReference(Bookmarks.PARENT, 2)
-                        .withSelection(Bookmarks.ACCOUNT_NAME + " IS NULL AND " +
-                                Bookmarks.PARENT + "=?",
-                                    new String[] { Integer.toString(1) })
-                        .build());
-
-                // Mark all non-root folder items as belonging to the new account
-                values.clear();
-                values.put(Bookmarks.ACCOUNT_TYPE, "com.google");
-                values.put(Bookmarks.ACCOUNT_NAME, accountName);
-                ops.add(ContentProviderOperation.newUpdate(Bookmarks.CONTENT_URI)
-                        .withValues(values)
-                        .withSelection(Bookmarks.ACCOUNT_NAME + " IS NULL AND " +
-                                Bookmarks._ID + "<>1", null)
-                        .build());
-
-                try {
-                    resolver.applyBatch(BrowserContract.AUTHORITY, ops);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "failed to create root folder for account " + accountName, e);
-                    return;
-                } catch (OperationApplicationException e) {
-                    Log.e(TAG, "failed to create root folder for account " + accountName, e);
-                    return;
-                }
-            } else {
-                values.put(Bookmarks.PARENT, cursor.getLong(0));
-                resolver.update(Bookmarks.CONTENT_URI, values, Bookmarks.PARENT + "=?",
-                        new String[] { Integer.toString(1) });
-
-                // Mark all bookmarks at all levels as part of the new account
-                values.clear();
-                values.put(Bookmarks.ACCOUNT_TYPE, "com.google");
-                values.put(Bookmarks.ACCOUNT_NAME, accountName);
-                resolver.update(Bookmarks.CONTENT_URI, values,
-                        Bookmarks.ACCOUNT_NAME + " IS NULL AND " + Bookmarks._ID + "<>1",
-                        null);
-            }
-        } finally {
-            if (cursor != null) cursor.close();
-        }
-    }
-}
diff --git a/src/com/android/browser/preferences/LabPreferencesFragment.java b/src/com/android/browser/preferences/LabPreferencesFragment.java
index a06dc3e..0dd8805 100644
--- a/src/com/android/browser/preferences/LabPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LabPreferencesFragment.java
@@ -18,14 +18,18 @@
 
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
+import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 import com.android.browser.search.SearchEngine;
 
+import android.app.AlertDialog;
 import android.content.Intent;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceFragment;
+import android.view.LayoutInflater;
+import android.view.View;
 
 public class LabPreferencesFragment extends PreferenceFragment
         implements OnPreferenceChangeListener {
@@ -40,32 +44,42 @@
 
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.lab_preferences);
+        registerChangeListener(PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS);
+        useInstantPref = findPreference(PreferenceKeys.PREF_USE_INSTANT_SEARCH);
+    }
 
-        Preference e = findPreference(BrowserSettings.PREF_QUICK_CONTROLS);
-        e.setOnPreferenceChangeListener(this);
-        useInstantPref = findPreference(BrowserSettings.PREF_USE_INSTANT);
+    private void registerChangeListener(String key) {
+        Preference e = findPreference(key);
+        if (e != null) {
+            e.setOnPreferenceChangeListener(this);
+        }
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        useInstantPref.setEnabled(false);
+        if (useInstantPref != null) {
+            useInstantPref.setEnabled(false);
 
-        // Enable the "use instant" preference only if the selected
-        // search engine is google.
-        if (mBrowserSettings.getSearchEngine() != null) {
-            final String currentName = mBrowserSettings.getSearchEngine().getName();
-            if (SearchEngine.GOOGLE.equals(currentName)) {
-                useInstantPref.setEnabled(true);
+            // Enable the "use instant" preference only if the selected
+            // search engine is google.
+            if (mBrowserSettings.getSearchEngine() != null) {
+                final String currentName = mBrowserSettings.getSearchEngine().getName();
+                if (SearchEngine.GOOGLE.equals(currentName)) {
+                    useInstantPref.setEnabled(true);
+                }
             }
         }
     }
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
-        // Attempt to restart
-        startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
-                getActivity(), BrowserActivity.class));
+        String key = preference.getKey();
+        if (PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS.equals(key)) {
+            // Attempt to restart
+            startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
+                    getActivity(), BrowserActivity.class));
+        }
         return true;
     }
 }
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index 2266608..35e6e43 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -16,7 +16,7 @@
 
 package com.android.browser.preferences;
 
-import com.android.browser.BrowserSettings;
+import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
 import android.app.Activity;
@@ -28,18 +28,14 @@
 public class PrivacySecurityPreferencesFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
 
-    private BrowserSettings mSettings;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mSettings = BrowserSettings.getInstance();
-
         // Load the preferences from an XML resource
         addPreferencesFromResource(R.xml.privacy_security_preferences);
 
-        Preference e = findPreference(BrowserSettings.PREF_CLEAR_HISTORY);
+        Preference e = findPreference(PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY);
         e.setOnPreferenceChangeListener(this);
     }
 
@@ -50,7 +46,7 @@
 
     @Override
     public boolean onPreferenceChange(Preference pref, Object objValue) {
-        if (pref.getKey().equals(BrowserSettings.PREF_CLEAR_HISTORY)
+        if (pref.getKey().equals(PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY)
                 && ((Boolean) objValue).booleanValue() == true) {
             // Need to tell the browser to remove the parent/child relationship
             // between tabs
diff --git a/src/com/android/browser/preferences/WebViewPreview.java b/src/com/android/browser/preferences/WebViewPreview.java
new file mode 100644
index 0000000..1886bed
--- /dev/null
+++ b/src/com/android/browser/preferences/WebViewPreview.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.preferences;
+
+import com.android.browser.BrowserSettings;
+import com.android.browser.R;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.content.res.Resources;
+import android.preference.Preference;
+import android.preference.PreferenceManager;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+
+public class WebViewPreview extends Preference implements OnSharedPreferenceChangeListener {
+
+    static final String HTML_FORMAT = "<html><head><style type=\"text/css\">p { margin: 2px auto;}</style><body><p style=\"font-size: 4pt\">%s</p><p style=\"font-size: 8pt\">%s</p><p style=\"font-size: 10pt\">%s</p><p style=\"font-size: 14pt\">%s</p><p style=\"font-size: 18pt\">%s</p></body></html>";
+
+    String mHtml;
+    private WebView mWebView;
+
+    public WebViewPreview(
+            Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init(context);
+    }
+
+    public WebViewPreview(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context);
+    }
+
+    public WebViewPreview(Context context) {
+        super(context);
+        init(context);
+    }
+
+    void init(Context context) {
+        Resources res = context.getResources();
+        Object[] visualNames = res.getStringArray(R.array.pref_text_size_choices);
+        mHtml = String.format(HTML_FORMAT, visualNames);
+        setLayoutResource(R.layout.webview_preview);
+    }
+
+    void updatePreview() {
+        if (mWebView == null) return;
+
+        WebSettings ws = mWebView.getSettings();
+        BrowserSettings bs = BrowserSettings.getInstance();
+        ws.setMinimumFontSize(bs.getMinimumFontSize());
+        ws.setTextZoom(bs.getTextZoom());
+        mWebView.loadData(mHtml, "text/html", "utf-8");
+    }
+
+    @Override
+    protected View onCreateView(ViewGroup parent) {
+        View root = super.onCreateView(parent);
+        WebView webView = (WebView) root.findViewById(R.id.webview);
+        webView.setFocusable(false);
+        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        return root;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        mWebView = (WebView) view.findViewById(R.id.webview);
+        updatePreview();
+    }
+
+    @Override
+    protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
+        super.onAttachedToHierarchy(preferenceManager);
+        getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    protected void onPrepareForRemoval() {
+        getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+        super.onPrepareForRemoval();
+    }
+
+    @Override
+    public void onSharedPreferenceChanged(
+            SharedPreferences sharedPreferences, String key) {
+        updatePreview();
+    }
+
+}
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/provider/BrowserProvider.java
similarity index 98%
rename from src/com/android/browser/BrowserProvider.java
rename to src/com/android/browser/provider/BrowserProvider.java
index f69665c..b55b84a 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/provider/BrowserProvider.java
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.browser;
+package com.android.browser.provider;
 
+import com.android.browser.BrowserSettings;
+import com.android.browser.R;
 import com.android.browser.search.SearchEngine;
 
 import android.app.SearchManager;
@@ -40,7 +42,6 @@
 import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.Browser.BookmarkColumns;
-import android.provider.Settings;
 import android.speech.RecognizerResultsIntent;
 import android.text.TextUtils;
 import android.util.Log;
@@ -58,14 +59,14 @@
 
     private SQLiteOpenHelper mOpenHelper;
     private BackupManager mBackupManager;
-    private static final String sDatabaseName = "browser.db";
+    static final String sDatabaseName = "browser.db";
     private static final String TAG = "BrowserProvider";
     private static final String ORDER_BY = "visits DESC, date DESC";
 
     private static final String PICASA_URL = "http://picasaweb.google.com/m/" +
             "viewer?source=androidclient";
 
-    private static final String[] TABLE_NAMES = new String[] {
+    static final String[] TABLE_NAMES = new String[] {
         "bookmarks", "searches"
     };
     private static final String[] SUGGEST_PROJECTION = new String[] {
@@ -113,7 +114,7 @@
 
 
     // make sure that these match the index of TABLE_NAMES
-    private static final int URI_MATCH_BOOKMARKS = 0;
+    static final int URI_MATCH_BOOKMARKS = 0;
     private static final int URI_MATCH_SEARCHES = 1;
     // (id % 10) should match the table name index
     private static final int URI_MATCH_BOOKMARKS_ID = 10;
@@ -179,7 +180,7 @@
 
     // XXX: This is a major hack to remove our dependency on gsf constants and
     // its content provider. http://b/issue?id=2425179
-    static String getClientId(ContentResolver cr) {
+    public static String getClientId(ContentResolver cr) {
         String ret = "android-google";
         Cursor legacyClientIdCursor = null;
         Cursor searchClientIdCursor = null;
@@ -245,7 +246,7 @@
         return sb;
     }
 
-    private static class DatabaseHelper extends SQLiteOpenHelper {
+    static class DatabaseHelper extends SQLiteOpenHelper {
         private Context mContext;
 
         public DatabaseHelper(Context context) {
@@ -839,7 +840,7 @@
      * by the SearchDialog when the BrowserActivity is in voice search mode.
      * @param results Strings to display in the dropdown from the SearchDialog
      */
-    /* package */ void setQueryResults(ArrayList<String> results) {
+    public /* package */ void setQueryResults(ArrayList<String> results) {
         synchronized (mResultsCursorLock) {
             if (results == null) {
                 mResultsCursor = null;
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index d154f20..284d9bc 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -16,22 +16,14 @@
 
 package com.android.browser.provider;
 
-import com.google.common.annotations.VisibleForTesting;
-
-import com.android.browser.BookmarkUtils;
-import com.android.browser.BrowserBookmarksPage;
-import com.android.browser.R;
-import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
-import com.android.common.content.SyncStateContentProviderHelper;
-
 import android.accounts.Account;
+import android.accounts.AccountManager;
 import android.app.SearchManager;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.UriMatcher;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -44,7 +36,6 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.net.Uri;
-import android.preference.PreferenceManager;
 import android.provider.BaseColumns;
 import android.provider.Browser;
 import android.provider.Browser.BookmarkColumns;
@@ -62,7 +53,14 @@
 import android.provider.SyncStateContract;
 import android.text.TextUtils;
 
+import com.android.browser.R;
+import com.android.browser.UrlUtils;
+import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
+import com.android.common.content.SyncStateContentProviderHelper;
+import com.google.common.annotations.VisibleForTesting;
+
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
@@ -70,6 +68,18 @@
 
 public class BrowserProvider2 extends SQLiteContentProvider {
 
+    public static interface Snapshots {
+
+        public static final Uri CONTENT_URI = Uri.withAppendedPath(
+                BrowserContract.AUTHORITY_URI, "snapshots");
+        public static final String _ID = "_id";
+        public static final String VIEWSTATE = "view_state";
+        public static final String BACKGROUND = "background";
+        public static final String TITLE = History.TITLE;
+        public static final String URL = History.URL;
+        public static final String FAVICON = History.FAVICON;
+    }
+
     public static final String LEGACY_AUTHORITY = "browser";
     static final Uri LEGACY_AUTHORITY_URI = new Uri.Builder()
             .authority(LEGACY_AUTHORITY).scheme("content").build();
@@ -80,12 +90,16 @@
     static final String TABLE_SEARCHES = "searches";
     static final String TABLE_SYNC_STATE = "syncstate";
     static final String TABLE_SETTINGS = "settings";
+    static final String TABLE_SNAPSHOTS = "snapshots";
 
     static final String TABLE_BOOKMARKS_JOIN_IMAGES = "bookmarks LEFT OUTER JOIN images " +
             "ON bookmarks.url = images." + Images.URL;
     static final String TABLE_HISTORY_JOIN_IMAGES = "history LEFT OUTER JOIN images " +
             "ON history.url = images." + Images.URL;
 
+    static final String VIEW_ACCOUNTS = "v_accounts";
+    static final String VIEW_SNAPSHOTS_COMBINED = "v_snapshots_combined";
+
     static final String FORMAT_COMBINED_JOIN_SUBQUERY_JOIN_IMAGES =
             "history LEFT OUTER JOIN (%s) bookmarks " +
             "ON history.url = bookmarks.url LEFT OUTER JOIN images " +
@@ -135,6 +149,9 @@
     static final int LEGACY = 9000;
     static final int LEGACY_ID = 9001;
 
+    static final int SNAPSHOTS = 10000;
+    static final int SNAPSHOTS_ID = 10001;
+
     public static final long FIXED_ID_ROOT = 1;
 
     // Default sort order for unsync'd bookmarks
@@ -196,6 +213,9 @@
                 "bookmarks/" + SearchManager.SUGGEST_URI_PATH_QUERY,
                 BOOKMARKS_SUGGESTIONS);
 
+        matcher.addURI(authority, "snapshots", SNAPSHOTS);
+        matcher.addURI(authority, "snapshots/#", SNAPSHOTS_ID);
+
         // Projection maps
         HashMap<String, String> map;
 
@@ -203,6 +223,7 @@
         map = ACCOUNTS_PROJECTION_MAP;
         map.put(Accounts.ACCOUNT_TYPE, Accounts.ACCOUNT_TYPE);
         map.put(Accounts.ACCOUNT_NAME, Accounts.ACCOUNT_NAME);
+        map.put(Accounts.ROOT_ID, Accounts.ROOT_ID);
 
         // Bookmarks
         map = BOOKMARKS_PROJECTION_MAP;
@@ -328,7 +349,7 @@
 
     final class DatabaseHelper extends SQLiteOpenHelper {
         static final String DATABASE_NAME = "browser2.db";
-        static final int DATABASE_VERSION = 26;
+        static final int DATABASE_VERSION = 29;
         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
         }
@@ -390,15 +411,125 @@
                     Settings.VALUE + " TEXT NOT NULL" +
                     ");");
 
+            createAccountsView(db);
+
             mSyncHelper.createDatabase(db);
 
-            createDefaultBookmarks(db);
+            if (!importFromBrowserProvider(db)) {
+                createDefaultBookmarks(db);
+            }
+
+            enableSync(db);
+
+            createSnapshots(db);
+        }
+
+        void enableSync(SQLiteDatabase db) {
+            ContentValues values = new ContentValues();
+            values.put(Settings.KEY, Settings.KEY_SYNC_ENABLED);
+            values.put(Settings.VALUE, 1);
+            insertSettingsInTransaction(db, values);
+        }
+
+        boolean importFromBrowserProvider(SQLiteDatabase db) {
+            Context context = getContext();
+            File oldDbFile = context.getDatabasePath(BrowserProvider.sDatabaseName);
+            if (oldDbFile.exists()) {
+                BrowserProvider.DatabaseHelper helper =
+                        new BrowserProvider.DatabaseHelper(context);
+                SQLiteDatabase oldDb = helper.getWritableDatabase();
+                Cursor c = null;
+                try {
+                    String table = BrowserProvider.TABLE_NAMES[BrowserProvider.URI_MATCH_BOOKMARKS];
+                    // Import bookmarks
+                    c = oldDb.query(table,
+                            new String[] {
+                            BookmarkColumns.URL, // 0
+                            BookmarkColumns.TITLE, // 1
+                            BookmarkColumns.FAVICON, // 2
+                            BookmarkColumns.TOUCH_ICON, // 3
+                            }, BookmarkColumns.BOOKMARK + "!=0", null,
+                            null, null, null);
+                    if (c != null) {
+                        while (c.moveToNext()) {
+                            ContentValues values = new ContentValues();
+                            values.put(Bookmarks.URL, c.getString(0));
+                            values.put(Bookmarks.TITLE, c.getString(1));
+                            values.put(Bookmarks.POSITION, 0);
+                            values.put(Bookmarks.PARENT, FIXED_ID_ROOT);
+                            ContentValues imageValues = new ContentValues();
+                            imageValues.put(Images.URL, c.getString(0));
+                            imageValues.put(Images.FAVICON, c.getBlob(2));
+                            imageValues.put(Images.TOUCH_ICON, c.getBlob(3));
+                            db.insertOrThrow(TABLE_IMAGES, Images.THUMBNAIL, imageValues);
+                            db.insertOrThrow(TABLE_BOOKMARKS, Bookmarks.DIRTY, values);
+                        }
+                        c.close();
+                    }
+                    // Import history
+                    c = oldDb.query(table,
+                            new String[] {
+                            BookmarkColumns.URL, // 0
+                            BookmarkColumns.TITLE, // 1
+                            BookmarkColumns.VISITS, // 2
+                            BookmarkColumns.DATE, // 3
+                            BookmarkColumns.CREATED, // 4
+                            }, null, null, null, null, null);
+                    if (c != null) {
+                        while (c.moveToNext()) {
+                            ContentValues values = new ContentValues();
+                            values.put(History.URL, c.getString(0));
+                            values.put(History.TITLE, c.getString(1));
+                            values.put(History.VISITS, c.getInt(2));
+                            values.put(History.DATE_LAST_VISITED, c.getLong(3));
+                            values.put(History.DATE_CREATED, c.getLong(4));
+                            db.insertOrThrow(TABLE_HISTORY, History.FAVICON, values);
+                        }
+                        c.close();
+                    }
+                    // Wipe the old DB, in case the delete fails.
+                    oldDb.delete(table, null, null);
+                } finally {
+                    if (c != null) c.close();
+                    oldDb.close();
+                    helper.close();
+                }
+                if (!oldDbFile.delete()) {
+                    oldDbFile.deleteOnExit();
+                }
+                return true;
+            }
+            return false;
+        }
+
+        void createAccountsView(SQLiteDatabase db) {
+            db.execSQL("CREATE VIEW IF NOT EXISTS v_accounts AS "
+                    + "SELECT NULL AS " + Accounts.ACCOUNT_NAME
+                    + ", NULL AS " + Accounts.ACCOUNT_TYPE
+                    + ", " + FIXED_ID_ROOT + " AS " + Accounts.ROOT_ID
+                    + " UNION ALL SELECT " + Accounts.ACCOUNT_NAME
+                    + ", " + Accounts.ACCOUNT_TYPE + ", "
+                    + Bookmarks._ID + " AS " + Accounts.ROOT_ID
+                    + " FROM " + TABLE_BOOKMARKS + " WHERE "
+                    + ChromeSyncColumns.SERVER_UNIQUE + " = \""
+                    + ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR + "\" AND "
+                    + Bookmarks.IS_DELETED + " = 0");
         }
 
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-            // TODO write upgrade logic
-            db.execSQL("DROP VIEW IF EXISTS combined");
+            if (oldVersion < 29) {
+                createSnapshots(db);
+            }
+            if (oldVersion < 28) {
+                enableSync(db);
+            }
+            if (oldVersion < 27) {
+                createAccountsView(db);
+            }
+            if (oldVersion < 26) {
+                db.execSQL("DROP VIEW IF EXISTS combined");
+            }
             if (oldVersion < 25) {
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_BOOKMARKS);
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_HISTORY);
@@ -410,6 +541,22 @@
             }
         }
 
+        void createSnapshots(SQLiteDatabase db) {
+            db.execSQL("DROP TABLE IF EXISTS " + TABLE_SNAPSHOTS);
+            db.execSQL("CREATE TABLE " + TABLE_SNAPSHOTS + " (" +
+                    Snapshots._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
+                    Snapshots.URL + " TEXT NOT NULL," +
+                    Snapshots.TITLE + " TEXT," +
+                    Snapshots.BACKGROUND + " INTEGER," +
+                    Snapshots.VIEWSTATE + " BLOB NOT NULL" +
+                    ");");
+            db.execSQL("CREATE VIEW IF NOT EXISTS " + VIEW_SNAPSHOTS_COMBINED +
+                    " AS SELECT * FROM " + TABLE_SNAPSHOTS +
+                    " LEFT OUTER JOIN " + TABLE_IMAGES +
+                    " ON " + TABLE_SNAPSHOTS + "." + Snapshots.URL +
+                    " = images.url_key");
+        }
+
         @Override
         public void onOpen(SQLiteDatabase db) {
             db.enableWriteAheadLogging();
@@ -650,10 +797,8 @@
         String limit = uri.getQueryParameter(BrowserContract.PARAM_LIMIT);
         switch (match) {
             case ACCOUNTS: {
-                qb.setTables(TABLE_BOOKMARKS);
+                qb.setTables(VIEW_ACCOUNTS);
                 qb.setProjectionMap(ACCOUNTS_PROJECTION_MAP);
-                qb.setDistinct(true);
-                qb.appendWhere(Bookmarks.ACCOUNT_NAME + " IS NOT NULL");
                 break;
             }
 
@@ -847,10 +992,6 @@
                         && projection == null) {
                     projection = Browser.HISTORY_PROJECTION;
                 }
-                if (match == LEGACY) {
-                    uri = BookmarkUtils.addAccountInfo(getContext(),
-                            uri.buildUpon()).build();
-                }
                 String[] args = createCombinedQuery(uri, projection, qb);
                 if (selectionArgs == null) {
                     selectionArgs = args;
@@ -866,6 +1007,17 @@
                 break;
             }
 
+            case SNAPSHOTS_ID: {
+                selection = DatabaseUtils.concatenateWhere(selection, "_id=?");
+                selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
+                        new String[] { Long.toString(ContentUris.parseId(uri)) });
+                // fall through
+            }
+            case SNAPSHOTS: {
+                qb.setTables(VIEW_SNAPSHOTS_COMBINED);
+                break;
+            }
+
             default: {
                 throw new UnsupportedOperationException("Unknown URL " + uri.toString());
             }
@@ -899,19 +1051,6 @@
         selection = DatabaseUtils.concatenateWhere(selection,
                 Bookmarks.IS_DELETED + "=0 AND " + Bookmarks.IS_FOLDER + "=0");
 
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
-        String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-        String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-        if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
-            selection = DatabaseUtils.concatenateWhere(selection,
-                    Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? ");
-            selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
-                    new String[] { accountType, accountName });
-        } else {
-            selection = DatabaseUtils.concatenateWhere(selection,
-                    Bookmarks.ACCOUNT_TYPE + " IS NULL AND " +
-                    Bookmarks.ACCOUNT_NAME + " IS NULL ");
-        }
         Cursor c = mOpenHelper.getReadableDatabase().query(TABLE_BOOKMARKS,
                 SUGGEST_PROJECTION, selection, selectionArgs, null, null,
                 DEFAULT_BOOKMARKS_SORT_ORDER, null);
@@ -1051,8 +1190,6 @@
                 String[] projection = new String[] { Combined._ID,
                         Combined.IS_BOOKMARK, Combined.URL };
                 SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
-                uri = BookmarkUtils.addAccountInfo(getContext(), uri.buildUpon())
-                        .build();
                 String[] args = createCombinedQuery(uri, projection, qb);
                 if (selectionArgs == null) {
                     selectionArgs = args;
@@ -1080,6 +1217,16 @@
                 }
                 break;
             }
+            case SNAPSHOTS_ID: {
+                selection = DatabaseUtils.concatenateWhere(selection, TABLE_SNAPSHOTS + "._id=?");
+                selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
+                        new String[] { Long.toString(ContentUris.parseId(uri)) });
+                // fall through
+            }
+            case SNAPSHOTS: {
+                deleted = db.delete(TABLE_SNAPSHOTS, selection, selectionArgs);
+                break;
+            }
             default: {
                 throw new UnsupportedOperationException("Unknown delete URI " + uri);
             }
@@ -1122,14 +1269,6 @@
                 values.remove(BookmarkColumns.DATE);
                 values.remove(BookmarkColumns.VISITS);
                 values.remove(BookmarkColumns.USER_ENTERED);
-                SharedPreferences prefs = PreferenceManager
-                        .getDefaultSharedPreferences(getContext());
-                String accountType = prefs.getString(
-                        BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
-                String accountName = prefs.getString(
-                        BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
-                values.put(Bookmarks.ACCOUNT_TYPE, accountType);
-                values.put(Bookmarks.ACCOUNT_NAME, accountName);
                 values.put(Bookmarks.IS_FOLDER, 0);
             }
         }
@@ -1142,16 +1281,21 @@
                     values.put(Bookmarks.DATE_MODIFIED, now);
                     values.put(Bookmarks.DIRTY, 1);
 
+                    boolean hasAccounts = values.containsKey(Bookmarks.ACCOUNT_TYPE)
+                            || values.containsKey(Bookmarks.ACCOUNT_NAME);
                     String accountType = values
                             .getAsString(Bookmarks.ACCOUNT_TYPE);
                     String accountName = values
                             .getAsString(Bookmarks.ACCOUNT_NAME);
                     boolean hasParent = values.containsKey(Bookmarks.PARENT);
-                    if (hasParent) {
+                    if (hasParent && hasAccounts) {
                         // Let's make sure it's valid
                         long parentId = values.getAsLong(Bookmarks.PARENT);
                         hasParent = isValidParent(
                                 accountType, accountName, parentId);
+                    } else if (hasParent && !hasAccounts) {
+                        long parentId = values.getAsLong(Bookmarks.PARENT);
+                        hasParent = setParentValues(parentId, values);
                     }
 
                     // If no parent is set default to the "Bookmarks Bar" folder
@@ -1220,6 +1364,11 @@
                 break;
             }
 
+            case SNAPSHOTS: {
+                id = db.insertOrThrow(TABLE_SNAPSHOTS, Snapshots.TITLE, values);
+                break;
+            }
+
             default: {
                 throw new UnsupportedOperationException("Unknown insert URI " + uri);
             }
@@ -1234,12 +1383,11 @@
         }
     }
 
-    private boolean isValidParent(String accountType, String accountName,
-            long parentId) {
-        if (parentId <= 0) {
-            return false;
+    private String[] getAccountNameAndType(long id) {
+        if (id <= 0) {
+            return null;
         }
-        Uri uri = ContentUris.withAppendedId(Bookmarks.CONTENT_URI, parentId);
+        Uri uri = ContentUris.withAppendedId(Bookmarks.CONTENT_URI, id);
         Cursor c = query(uri,
                 new String[] { Bookmarks.ACCOUNT_NAME, Bookmarks.ACCOUNT_TYPE },
                 null, null, null);
@@ -1247,17 +1395,35 @@
             if (c.moveToFirst()) {
                 String parentName = c.getString(0);
                 String parentType = c.getString(1);
-                if (TextUtils.equals(accountName, parentName)
-                        && TextUtils.equals(accountType, parentType)) {
-                    return true;
-                }
+                return new String[] { parentName, parentType };
             }
-            return false;
+            return null;
         } finally {
             c.close();
         }
     }
 
+    private boolean setParentValues(long parentId, ContentValues values) {
+        String[] parent = getAccountNameAndType(parentId);
+        if (parent == null) {
+            return false;
+        }
+        values.put(Bookmarks.ACCOUNT_NAME, parent[0]);
+        values.put(Bookmarks.ACCOUNT_TYPE, parent[1]);
+        return true;
+    }
+
+    private boolean isValidParent(String accountType, String accountName,
+            long parentId) {
+        String[] parent = getAccountNameAndType(parentId);
+        if (parent != null
+                && TextUtils.equals(accountName, parent[0])
+                && TextUtils.equals(accountType, parent[1])) {
+            return true;
+        }
+        return false;
+    }
+
     private void filterSearchClient(String[] selectionArgs) {
         if (selectionArgs != null) {
             for (int i = 0; i < selectionArgs.length; i++) {
@@ -1439,6 +1605,12 @@
                 break;
             }
 
+            case ACCOUNTS: {
+                Account[] accounts = AccountManager.get(getContext()).getAccounts();
+                mSyncHelper.onAccountsChanged(mDb, accounts);
+                break;
+            }
+
             default: {
                 throw new UnsupportedOperationException("Unknown update URI " + uri);
             }
@@ -1523,9 +1695,35 @@
             String[] selectionArgs, boolean callerIsSyncAdapter) {
         int count = 0;
         final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-        Cursor cursor = db.query(TABLE_BOOKMARKS,
-                new String[] { Bookmarks._ID, Bookmarks.VERSION, Bookmarks.URL },
+        final String[] bookmarksProjection = new String[] {
+                Bookmarks._ID, // 0
+                Bookmarks.VERSION, // 1
+                Bookmarks.URL, // 2
+                Bookmarks.TITLE, // 3
+                Bookmarks.IS_FOLDER, // 4
+                Bookmarks.ACCOUNT_NAME, // 5
+                Bookmarks.ACCOUNT_TYPE, // 6
+        };
+        Cursor cursor = db.query(TABLE_BOOKMARKS, bookmarksProjection,
                 selection, selectionArgs, null, null, null);
+        boolean updatingParent = values.containsKey(Bookmarks.PARENT);
+        String parentAccountName = null;
+        String parentAccountType = null;
+        if (updatingParent) {
+            long parent = values.getAsLong(Bookmarks.PARENT);
+            Cursor c = db.query(TABLE_BOOKMARKS, new String[] {
+                    Bookmarks.ACCOUNT_NAME, Bookmarks.ACCOUNT_TYPE},
+                    "_id = ?", new String[] { Long.toString(parent) },
+                    null, null, null);
+            if (c.moveToFirst()) {
+                parentAccountName = c.getString(0);
+                parentAccountType = c.getString(1);
+                c.close();
+            }
+        } else if (values.containsKey(Bookmarks.ACCOUNT_NAME)
+                || values.containsKey(Bookmarks.ACCOUNT_TYPE)) {
+            // TODO: Implement if needed (no one needs this yet)
+        }
         try {
             String[] args = new String[1];
             // Mark the bookmark dirty if the caller isn't a sync adapter
@@ -1542,12 +1740,47 @@
             ContentValues imageValues = extractImageValues(values, url);
 
             while (cursor.moveToNext()) {
-                args[0] = cursor.getString(0);
-                if (!callerIsSyncAdapter) {
-                    // increase the local version for non-sync changes
-                    values.put(Bookmarks.VERSION, cursor.getLong(1) + 1);
+                long id = cursor.getLong(0);
+                args[0] = Long.toString(id);
+                String accountName = cursor.getString(5);
+                String accountType = cursor.getString(6);
+                // If we are updating the parent and either the account name or
+                // type do not match that of the new parent
+                if (updatingParent
+                        && (!TextUtils.equals(accountName, parentAccountName)
+                        || !TextUtils.equals(accountType, parentAccountType))) {
+                    // Parent is a different account
+                    // First, insert a new bookmark/folder with the new account
+                    // Then, if this is a folder, reparent all it's children
+                    // Finally, delete the old bookmark/folder
+                    ContentValues newValues = valuesFromCursor(cursor);
+                    newValues.putAll(values);
+                    newValues.remove(Bookmarks._ID);
+                    newValues.remove(Bookmarks.VERSION);
+                    newValues.put(Bookmarks.ACCOUNT_NAME, parentAccountName);
+                    newValues.put(Bookmarks.ACCOUNT_TYPE, parentAccountType);
+                    Uri insertUri = insertInTransaction(Bookmarks.CONTENT_URI,
+                            newValues, callerIsSyncAdapter);
+                    long newId = ContentUris.parseId(insertUri);
+                    if (cursor.getInt(4) != 0) {
+                        // This is a folder, reparent
+                        ContentValues updateChildren = new ContentValues(1);
+                        updateChildren.put(Bookmarks.PARENT, newId);
+                        count += updateBookmarksInTransaction(updateChildren,
+                                Bookmarks.PARENT + "=?", new String[] {
+                                Long.toString(id)}, callerIsSyncAdapter);
+                    }
+                    // Now, delete the old one
+                    Uri uri = ContentUris.withAppendedId(Bookmarks.CONTENT_URI, id);
+                    deleteInTransaction(uri, null, null, callerIsSyncAdapter);
+                    count += 1;
+                } else {
+                    if (!callerIsSyncAdapter) {
+                        // increase the local version for non-sync changes
+                        values.put(Bookmarks.VERSION, cursor.getLong(1) + 1);
+                    }
+                    count += db.update(TABLE_BOOKMARKS, values, "_id=?", args);
                 }
-                count += db.update(TABLE_BOOKMARKS, values, "_id=?", args);
 
                 // Update the images over in their table
                 if (imageValues != null) {
@@ -1570,6 +1803,29 @@
         return count;
     }
 
+    ContentValues valuesFromCursor(Cursor c) {
+        int count = c.getColumnCount();
+        ContentValues values = new ContentValues(count);
+        String[] colNames = c.getColumnNames();
+        for (int i = 0; i < count; i++) {
+            switch (c.getType(i)) {
+            case Cursor.FIELD_TYPE_BLOB:
+                values.put(colNames[i], c.getBlob(i));
+                break;
+            case Cursor.FIELD_TYPE_FLOAT:
+                values.put(colNames[i], c.getFloat(i));
+                break;
+            case Cursor.FIELD_TYPE_INTEGER:
+                values.put(colNames[i], c.getLong(i));
+                break;
+            case Cursor.FIELD_TYPE_STRING:
+                values.put(colNames[i], c.getString(i));
+                break;
+            }
+        }
+        return values;
+    }
+
     /**
      * Does a query to find the matching bookmarks and updates each one with the provided values.
      */
@@ -1724,7 +1980,7 @@
             case SUGGEST_COLUMN_INTENT_DATA_ID:
             case SUGGEST_COLUMN_TEXT_2_TEXT_ID:
             case SUGGEST_COLUMN_TEXT_2_URL_ID:
-                return mSource.getString(URL_INDEX);
+                return UrlUtils.stripUrl(mSource.getString(URL_INDEX));
             case SUGGEST_COLUMN_TEXT_1_ID:
                 return mSource.getString(TITLE_INDEX);
             case SUGGEST_COLUMN_ICON_1_ID:
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index a159f17..fd967f9 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -32,7 +32,7 @@
     private static final String TAG = "SearchEngines";
 
     public static SearchEngine getDefaultSearchEngine(Context context) {
-        if (BrowserSettings.getInstance().useInstant()) {
+        if (BrowserSettings.getInstance().useInstantSearch()) {
             return new InstantSearchEngine(context, DefaultSearchEngine.create(context));
         }
 
diff --git a/src/com/android/browser/view/BookmarkContainer.java b/src/com/android/browser/view/BookmarkContainer.java
new file mode 100644
index 0000000..260b05e
--- /dev/null
+++ b/src/com/android/browser/view/BookmarkContainer.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.view;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
+import android.graphics.drawable.TransitionDrawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewConfiguration;
+import android.widget.RelativeLayout;
+
+public class BookmarkContainer extends RelativeLayout implements OnClickListener {
+
+    private OnClickListener mClickListener;
+    
+    public BookmarkContainer(Context context) {
+        super(context);
+        init();
+    }
+
+    public BookmarkContainer(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public BookmarkContainer(
+            Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init();
+    }
+
+    void init() {
+        setFocusable(true);
+        super.setOnClickListener(this);
+    }
+
+    @Override
+    public void setBackgroundDrawable(Drawable d) {
+        super.setBackgroundDrawable(d);
+    }
+
+    @Override
+    public void setOnClickListener(OnClickListener l) {
+        mClickListener = l;
+    }
+
+    @Override
+    protected void drawableStateChanged() {
+        super.drawableStateChanged();
+        updateTransitionDrawable(isPressed());
+    }
+
+    void updateTransitionDrawable(boolean pressed) {
+        final int longPressTimeout = ViewConfiguration.getLongPressTimeout();
+        Drawable selector = getBackground();
+        if (selector != null && selector instanceof StateListDrawable) {
+            Drawable d = ((StateListDrawable)selector).getCurrent();
+            if (d != null && d instanceof TransitionDrawable) {
+                if (pressed && isLongClickable()) {
+                    ((TransitionDrawable) d).startTransition(longPressTimeout);
+                } else {
+                    ((TransitionDrawable) d).resetTransition();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void onClick(View view) {
+        updateTransitionDrawable(false);
+        if (mClickListener != null) {
+            mClickListener.onClick(view);
+        }
+    }
+}
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
new file mode 100644
index 0000000..6f5fdaa
--- /dev/null
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.view;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.provider.BrowserContract;
+import android.util.AttributeSet;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseExpandableListAdapter;
+import android.widget.ExpandableListAdapter;
+import android.widget.ExpandableListView;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.browser.BookmarkDragHandler;
+import com.android.browser.BookmarkDragHandler.BookmarkDragAdapter;
+import com.android.browser.BookmarkDragHandler.BookmarkDragState;
+import com.android.browser.BreadCrumbView;
+import com.android.browser.BrowserBookmarksAdapter;
+import com.android.browser.BrowserBookmarksPage;
+import com.android.browser.BrowserBookmarksPage.ExtraDragState;
+import com.android.browser.R;
+import com.android.internal.view.menu.MenuBuilder;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class BookmarkExpandableView extends ExpandableListView
+        implements BreadCrumbView.Controller {
+
+    private BookmarkAccountAdapter mAdapter;
+    private int mColumnWidth;
+    private Context mContext;
+    private OnChildClickListener mOnChildClickListener;
+    private ContextMenuInfo mContextMenuInfo = null;
+    private OnCreateContextMenuListener mOnCreateContextMenuListener;
+    private boolean mLongClickable;
+    private BreadCrumbView.Controller mBreadcrumbController;
+    private BookmarkDragHandler mDragHandler;
+    private int mMaxColumnCount;
+    private int mCurrentView = -1;
+
+    public BookmarkExpandableView(Context context) {
+        super(context);
+        init(context);
+    }
+
+    public BookmarkExpandableView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context);
+    }
+
+    public BookmarkExpandableView(
+            Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init(context);
+    }
+
+    void init(Context context) {
+        mContext = context;
+        setItemsCanFocus(true);
+        setLongClickable(false);
+        mMaxColumnCount = mContext.getResources()
+                .getInteger(R.integer.max_bookmark_columns);
+        mAdapter = new BookmarkAccountAdapter(mContext);
+        super.setAdapter(mAdapter);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        if (width > 0) {
+            mAdapter.measureChildren(width);
+            if (mAdapter.mRowPadding > 0) {
+                width -= mAdapter.mRowPadding * 2;
+            }
+            widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, widthMode);
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        if (width != getMeasuredWidth()) {
+            mAdapter.measureChildren(getMeasuredWidth());
+        }
+    }
+
+    @Override
+    public void setAdapter(ExpandableListAdapter adapter) {
+        throw new RuntimeException("Not supported");
+    }
+
+    public void setColumnWidthFromLayout(int layout) {
+        LayoutInflater infalter = LayoutInflater.from(mContext);
+        View v = infalter.inflate(layout, this, false);
+        v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
+        mColumnWidth = v.getMeasuredWidth();
+    }
+
+    public void clearAccounts() {
+        mAdapter.clear();
+    }
+
+    public void addAccount(String accountName, BrowserBookmarksAdapter adapter) {
+        // First, check if it already exists
+        int indexOf = mAdapter.mGroups.indexOf(accountName);
+        if (indexOf >= 0) {
+            BrowserBookmarksAdapter existing = mAdapter.mChildren.get(indexOf);
+            if (existing != adapter) {
+                existing.unregisterDataSetObserver(mAdapter.mObserver);
+                // Replace the existing one
+                mAdapter.mChildren.remove(indexOf);
+                mAdapter.mChildren.add(indexOf, adapter);
+                adapter.registerDataSetObserver(mAdapter.mObserver);
+            }
+        } else {
+            if (mCurrentView >= 0) {
+                adapter.selectView(mCurrentView);
+            }
+            mAdapter.mGroups.add(accountName);
+            mAdapter.mChildren.add(adapter);
+            adapter.registerDataSetObserver(mAdapter.mObserver);
+        }
+        mAdapter.notifyDataSetChanged();
+        expandGroup(mAdapter.getGroupCount() - 1);
+    }
+
+    @Override
+    public void setOnChildClickListener(OnChildClickListener onChildClickListener) {
+        mOnChildClickListener = onChildClickListener;
+    }
+
+    @Override
+    public void setOnCreateContextMenuListener(OnCreateContextMenuListener l) {
+        mOnCreateContextMenuListener = l;
+        if (!mLongClickable) {
+            mLongClickable = true;
+            if (mAdapter != null) {
+                mAdapter.notifyDataSetChanged();
+            }
+        }
+    }
+
+    @Override
+    public void createContextMenu(ContextMenu menu) {
+        // The below is copied from View - we want to bypass the override
+        // in AbsListView
+
+        ContextMenuInfo menuInfo = getContextMenuInfo();
+
+        // Sets the current menu info so all items added to menu will have
+        // my extra info set.
+        ((MenuBuilder)menu).setCurrentMenuInfo(menuInfo);
+
+        onCreateContextMenu(menu);
+        if (mOnCreateContextMenuListener != null) {
+            mOnCreateContextMenuListener.onCreateContextMenu(menu, this, menuInfo);
+        }
+
+        // Clear the extra information so subsequent items that aren't mine don't
+        // have my extra info.
+        ((MenuBuilder)menu).setCurrentMenuInfo(null);
+
+        if (mParent != null) {
+            mParent.createContextMenu(menu);
+        }
+    }
+
+    @Override
+    public boolean showContextMenuForChild(View originalView) {
+        int groupPosition = (Integer) originalView.getTag(R.id.group_position);
+        int childPosition = (Integer) originalView.getTag(R.id.child_position);
+
+        mContextMenuInfo = new BookmarkContextMenuInfo(childPosition,
+                groupPosition);
+        if (getParent() != null) {
+            getParent().showContextMenuForChild(this);
+        }
+
+        return true;
+    }
+
+    @Override
+    public void onTop(BreadCrumbView view, int level, Object data) {
+        if (mBreadcrumbController != null) {
+            mBreadcrumbController.onTop(view, level, data);
+        }
+    }
+
+    public void setBreadcrumbController(BreadCrumbView.Controller controller) {
+        mBreadcrumbController = controller;
+    }
+
+    @Override
+    protected ContextMenuInfo getContextMenuInfo() {
+        return mContextMenuInfo;
+    }
+
+    public BrowserBookmarksAdapter getChildAdapter(int groupPosition) {
+        return mAdapter.mChildren.get(groupPosition);
+    }
+
+    public BookmarkDragAdapter getDragAdapter() {
+        return mDragAdapter;
+    }
+
+    public void showContextMenuForState(BookmarkDragState state) {
+        ExtraDragState extraState = (ExtraDragState) state.extraState;
+        mContextMenuInfo = new BookmarkContextMenuInfo(
+                extraState.childPosition,
+                extraState.groupPosition);
+        if (getParent() != null) {
+            getParent().showContextMenuForChild(BookmarkExpandableView.this);
+        }
+    }
+
+    private BookmarkDragAdapter mDragAdapter = new BookmarkDragAdapter() {
+
+        @Override
+        public void setBookmarkDragHandler(BookmarkDragHandler handler) {
+            mDragHandler = handler;
+        }
+
+        @Override
+        public Cursor getItemForView(View v) {
+            int groupPosition = (Integer) v.getTag(R.id.group_position);
+            int childPosition = (Integer) v.getTag(R.id.child_position);
+            return getChildAdapter(groupPosition).getItem(childPosition);
+        }
+
+    };
+
+    private OnClickListener mChildClickListener = new OnClickListener() {
+
+        @Override
+        public void onClick(View v) {
+            int groupPosition = (Integer) v.getTag(R.id.group_position);
+            int childPosition = (Integer) v.getTag(R.id.child_position);
+            long id = (Long) v.getTag(R.id.child_id);
+            if (mOnChildClickListener != null) {
+                mOnChildClickListener.onChildClick(BookmarkExpandableView.this,
+                        v, groupPosition, childPosition, id);
+            }
+        }
+    };
+
+    private OnClickListener mGroupOnClickListener = new OnClickListener() {
+
+        @Override
+        public void onClick(View v) {
+            int groupPosition = (Integer) v.getTag(R.id.group_position);
+            if (isGroupExpanded(groupPosition)) {
+                collapseGroup(groupPosition);
+            } else {
+                expandGroup(groupPosition, true);
+            }
+        }
+    };
+
+    private OnLongClickListener mChildOnLongClickListener = new OnLongClickListener() {
+
+        @Override
+        public boolean onLongClick(View v) {
+            ExtraDragState state = new ExtraDragState();
+            state.groupPosition = (Integer) v.getTag(R.id.group_position);
+            state.childPosition = (Integer) v.getTag(R.id.child_position);
+            long id = (Long) v.getTag(R.id.child_id);
+            Cursor c = getChildAdapter(state.groupPosition)
+                    .getItem(state.childPosition);
+            return mDragHandler.startDrag(v, c, id, state);
+        }
+    };
+
+    public BreadCrumbView getBreadCrumbs(int groupPosition) {
+        return mAdapter.getBreadCrumbView(groupPosition);
+    }
+
+    public void selectView(int view) {
+        mCurrentView = view;
+        for (BrowserBookmarksAdapter adapter : mAdapter.mChildren) {
+            adapter.selectView(mCurrentView);
+        }
+        mAdapter.notifyDataSetChanged();
+    }
+
+    class BookmarkAccountAdapter extends BaseExpandableListAdapter {
+        ArrayList<BrowserBookmarksAdapter> mChildren;
+        ArrayList<String> mGroups;
+        HashMap<Integer, BreadCrumbView> mBreadcrumbs =
+                new HashMap<Integer, BreadCrumbView>();
+        LayoutInflater mInflater;
+        int mRowCount = 1; // assume at least 1 child fits in a row
+        int mLastViewWidth = -1;
+        int mRowPadding = -1;
+        DataSetObserver mObserver = new DataSetObserver() {
+            @Override
+            public void onChanged() {
+                notifyDataSetChanged();
+            }
+
+            @Override
+            public void onInvalidated() {
+                notifyDataSetChanged();
+            }
+        };
+
+        public BookmarkAccountAdapter(Context context) {
+            mContext = context;
+            mInflater = LayoutInflater.from(mContext);
+            mChildren = new ArrayList<BrowserBookmarksAdapter>();
+            mGroups = new ArrayList<String>();
+        }
+
+        public void clear() {
+            mGroups.clear();
+            mChildren.clear();
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public Object getChild(int groupPosition, int childPosition) {
+            return mChildren.get(groupPosition).getItem(childPosition);
+        }
+
+        @Override
+        public long getChildId(int groupPosition, int childPosition) {
+            return childPosition;
+        }
+
+        @Override
+        public View getChildView(int groupPosition, int childPosition,
+                boolean isLastChild, View convertView, ViewGroup parent) {
+            if (convertView == null) {
+                convertView = mInflater.inflate(R.layout.bookmark_grid_row, parent, false);
+            }
+            BrowserBookmarksAdapter childAdapter = mChildren.get(groupPosition);
+            int rowCount = mRowCount;
+            if (childAdapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                rowCount = 1;
+            }
+            LinearLayout row = (LinearLayout) convertView;
+            if (row.getChildCount() > rowCount) {
+                row.removeViews(rowCount, row.getChildCount() - rowCount);
+            }
+            for (int i = 0; i < rowCount; i++) {
+                View cv = null;
+                if (row.getChildCount() > i) {
+                    cv = row.getChildAt(i);
+                }
+                int realChildPosition = (childPosition * rowCount) + i;
+                if (realChildPosition < childAdapter.getCount()) {
+                    View v = childAdapter.getView(realChildPosition, cv, row);
+                    v.setTag(R.id.group_position, groupPosition);
+                    v.setTag(R.id.child_position, realChildPosition);
+                    v.setTag(R.id.child_id, childAdapter.getItemId(realChildPosition));
+                    v.setOnClickListener(mChildClickListener);
+                    v.setLongClickable(mLongClickable);
+                    if (mDragHandler != null) {
+                        v.setOnLongClickListener(mChildOnLongClickListener);
+                        mDragHandler.registerBookmarkDragHandler(v);
+                    }
+                    if (cv == null) {
+                        row.addView(v);
+                    } else if (cv != v) {
+                        row.removeViewAt(i);
+                        row.addView(v, i);
+                    } else {
+                        cv.setVisibility(View.VISIBLE);
+                    }
+                } else if (cv != null) {
+                    cv.setVisibility(View.GONE);
+                }
+            }
+            return row;
+        }
+
+        @Override
+        public int getChildrenCount(int groupPosition) {
+            BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
+            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                return adapter.getCount();
+            }
+            return (int) Math.ceil(adapter.getCount() / (float)mRowCount);
+        }
+
+        @Override
+        public Object getGroup(int groupPosition) {
+            return mChildren.get(groupPosition);
+        }
+
+        @Override
+        public int getGroupCount() {
+            return mGroups.size();
+        }
+
+        public void measureChildren(int viewWidth) {
+            if (mLastViewWidth == viewWidth) return;
+
+            int rowCount = viewWidth / mColumnWidth;
+            if (mMaxColumnCount > 0) {
+                rowCount = Math.min(rowCount, mMaxColumnCount);
+            }
+            int rowPadding = (viewWidth - (rowCount * mColumnWidth)) / 2;
+            boolean notify = rowCount != mRowCount || rowPadding != mRowPadding;
+            mRowCount = rowCount;
+            mRowPadding = rowPadding;
+            mLastViewWidth = viewWidth;
+            if (notify) {
+                notifyDataSetChanged();
+            }
+        }
+
+        @Override
+        public long getGroupId(int groupPosition) {
+            return groupPosition;
+        }
+
+        @Override
+        public View getGroupView(int groupPosition, boolean isExpanded,
+                View view, ViewGroup parent) {
+            if (view == null) {
+                view = mInflater.inflate(R.layout.bookmark_group_view, parent, false);
+                view.setOnClickListener(mGroupOnClickListener);
+            }
+            view.setTag(R.id.group_position, groupPosition);
+            FrameLayout crumbHolder = (FrameLayout) view.findViewById(R.id.crumb_holder);
+            crumbHolder.removeAllViews();
+            BreadCrumbView crumbs = getBreadCrumbView(groupPosition);
+            if (crumbs.getParent() != null) {
+                ((ViewGroup)crumbs.getParent()).removeView(crumbs);
+            }
+            crumbHolder.addView(crumbs);
+            TextView name = (TextView) view.findViewById(R.id.group_name);
+            String groupName = mGroups.get(groupPosition);
+            if (groupName == null) {
+                groupName = mContext.getString(R.string.local_bookmarks);
+            }
+            name.setText(groupName);
+            return view;
+        }
+
+        public BreadCrumbView getBreadCrumbView(int groupPosition) {
+            BreadCrumbView crumbs = mBreadcrumbs.get(groupPosition);
+            if (crumbs == null) {
+                crumbs = (BreadCrumbView)
+                        mInflater.inflate(R.layout.bookmarks_header, null);
+                crumbs.setController(BookmarkExpandableView.this);
+                crumbs.setUseBackButton(true);
+                crumbs.setMaxVisible(2);
+                String bookmarks = mContext.getString(R.string.bookmarks);
+                crumbs.pushView(bookmarks, false,
+                        BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
+                crumbs.setTag(R.id.group_position, groupPosition);
+                mBreadcrumbs.put(groupPosition, crumbs);
+            }
+            return crumbs;
+        }
+
+        @Override
+        public boolean hasStableIds() {
+            return false;
+        }
+
+        @Override
+        public boolean isChildSelectable(int groupPosition, int childPosition) {
+            return true;
+        }
+
+        @Override
+        public int getChildTypeCount() {
+            return 2;
+        }
+
+        @Override
+        public int getChildType(int groupPosition, int childPosition) {
+            BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
+            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                return 1;
+            }
+            return 0;
+        }
+    }
+
+    public static class BookmarkContextMenuInfo implements ContextMenuInfo {
+
+        private BookmarkContextMenuInfo(int childPosition, int groupPosition) {
+            this.childPosition = childPosition;
+            this.groupPosition = groupPosition;
+        }
+
+        public int childPosition;
+        public int groupPosition;
+    }
+
+}
diff --git a/src/com/android/browser/view/Gallery.java b/src/com/android/browser/view/Gallery.java
new file mode 100644
index 0000000..fa3f97a
--- /dev/null
+++ b/src/com/android/browser/view/Gallery.java
@@ -0,0 +1,1396 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.database.DataSetObserver;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.SoundEffectConstants;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.animation.Transformation;
+import android.widget.BaseAdapter;
+import android.widget.LinearLayout;
+import android.widget.Scroller;
+
+import com.android.internal.R;
+
+public class Gallery extends ViewGroup implements
+        GestureDetector.OnGestureListener {
+
+    private static final String TAG = "Gallery";
+
+    private static final boolean localLOGV = false;
+
+    private static final int INVALID_POSITION = -1;
+
+    /**
+     * Duration in milliseconds from the start of a scroll during which we're
+     * unsure whether the user is scrolling or flinging.
+     */
+    private static final int SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT = 250;
+    private static final int INVALID_POINTER = -1;
+
+    private boolean mInLayout;
+    private int mWidthMeasureSpec;
+    private int mHeightMeasureSpec;
+    private boolean mBlockLayoutRequests;
+
+    private Rect mTouchFrame;
+
+    private RecycleBin mRecycler;
+
+    private boolean mHorizontal;
+    private int mFirstPosition;
+    private int mItemCount;
+    private boolean mDataChanged;
+
+    protected BaseAdapter mAdapter;
+
+    private int mSelectedPosition;
+    private int mOldSelectedPosition;
+
+    private int mSpacing = 0;
+    private int mAnimationDuration = 400;
+    private float mUnselectedAlpha;
+    private int mLeftMost;
+    private int mRightMost;
+    private int mGravity;
+
+    private GestureDetector mGestureDetector;
+
+    private int mDownTouchPosition;
+    private View mDownTouchView;
+    private FlingRunnable mFlingRunnable = new FlingRunnable();
+
+    private OnItemSelectedListener mOnItemSelectedListener;
+    private SelectionNotifier mSelectionNotifier;
+
+    /**
+     * Sets mSuppressSelectionChanged = false. This is used to set it to false
+     * in the future. It will also trigger a selection changed.
+     */
+    private Runnable mDisableSuppressSelectionChangedRunnable = new Runnable() {
+        public void run() {
+            mSuppressSelectionChanged = false;
+            selectionChanged();
+        }
+    };
+
+    private boolean mShouldStopFling;
+    private View mSelectedChild;
+    private boolean mShouldCallbackDuringFling = true;
+    private boolean mShouldCallbackOnUnselectedItemClick = true;
+    private boolean mSuppressSelectionChanged;
+    private boolean mReceivedInvokeKeyDown;
+
+    /**
+     * If true, this onScroll is the first for this user's drag (remember, a
+     * drag sends many onScrolls).
+     */
+    private boolean mIsFirstScroll;
+
+    private boolean mIsBeingDragged;
+
+    private int mActivePointerId = INVALID_POINTER;
+
+    private int mTouchSlop;
+
+    private float mLastMotionCoord;
+
+    public Gallery(Context context) {
+        this(context, null);
+    }
+
+    public Gallery(Context context, AttributeSet attrs) {
+        this(context, attrs, R.attr.galleryStyle);
+    }
+
+    public Gallery(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        mRecycler = new RecycleBin();
+        mGestureDetector = new GestureDetector(context, this);
+        mGestureDetector.setIsLongpressEnabled(true);
+        TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.Gallery, defStyle, 0);
+        int index = a.getInt(com.android.internal.R.styleable.Gallery_gravity,
+                -1);
+        if (index >= 0) {
+            setGravity(index);
+        }
+        int animationDuration = a.getInt(
+                com.android.internal.R.styleable.Gallery_animationDuration, -1);
+        if (animationDuration > 0) {
+            setAnimationDuration(animationDuration);
+        }
+        float unselectedAlpha = a.getFloat(
+                com.android.internal.R.styleable.Gallery_unselectedAlpha, 0.5f);
+        setUnselectedAlpha(unselectedAlpha);
+        mHorizontal = true;
+        a.recycle();
+        // We draw the selected item last (because otherwise the item to the
+        // right overlaps it)
+        mGroupFlags |= FLAG_USE_CHILD_DRAWING_ORDER;
+        mGroupFlags |= FLAG_SUPPORT_STATIC_TRANSFORMATIONS;
+        final ViewConfiguration configuration = ViewConfiguration.get(mContext);
+        mTouchSlop = configuration.getScaledTouchSlop();
+        setFocusable(true);
+        setWillNotDraw(false);
+    }
+
+    /**
+     * Interface definition for a callback to be invoked when an item in this
+     * view has been selected.
+     */
+    public interface OnItemSelectedListener {
+        void onItemSelected(ViewGroup parent, View view, int position, long id);
+
+    }
+
+    /**
+     * Register a callback to be invoked when an item in this AdapterView has
+     * been selected.
+     *
+     * @param listener
+     *            The callback that will run
+     */
+    public void setOnItemSelectedListener(OnItemSelectedListener listener) {
+        mOnItemSelectedListener = listener;
+    }
+
+    public final OnItemSelectedListener getOnItemSelectedListener() {
+        return mOnItemSelectedListener;
+    }
+
+    public void setOrientation(int orientation) {
+        mHorizontal = (orientation == LinearLayout.HORIZONTAL);
+        requestLayout();
+    }
+
+    public void setAdapter(BaseAdapter adapter) {
+        mAdapter = adapter;
+        if (mAdapter != null) {
+            mAdapter.registerDataSetObserver(new DataSetObserver() {
+                @Override
+                public void onChanged() {
+                    super.onChanged();
+                    mDataChanged = true;
+                    handleDataChanged();
+                }
+
+                @Override
+                public void onInvalidated() {
+                    super.onInvalidated();
+                }
+            });
+        }
+        handleDataChanged();
+    }
+
+    void handleDataChanged() {
+        if (mAdapter != null) {
+            resetList();
+            mItemCount = mAdapter.getCount();
+            // checkFocus();
+            int position = mItemCount > 0 ? 0 : INVALID_POSITION;
+            if (mSelectedPosition >= 0) {
+                position = Math.min(mItemCount - 1, mSelectedPosition);
+            }
+            setSelectedPositionInt(position);
+            if (mItemCount == 0) {
+                // Nothing selected
+                checkSelectionChanged();
+            }
+        } else {
+            // checkFocus();
+            mOldSelectedPosition = INVALID_POSITION;
+            setSelectedPositionInt(INVALID_POSITION);
+            resetList();
+            // Nothing selected
+            checkSelectionChanged();
+        }
+    }
+
+    /**
+     * Clear out all children from the list
+     */
+    void resetList() {
+        mDataChanged = false;
+        removeAllViewsInLayout();
+        invalidate();
+    }
+
+    public void setCallbackDuringFling(boolean shouldCallback) {
+        mShouldCallbackDuringFling = shouldCallback;
+    }
+
+    public void setCallbackOnUnselectedItemClick(boolean shouldCallback) {
+        mShouldCallbackOnUnselectedItemClick = shouldCallback;
+    }
+
+    public void setAnimationDuration(int animationDurationMillis) {
+        mAnimationDuration = animationDurationMillis;
+    }
+
+    public void setUnselectedAlpha(float unselectedAlpha) {
+        mUnselectedAlpha = unselectedAlpha;
+    }
+
+    @Override
+    protected boolean getChildStaticTransformation(View child, Transformation t) {
+        t.clear();
+        t.setAlpha(child == mSelectedChild ? 1.0f : mUnselectedAlpha);
+        return true;
+    }
+
+    @Override
+    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+        return p instanceof LayoutParams;
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateLayoutParams(
+            ViewGroup.LayoutParams p) {
+        return new LayoutParams(p);
+    }
+
+    @Override
+    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new LayoutParams(getContext(), attrs);
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
+        return new Gallery.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        int widthSize;
+        int heightSize;
+        if (mDataChanged) {
+            handleDataChanged();
+        }
+        int preferredHeight = 0;
+        int preferredWidth = 0;
+        boolean needsMeasuring = true;
+        int selectedPosition = getSelectedItemPosition();
+        if (selectedPosition >= 0 && mAdapter != null
+                && selectedPosition < mAdapter.getCount()) {
+            // Try looking in the recycler. (Maybe we were measured once
+            // already)
+            View view = mRecycler.get(selectedPosition);
+            if (view == null) {
+                // Make a new one
+                view = mAdapter.getView(selectedPosition, null, this);
+            }
+            if (view != null) {
+                // Put in recycler for re-measuring and/or layout
+                mRecycler.put(selectedPosition, view);
+            }
+            if (view != null) {
+                if (view.getLayoutParams() == null) {
+                    mBlockLayoutRequests = true;
+                    view.setLayoutParams(generateDefaultLayoutParams());
+                    mBlockLayoutRequests = false;
+                }
+                measureChild(view, widthMeasureSpec, heightMeasureSpec);
+                preferredHeight = getChildHeight(view);
+                preferredWidth = getChildWidth(view);
+                needsMeasuring = false;
+            }
+        }
+        if (needsMeasuring) {
+            // No views -- just use padding
+            preferredHeight = 0;
+            if (widthMode == MeasureSpec.UNSPECIFIED) {
+                preferredWidth = 0;
+            }
+        }
+        preferredHeight = Math
+                .max(preferredHeight, getSuggestedMinimumHeight());
+        preferredWidth = Math.max(preferredWidth, getSuggestedMinimumWidth());
+        heightSize = resolveSizeAndState(preferredHeight, heightMeasureSpec, 0);
+        widthSize = resolveSizeAndState(preferredWidth, widthMeasureSpec, 0);
+        setMeasuredDimension(widthSize, heightSize);
+        mHeightMeasureSpec = heightMeasureSpec;
+        mWidthMeasureSpec = widthMeasureSpec;
+    }
+
+    @Override
+    public void requestLayout() {
+        if (!mBlockLayoutRequests) {
+            super.requestLayout();
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        mInLayout = true;
+        layout(0, false);
+        mInLayout = false;
+    }
+
+    int getChildHeight(View child) {
+        return child.getMeasuredHeight();
+    }
+
+    int getChildWidth(View child) {
+        return child.getMeasuredWidth();
+    }
+
+    /**
+     * Tracks a motion scroll. In reality, this is used to do just about any
+     * movement to items (touch scroll, arrow-key scroll, set an item as
+     * selected).
+     *
+     * @param deltaX
+     *            Change in X from the previous event.
+     */
+    void trackMotionScroll(int deltaX) {
+        if (getChildCount() == 0) {
+            return;
+        }
+        boolean toLeft = deltaX < 0;
+        int limitedDeltaX = getLimitedMotionScrollAmount(toLeft, deltaX);
+        if (limitedDeltaX != deltaX) {
+            // The above call returned a limited amount, so stop any
+            // scrolls/flings
+            mFlingRunnable.endFling(false);
+            onFinishedMovement();
+        }
+        offsetChildrenLeftAndRight(limitedDeltaX);
+        detachOffScreenChildren(toLeft);
+        if (toLeft) {
+            // If moved left, there will be empty space on the right
+            fillToGalleryRight();
+        } else {
+            // Similarly, empty space on the left
+            fillToGalleryLeft();
+        }
+        // Clear unused views
+        mRecycler.clear();
+        setSelectionToCenterChild();
+        invalidate();
+    }
+
+    int getLimitedMotionScrollAmount(boolean motionToLeft, int deltaX) {
+        int extremeItemPosition = motionToLeft ? mItemCount - 1 : 0;
+        View extremeChild = getChildAt(extremeItemPosition - mFirstPosition);
+        if (extremeChild == null) {
+            return deltaX;
+        }
+        int extremeChildCenter = getCenterOfView(extremeChild);
+        int galleryCenter = getCenterOfGallery();
+        if (motionToLeft) {
+            if (extremeChildCenter <= galleryCenter) {
+                return 0;
+            }
+        } else {
+            if (extremeChildCenter >= galleryCenter) {
+                return 0;
+            }
+        }
+        int centerDifference = galleryCenter - extremeChildCenter;
+        return motionToLeft ? Math.max(centerDifference, deltaX) : Math.min(
+                centerDifference, deltaX);
+    }
+
+    /**
+     * Offset the horizontal location of all children of this view by the
+     * specified number of pixels.
+     *
+     * @param offset
+     *            the number of pixels to offset
+     */
+    private void offsetChildrenLeftAndRight(int offset) {
+        for (int i = getChildCount() - 1; i >= 0; i--) {
+            if (mHorizontal) {
+                getChildAt(i).offsetLeftAndRight(offset);
+            } else {
+                getChildAt(i).offsetTopAndBottom(offset);
+            }
+        }
+    }
+
+    /**
+     * @return The center of this Gallery.
+     */
+    private int getCenterOfGallery() {
+        return (mHorizontal ? (getWidth() - mPaddingLeft - mPaddingRight) / 2
+                + mPaddingLeft : (getHeight() - mPaddingTop - mPaddingBottom)
+                / 2 + mPaddingTop);
+    }
+
+    /**
+     * @return The center of the given view.
+     */
+    private int getCenterOfView(View view) {
+        return (mHorizontal ? view.getLeft() + view.getWidth() / 2 : view
+                .getTop() + view.getHeight() / 2);
+    }
+
+    /**
+     * Detaches children that are off the screen (i.e.: Gallery bounds).
+     *
+     * @param toLeft
+     *            Whether to detach children to the left of the Gallery, or to
+     *            the right.
+     */
+    private void detachOffScreenChildren(boolean toLeft) {
+        int numChildren = getChildCount();
+        int firstPosition = mFirstPosition;
+        int start = 0;
+        int count = 0;
+        if (toLeft) {
+            final int galleryLeft = (mHorizontal ? mPaddingLeft : mPaddingTop);
+            for (int i = 0; i < numChildren; i++) {
+                final View child = getChildAt(i);
+                if ((mHorizontal && (child.getRight() >= galleryLeft))
+                        || (!mHorizontal && (child.getBottom() >= galleryLeft))) {
+                    break;
+                } else {
+                    count++;
+                    mRecycler.put(firstPosition + i, child);
+                }
+            }
+        } else {
+            final int galleryRight = (mHorizontal ? getWidth() - mPaddingRight
+                    : getHeight() - mPaddingBottom);
+            for (int i = numChildren - 1; i >= 0; i--) {
+                final View child = getChildAt(i);
+                if ((mHorizontal && (child.getLeft() <= galleryRight))
+                        || (!mHorizontal && (child.getTop() <= galleryRight))) {
+                    break;
+                } else {
+                    start = i;
+                    count++;
+                    mRecycler.put(firstPosition + i, child);
+                }
+            }
+        }
+        detachViewsFromParent(start, count);
+        if (toLeft) {
+            mFirstPosition += count;
+        }
+    }
+
+    private void scrollIntoSlots() {
+        if (getChildCount() == 0 || mSelectedChild == null)
+            return;
+        int selectedCenter = getCenterOfView(mSelectedChild);
+        int targetCenter = getCenterOfGallery();
+        int scrollAmount = targetCenter - selectedCenter;
+        if (scrollAmount != 0) {
+            mFlingRunnable.startUsingDistance(scrollAmount);
+        } else {
+            onFinishedMovement();
+        }
+    }
+
+    private void onFinishedMovement() {
+        if (mSuppressSelectionChanged) {
+            mSuppressSelectionChanged = false;
+            // We haven't sent callbacks during the fling, so do it now
+            selectionChanged();
+        }
+        invalidate();
+    }
+
+    protected void setSelectionToCenterChild() {
+        if (mSelectedChild == null)
+            return;
+        int galleryCenter = getCenterOfGallery();
+        int lastDistance = Integer.MAX_VALUE;
+        int newSelectedChildIndex = 0;
+        for (int i = getChildCount() - 1; i >= 0; i--) {
+            View child = getChildAt(i);
+            int distance = Math.abs(getCenterOfView(child) - galleryCenter);
+            if (distance > lastDistance) {
+                // we're moving away from the center, done
+                break;
+            } else {
+                newSelectedChildIndex = i;
+                lastDistance = distance;
+            }
+        }
+        int newPos = mFirstPosition + newSelectedChildIndex;
+        if (newPos != mSelectedPosition) {
+            setSelectedPositionInt(newPos);
+            checkSelectionChanged();
+        }
+    }
+
+    /**
+     * Creates and positions all views for this Gallery.
+     * <p>
+     * We layout rarely, most of the time {@link #trackMotionScroll(int)} takes
+     * care of repositioning, adding, and removing children.
+     *
+     * @param delta
+     *            Change in the selected position. +1 means the selection is
+     *            moving to the right, so views are scrolling to the left. -1
+     *            means the selection is moving to the left.
+     */
+    void layout(int delta, boolean animate) {
+        int childrenLeft = 0;
+        int childrenWidth = (mHorizontal ? mRight - mLeft : mBottom - mTop);
+        if (mDataChanged) {
+            handleDataChanged();
+        }
+        if (mItemCount == 0) {
+            mOldSelectedPosition = INVALID_POSITION;
+            setSelectedPositionInt(INVALID_POSITION);
+            resetList();
+            return;
+        }
+        if (mSelectedPosition >= 0) {
+            setSelectedPositionInt(mSelectedPosition);
+        }
+        recycleAllViews();
+        detachAllViewsFromParent();
+        mRightMost = 0;
+        mLeftMost = 0;
+        mFirstPosition = mSelectedPosition;
+        View sel = makeAndAddView(mSelectedPosition, 0, 0, true);
+        // Put the selected child in the center
+        int selectedOffset = childrenLeft + (childrenWidth / 2)
+                - (mHorizontal ? (sel.getWidth() / 2) : (sel.getHeight() / 2));
+        if (mHorizontal) {
+            sel.offsetLeftAndRight(selectedOffset);
+        } else {
+            sel.offsetTopAndBottom(selectedOffset);
+        }
+        fillToGalleryRight();
+        fillToGalleryLeft();
+        mRecycler.clear();
+        invalidate();
+        checkSelectionChanged();
+        mDataChanged = false;
+        updateSelectedItemMetadata();
+    }
+
+    void recycleAllViews() {
+        final int childCount = getChildCount();
+        final RecycleBin recycleBin = mRecycler;
+        final int position = mFirstPosition;
+        for (int i = 0; i < childCount; i++) {
+            View v = getChildAt(i);
+            int index = position + i;
+            recycleBin.put(index, v);
+        }
+    }
+
+    private void fillToGalleryLeft() {
+        int itemSpacing = mSpacing;
+        int galleryLeft = mHorizontal ? mPaddingLeft : mPaddingTop;
+        View prevIterationView = getChildAt(0);
+        int curPosition;
+        int curRightEdge;
+        if (prevIterationView != null) {
+            curPosition = mFirstPosition - 1;
+            curRightEdge = (mHorizontal ? prevIterationView.getLeft()
+                    : prevIterationView.getTop()) - itemSpacing;
+        } else {
+            // No children available!
+            curPosition = 0;
+            curRightEdge = (mHorizontal ? mRight - mLeft - mPaddingRight
+                    : mBottom - mBottom - mPaddingBottom);
+            mShouldStopFling = true;
+        }
+        while (curRightEdge > galleryLeft && curPosition >= 0) {
+            prevIterationView = makeAndAddView(curPosition, curPosition
+                    - mSelectedPosition, curRightEdge, false);
+            // Remember some state
+            mFirstPosition = curPosition;
+            // Set state for next iteration
+            curRightEdge = (mHorizontal ? prevIterationView.getLeft()
+                    - itemSpacing : prevIterationView.getTop() - itemSpacing);
+            curPosition--;
+        }
+    }
+
+    private void fillToGalleryRight() {
+        int itemSpacing = mSpacing;
+        int galleryRight = (mHorizontal ? mRight - mLeft - mPaddingRight
+                : mBottom - mTop - mPaddingBottom);
+        int numChildren = getChildCount();
+        int numItems = mItemCount;
+        View prevIterationView = getChildAt(numChildren - 1);
+        int curPosition;
+        int curLeftEdge;
+        if (prevIterationView != null) {
+            curPosition = mFirstPosition + numChildren;
+            curLeftEdge = mHorizontal ? prevIterationView.getRight()
+                    + itemSpacing : prevIterationView.getBottom() + itemSpacing;
+        } else {
+            mFirstPosition = curPosition = mItemCount - 1;
+            curLeftEdge = mHorizontal ? mPaddingLeft : mPaddingTop;
+            mShouldStopFling = true;
+        }
+        while (curLeftEdge < galleryRight && curPosition < numItems) {
+            prevIterationView = makeAndAddView(curPosition, curPosition
+                    - mSelectedPosition, curLeftEdge, true);
+
+            // Set state for next iteration
+            curLeftEdge = mHorizontal ? prevIterationView.getRight()
+                    + itemSpacing : prevIterationView.getBottom() + itemSpacing;
+            curPosition++;
+        }
+    }
+
+    /**
+     * Obtain a view, either by pulling an existing view from the recycler or by
+     * getting a new one from the adapter. If we are animating, make sure there
+     * is enough information in the view's layout parameters to animate from the
+     * old to new positions.
+     *
+     * @param position
+     *            Position in the gallery for the view to obtain
+     * @param offset
+     *            Offset from the selected position
+     * @param x
+     *            X-coordintate indicating where this view should be placed.
+     *            This will either be the left or right edge of the view,
+     *            depending on the fromLeft paramter
+     * @param fromLeft
+     *            Are we posiitoning views based on the left edge? (i.e.,
+     *            building from left to right)?
+     * @return A view that has been added to the gallery
+     */
+    private View makeAndAddView(int position, int offset, int x,
+            boolean fromLeft) {
+        View child;
+        if (!mDataChanged) {
+            child = mRecycler.get(position);
+            if (child != null) {
+                // Can reuse an existing view
+                int childLeft = mHorizontal ? child.getLeft() : child.getTop();
+
+                // Remember left and right edges of where views have been placed
+                mRightMost = Math.max(mRightMost,
+                        childLeft
+                                + (mHorizontal ? child.getMeasuredWidth()
+                                        : child.getMeasuredHeight()));
+                mLeftMost = Math.min(mLeftMost, childLeft);
+
+                // Position the view
+                setUpChild(position, child, offset, x, fromLeft);
+
+                return child;
+            }
+        }
+        // Nothing found in the recycler -- ask the adapter for a view
+        child = mAdapter.getView(position, null, this);
+        // Position the view
+        setUpChild(position, child, offset, x, fromLeft);
+        return child;
+    }
+
+    /**
+     * Helper for makeAndAddView to set the position of a view and fill out its
+     * layout paramters.
+     *
+     * @param child
+     *            The view to position
+     * @param offset
+     *            Offset from the selected position
+     * @param x
+     *            X-coordintate indicating where this view should be placed.
+     *            This will either be the left or right edge of the view,
+     *            depending on the fromLeft paramter
+     * @param fromLeft
+     *            Are we positioning views based on the left edge? (i.e.,
+     *            building from left to right)?
+     */
+    private void setUpChild(int position, View child, int offset, int x,
+            boolean fromLeft) {
+        Gallery.LayoutParams lp = (Gallery.LayoutParams) child
+                .getLayoutParams();
+        if (lp == null) {
+            lp = (Gallery.LayoutParams) generateDefaultLayoutParams();
+        }
+        addViewInLayout(child, fromLeft ? -1 : 0, lp);
+        child.setSelected(offset == 0);
+        int childHeightSpec = ViewGroup.getChildMeasureSpec(mHeightMeasureSpec,
+                0, lp.height);
+        int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,
+                0, lp.width);
+        child.measure(childWidthSpec, childHeightSpec);
+        int childLeft;
+        int childRight;
+        // Position vertically based on gravity setting
+        int childTop = calculateTop(child, true);
+        int childBottom = childTop
+                + (mHorizontal ? child.getMeasuredHeight() : child
+                        .getMeasuredWidth());
+        int width = mHorizontal ? child.getMeasuredWidth() : child
+                .getMeasuredHeight();
+        if (fromLeft) {
+            childLeft = x;
+            childRight = childLeft + width;
+        } else {
+            childLeft = x - width;
+            childRight = x;
+        }
+        if (mHorizontal) {
+            child.layout(childLeft, childTop, childRight, childBottom);
+        } else {
+            child.layout(childTop, childLeft, childBottom, childRight);
+        }
+    }
+
+    /**
+     * Figure out vertical placement based on mGravity
+     *
+     * @param child
+     *            Child to place
+     * @return Where the top of the child should be
+     */
+    private int calculateTop(View child, boolean duringLayout) {
+        int myHeight = mHorizontal ? (duringLayout ? getMeasuredHeight()
+                : getHeight()) : (duringLayout ? getMeasuredWidth()
+                : getWidth());
+        int childHeight = mHorizontal ? (duringLayout ? child
+                .getMeasuredHeight() : child.getHeight())
+                : (duringLayout ? child.getMeasuredWidth() : child.getWidth());
+        int childTop = 0;
+        switch (mGravity) {
+        case Gravity.TOP:
+        case Gravity.LEFT:
+            childTop = 0;
+            break;
+        case Gravity.CENTER_VERTICAL:
+        case Gravity.CENTER_HORIZONTAL:
+            int availableSpace = myHeight - childHeight;
+            childTop = availableSpace / 2;
+            break;
+        case Gravity.BOTTOM:
+        case Gravity.RIGHT:
+            childTop = myHeight - childHeight;
+            break;
+        }
+        return childTop;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        /*
+         * Shortcut the most recurring case: the user is in the dragging state
+         * and he is moving his finger. We want to intercept this motion.
+         */
+        final int action = ev.getAction();
+        if ((action == MotionEvent.ACTION_MOVE) && (mIsBeingDragged)) {
+            return true;
+        }
+        switch (action & MotionEvent.ACTION_MASK) {
+        case MotionEvent.ACTION_MOVE: {
+            /*
+             * mIsBeingDragged == false, otherwise the shortcut would have
+             * caught it. Check whether the user has moved far enough from his
+             * original down touch.
+             */
+            final int activePointerId = mActivePointerId;
+            if (activePointerId == INVALID_POINTER) {
+                // If we don't have a valid id, the touch down wasn't on
+                // content.
+                break;
+            }
+            final int pointerIndex = ev.findPointerIndex(activePointerId);
+            final float coord = mHorizontal ? ev.getX(pointerIndex) : ev
+                    .getY(pointerIndex);
+            final int diff = (int) Math.abs(coord - mLastMotionCoord);
+            if (diff > mTouchSlop) {
+                mIsBeingDragged = true;
+                mLastMotionCoord = coord;
+                if (mParent != null)
+                    mParent.requestDisallowInterceptTouchEvent(true);
+            }
+            break;
+        }
+        case MotionEvent.ACTION_DOWN: {
+            final float coord = mHorizontal ? ev.getX() : ev.getY();
+            /*
+             * Remember location of down touch. ACTION_DOWN always refers to
+             * pointer index 0.
+             */
+            mLastMotionCoord = coord;
+            mActivePointerId = ev.getPointerId(0);
+            /*
+             * If being flinged and user touches the screen, initiate drag;
+             * otherwise don't. mScroller.isFinished should be false when being
+             * flinged.
+             */
+            mIsBeingDragged = !mFlingRunnable.mScroller.isFinished();
+            mGestureDetector.onTouchEvent(ev);
+            break;
+        }
+        case MotionEvent.ACTION_CANCEL:
+        case MotionEvent.ACTION_UP:
+            /* Release the drag */
+            mIsBeingDragged = false;
+            mActivePointerId = INVALID_POINTER;
+            break;
+        case MotionEvent.ACTION_POINTER_DOWN: {
+            final int index = ev.getActionIndex();
+            mLastMotionCoord = mHorizontal ? ev.getX(index) : ev.getY(index);
+            mActivePointerId = ev.getPointerId(index);
+            break;
+        }
+        case MotionEvent.ACTION_POINTER_UP:
+            mLastMotionCoord = ev.getX(ev.findPointerIndex(mActivePointerId));
+            break;
+        }
+
+        return mIsBeingDragged;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        // Give everything to the gesture detector
+        boolean retValue = mGestureDetector.onTouchEvent(event);
+        int action = event.getAction();
+        if (action == MotionEvent.ACTION_UP) {
+            // Helper method for lifted finger
+            onUp();
+        } else if (action == MotionEvent.ACTION_CANCEL) {
+            onCancel();
+        }
+        return retValue;
+    }
+
+    public boolean onSingleTapUp(MotionEvent e) {
+        if (mDownTouchPosition >= 0) {
+            // An item tap should make it selected, so scroll to this child.
+            scrollToChild(mDownTouchPosition - mFirstPosition);
+            if (mShouldCallbackOnUnselectedItemClick
+                    || mDownTouchPosition == mSelectedPosition) {
+                performItemClick(mDownTouchView, mDownTouchPosition,
+                        mAdapter.getItemId(mDownTouchPosition));
+            }
+            return true;
+        }
+        return false;
+    }
+
+    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
+            float velocityY) {
+        if (!mShouldCallbackDuringFling) {
+            removeCallbacks(mDisableSuppressSelectionChangedRunnable);
+            if (!mSuppressSelectionChanged)
+                mSuppressSelectionChanged = true;
+        }
+        mFlingRunnable.startUsingVelocity(mHorizontal ? (int) -velocityX
+                : (int) -velocityY);
+        return true;
+    }
+
+    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
+            float distanceY) {
+        if (localLOGV)
+            Log.v(TAG, String.valueOf(e2.getX() - e1.getX()));
+        mParent.requestDisallowInterceptTouchEvent(true);
+        if (!mShouldCallbackDuringFling) {
+            if (mIsFirstScroll) {
+                if (!mSuppressSelectionChanged)
+                    mSuppressSelectionChanged = true;
+                postDelayed(mDisableSuppressSelectionChangedRunnable,
+                        SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);
+            }
+        } else {
+            if (mSuppressSelectionChanged)
+                mSuppressSelectionChanged = false;
+        }
+        trackMotionScroll(mHorizontal ? -1 * (int) distanceX : -1
+                * (int) distanceY);
+
+        mIsFirstScroll = false;
+        return true;
+    }
+
+    public boolean onDown(MotionEvent e) {
+        mFlingRunnable.stop(false);
+        mDownTouchPosition = pointToPosition((int) e.getX(), (int) e.getY());
+        if (mDownTouchPosition >= 0) {
+            mDownTouchView = getChildAt(mDownTouchPosition - mFirstPosition);
+            mDownTouchView.setPressed(true);
+        }
+        // Reset the multiple-scroll tracking state
+        mIsFirstScroll = true;
+        // Must return true to get matching events for this down event.
+        return true;
+    }
+
+    /**
+     * Called when a touch event's action is MotionEvent.ACTION_UP.
+     */
+    void onUp() {
+        if (mFlingRunnable.mScroller.isFinished()) {
+            scrollIntoSlots();
+        }
+        dispatchUnpress();
+    }
+
+    /**
+     * Called when a touch event's action is MotionEvent.ACTION_CANCEL.
+     */
+    void onCancel() {
+        onUp();
+    }
+
+    public void onLongPress(MotionEvent e) {
+    }
+
+    public void onShowPress(MotionEvent e) {
+    }
+
+    private void dispatchPress(View child) {
+        if (child != null) {
+            child.setPressed(true);
+        }
+        setPressed(true);
+    }
+
+    private void dispatchUnpress() {
+        for (int i = getChildCount() - 1; i >= 0; i--) {
+            getChildAt(i).setPressed(false);
+        }
+        setPressed(false);
+    }
+
+    @Override
+    public void dispatchSetSelected(boolean selected) {
+    }
+
+    @Override
+    protected void dispatchSetPressed(boolean pressed) {
+        if (mSelectedChild != null) {
+            mSelectedChild.setPressed(pressed);
+        }
+    }
+
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        return event.dispatch(this, null, null);
+    }
+
+    /**
+     * Handles left, right, and clicking
+     *
+     * @see android.view.View#onKeyDown
+     */
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+
+        case KeyEvent.KEYCODE_DPAD_LEFT:
+            if (movePrevious()) {
+                playSoundEffect(SoundEffectConstants.NAVIGATION_LEFT);
+            }
+            return true;
+
+        case KeyEvent.KEYCODE_DPAD_RIGHT:
+            if (moveNext()) {
+                playSoundEffect(SoundEffectConstants.NAVIGATION_RIGHT);
+            }
+            return true;
+
+        case KeyEvent.KEYCODE_DPAD_CENTER:
+        case KeyEvent.KEYCODE_ENTER:
+            mReceivedInvokeKeyDown = true;
+            // fallthrough to default handling
+        }
+
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+        case KeyEvent.KEYCODE_DPAD_CENTER:
+        case KeyEvent.KEYCODE_ENTER: {
+
+            if (mReceivedInvokeKeyDown) {
+                if (mItemCount > 0) {
+
+                    dispatchPress(mSelectedChild);
+                    postDelayed(new Runnable() {
+                        public void run() {
+                            dispatchUnpress();
+                        }
+                    }, ViewConfiguration.getPressedStateDuration());
+
+                    int selectedIndex = mSelectedPosition - mFirstPosition;
+                    performItemClick(getChildAt(selectedIndex),
+                            mSelectedPosition,
+                            mAdapter.getItemId(mSelectedPosition));
+                }
+            }
+
+            // Clear the flag
+            mReceivedInvokeKeyDown = false;
+
+            return true;
+        }
+        }
+
+        return super.onKeyUp(keyCode, event);
+    }
+
+    private void performItemClick(View childAt, int mSelectedPosition2,
+            long itemId) {
+    }
+
+    boolean movePrevious() {
+        if (mItemCount > 0 && mSelectedPosition > 0) {
+            scrollToChild(mSelectedPosition - mFirstPosition - 1);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    boolean moveNext() {
+        if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
+            scrollToChild(mSelectedPosition - mFirstPosition + 1);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private boolean scrollToChild(int childPosition) {
+        View child = getChildAt(childPosition);
+        if (child != null) {
+            int distance = getCenterOfGallery() - getCenterOfView(child);
+            mFlingRunnable.startUsingDistance(distance);
+            return true;
+        }
+        return false;
+    }
+
+    protected void setSelectedPositionInt(int position) {
+        mSelectedPosition = position;
+        updateSelectedItemMetadata();
+    }
+
+    void checkSelectionChanged() {
+        if (mSelectedPosition != mOldSelectedPosition) {
+            selectionChanged();
+            mOldSelectedPosition = mSelectedPosition;
+        }
+    }
+
+    private class SelectionNotifier implements Runnable {
+        public void run() {
+            if (mDataChanged) {
+                // Data has changed between when this SelectionNotifier
+                // was posted and now. We need to wait until the AdapterView
+                // has been synched to the new data.
+                if (mAdapter != null) {
+                    post(this);
+                }
+            } else {
+                fireOnSelected();
+            }
+        }
+    }
+
+    void selectionChanged() {
+        if (mSuppressSelectionChanged)
+            return;
+        if (mOnItemSelectedListener != null) {
+            if (mInLayout || mBlockLayoutRequests) {
+                // If we are in a layout traversal, defer notification
+                if (mSelectionNotifier == null) {
+                    mSelectionNotifier = new SelectionNotifier();
+                }
+                post(mSelectionNotifier);
+            } else {
+                fireOnSelected();
+            }
+        }
+
+        // we fire selection events here not in View
+        // if (mSelectedPosition != ListView.INVALID_POSITION && isShown() &&
+        // !isInTouchMode()) {
+        // sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+        // }
+    }
+
+    private void fireOnSelected() {
+        if (mOnItemSelectedListener == null)
+            return;
+
+        int selection = this.getSelectedItemPosition();
+        if (selection >= 0) {
+            View v = getSelectedView();
+            mOnItemSelectedListener.onItemSelected(this, v, selection,
+                    mAdapter.getItemId(selection));
+        }
+    }
+
+    public int getSelectedItemPosition() {
+        return mSelectedPosition;
+    }
+
+    public View getSelectedView() {
+        if (mItemCount > 0 && mSelectedPosition >= 0) {
+            return getChildAt(mSelectedPosition - mFirstPosition);
+        } else {
+            return null;
+        }
+    }
+
+    private void updateSelectedItemMetadata() {
+        View oldSelectedChild = mSelectedChild;
+        View child = mSelectedChild = getChildAt(mSelectedPosition
+                - mFirstPosition);
+        if (child == null) {
+            return;
+        }
+        child.setSelected(true);
+        child.setFocusable(true);
+
+        if (hasFocus()) {
+            child.requestFocus();
+        }
+        // We unfocus the old child down here so the above hasFocus check
+        // returns true
+        if (oldSelectedChild != null && oldSelectedChild != child) {
+            // Make sure its drawable state doesn't contain 'selected'
+            oldSelectedChild.setSelected(false);
+            // Make sure it is not focusable anymore, since otherwise arrow keys
+            // can make this one be focused
+            oldSelectedChild.setFocusable(false);
+        }
+    }
+
+    public void setGravity(int gravity) {
+        if (mGravity != gravity) {
+            mGravity = gravity;
+            requestLayout();
+        }
+    }
+
+    @Override
+    protected int getChildDrawingOrder(int childCount, int i) {
+        int selectedIndex = mSelectedPosition - mFirstPosition;
+        // Just to be safe
+        if (selectedIndex < 0)
+            return i;
+        if (i == childCount - 1) {
+            // Draw the selected child last
+            return selectedIndex;
+        } else if (i >= selectedIndex) {
+            // Move the children to the right of the selected child earlier one
+            return i + 1;
+        } else {
+            // Keep the children to the left of the selected child the same
+            return i;
+        }
+    }
+
+    @Override
+    protected void onFocusChanged(boolean gainFocus, int direction,
+            Rect previouslyFocusedRect) {
+        super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
+        /*
+         * The gallery shows focus by focusing the selected item. So, give focus
+         * to our selected item instead. We steal keys from our selected item
+         * elsewhere.
+         */
+        if (gainFocus && mSelectedChild != null) {
+            mSelectedChild.requestFocus(direction);
+            mSelectedChild.setSelected(true);
+        }
+    }
+
+    void setNextSelectedPositionInt(int position) {
+        mSelectedPosition = position;
+    }
+
+    public int pointToPosition(int x, int y) {
+        Rect frame = mTouchFrame;
+        if (frame == null) {
+            mTouchFrame = new Rect();
+            frame = mTouchFrame;
+        }
+        final int count = getChildCount();
+        for (int i = count - 1; i >= 0; i--) {
+            View child = getChildAt(i);
+            if (child.getVisibility() == View.VISIBLE) {
+                child.getHitRect(frame);
+                if (frame.contains(x, y)) {
+                    return mFirstPosition + i;
+                }
+            }
+        }
+        return INVALID_POSITION;
+    }
+
+    private class FlingRunnable implements Runnable {
+        private Scroller mScroller;
+
+        /**
+         * X value reported by mScroller on the previous fling
+         */
+        private int mLastFlingX;
+
+        public FlingRunnable() {
+            mScroller = new Scroller(getContext());
+        }
+
+        private void startCommon() {
+            // Remove any pending flings
+            removeCallbacks(this);
+        }
+
+        public void startUsingVelocity(int initialVelocity) {
+            if (initialVelocity == 0)
+                return;
+            startCommon();
+            int initialX = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
+            mLastFlingX = initialX;
+            mScroller.fling(initialX, 0, initialVelocity, 0, 0,
+                    Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
+            post(this);
+        }
+
+        public void startUsingDistance(int distance) {
+            if (distance == 0)
+                return;
+            startCommon();
+            mLastFlingX = 0;
+            mScroller.startScroll(0, 0, -distance, 0, mAnimationDuration);
+            post(this);
+        }
+
+        public void stop(boolean scrollIntoSlots) {
+            removeCallbacks(this);
+            endFling(scrollIntoSlots);
+        }
+
+        private void endFling(boolean scrollIntoSlots) {
+            mScroller.forceFinished(true);
+            if (scrollIntoSlots)
+                scrollIntoSlots();
+        }
+
+        public void run() {
+            if (mItemCount == 0) {
+                endFling(true);
+                return;
+            }
+            mShouldStopFling = false;
+            final Scroller scroller = mScroller;
+            boolean more = scroller.computeScrollOffset();
+            final int x = scroller.getCurrX();
+            // Flip sign to convert finger direction to list items direction
+            // (e.g. finger moving down means list is moving towards the top)
+            int delta = mLastFlingX - x;
+            // Pretend that each frame of a fling scroll is a touch scroll
+            if (delta > 0) {
+                // Moving towards the left. Use first view as mDownTouchPosition
+                mDownTouchPosition = mFirstPosition;
+                // Don't fling more than 1 screen
+                delta = mHorizontal ? Math.min(getWidth() - mPaddingLeft
+                        - mPaddingRight - 1, delta) : Math.min(getHeight()
+                        - mPaddingTop - mPaddingBottom - 1, delta);
+            } else {
+                // Moving towards the right. Use last view as mDownTouchPosition
+                int offsetToLast = getChildCount() - 1;
+                mDownTouchPosition = mFirstPosition + offsetToLast;
+                // Don't fling more than 1 screen
+                delta = mHorizontal ? Math.max(-(getWidth() - mPaddingRight
+                        - mPaddingLeft - 1), delta) : Math.max(-(getHeight()
+                        - mPaddingBottom - mPaddingTop - 1), delta);
+            }
+            trackMotionScroll(delta);
+            if (more && !mShouldStopFling) {
+                mLastFlingX = x;
+                post(this);
+            } else {
+                endFling(true);
+            }
+        }
+    }
+
+    /**
+     * Gallery extends LayoutParams to provide a place to hold current
+     * Transformation information along with previous position/transformation
+     * info.
+     *
+     */
+    public static class LayoutParams extends ViewGroup.LayoutParams {
+        public LayoutParams(Context c, AttributeSet attrs) {
+            super(c, attrs);
+        }
+
+        public LayoutParams(int w, int h) {
+            super(w, h);
+        }
+
+        public LayoutParams(ViewGroup.LayoutParams source) {
+            super(source);
+        }
+    }
+
+    class RecycleBin {
+        private final SparseArray<View> mScrapHeap = new SparseArray<View>();
+
+        public void put(int position, View v) {
+            mScrapHeap.put(position, v);
+        }
+
+        View get(int position) {
+            // System.out.print("Looking for " + position);
+            View result = mScrapHeap.get(position);
+            if (result != null) {
+                // System.out.println(" HIT");
+                mScrapHeap.delete(position);
+            } else {
+                // System.out.println(" MISS");
+            }
+            return result;
+        }
+
+        void clear() {
+            final SparseArray<View> scrapHeap = mScrapHeap;
+            final int count = scrapHeap.size();
+            for (int i = 0; i < count; i++) {
+                final View view = scrapHeap.valueAt(i);
+                if (view != null) {
+                    removeDetachedView(view, true);
+                }
+            }
+            scrapHeap.clear();
+        }
+    }
+
+}
diff --git a/src/com/android/browser/view/StopProgressView.java b/src/com/android/browser/view/StopProgressView.java
new file mode 100644
index 0000000..64fa5d0
--- /dev/null
+++ b/src/com/android/browser/view/StopProgressView.java
@@ -0,0 +1,98 @@
+
+package com.android.browser.view;
+
+import com.android.browser.R;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.ProgressBar;
+
+
+public class StopProgressView extends ProgressBar {
+
+    Drawable mOverlayDrawable;
+    Drawable mProgressDrawable;
+    int mWidth;
+    int mHeight;
+
+    /**
+     * @param context
+     * @param attrs
+     * @param defStyle
+     * @param styleRes
+     */
+    public StopProgressView(Context context, AttributeSet attrs, int defStyle, int styleRes) {
+        super(context, attrs, defStyle, styleRes);
+        init(attrs);
+    }
+
+    /**
+     * @param context
+     * @param attrs
+     * @param defStyle
+     */
+    public StopProgressView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init(attrs);
+    }
+
+    /**
+     * @param context
+     * @param attrs
+     */
+    public StopProgressView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(attrs);
+    }
+
+    /**
+     * @param context
+     */
+    public StopProgressView(Context context) {
+        super(context);
+        init(null);
+    }
+
+    private void init(AttributeSet attrs) {
+        mProgressDrawable = getIndeterminateDrawable();
+        setImageDrawable(mContext.getResources()
+                .getDrawable(R.drawable.ic_stop_holo_dark));
+    }
+
+    public void hideProgress() {
+        setIndeterminateDrawable(null);
+    }
+
+    public void showProgress() {
+        setIndeterminateDrawable(mProgressDrawable);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        mWidth = (right - left) * 2 / 3;
+        mHeight = (bottom - top) * 2 / 3;
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        if (mOverlayDrawable != null) {
+            int l = (getWidth() - mWidth) / 2;
+            int t = (getHeight() - mHeight) / 2;
+            mOverlayDrawable.setBounds(l, t, l + mWidth, t + mHeight);
+            mOverlayDrawable.draw(canvas);
+        }
+    }
+
+    public Drawable getDrawable() {
+        return mOverlayDrawable;
+    }
+
+    public void setImageDrawable(Drawable d) {
+        mOverlayDrawable = d;
+    }
+
+}
diff --git a/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java b/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
index 48d7123..f3d2675 100644
--- a/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
+++ b/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
@@ -16,9 +16,6 @@
 
 package com.android.browser.widget;
 
-import com.android.browser.BrowserActivity;
-import com.android.browser.R;
-
 import android.app.PendingIntent;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProvider;
@@ -28,6 +25,9 @@
 import android.net.Uri;
 import android.widget.RemoteViews;
 
+import com.android.browser.BrowserActivity;
+import com.android.browser.R;
+
 /**
  * Widget that shows a preview of the user's bookmarks.
  */
@@ -91,7 +91,7 @@
             RemoteViews views = new RemoteViews(context.getPackageName(),
                     R.layout.bookmarkthumbnailwidget);
             views.setOnClickPendingIntent(R.id.app_shortcut, launchBrowser);
-            views.setRemoteAdapter(appWidgetId, R.id.bookmarks_list, updateIntent);
+            views.setRemoteAdapter(R.id.bookmarks_list, updateIntent);
             appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.bookmarks_list);
             Intent ic = new Intent(context, BookmarkWidgetProxy.class);
             views.setPendingIntentTemplate(R.id.bookmarks_list,
@@ -110,27 +110,9 @@
     }
 
     public static void refreshWidgets(Context context) {
-        refreshWidgets(context, false);
+        context.sendBroadcast(new Intent(
+                BookmarkThumbnailWidgetProvider.ACTION_BOOKMARK_APPWIDGET_UPDATE,
+                null, context, BookmarkThumbnailWidgetProvider.class));
     }
 
-    public static void refreshWidgets(Context context, boolean zeroState) {
-        if (zeroState) {
-            final Context appContext = context.getApplicationContext();
-            new Thread() {
-                @Override
-                public void run() {
-                    AppWidgetManager wm = AppWidgetManager.getInstance(appContext);
-                    int[] ids = wm.getAppWidgetIds(getComponentName(appContext));
-                    for (int id : ids) {
-                        BookmarkThumbnailWidgetService.clearWidgetState(appContext, id);
-                    }
-                    refreshWidgets(appContext, false);
-                }
-            }.start();
-        } else {
-            context.sendBroadcast(new Intent(
-                    BookmarkThumbnailWidgetProvider.ACTION_BOOKMARK_APPWIDGET_UPDATE,
-                    null, context, BookmarkThumbnailWidgetProvider.class));
-        }
-    }
 }
diff --git a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
index 675cdd9..7d174ee 100644
--- a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
@@ -16,10 +16,6 @@
 
 package com.android.browser.widget;
 
-import com.android.browser.BookmarkUtils;
-import com.android.browser.BrowserActivity;
-import com.android.browser.R;
-
 import android.appwidget.AppWidgetManager;
 import android.content.ContentUris;
 import android.content.Context;
@@ -40,9 +36,12 @@
 import android.widget.RemoteViews;
 import android.widget.RemoteViewsService;
 
+import com.android.browser.BrowserActivity;
+import com.android.browser.R;
+import com.android.browser.provider.BrowserProvider2;
+
 import java.io.File;
 import java.io.FilenameFilter;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -110,11 +109,11 @@
         }
     }
 
-    static void clearWidgetState(Context context, int widgetId) {
+    static void setupWidgetState(Context context, int widgetId, long rootFolder) {
         SharedPreferences pref = getWidgetState(context, widgetId);
         pref.edit()
-            .remove(STATE_CURRENT_FOLDER)
-            .remove(STATE_ROOT_FOLDER)
+            .putLong(STATE_CURRENT_FOLDER, rootFolder)
+            .putLong(STATE_ROOT_FOLDER, rootFolder)
             .commit();
     }
 
@@ -311,8 +310,8 @@
             long token = Binder.clearCallingIdentity();
             syncState();
             if (mRootFolder < 0 || mCurrentFolder < 0) {
-                // Our state has been zero'd, reset (account change most likely)
-                mRootFolder = getRootFolder();
+                // This shouldn't happen, but JIC default to the local account
+                mRootFolder = BrowserProvider2.FIXED_ID_ROOT;
                 mCurrentFolder = mRootFolder;
                 saveState();
             }
@@ -327,27 +326,12 @@
             }
         }
 
-        long getRootFolder() {
-            Uri uri = Uri.withAppendedPath(
-                    BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER, "id");
-            uri = BookmarkUtils.addAccountInfo(mContext, uri.buildUpon()).build();
-            Cursor c = mContext.getContentResolver().query(
-                    uri, null, null, null, null);
-            try {
-                c.moveToFirst();
-                return c.getLong(0);
-            } finally {
-                c.close();
-            }
-        }
-
         void loadBookmarks() {
             resetBookmarks();
 
             Uri uri = ContentUris.withAppendedId(
                     BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER,
                     mCurrentFolder);
-            uri = BookmarkUtils.addAccountInfo(mContext, uri.buildUpon()).build();
             mBookmarks = mContext.getContentResolver().query(uri, PROJECTION,
                     null, null, null);
             if (mCurrentFolder != mRootFolder) {
diff --git a/src/com/android/browser/widget/BookmarkWidgetConfigure.java b/src/com/android/browser/widget/BookmarkWidgetConfigure.java
new file mode 100644
index 0000000..4231f37
--- /dev/null
+++ b/src/com/android/browser/widget/BookmarkWidgetConfigure.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.widget;
+
+import android.app.ListActivity;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.appwidget.AppWidgetManager;
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.android.browser.AddBookmarkPage.AccountsLoader;
+import com.android.browser.AddBookmarkPage.BookmarkAccount;
+import com.android.browser.R;
+import com.android.browser.provider.BrowserProvider2;
+
+public class BookmarkWidgetConfigure extends ListActivity
+        implements OnClickListener, LoaderCallbacks<Cursor> {
+
+    static final int LOADER_ACCOUNTS = 1;
+
+    private ArrayAdapter<BookmarkAccount> mAccountAdapter;
+    private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setResult(RESULT_CANCELED);
+        setVisible(false);
+        setContentView(R.layout.widget_account_selection);
+        findViewById(R.id.cancel).setOnClickListener(this);
+        mAccountAdapter = new ArrayAdapter<BookmarkAccount>(this,
+                android.R.layout.simple_list_item_1);
+        setListAdapter(mAccountAdapter);
+        Intent intent = getIntent();
+        Bundle extras = intent.getExtras();
+        if (extras != null) {
+            mAppWidgetId = extras.getInt(
+                    AppWidgetManager.EXTRA_APPWIDGET_ID,
+                    AppWidgetManager.INVALID_APPWIDGET_ID);
+        }
+        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
+            finish();
+        } else {
+            getLoaderManager().initLoader(LOADER_ACCOUNTS, null, this);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        finish();
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        BookmarkAccount account = mAccountAdapter.getItem(position);
+        pickAccount(account.rootFolderId);
+    }
+
+    @Override
+    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+        return new AccountsLoader(this);
+    }
+
+    void pickAccount(long rootId) {
+        BookmarkThumbnailWidgetService.setupWidgetState(this, mAppWidgetId, rootId);
+        Intent result = new Intent();
+        result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
+        setResult(RESULT_OK, result);
+        finish();
+    }
+
+    @Override
+    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+        if (cursor == null || cursor.getCount() <= 1) {
+            // We always have the local account, so if count == 1 it must
+            // be the local account
+            pickAccount(BrowserProvider2.FIXED_ID_ROOT);
+        } else {
+            mAccountAdapter.clear();
+            while (cursor.moveToNext()) {
+                mAccountAdapter.add(new BookmarkAccount(this, cursor));
+            }
+            setVisible(true);
+        }
+        getLoaderManager().destroyLoader(LOADER_ACCOUNTS);
+    }
+
+    @Override
+    public void onLoaderReset(Loader<Cursor> loader) {
+        // Don't care
+    }
+
+}
diff --git a/tests/src/com/android/browser/BrowserProviderTests.java b/tests/src/com/android/browser/BrowserProviderTests.java
index eb8ba80..c63cad1 100644
--- a/tests/src/com/android/browser/BrowserProviderTests.java
+++ b/tests/src/com/android/browser/BrowserProviderTests.java
@@ -16,6 +16,7 @@
 
 package com.android.browser;
 
+import com.android.browser.provider.BrowserProvider;
 import com.android.browser.provider.BrowserProvider2;
 import com.android.browser.tests.utils.ProviderTestCase3;
 
diff --git a/tests/src/com/android/browser/JNIBindingsTestApp.java b/tests/src/com/android/browser/JNIBindingsTestApp.java
index f4efa2c..5d1fd0d 100644
--- a/tests/src/com/android/browser/JNIBindingsTestApp.java
+++ b/tests/src/com/android/browser/JNIBindingsTestApp.java
@@ -23,6 +23,7 @@
 import android.os.Message;
 import android.test.ActivityInstrumentationTestCase2;
 import android.util.Log;
+import android.webkit.ClientCertRequestHandler;
 import android.webkit.JsPromptResult;
 import android.webkit.JsResult;
 import android.webkit.SslErrorHandler;
@@ -220,6 +221,16 @@
                 handler.proceed();
             }
 
+            /**
+             * Ignores and logs SSL client certificate requests.
+             */
+            @Override
+            public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler,
+                    String host_and_port) {
+                Log.w(TAG, "SSL client certificate request: " + host_and_port);
+                handler.cancel();
+            }
+
         });
     }
 
diff --git a/tests/src/com/android/browser/PopularUrlsTest.java b/tests/src/com/android/browser/PopularUrlsTest.java
index 3e7515f..f1ab71b 100644
--- a/tests/src/com/android/browser/PopularUrlsTest.java
+++ b/tests/src/com/android/browser/PopularUrlsTest.java
@@ -24,6 +24,7 @@
 import android.test.ActivityInstrumentationTestCase2;
 import android.text.TextUtils;
 import android.util.Log;
+import android.webkit.ClientCertRequestHandler;
 import android.webkit.DownloadListener;
 import android.webkit.HttpAuthHandler;
 import android.webkit.JsPromptResult;
@@ -77,6 +78,7 @@
         super.setUp();
 
         Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("about:blank"));
+        i.putExtra(Controller.NO_CRASH_RECOVERY, true);
         setActivityIntent(i);
         mActivity = getActivity();
         mController = mActivity.getController();
@@ -224,6 +226,16 @@
             }
 
             /**
+             * Ignores and logs SSL client certificate requests.
+             */
+            @Override
+            public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler,
+                    String host_and_port) {
+                Log.w(TAG, "SSL client certificate request: " + host_and_port);
+                handler.cancel();
+            }
+
+            /**
              * Ignores http auth with dummy username and password
              */
             @Override
diff --git a/tests/src/com/android/browser/TestWebChromeClient.java b/tests/src/com/android/browser/TestWebChromeClient.java
index 53f8db3..dd84b3a 100644
--- a/tests/src/com/android/browser/TestWebChromeClient.java
+++ b/tests/src/com/android/browser/TestWebChromeClient.java
@@ -84,7 +84,9 @@
     @Override
     public boolean onCreateWindow(WebView view, boolean dialog,
             boolean userGesture, Message resultMsg) {
-        return mWrappedClient.onCreateWindow(view, dialog, userGesture, resultMsg);
+        // do not open any new pop-ups
+        resultMsg.sendToTarget();
+        return true;
     }
 
     /** {@inheritDoc} */
diff --git a/tests/src/com/android/browser/TestWebViewClient.java b/tests/src/com/android/browser/TestWebViewClient.java
index 7159a7e..208a822 100644
--- a/tests/src/com/android/browser/TestWebViewClient.java
+++ b/tests/src/com/android/browser/TestWebViewClient.java
@@ -20,6 +20,7 @@
 import android.net.http.SslError;
 import android.os.Message;
 import android.view.KeyEvent;
+import android.webkit.ClientCertRequestHandler;
 import android.webkit.HttpAuthHandler;
 import android.webkit.SslErrorHandler;
 import android.webkit.WebView;
@@ -102,6 +103,13 @@
 
   /** {@inheritDoc} */
   @Override
+  public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler,
+          String host_and_port) {
+      mWrappedClient.onReceivedClientCertRequest(view, handler, host_and_port);
+  }
+
+  /** {@inheritDoc} */
+  @Override
   public void onReceivedHttpAuthRequest(WebView view,
           HttpAuthHandler handler, String host, String realm) {
       mWrappedClient.onReceivedHttpAuthRequest(view, handler, host, realm);