Merge "Releasing a SQLite cursor."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 26ea91e..9a8a73b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -192,6 +192,10 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="ComboViewActivity"
+                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize">
+        </activity>
+
         <!-- Bookmark thumbnail homescreen widget -->
         <receiver
             android:name=".widget.BookmarkThumbnailWidgetProvider"
diff --git a/res/drawable-hdpi/ic_bookmark_off_holo_dark.png b/res/drawable-hdpi/ic_bookmark_off_holo_dark.png
index 9ec0a44..fd5fdb9 100644
--- a/res/drawable-hdpi/ic_bookmark_off_holo_dark.png
+++ b/res/drawable-hdpi/ic_bookmark_off_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bookmark_on_holo_dark.png b/res/drawable-hdpi/ic_bookmark_on_holo_dark.png
index 1d67f1a..4651918 100644
--- a/res/drawable-hdpi/ic_bookmark_on_holo_dark.png
+++ b/res/drawable-hdpi/ic_bookmark_on_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bookmarks_holo_dark.png b/res/drawable-hdpi/ic_bookmarks_holo_dark.png
index d3070bf..76f54a1 100644
--- a/res/drawable-hdpi/ic_bookmarks_holo_dark.png
+++ b/res/drawable-hdpi/ic_bookmarks_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_close_window_holo_dark.png b/res/drawable-hdpi/ic_close_window_holo_dark.png
index d459352..6e852ec 100644
--- a/res/drawable-hdpi/ic_close_window_holo_dark.png
+++ b/res/drawable-hdpi/ic_close_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_incognito_holo_dark.png b/res/drawable-hdpi/ic_incognito_holo_dark.png
index f4997ae..9d6bc59 100644
--- a/res/drawable-hdpi/ic_incognito_holo_dark.png
+++ b/res/drawable-hdpi/ic_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_new_window_holo_dark.png b/res/drawable-hdpi/ic_new_window_holo_dark.png
index bc4017a..2849a16 100644
--- a/res/drawable-hdpi/ic_new_window_holo_dark.png
+++ b/res/drawable-hdpi/ic_new_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_refresh_holo_dark.png b/res/drawable-hdpi/ic_refresh_holo_dark.png
index 1da3ea8..f6c4f72 100644
--- a/res/drawable-hdpi/ic_refresh_holo_dark.png
+++ b/res/drawable-hdpi/ic_refresh_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_holo_dark.png b/res/drawable-hdpi/ic_search_holo_dark.png
index 688ef5d..8ed044a 100644
--- a/res/drawable-hdpi/ic_search_holo_dark.png
+++ b/res/drawable-hdpi/ic_search_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_snapshot.png b/res/drawable-hdpi/ic_snapshot.png
deleted file mode 100644
index a621cb4..0000000
--- a/res/drawable-hdpi/ic_snapshot.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_stop_holo_dark.png b/res/drawable-hdpi/ic_stop_holo_dark.png
index e31dd22..b68c60f 100644
--- a/res/drawable-hdpi/ic_stop_holo_dark.png
+++ b/res/drawable-hdpi/ic_stop_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_web_holo_dark.png b/res/drawable-hdpi/ic_web_holo_dark.png
index d936c2c..1afe636 100644
--- a/res/drawable-hdpi/ic_web_holo_dark.png
+++ b/res/drawable-hdpi/ic_web_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_windows_holo_dark.png b/res/drawable-hdpi/ic_windows_holo_dark.png
index 98d5693..c79005c 100644
--- a/res/drawable-hdpi/ic_windows_holo_dark.png
+++ b/res/drawable-hdpi/ic_windows_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/nav_tab_bg.9.png b/res/drawable-hdpi/nav_tab_bg.9.png
new file mode 100644
index 0000000..203c358
--- /dev/null
+++ b/res/drawable-hdpi/nav_tab_bg.9.png
Binary files differ
diff --git a/res/drawable-mdpi/browsertab_add.png b/res/drawable-mdpi/browsertab_add.png
index f960c1d..3f20f2a 100644
--- a/res/drawable-mdpi/browsertab_add.png
+++ b/res/drawable-mdpi/browsertab_add.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bookmark_off_holo_dark.png b/res/drawable-mdpi/ic_bookmark_off_holo_dark.png
index 7446bdf..a863fe6 100644
--- a/res/drawable-mdpi/ic_bookmark_off_holo_dark.png
+++ b/res/drawable-mdpi/ic_bookmark_off_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bookmark_on_holo_dark.png b/res/drawable-mdpi/ic_bookmark_on_holo_dark.png
index 79a183f..5a6d469 100644
--- a/res/drawable-mdpi/ic_bookmark_on_holo_dark.png
+++ b/res/drawable-mdpi/ic_bookmark_on_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bookmarks_holo_dark.png b/res/drawable-mdpi/ic_bookmarks_holo_dark.png
index ea45051..8cd9242 100644
--- a/res/drawable-mdpi/ic_bookmarks_holo_dark.png
+++ b/res/drawable-mdpi/ic_bookmarks_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_close_window_holo_dark.png b/res/drawable-mdpi/ic_close_window_holo_dark.png
index 9bb8e87..95d6f62 100644
--- a/res/drawable-mdpi/ic_close_window_holo_dark.png
+++ b/res/drawable-mdpi/ic_close_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_incognito_holo_dark.png b/res/drawable-mdpi/ic_incognito_holo_dark.png
index dfb380a..14747b6 100644
--- a/res/drawable-mdpi/ic_incognito_holo_dark.png
+++ b/res/drawable-mdpi/ic_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_new_window_holo_dark.png b/res/drawable-mdpi/ic_new_window_holo_dark.png
index b16aacc..5cdd4b5 100644
--- a/res/drawable-mdpi/ic_new_window_holo_dark.png
+++ b/res/drawable-mdpi/ic_new_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_refresh_holo_dark.png b/res/drawable-mdpi/ic_refresh_holo_dark.png
index 0aec8a0..bcb350f 100644
--- a/res/drawable-mdpi/ic_refresh_holo_dark.png
+++ b/res/drawable-mdpi/ic_refresh_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_search_holo_dark.png b/res/drawable-mdpi/ic_search_holo_dark.png
index a84edf3..b5eeb78 100644
--- a/res/drawable-mdpi/ic_search_holo_dark.png
+++ b/res/drawable-mdpi/ic_search_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_snapshot.png b/res/drawable-mdpi/ic_snapshot.png
deleted file mode 100644
index 6054acb..0000000
--- a/res/drawable-mdpi/ic_snapshot.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_stop_holo_dark.png b/res/drawable-mdpi/ic_stop_holo_dark.png
index 61edb02..b230ab9 100644
--- a/res/drawable-mdpi/ic_stop_holo_dark.png
+++ b/res/drawable-mdpi/ic_stop_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_web_holo_dark.png b/res/drawable-mdpi/ic_web_holo_dark.png
index fcf6785..b394fbb 100644
--- a/res/drawable-mdpi/ic_web_holo_dark.png
+++ b/res/drawable-mdpi/ic_web_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_windows_holo_dark.png b/res/drawable-mdpi/ic_windows_holo_dark.png
index 7eabd08..37891ee 100644
--- a/res/drawable-mdpi/ic_windows_holo_dark.png
+++ b/res/drawable-mdpi/ic_windows_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/nav_tab_bg.9.png b/res/drawable-mdpi/nav_tab_bg.9.png
new file mode 100644
index 0000000..8c466d8
--- /dev/null
+++ b/res/drawable-mdpi/nav_tab_bg.9.png
Binary files differ
diff --git a/res/drawable-nodpi/bg_browser.png b/res/drawable-nodpi/bg_browser.png
deleted file mode 100644
index c7907d7..0000000
--- a/res/drawable-nodpi/bg_browser.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/app_web_browser_sm.png b/res/drawable-xhdpi/app_web_browser_sm.png
new file mode 100644
index 0000000..35d857b
--- /dev/null
+++ b/res/drawable-xhdpi/app_web_browser_sm.png
Binary files differ
diff --git a/res/drawable-xhdpi/bg_bookmarks_widget_holo.9.png b/res/drawable-xhdpi/bg_bookmarks_widget_holo.9.png
new file mode 100644
index 0000000..62b411e
--- /dev/null
+++ b/res/drawable-xhdpi/bg_bookmarks_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bookmarks_widget_thumb_selector_focused.9.png b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_focused.9.png
new file mode 100644
index 0000000..e95564f
--- /dev/null
+++ b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_focused.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bookmarks_widget_thumb_selector_longpressed.9.png b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_longpressed.9.png
new file mode 100644
index 0000000..ed5a00b
--- /dev/null
+++ b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_longpressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bookmarks_widget_thumb_selector_pressed.9.png b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_pressed.9.png
new file mode 100644
index 0000000..20941ec
--- /dev/null
+++ b/res/drawable-xhdpi/bookmarks_widget_thumb_selector_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/border_thumb_bookmarks_widget_holo.9.png b/res/drawable-xhdpi/border_thumb_bookmarks_widget_holo.9.png
new file mode 100644
index 0000000..40964eb
--- /dev/null
+++ b/res/drawable-xhdpi/border_thumb_bookmarks_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/browser_thumbnail.png b/res/drawable-xhdpi/browser_thumbnail.png
new file mode 100644
index 0000000..a2db941
--- /dev/null
+++ b/res/drawable-xhdpi/browser_thumbnail.png
Binary files differ
diff --git a/res/drawable-xhdpi/browser_widget_preview.png b/res/drawable-xhdpi/browser_widget_preview.png
new file mode 100644
index 0000000..2112b9e
--- /dev/null
+++ b/res/drawable-xhdpi/browser_widget_preview.png
Binary files differ
diff --git a/res/drawable-xhdpi/browsertab_add.png b/res/drawable-xhdpi/browsertab_add.png
new file mode 100644
index 0000000..e44f72b
--- /dev/null
+++ b/res/drawable-xhdpi/browsertab_add.png
Binary files differ
diff --git a/res/drawable-xhdpi/browsertab_add_focused.png b/res/drawable-xhdpi/browsertab_add_focused.png
new file mode 100644
index 0000000..7039974
--- /dev/null
+++ b/res/drawable-xhdpi/browsertab_add_focused.png
Binary files differ
diff --git a/res/drawable-xhdpi/browsertab_inactive.png b/res/drawable-xhdpi/browsertab_inactive.png
new file mode 100644
index 0000000..28eeed4
--- /dev/null
+++ b/res/drawable-xhdpi/browsertab_inactive.png
Binary files differ
diff --git a/res/drawable-xhdpi/default_video_poster.png b/res/drawable-xhdpi/default_video_poster.png
new file mode 100644
index 0000000..5eff15c
--- /dev/null
+++ b/res/drawable-xhdpi/default_video_poster.png
Binary files differ
diff --git a/res/drawable-xhdpi/geolocation_permissions_prompt_background.9.png b/res/drawable-xhdpi/geolocation_permissions_prompt_background.9.png
new file mode 100644
index 0000000..19a35a3
--- /dev/null
+++ b/res/drawable-xhdpi/geolocation_permissions_prompt_background.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_string.png b/res/drawable-xhdpi/ic_add_string.png
new file mode 100644
index 0000000..7ea150d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_add_string.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_back_disabled_holo_dark.png b/res/drawable-xhdpi/ic_back_disabled_holo_dark.png
new file mode 100644
index 0000000..9f99c00
--- /dev/null
+++ b/res/drawable-xhdpi/ic_back_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_back_hierarchy_holo_dark.png b/res/drawable-xhdpi/ic_back_hierarchy_holo_dark.png
new file mode 100644
index 0000000..e459b98
--- /dev/null
+++ b/res/drawable-xhdpi/ic_back_hierarchy_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_back_holo_dark.png b/res/drawable-xhdpi/ic_back_holo_dark.png
new file mode 100644
index 0000000..f79f20a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_back_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bookmark_off_holo_dark.png b/res/drawable-xhdpi/ic_bookmark_off_holo_dark.png
new file mode 100644
index 0000000..05e9ec8
--- /dev/null
+++ b/res/drawable-xhdpi/ic_bookmark_off_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bookmark_on_holo_dark.png b/res/drawable-xhdpi/ic_bookmark_on_holo_dark.png
new file mode 100644
index 0000000..764adb3
--- /dev/null
+++ b/res/drawable-xhdpi/ic_bookmark_on_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bookmark_widget_bookmark_holo_dark.png b/res/drawable-xhdpi/ic_bookmark_widget_bookmark_holo_dark.png
new file mode 100644
index 0000000..8025248
--- /dev/null
+++ b/res/drawable-xhdpi/ic_bookmark_widget_bookmark_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bookmarks_history_holo_dark.png b/res/drawable-xhdpi/ic_bookmarks_history_holo_dark.png
new file mode 100644
index 0000000..702379b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_bookmarks_history_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bookmarks_holo_dark.png b/res/drawable-xhdpi/ic_bookmarks_holo_dark.png
new file mode 100644
index 0000000..68b0a61
--- /dev/null
+++ b/res/drawable-xhdpi/ic_bookmarks_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_close_window_holo_dark.png b/res/drawable-xhdpi/ic_close_window_holo_dark.png
new file mode 100644
index 0000000..dc17740
--- /dev/null
+++ b/res/drawable-xhdpi/ic_close_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_browser_certificate_partially_secure.png b/res/drawable-xhdpi/ic_dialog_browser_certificate_partially_secure.png
new file mode 100644
index 0000000..37c0b91
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dialog_browser_certificate_partially_secure.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_browser_certificate_secure.png b/res/drawable-xhdpi/ic_dialog_browser_certificate_secure.png
new file mode 100644
index 0000000..036eba6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dialog_browser_certificate_secure.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_browser_security_bad.png b/res/drawable-xhdpi/ic_dialog_browser_security_bad.png
new file mode 100644
index 0000000..1e3068b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dialog_browser_security_bad.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_browser_security_good.png b/res/drawable-xhdpi/ic_dialog_browser_security_good.png
new file mode 100644
index 0000000..e8badf6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dialog_browser_security_good.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_downloads_holo_dark.png b/res/drawable-xhdpi/ic_downloads_holo_dark.png
new file mode 100644
index 0000000..0681bd2
--- /dev/null
+++ b/res/drawable-xhdpi/ic_downloads_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_folder_holo_dark.png b/res/drawable-xhdpi/ic_folder_holo_dark.png
new file mode 100644
index 0000000..6bdb7d0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_folder_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_forward_disabled_holo_dark.png b/res/drawable-xhdpi/ic_forward_disabled_holo_dark.png
new file mode 100644
index 0000000..bbe6571
--- /dev/null
+++ b/res/drawable-xhdpi/ic_forward_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_forward_holo_dark.png b/res/drawable-xhdpi/ic_forward_holo_dark.png
new file mode 100644
index 0000000..c0e8371
--- /dev/null
+++ b/res/drawable-xhdpi/ic_forward_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_go_holo_dark.png b/res/drawable-xhdpi/ic_go_holo_dark.png
new file mode 100644
index 0000000..e4b59b3
--- /dev/null
+++ b/res/drawable-xhdpi/ic_go_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_gps_denied_holo_dark.png b/res/drawable-xhdpi/ic_gps_denied_holo_dark.png
new file mode 100644
index 0000000..a695cda
--- /dev/null
+++ b/res/drawable-xhdpi/ic_gps_denied_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_gps_on_holo_dark.png b/res/drawable-xhdpi/ic_gps_on_holo_dark.png
new file mode 100644
index 0000000..38c1892
--- /dev/null
+++ b/res/drawable-xhdpi/ic_gps_on_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_home_holo_dark.png b/res/drawable-xhdpi/ic_home_holo_dark.png
new file mode 100644
index 0000000..177abe9
--- /dev/null
+++ b/res/drawable-xhdpi/ic_home_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_home_info_holo_dark.png b/res/drawable-xhdpi/ic_home_info_holo_dark.png
new file mode 100644
index 0000000..6f43ba5
--- /dev/null
+++ b/res/drawable-xhdpi/ic_home_info_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_incognito_holo_dark.png b/res/drawable-xhdpi/ic_incognito_holo_dark.png
new file mode 100644
index 0000000..50009e9
--- /dev/null
+++ b/res/drawable-xhdpi/ic_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_shortcut_browser_bookmark.png b/res/drawable-xhdpi/ic_launcher_shortcut_browser_bookmark.png
new file mode 100644
index 0000000..0711f92
--- /dev/null
+++ b/res/drawable-xhdpi/ic_launcher_shortcut_browser_bookmark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_list_data_large.png b/res/drawable-xhdpi/ic_list_data_large.png
new file mode 100644
index 0000000..4047c4d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_list_data_large.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_list_data_off.png b/res/drawable-xhdpi/ic_list_data_off.png
new file mode 100644
index 0000000..b508b6b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_list_data_off.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_list_data_small.png b/res/drawable-xhdpi/ic_list_data_small.png
new file mode 100644
index 0000000..680e69c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_list_data_small.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_list_view_holo_dark.png b/res/drawable-xhdpi/ic_list_view_holo_dark.png
new file mode 100644
index 0000000..30270da
--- /dev/null
+++ b/res/drawable-xhdpi/ic_list_view_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_findonpage_normal.png b/res/drawable-xhdpi/ic_menu_findonpage_normal.png
new file mode 100644
index 0000000..287b029
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_findonpage_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_new_window.png b/res/drawable-xhdpi/ic_menu_new_window.png
new file mode 100644
index 0000000..6caa148
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_new_window.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_new_incognito_holo_dark.png b/res/drawable-xhdpi/ic_new_incognito_holo_dark.png
new file mode 100644
index 0000000..2f21240
--- /dev/null
+++ b/res/drawable-xhdpi/ic_new_incognito_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_new_window_holo_dark.png b/res/drawable-xhdpi/ic_new_window_holo_dark.png
new file mode 100644
index 0000000..4f2e240
--- /dev/null
+++ b/res/drawable-xhdpi/ic_new_window_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_pageinfo_holo_dark.png b/res/drawable-xhdpi/ic_pageinfo_holo_dark.png
new file mode 100644
index 0000000..23e948a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_pageinfo_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_partial_secure.png b/res/drawable-xhdpi/ic_partial_secure.png
new file mode 100644
index 0000000..82ff296
--- /dev/null
+++ b/res/drawable-xhdpi/ic_partial_secure.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_querybuilder_disabled.png b/res/drawable-xhdpi/ic_querybuilder_disabled.png
new file mode 100644
index 0000000..79fb478
--- /dev/null
+++ b/res/drawable-xhdpi/ic_querybuilder_disabled.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_querybuilder_normal.png b/res/drawable-xhdpi/ic_querybuilder_normal.png
new file mode 100644
index 0000000..cc3ce59
--- /dev/null
+++ b/res/drawable-xhdpi/ic_querybuilder_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_querybuilder_pressed.png b/res/drawable-xhdpi/ic_querybuilder_pressed.png
new file mode 100644
index 0000000..0693fa3
--- /dev/null
+++ b/res/drawable-xhdpi/ic_querybuilder_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_refresh_holo_dark.png b/res/drawable-xhdpi/ic_refresh_holo_dark.png
new file mode 100644
index 0000000..716dd53
--- /dev/null
+++ b/res/drawable-xhdpi/ic_refresh_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_category_bookmark.png b/res/drawable-xhdpi/ic_search_category_bookmark.png
new file mode 100644
index 0000000..8b5ffa1
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_category_bookmark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_category_browser.png b/res/drawable-xhdpi/ic_search_category_browser.png
new file mode 100644
index 0000000..8b195c1
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_category_browser.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_category_history.png b/res/drawable-xhdpi/ic_search_category_history.png
new file mode 100644
index 0000000..8a0e828
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_category_history.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_category_suggest.png b/res/drawable-xhdpi/ic_search_category_suggest.png
new file mode 100644
index 0000000..985a201
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_category_suggest.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_holo_dark.png b/res/drawable-xhdpi/ic_search_holo_dark.png
new file mode 100644
index 0000000..e94096f
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_secure_holo_dark.png b/res/drawable-xhdpi/ic_secure_holo_dark.png
new file mode 100644
index 0000000..0842acc
--- /dev/null
+++ b/res/drawable-xhdpi/ic_secure_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_holo_dark.png b/res/drawable-xhdpi/ic_settings_holo_dark.png
new file mode 100644
index 0000000..0541407
--- /dev/null
+++ b/res/drawable-xhdpi/ic_settings_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_share_holo_dark.png b/res/drawable-xhdpi/ic_share_holo_dark.png
new file mode 100644
index 0000000..5c3047a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_share_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_stop_holo_dark.png b/res/drawable-xhdpi/ic_stop_holo_dark.png
new file mode 100644
index 0000000..11cd91f
--- /dev/null
+++ b/res/drawable-xhdpi/ic_stop_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_close.png b/res/drawable-xhdpi/ic_tab_close.png
new file mode 100644
index 0000000..fa63021
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_close.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png
new file mode 100644
index 0000000..d03787b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_search_holo_dark.png b/res/drawable-xhdpi/ic_voice_search_holo_dark.png
new file mode 100644
index 0000000..bfeb7aa
--- /dev/null
+++ b/res/drawable-xhdpi/ic_voice_search_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_web_holo_dark.png b/res/drawable-xhdpi/ic_web_holo_dark.png
new file mode 100644
index 0000000..7271169
--- /dev/null
+++ b/res/drawable-xhdpi/ic_web_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_windows_holo_dark.png b/res/drawable-xhdpi/ic_windows_holo_dark.png
new file mode 100644
index 0000000..f57eb68
--- /dev/null
+++ b/res/drawable-xhdpi/ic_windows_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/magnifying_glass.png b/res/drawable-xhdpi/magnifying_glass.png
new file mode 100644
index 0000000..62742b7
--- /dev/null
+++ b/res/drawable-xhdpi/magnifying_glass.png
Binary files differ
diff --git a/res/drawable-xhdpi/nav_tab_bg.9.png b/res/drawable-xhdpi/nav_tab_bg.9.png
new file mode 100644
index 0000000..816bbe7
--- /dev/null
+++ b/res/drawable-xhdpi/nav_tab_bg.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/overlay_url_bookmark_widget_holo.9.png b/res/drawable-xhdpi/overlay_url_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..829ea7f
--- /dev/null
+++ b/res/drawable-xhdpi/overlay_url_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/progress.9.png b/res/drawable-xhdpi/progress.9.png
new file mode 100644
index 0000000..72a71cb
--- /dev/null
+++ b/res/drawable-xhdpi/progress.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/qc_background_normal.png b/res/drawable-xhdpi/qc_background_normal.png
new file mode 100644
index 0000000..bea09ca
--- /dev/null
+++ b/res/drawable-xhdpi/qc_background_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/row_activated_bookmark_widget_holo.9.png b/res/drawable-xhdpi/row_activated_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..c4b1ab3
--- /dev/null
+++ b/res/drawable-xhdpi/row_activated_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_nr.png b/res/drawable-xhdpi/tab_nr.png
new file mode 100644
index 0000000..abc2937
--- /dev/null
+++ b/res/drawable-xhdpi/tab_nr.png
Binary files differ
diff --git a/res/drawable-xhdpi/textfield_active_holo_dark.9.png b/res/drawable-xhdpi/textfield_active_holo_dark.9.png
new file mode 100644
index 0000000..b0c52d5
--- /dev/null
+++ b/res/drawable-xhdpi/textfield_active_holo_dark.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/textfield_default_holo_dark.9.png b/res/drawable-xhdpi/textfield_default_holo_dark.9.png
new file mode 100644
index 0000000..c08ed41
--- /dev/null
+++ b/res/drawable-xhdpi/textfield_default_holo_dark.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/thumb_bookmark_widget_folder_back_holo.png b/res/drawable-xhdpi/thumb_bookmark_widget_folder_back_holo.png
new file mode 100644
index 0000000..6216ef1
--- /dev/null
+++ b/res/drawable-xhdpi/thumb_bookmark_widget_folder_back_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/thumb_bookmark_widget_folder_holo.png b/res/drawable-xhdpi/thumb_bookmark_widget_folder_holo.png
new file mode 100644
index 0000000..7e56f0f
--- /dev/null
+++ b/res/drawable-xhdpi/thumb_bookmark_widget_folder_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png b/res/drawable-xhdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png
new file mode 100644
index 0000000..7d24d4a
--- /dev/null
+++ b/res/drawable-xhdpi/thumbnail_bookmarks_widget_no_bookmark_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/trashcan.png b/res/drawable-xhdpi/trashcan.png
new file mode 100644
index 0000000..8b9982c
--- /dev/null
+++ b/res/drawable-xhdpi/trashcan.png
Binary files differ
diff --git a/res/drawable/nav_tab_bg.9.png b/res/drawable/nav_tab_bg.9.png
deleted file mode 100644
index 9e0a23d..0000000
--- a/res/drawable/nav_tab_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-sw600dp/snapshot_item.xml b/res/layout-sw600dp/snapshot_item.xml
new file mode 100644
index 0000000..2fc6ca8
--- /dev/null
+++ b/res/layout-sw600dp/snapshot_item.xml
@@ -0,0 +1,77 @@
+<?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:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:padding="@dimen/combo_horizontalSpacing">
+    <ImageView
+        android:id="@+id/thumb"
+        android:src="@drawable/thumbnail_bookmarks_widget_no_bookmark_holo"
+        android:layout_width="@dimen/bookmarkThumbnailWidth"
+        android:layout_height="@dimen/bookmarkThumbnailHeight"
+        android:scaleType="centerCrop"
+        android:cropToPadding="true"
+        android:background="@drawable/border_thumb_bookmarks_widget_holo" />
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignBottom="@id/thumb"
+        android:layout_alignLeft="@id/thumb"
+        android:layout_alignRight="@id/thumb"
+        android:background="@drawable/overlay_url_bookmark_widget_holo"
+        android:singleLine="true"
+        android:ellipsize="end"
+        android:textSize="12sp"
+        android:typeface="sans"
+        android:textColor="@android:color/white"
+        android:paddingLeft="6dip"
+        android:paddingRight="2dip"
+        android:gravity="center_vertical" />
+    <ImageView
+        android:id="@+id/divider"
+        android:src="?android:attr/dividerVertical"
+        android:layout_width="wrap_content"
+        android:layout_height="24dip"
+        android:layout_below="@+id/thumb"
+        android:layout_alignLeft="@+id/thumb"
+        android:scaleType="fitXY"
+        android:layout_marginTop="12dip" />
+    <TextView android:id="@+id/date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/divider"
+        android:layout_alignTop="@id/divider"
+        android:layout_alignBottom="@id/divider"
+        android:paddingLeft="8dip"
+        android:gravity="center_vertical"
+        android:typeface="sans"
+        android:textSize="14sp"
+        android:textColor="#AAAAAA" />
+    <TextView android:id="@+id/size"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignTop="@id/divider"
+        android:layout_alignBottom="@id/divider"
+        android:layout_alignRight="@+id/thumb"
+        android:paddingRight="2dip"
+        android:gravity="center_vertical"
+        android:typeface="sans"
+        android:textSize="14sp"
+        android:textColor="#AAAAAA" />
+</RelativeLayout>
diff --git a/res/layout-sw600dp/title_bar_autologin.xml b/res/layout-sw600dp/title_bar_autologin.xml
new file mode 100644
index 0000000..783b4c3
--- /dev/null
+++ b/res/layout-sw600dp/title_bar_autologin.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.AutologinBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:background="#FBF0A0"
+    android:gravity="center_vertical"
+    android:visibility="gone">
+    <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:paddingLeft="15dip"
+        android:paddingRight="15dip"
+        android:textAppearance="?android:attr/textAppearanceMedium"/>
+    <Spinner
+        android:id="@+id/autologin_account"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        style="@android:style/Widget.Holo.Light.Spinner" />
+    <Button
+        android:id="@+id/autologin_login"
+        android:text="@string/autologin_bar_login_text"
+        style="@android:style/Widget.Holo.Light.Button"
+        android:layout_marginRight="15dip"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content" />
+    <ProgressBar
+        android:id="@+id/autologin_progress"
+        android:indeterminateOnly="true"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:visibility="gone" />
+    <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" />
+    <View
+        android:layout_width="2dip"
+        android:layout_height="match_parent"
+        android:layout_weight="1"/>
+    <ImageButton
+        android:id="@+id/autologin_close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingRight="15dip"
+        android:background="@null"
+        android:src="@*android:drawable/btn_close"/>
+</com.android.browser.AutologinBar>
diff --git a/res/layout-sw600dp/title_bar_nav.xml b/res/layout-sw600dp/title_bar_nav.xml
new file mode 100644
index 0000000..818707e
--- /dev/null
+++ b/res/layout-sw600dp/title_bar_nav.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.NavigationBarTablet
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:background="@drawable/bg_urlbar">
+    <LinearLayout
+        android:id="@+id/navbuttons"
+        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>
+    <LinearLayout
+        android:id="@+id/urlbar_focused"
+        android:layout_width="0dip"
+        android:layout_height="match_parent"
+        android:layout_weight="1.0"
+        android:layout_marginLeft="8dip"
+        android:layout_marginRight="8dip"
+        android:orientation="horizontal"
+        android:background="@drawable/url_background">
+        <ImageView
+            android:id="@+id/url_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:src="@drawable/ic_web_holo_dark"
+            style="@style/HoloIcon" />
+        <ImageView
+            android:id="@+id/lock"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/HoloIcon"
+            android:visibility="gone" />
+        <com.android.browser.UrlInputView
+            android:id="@+id/url"
+            android:layout_width="0dip"
+            android:layout_weight="1.0"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="16dip"
+            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" />
+        <ImageButton
+            android:id="@+id/star"
+            android:src="@drawable/btn_imageview_star"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/HoloButton" />
+        <ImageButton
+            android:id="@+id/clear"
+            android:src="@drawable/ic_stop_holo_dark"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/HoloButton" />
+    </LinearLayout>
+    <ImageButton
+        android:id="@+id/go"
+        android:src="@drawable/ic_go_holo_dark"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:visibility="gone"
+        android:gravity="center_vertical"
+        style="@style/HoloButton" />
+    <ImageButton
+        android:id="@+id/voicesearch"
+        android:src="@drawable/ic_voice_search_holo_dark"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        style="@style/HoloButton" />
+    <ImageButton
+        android:id="@+id/search"
+        android:src="@drawable/ic_search_holo_dark"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        style="@style/HoloButton" />
+    <ImageButton
+        android:id="@+id/all_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:scaleType="center"
+        android:paddingRight="16dip"
+        style="@style/HoloButton"
+        android:src="@drawable/ic_bookmarks_history_holo_dark" />
+</com.android.browser.NavigationBarTablet>
diff --git a/res/layout-sw600dp/title_bar_snapshot.xml b/res/layout-sw600dp/title_bar_snapshot.xml
new file mode 100644
index 0000000..e844c36
--- /dev/null
+++ b/res/layout-sw600dp/title_bar_snapshot.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.SnapshotBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:background="@drawable/bg_urlbar">
+    <ImageButton
+        android:id="@+id/date_icon"
+        android:src="@drawable/ic_search_category_history"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="16dip"
+        style="@style/HoloButton" />
+    <TextView
+        android:id="@+id/date"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingLeft="8dip"
+        android:singleLine="true"
+        android:gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="0dip"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:paddingLeft="16dip"
+        android:singleLine="true"
+        android:gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+    <ImageButton
+        android:id="@+id/all_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:scaleType="center"
+        android:paddingRight="16dip"
+        style="@style/HoloButton"
+        android:src="@drawable/ic_bookmarks_history_holo_dark" />
+</com.android.browser.SnapshotBar>
diff --git a/res/layout/active_tabs.xml b/res/layout/active_tabs.xml
deleted file mode 100644
index f9bd6b0..0000000
--- a/res/layout/active_tabs.xml
+++ /dev/null
@@ -1,54 +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.
--->
-
-<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="match_parent"
-        android:listSelector="@drawable/bookmark_thumb_selector"
-        android:drawSelectorOnTop="true"
-        android:focusable="true"
-        android:focusableInTouchMode="true" />
-
-</merge>
diff --git a/res/layout/bookmarks_history.xml b/res/layout/bookmarks_history.xml
index 826fe49..5ec310c 100644
--- a/res/layout/bookmarks_history.xml
+++ b/res/layout/bookmarks_history.xml
@@ -17,6 +17,4 @@
     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"
-    android:paddingTop="?android:attr/actionBarSize" />
+    android:layout_height="match_parent" />
diff --git a/res/layout/nav_tab_view.xml b/res/layout/nav_tab_view.xml
index 543c26e..dbf9494 100644
--- a/res/layout/nav_tab_view.xml
+++ b/res/layout/nav_tab_view.xml
@@ -28,8 +28,7 @@
         android:layout_width="match_parent"
         android:layout_height="48dip"
         android:layout_gravity="center_horizontal"
-        android:paddingLeft="32dip"
-        android:paddingRight="24dip">
+        android:paddingLeft="16dip" >
         <TextView
             android:id="@+id/title"
             android:layout_width="0dip"
@@ -46,13 +45,13 @@
             android:src="@drawable/ic_stop_holo_dark"
             android:layout_gravity="center_vertical"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content" />
+            android:layout_height="match_parent"
+            style="@style/HoloButton" />
     </LinearLayout>
-    <FrameLayout
+    <ImageView
         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>
+        android:focusable="false" />
 </LinearLayout>
diff --git a/res/layout/qc_menu_item.xml b/res/layout/qc_menu_item.xml
index 9e4a2e8..6c84aa6 100644
--- a/res/layout/qc_menu_item.xml
+++ b/res/layout/qc_menu_item.xml
@@ -17,12 +17,12 @@
 <TextView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/title"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
+    android:layout_width="@dimen/menu_width"
+    android:layout_height="@dimen/menu_height"
     android:minHeight="44dip"
     android:background="@drawable/qc_menu_selector"
     android:textAppearance="?android:attr/textAppearanceMedium"
-    android:gravity="center"
+    android:gravity="center_vertical"
     android:paddingLeft="8dip"
     android:paddingRight="8dip"
     android:paddingTop="4dip"
diff --git a/res/layout/qc_tab.xml b/res/layout/qc_tab.xml
index 5379680..6fcd0f4 100644
--- a/res/layout/qc_tab.xml
+++ b/res/layout/qc_tab.xml
@@ -37,8 +37,8 @@
         />
     <ImageView
         android:id="@+id/thumb"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
+        android:layout_height="@dimen/qc_thumb_width"
+        android:layout_width="@dimen/qc_thumb_height"
         android:layout_marginTop= "1dip"
         android:layout_marginLeft= "1dip"
         android:layout_marginRight= "1dip"
diff --git a/res/layout/snapshot_item.xml b/res/layout/snapshot_item.xml
index 2fc6ca8..128dedf 100644
--- a/res/layout/snapshot_item.xml
+++ b/res/layout/snapshot_item.xml
@@ -63,15 +63,4 @@
         android:typeface="sans"
         android:textSize="14sp"
         android:textColor="#AAAAAA" />
-    <TextView android:id="@+id/size"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignTop="@id/divider"
-        android:layout_alignBottom="@id/divider"
-        android:layout_alignRight="@+id/thumb"
-        android:paddingRight="2dip"
-        android:gravity="center_vertical"
-        android:typeface="sans"
-        android:textSize="14sp"
-        android:textColor="#AAAAAA" />
 </RelativeLayout>
diff --git a/res/layout/snapshots.xml b/res/layout/snapshots.xml
index 48d2883..54d4e01 100644
--- a/res/layout/snapshots.xml
+++ b/res/layout/snapshots.xml
@@ -33,8 +33,8 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:text="@string/empty_bookmarks_folder"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="@string/empty_snapshots_folder"
         android:visibility="gone" />
 
 </FrameLayout>
diff --git a/res/layout/tab_bar.xml b/res/layout/tab_bar.xml
index 1710218..2790362 100644
--- a/res/layout/tab_bar.xml
+++ b/res/layout/tab_bar.xml
@@ -14,9 +14,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/tabbarcontent"
     android:layout_width="match_parent"
-    android:layout_height="56dip"
+    android:layout_height="?android:attr/actionBarSize"
     android:orientation="horizontal"
-    style="@style/ActionBarStyle"
     >
     <com.android.browser.TabScrollView
         android:id="@+id/tabs"
@@ -31,4 +30,4 @@
         android:layout_height="44dip"
         style="@style/HoloButton"
         android:background="@drawable/add_tab_selector" />
-</merge>
\ No newline at end of file
+</merge>
diff --git a/res/layout/tab_title.xml b/res/layout/tab_title.xml
index 7ac2ba0..589debc 100644
--- a/res/layout/tab_title.xml
+++ b/res/layout/tab_title.xml
@@ -28,7 +28,7 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:gravity="center_vertical"
-        android:src="@drawable/ic_snapshot"
+        android:src="@drawable/ic_search_category_history"
         android:visibility="gone" />
     <ImageView
         android:id="@+id/favicon"
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index 9096418..cf500c8 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -19,149 +19,30 @@
     android:id="@+id/titlebar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
-    <LinearLayout
+    <include
+        layout="@layout/title_bar_nav"
         android:id="@+id/taburlbar"
         android:layout_width="match_parent"
-        android:layout_height="@dimen/toolbar_height"
-        android:orientation="horizontal"
-        android:background="@drawable/bg_urlbar">
-        <LinearLayout
-            android:id="@+id/title_bg"
-            android:layout_width="0dip"
-            android:layout_weight="1.0"
-            android:layout_height="match_parent"
-            android:gravity="center_vertical"
-            android:orientation="horizontal">
-            <FrameLayout
-                android:id="@+id/iconcombo"
-                android:layout_width="52dip"
-                android:layout_height="match_parent"
-                style="@style/HoloButton">
-                <ImageView
-                    android:id="@+id/favicon"
-                    android:layout_width="36dip"
-                    android:layout_height="36dip"
-                    android:paddingLeft="8dip"
-                    android:paddingRight="8dip"
-                    android:layout_gravity="center_vertical" />
-                <ImageView
-                    android:id="@+id/lock"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom|right"
-                    android:visibility="gone" />
-            </FrameLayout>
-            <ImageView
-                android:id="@+id/stop"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:src="@drawable/ic_stop_holo_dark"
-                style="@style/HoloButton" />
-            <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:fadingEdge="horizontal"
-                android:fadingEdgeLength="24dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:hint="@string/search_hint"
-                android:singleLine="true"
-                android:ellipsize="end"
-                android:lines="1"
-                android:scrollHorizontally="true"
-                android:inputType="text"
-                android:imeOptions="actionGo"
-                style="@style/Suggestions"
-                android:background="@null" />
-            <ImageView
-                android:id="@+id/voice"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:src="@drawable/ic_voice_search_holo_dark"
-                style="@style/HoloButton"
-                android:visibility="gone" />
-        </LinearLayout>
-        <ImageButton
-            android:id="@+id/tab_switcher"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:src="@drawable/ic_windows_holo_dark"
-            style="@style/HoloButton" />
-    </LinearLayout>
-    <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_height="@dimen/toolbar_height" />
+    <include
+        layout="@layout/title_bar_snapshot"
+        android:id="@+id/snapshotbar"
         android:layout_width="match_parent"
-        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>
+        android:layout_height="@dimen/toolbar_height" />
+    <include
+        layout="@layout/title_bar_autologin"
+        android:id="@+id/autologin"
+        android:paddingTop="3dip"
+        android:layout_below="@id/taburlbar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
     <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:layout_below="@id/taburlbar"
         android:src="@drawable/progress"
-        android:layout_marginTop="-8dip"
+        android:layout_marginTop="@dimen/progress_bar_margin"
         android:visibility="gone" />
 </RelativeLayout>
diff --git a/res/layout/title_bar_autologin.xml b/res/layout/title_bar_autologin.xml
new file mode 100644
index 0000000..839f875
--- /dev/null
+++ b/res/layout/title_bar_autologin.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.AutologinBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:background="#FBF0A0"
+    android:gravity="center_vertical"
+    android:visibility="gone"
+    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" />
+</com.android.browser.AutologinBar>
diff --git a/res/layout/title_bar_nav.xml b/res/layout/title_bar_nav.xml
new file mode 100644
index 0000000..5a3c10e
--- /dev/null
+++ b/res/layout/title_bar_nav.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.NavigationBarPhone
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:background="@drawable/bg_urlbar">
+    <LinearLayout
+        android:id="@+id/title_bg"
+        android:layout_width="0dip"
+        android:layout_weight="1.0"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+        <FrameLayout
+            android:id="@+id/iconcombo"
+            android:layout_width="52dip"
+            android:layout_height="match_parent"
+            style="@style/HoloButton">
+            <ImageView
+                android:id="@+id/favicon"
+                android:layout_width="36dip"
+                android:layout_height="36dip"
+                android:paddingLeft="8dip"
+                android:paddingRight="8dip"
+                android:layout_gravity="center_vertical" />
+            <ImageView
+                android:id="@+id/lock"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="bottom|right"
+                android:visibility="gone" />
+        </FrameLayout>
+        <ImageView
+            android:id="@+id/stop"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:src="@drawable/ic_stop_holo_dark"
+            style="@style/HoloButton" />
+        <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:fadingEdge="horizontal"
+            android:fadingEdgeLength="24dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:hint="@string/search_hint"
+            android:singleLine="true"
+            android:ellipsize="end"
+            android:lines="1"
+            android:scrollHorizontally="true"
+            android:inputType="text"
+            android:imeOptions="actionGo"
+            style="@style/Suggestions"
+            android:background="@null" />
+        <ImageView
+            android:id="@+id/voice"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:src="@drawable/ic_voice_search_holo_dark"
+            style="@style/HoloButton"
+            android:visibility="gone" />
+    </LinearLayout>
+    <ImageButton
+        android:id="@+id/tab_switcher"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:src="@drawable/ic_windows_holo_dark"
+        style="@style/HoloButton" />
+    <ImageButton
+        android:id="@+id/more"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        style="@style/HoloButton"
+        android:gravity="center_vertical"
+        android:src="@*android:drawable/ic_menu_moreoverflow_normal_holo_dark" />
+</com.android.browser.NavigationBarPhone>
diff --git a/res/layout/title_bar_snapshot.xml b/res/layout/title_bar_snapshot.xml
new file mode 100644
index 0000000..a5569c1
--- /dev/null
+++ b/res/layout/title_bar_snapshot.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   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.
+   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.
+-->
+<com.android.browser.SnapshotBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:background="@drawable/bg_urlbar">
+    <ImageButton
+        android:id="@+id/favicon"
+        android:layout_width="42dip"
+        android:layout_height="match_parent"
+        android:paddingLeft="16dip"
+        android:scaleType="fitCenter"
+        style="@style/HoloButton" />
+    <FrameLayout
+        android:id="@+id/toggle_container"
+        android:layout_width="0dip"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:paddingLeft="8dip">
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:singleLine="true"
+            android:gravity="center_vertical"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+        <LinearLayout
+            android:id="@+id/date_container"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent">
+            <ImageView
+                android:src="@drawable/ic_search_category_history"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent" />
+            <TextView
+                android:id="@+id/date"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:paddingLeft="8dip"
+                android:singleLine="true"
+                android:gravity="center_vertical"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+         </LinearLayout>
+    </FrameLayout>
+    <ImageButton
+        android:id="@+id/tab_switcher"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:src="@drawable/ic_windows_holo_dark"
+        style="@style/HoloButton" />
+    <ImageButton
+        android:id="@+id/more"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        style="@style/HoloButton"
+        android:gravity="center_vertical"
+        android:src="@*android:drawable/ic_menu_moreoverflow_normal_holo_dark" />
+</com.android.browser.SnapshotBar>
diff --git a/res/layout/url_bar.xml b/res/layout/url_bar.xml
deleted file mode 100644
index 3864b7d..0000000
--- a/res/layout/url_bar.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-    <!--
-        Copyright 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.
-    -->
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    >
-    <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="wrap_content">
-        <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:paddingLeft="15dip"
-            android:paddingRight="15dip"
-            android:textAppearance="?android:attr/textAppearanceMedium"/>
-        <Spinner
-            android:id="@+id/autologin_account"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            style="@android:style/Widget.Holo.Light.Spinner" />
-        <Button
-            android:id="@+id/autologin_login"
-            android:text="@string/autologin_bar_login_text"
-            style="@android:style/Widget.Holo.Light.Button"
-            android:layout_marginRight="15dip"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-        <ProgressBar
-            android:id="@+id/autologin_progress"
-            android:indeterminateOnly="true"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:visibility="gone" />
-        <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" />
-        <View
-            android:layout_width="2dip"
-            android:layout_height="match_parent"
-            android:layout_weight="1"/>
-        <ImageButton
-            android:id="@+id/autologin_close"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:paddingRight="15dip"
-            android:background="@null"
-            android:src="@*android:drawable/btn_close"/>
-    </LinearLayout>
-    <LinearLayout
-        android:id="@+id/taburlbar"
-        android:layout_width="match_parent"
-        android:layout_height="48dip"
-        android:orientation="horizontal"
-        android:background="@drawable/bg_urlbar">
-        <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:id="@+id/urlbar_focused"
-            android:layout_width="0dip"
-            android:layout_height="match_parent"
-            android:layout_weight="1.0"
-            android:layout_marginLeft="8dip"
-            android:layout_marginRight="8dip"
-            android:orientation="horizontal"
-            android:background="@drawable/url_background">
-            <ImageView
-                android:id="@+id/url_icon"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:src="@drawable/ic_web_holo_dark"
-                style="@style/HoloIcon" />
-            <ImageView
-                android:id="@+id/lock"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                style="@style/HoloIcon"
-                android:visibility="gone" />
-            <com.android.browser.UrlInputView
-                android:id="@+id/url"
-                android:layout_width="0dip"
-                android:layout_weight="1.0"
-                android:layout_height="match_parent"
-                android:layout_marginLeft="16dip"
-                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" />
-            <ImageButton
-                android:id="@+id/star"
-                android:src="@drawable/btn_imageview_star"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                style="@style/HoloButton" />
-            <ImageButton
-                android:id="@+id/clear"
-                android:src="@drawable/ic_stop_holo_dark"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                style="@style/HoloButton" />
-        </LinearLayout>
-        <ImageButton
-            android:id="@+id/go"
-            android:src="@drawable/ic_go_holo_dark"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:visibility="gone"
-            android:gravity="center_vertical"
-            style="@style/HoloButton" />
-        <ImageButton
-            android:id="@+id/voicesearch"
-            android:src="@drawable/ic_voice_search_holo_dark"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            style="@style/HoloButton" />
-        <ImageButton
-            android:id="@+id/search"
-            android:src="@drawable/ic_search_holo_dark"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:gravity="center_vertical"
-            style="@style/HoloButton" />
-        <ImageButton
-            android:id="@+id/all_btn"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:scaleType="center"
-            android:paddingRight="16dip"
-            style="@style/HoloButton"
-            android:src="@drawable/ic_bookmarks_history_holo_dark" />
-    </LinearLayout>
-    <com.android.browser.PageProgressView
-        android:id="@+id/progress"
-        android:layout_width="match_parent"
-        android:layout_height="22dip"
-        android:background="@null"
-        android:layout_below="@+id/taburlbar"
-        android:src="@drawable/progress"
-        android:layout_marginTop="-11dip"
-        android:visibility="gone" />
-</RelativeLayout>
diff --git a/res/layout-sw600dp/bookmarks_history.xml b/res/menu-sw600dp/combined.xml
similarity index 65%
copy from res/layout-sw600dp/bookmarks_history.xml
copy to res/menu-sw600dp/combined.xml
index ae5e19b..97abc8d 100644
--- a/res/layout-sw600dp/bookmarks_history.xml
+++ b/res/menu-sw600dp/combined.xml
@@ -13,9 +13,13 @@
      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:id="@+id/fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/bg_browser" />
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/preferences_menu_id"
+        android:title="@string/menu_preferences"
+        android:icon="@drawable/ic_settings_holo_dark"
+        android:alphabeticShortcut="p"
+        android:showAsAction="ifRoom"
+        android:orderInCategory="1000" />
+</menu>
diff --git a/res/layout-sw600dp/bookmarks_history.xml b/res/menu-sw600dp/history.xml
similarity index 67%
copy from res/layout-sw600dp/bookmarks_history.xml
copy to res/menu-sw600dp/history.xml
index ae5e19b..36ae6e4 100644
--- a/res/layout-sw600dp/bookmarks_history.xml
+++ b/res/menu-sw600dp/history.xml
@@ -13,9 +13,11 @@
      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:id="@+id/fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/bg_browser" />
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/clear_history_menu_id"
+        android:title="@string/clear_history"
+        android:icon="@android:drawable/ic_menu_close_clear_cancel"
+        android:showAsAction="ifRoom"
+        android:orderInCategory="1" />
+</menu>
diff --git a/res/menu-w500dp/bookmark.xml b/res/menu-w500dp/bookmark.xml
deleted file mode 100644
index a951373..0000000
--- a/res/menu-w500dp/bookmark.xml
+++ /dev/null
@@ -1,40 +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.
--->
-
-<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/menu-w720dp/bookmark.xml b/res/menu-w720dp/bookmark.xml
deleted file mode 100644
index 0adadac..0000000
--- a/res/menu-w720dp/bookmark.xml
+++ /dev/null
@@ -1,37 +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.
--->
-
-<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|withText" />
-    <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"/>
-    <item
-        android:id="@+id/list_view"
-        android:title="@string/bookmark_list_view"/>
-    <item
-        android:id="@+id/preferences_menu_id"
-        android:title="@string/menu_preferences"
-        android:alphabeticShortcut="p" />
-</menu>
diff --git a/res/menu/bookmark.xml b/res/menu/bookmark.xml
deleted file mode 100644
index eee1706..0000000
--- a/res/menu/bookmark.xml
+++ /dev/null
@@ -1,39 +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.
--->
-
-<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" />
-    <item
-        android:id="@+id/go_home"
-        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: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/menu/browser.xml b/res/menu/browser.xml
index 630bb87..0b46db6 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -20,21 +20,6 @@
         <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
diff --git a/res/layout-sw600dp/bookmarks_history.xml b/res/menu/combined.xml
similarity index 73%
rename from res/layout-sw600dp/bookmarks_history.xml
rename to res/menu/combined.xml
index ae5e19b..559bb74 100644
--- a/res/layout-sw600dp/bookmarks_history.xml
+++ b/res/menu/combined.xml
@@ -13,9 +13,6 @@
      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:id="@+id/fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/bg_browser" />
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+</menu>
diff --git a/res/menu/history.xml b/res/menu/history.xml
index 5b029b5..a8c1b29 100644
--- a/res/menu/history.xml
+++ b/res/menu/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.
@@ -15,11 +15,4 @@
 -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/clear_history_menu_id"
-        android:title="@string/clear_history"
-        android:icon="@android:drawable/ic_menu_close_clear_cancel" />
-    <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/snapshots_context.xml b/res/menu/snapshots_context.xml
index 01880dd..af7a776 100644
--- a/res/menu/snapshots_context.xml
+++ b/res/menu/snapshots_context.xml
@@ -18,6 +18,6 @@
     <group android:id="@+id/CONTEXT_MENU">
         <item
             android:id="@+id/delete_context_menu_id"
-            android:title="@string/remove_bookmark"/>
+            android:title="@string/remove_snapshot"/>
     </group>
 </menu>
diff --git a/res/mipmap-hdpi/ic_launcher_browser.png b/res/mipmap-hdpi/ic_launcher_browser.png
index 1f3e584..ef42d38 100644
--- a/res/mipmap-hdpi/ic_launcher_browser.png
+++ b/res/mipmap-hdpi/ic_launcher_browser.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_browser.png b/res/mipmap-mdpi/ic_launcher_browser.png
index 93c83d4..588d9af 100644
--- a/res/mipmap-mdpi/ic_launcher_browser.png
+++ b/res/mipmap-mdpi/ic_launcher_browser.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_browser.png b/res/mipmap-xhdpi/ic_launcher_browser.png
new file mode 100644
index 0000000..19e045b
--- /dev/null
+++ b/res/mipmap-xhdpi/ic_launcher_browser.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_shortcut_browser_bookmark.png b/res/mipmap-xhdpi/ic_launcher_shortcut_browser_bookmark.png
new file mode 100644
index 0000000..3ef819f
--- /dev/null
+++ b/res/mipmap-xhdpi/ic_launcher_shortcut_browser_bookmark.png
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 7d237ee..87df3ec 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -24,14 +24,14 @@
     <!-- 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 tab_snapshots (4435852763803720588) -->
+    <skip />
     <!-- no translation found for added_to_bookmarks (1020224130695956728) -->
     <skip />
     <!-- no translation found for removed_from_bookmarks (6063705902028438800) -->
@@ -165,11 +165,10 @@
     <skip />
     <!-- no translation found for share_page (593756995297268343) -->
     <skip />
-    <!-- no translation found for menu_freeze_tab (189603565552297099) -->
+    <!-- no translation found for menu_save_snapshot (6935080344031126139) -->
     <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>
+    <!-- no translation found for snapshot_failed (6176197364690207251) -->
+    <skip />
     <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) -->
@@ -238,7 +237,7 @@
     <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
     <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
     <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
     <!-- no translation found for pref_content_autofit (8260474534053660809) -->
     <skip />
@@ -287,6 +286,8 @@
     <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>
+    <!-- no translation found for autofill_setup_dialog_title (1955613311837926540) -->
+    <skip />
     <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 />
@@ -413,6 +414,16 @@
     <skip />
     <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
     <skip />
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <!-- no translation found for pref_data_title (750316606686075162) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_title (4479320472980292873) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_summary (7488335627364473744) -->
+    <skip />
     <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
     <skip />
     <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
@@ -624,4 +635,10 @@
     <skip />
     <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
     <skip />
+    <!-- no translation found for permission_preload_label (4856971662337877316) -->
+    <skip />
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b70b43b..54f5731 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -22,10 +22,11 @@
     <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>
+    <!-- no translation found for tab_snapshots (4435852763803720588) -->
+    <skip />
     <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>
@@ -142,11 +143,10 @@
     <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) -->
+    <!-- no translation found for menu_save_snapshot (6935080344031126139) -->
     <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>
+    <!-- no translation found for snapshot_failed (6176197364690207251) -->
+    <skip />
     <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) -->
@@ -211,7 +211,7 @@
     <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
     <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
     <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
     <!-- no translation found for pref_content_autofit (8260474534053660809) -->
     <skip />
@@ -260,6 +260,8 @@
     <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>
+    <!-- no translation found for autofill_setup_dialog_title (1955613311837926540) -->
+    <skip />
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"አሳሽ እንደዚህ ያሉ የድረ ቅጾችን በራስ ሰር መሙላት ይችላል።መገለጫዎን መጫን ይፈልጋሉ?"</string>
     <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
     <skip />
@@ -375,6 +377,16 @@
     <skip />
     <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
     <skip />
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <!-- no translation found for pref_data_title (750316606686075162) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_title (4479320472980292873) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_summary (7488335627364473744) -->
+    <skip />
     <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
     <skip />
     <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
@@ -549,4 +561,10 @@
     <skip />
     <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
     <skip />
+    <!-- no translation found for permission_preload_label (4856971662337877316) -->
+    <skip />
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 3a12844..9c82de4 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"تحميلات الملفات معطلة."</string>
     <string name="new_tab" msgid="4505722538297295141">"نافذة جديدة"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"نافذة جديدة للتصفح المتخفي"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"نظام التشغيل Windows"</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="tab_snapshots" msgid="4435852763803720588">"الصفحات المحفوظة"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"حفظ للقراءة في وضع عدم الاتصال"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"أخفق الحفظ للقراءة في وضع عدم الاتصال."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"فتح"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"احتواء تلقائي للصفحات"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"تنسيق صفحات الويب لاحتوائها في الشاشة"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"إعدادات عامة"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"هل تريد إعداد الملء التلقائي؟"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"يستطيع المتصفح إكمال نماذج ويب مثل هذا النموذج. هل تريد إعداد ملفك الشخصي؟"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"يمكن تهيئة الملء التلقائي دائمًا من خلال إعدادات المتصفح."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"تعطيل الملء التلقائي"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"إدارة النطاق الترددي"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"التحميل المسبق لنتيجة البحث"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"السماح للمتصفح بتحميل نتائج بحث عالية الثقة في الخلفية مسبقًا"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"مشكلة في اتصال البيانات"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"مشكلة في الملف"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"تأكيد"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"محلية"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"الجوال"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"سطح المكتب"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"تحميل النتائج مسبقًا"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 902b549..1f5e584 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Качванията на файлове са деактивирани."</string>
     <string name="new_tab" msgid="4505722538297295141">"Нов прозорец"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Нов прозорец „инкогнито“"</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="tab_snapshots" msgid="4435852763803720588">"Запазени страници"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Запазване за четене офлайн"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Запазването за четене офлайн не бе успешно."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Отваряне"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Автоматично побиране на страници"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Уеб страниците се форматират до размера на екрана"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Общи"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Да се настрои авт. попълване?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да настроите потребителския си профил?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Автоматичното попълване винаги може да се конфигурира от „Настройки на браузъра“."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Деактивиране на автоматичното попълване"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Управление на капацитета"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Предв. зареждане на резултати от търс."</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Разр. на браузъра предв. да зарежда на заден план резултати с голяма сигурност"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблем с обмен на данни"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблем с файла"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Потвърждаване"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Локални"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобилна"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Настолна"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Предварително зареждане на резултати"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index b66427f..e966ad3 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Les càrregues de fitxers estan desactivades."</string>
     <string name="new_tab" msgid="4505722538297295141">"Finestra nova"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nova finestra d\'incògnit"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Adreces d\'interès"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Més visitats"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historial"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Pàgines desades"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"S\'ha afegit a les adreces d\'interès"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Eliminat de les adreces d\'interès"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Inici de sessió a <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Desa per a lectura fora de línia"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Ha fallat el desament per a lectura fora de línia."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> marcadors"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Carpeta buida"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Obre"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Defineix el motor de cerca"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Selecciona un motor de cerca"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Defineix com a..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajusta les pàgines automàticament"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formata les pàgines web perquè s\'ajustin a la pantalla"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"General"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"S\'ha desat el perfil"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"S\'ha suprimit el perfil"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Suprimeix el perfil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Configur. emplenament automàtic?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"El navegador pot emplenar formularis web com aquest automàticament. Vols configurar el teu perfil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"L\'emplenament automàtic sempre es pot establir mitjançant la configuració del navegador."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desactiva l\'emplenament automàtic"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestió d\'amplada de banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Càrrega prèvia de resultats de la cerca"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permet al naveg. carregar prèv. resultats cerca fiabilitat alta en process. fons"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Carrega prèviament els resultats"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 034b3a9..d2935bb 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Nahrávání souborů je deaktivováno."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nové okno"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nové anonymní okno"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Okna"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Záložky"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Nejnavštěvovanější"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historie"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Uložené stránky"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Přidáno k záložkám"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Odstraněno ze záložek"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Přihlásit se: <xliff:g id="HOSTNAME">%s1</xliff:g> <xliff:g id="REALM">%s2</xliff:g>"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Uložit ke čtení offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Uložení ke čtení offline se nezdařilo."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Počet záložek: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Prázdná složka"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Otevřít"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Nastavit vyhledávač"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Výběr vyhledávače"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Nastavit na..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automaticky přizpůsobit"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Přizpůsobit velikost webových stránek obrazovce"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Obecné"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil uložen"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil byl smazán."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Smazat profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Nastavit automatické vyplnění?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Podobné webové formuláře může prohlížeč vyplňovat automaticky. Chcete nastavit profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automatické vyplňování lze vždy nakonfigurovat prostřednictvím nastavení prohlížeče."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Vypnout automatické vyplňování"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Správa rychlosti připojení"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Předběžné načítání výsledků vyhledávání"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Umožní prohlížeči na pozadí předběžně načítat relevantní výsledky vyhledávání"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Předběžné načítání výsledků"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index fd063f1..ea8770f 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Upload af filer er deaktiveret."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nyt vindue"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nyt inkognitovindue"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Vinduer"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bogmærker"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Mest besøgte"</string>
     <string name="tab_history" msgid="1979267558744613746">"Oversigt"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Gemte sider"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Føjet til bogmærker"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Fjernet fra bogmærker"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Log ind på <xliff:g id="HOSTNAME">%s1</xliff:g>\"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Gem til læsning offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Siden kunne ikke gemmes til læsning offline."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bogmærker"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Mappen er tom"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Åbn"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Angiv søgemaskine"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Vælg en søgemaskine"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Angiv som..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Tilpas sider automatisk"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Tilpas websider, så de passer til skærmen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Generelt"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilen er gemt"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilen er slettet"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Slet profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Vil du konfigurere AutoFyld?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Browseren kan automatisk udfylde webformularer som denne. Vil du konfigurere din profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"AutoFyld kan altid konfigureres via indstillingerne for Browser."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver AutoFyld"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Admin. af båndvidde"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Forudindlæsning af søgeresultater"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Tillad, at browseren forudindlæser pålidelige søgeresultater i baggrunden"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Forudindlæs resultater"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index d510670..d0c2703 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Dateiuploads sind deaktiviert."</string>
     <string name="new_tab" msgid="4505722538297295141">"Neues Fenster"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Neues Inkognito-Fenster"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Fenster"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Lesezeichen"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Meistbesucht"</string>
     <string name="tab_history" msgid="1979267558744613746">"Verlauf"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Gespeicherte Seiten"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Zu Lesezeichen hinzugefügt"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Aus Lesezeichen entfernt"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Bei <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\" anmelden"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Für Offline-Lesen speichern"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Speichern für Offline-Lesen fehlgeschlagen"</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> Lesezeichen"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Leerer Ordner"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Öffnen"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Suchmaschine festlegen"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Suchmaschine auswählen"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Eingestellt auf..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Autom. Anpassung"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Webseiten an den Bildschirm anpassen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Allgemein"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil wurde gespeichert."</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil gelöscht"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Profil löschen"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"AutoFill einrichten?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Browser können solche Webformulare automatisch vervollständigen. Möchten Sie Ihr Profil anlegen?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"AutoFill kann jederzeit über die Browsereinstellungen konfiguriert werden."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"AutoFill deaktivieren"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Bandbreitenverwaltung"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Vorabladen von Suchergebnissen"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Browser erlauben, vertrauenswürdige Suchergebnisse vorab im Hintergrund zu laden"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Ergebnisse vorab laden"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 5d59162..426d0e9 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Η μεταφόρτωση αρχείων είναι απενεργοποιημένη."</string>
     <string name="new_tab" msgid="4505722538297295141">"Νέο παράθυρο"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Νέο παράθυρο για ανώνυμη περιήγηση"</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="tab_snapshots" msgid="4435852763803720588">"Αποθηκευμένες σελίδες"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Αποθήκευση για ανάγνωση εκτός σύνδεσης"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Αποτυχία αποθήκευσης για ανάγνωση εκτός σύνδεσης."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Άνοιγμα"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Αυτόματη προσαρμογή σελίδων"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Μορφοποίηση ιστοσελίδων για την προσαρμογή τους στο μέγεθος της οθόνης"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Γενικές"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Ρύθμιση αυτόματης συμπλήρωσης;"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Το πρόγραμμα περιήγησης μπορεί να ολοκληρώσει αυτόματα φόρμες ιστού σαν αυτήν. Θα θέλατε να δημιουργήσετε το δικό σας προφίλ;"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Μπορείτε να διαμορφώσετε τη λειτουργία αυτόματης συμπλήρωσης μέσα από τις ρυθμίσεις του προγράμματος περιήγησης."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Απενεργοποιήστε τη λειτουργία αυτόματης συμπλήρωσης"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Διαχείριση εύρους ζώνης"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Προφόρτωση αποτελεσμάτων αναζήτησης"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Να επιτρέπεται η προφόρτωση αποτελεσμάτων αναζήτησης υψηλής αξιοπιστίας σε φόντο"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Πρόβλημα σύνδεσης δεδομένων"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Υπάρχει πρόβλημα με το αρχείο"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Επιβεβαίωση"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Τοπικά"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Για κινητά"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Για υπολογιστή"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Προφόρτωση αποτελεσμάτων"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index aa73aa9..b87bdd8 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"File uploads are disabled."</string>
     <string name="new_tab" msgid="4505722538297295141">"New window"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"New incognito window"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bookmarks"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Most visited"</string>
     <string name="tab_history" msgid="1979267558744613746">"History"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Saved Pages"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Added to bookmarks"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Removed from bookmarks"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Sign in to <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Save for offline reading"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Failed to save for offline reading."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bookmarks"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Empty folder"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Open"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Set search engine"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Select a search engine"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Set to…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Auto-fit pages"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Format web pages to fit the screen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"General"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profile saved"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profile deleted"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Delete profile"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Set up auto-fill?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Browser can complete web forms like this one automatically. Would you like to set up your profile?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Auto-fill can always be configured through Browser Settings."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Disable auto-fill"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Bandwidth Management"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Search result preloading"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Allow the browser to preload high-confidence search results in the background"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Preload results"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f448331..92c273a 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Las cargas de archivo se desactivaron."</string>
     <string name="new_tab" msgid="4505722538297295141">"Ventana nueva"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nueva ventana de incógnito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Ventanas"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Marcadores"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Más visitados"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historial"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Páginas guardadas"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Agregado a marcadores"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Suprimido de los marcadores"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Iniciar sesión en <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -74,7 +74,7 @@
     <string name="open_bookmark" msgid="8473581305759935790">"Abrir"</string>
     <string name="remove_bookmark" msgid="8407495852801410891">"Eliminar marcador"</string>
     <string name="remove_from_bookmarks" msgid="4374080666576982775">"Eliminar de marcadores"</string>
-    <string name="remove_history_item" msgid="5021424935726728618">"Suprimir del historial"</string>
+    <string name="remove_history_item" msgid="5021424935726728618">"Eliminar del historial"</string>
     <string name="set_as_homepage" msgid="4752937379414905560">"Definir como página principal"</string>
     <string name="bookmark_saved" msgid="2766434679871317557">"Guardado en los marcadores."</string>
     <string name="bookmark_not_saved" msgid="700600955089376724">"No se pudo agregar a favoritos."</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Guardar para leer sin conexión"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Se produjo un error al guardar para leer sin conexión."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> Marcadores"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Vaciar carpeta"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Establecer el motor de búsqueda"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Seleccionar un motor de búsqueda"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Configurado en"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajuste automát. de pág."</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatea las páginas web para que se ajusten a la pantalla"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"General"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Perfil guardado"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Perfil eliminado"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Eliminar perfil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"¿Configurar Autocompletar?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"El navegador puede completar formularios web como este de forma automática. ¿Deseas configurar tu perfil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"La función de autocompletar siempre se puede configurar mediante los Parámetros de configuración del navegador."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar Autocompletar"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestión de ancho de banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Se están precargando los resultados de la búsqueda"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permitir al navegador la precarga de resultados de búsqueda confiables en el fondo"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Precargar resultados"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3485867..e0feba8 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Las subidas de archivos están inhabilitadas."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nueva ventana"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nueva ventana de incógnito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Ventanas"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Marcadores"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Más visitados"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historial"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Páginas guardadas"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Añadido a marcadores"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Eliminado de marcadores"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Acceder a <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Guardar para leer sin conexión"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Error al guardar para leer sin conexión"</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> marcadores"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Carpeta vacía"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Establecer motor de búsqueda"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Seleccionar un motor de búsqueda"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Establecer como…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajustar páginas automát."</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Configurar las páginas web para ajustarlas a la pantalla"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"General"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Perfil guardado"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Perfil eliminado"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Eliminar perfil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"¿Configurar autocompletar?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"El navegador puede completar de forma automática formularios web como este. ¿Te gustaría configurar tu perfil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"La función Autocompletar se puede configurar a través de los ajustes del navegador."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar autocompletar"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestión de ancho de banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Carga previa de resultados de búsqueda"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permitir que el navegador cargue resultados en segundo plano"</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>
@@ -377,7 +379,7 @@
     <string name="import_bookmarks_wizard_next" msgid="7578143961884352676">"Siguiente"</string>
     <string name="import_bookmarks_wizard_previous" msgid="8551440353688257031">"Anterior"</string>
     <string name="import_bookmarks_wizard_cancel" msgid="4936061122806506634">"Cancelar"</string>
-    <string name="import_bookmarks_wizard_done" msgid="1446247092194489191">"Listo"</string>
+    <string name="import_bookmarks_wizard_done" msgid="1446247092194489191">"Ok"</string>
     <string name="import_bookmarks_dialog_add" msgid="7552306756868669353">"Añadir marcadores a la cuenta de Google"</string>
     <string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Añadir tus marcadores de Android a marcadores de <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
     <string name="menu_share_url" msgid="5851814357333739700">"Compartir"</string>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Precargar resultados"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 4c515c7..1db028b 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"آپلودهای فایل غیر فعال هستند."</string>
     <string name="new_tab" msgid="4505722538297295141">"پنجره جدید"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"پنجره ناشناخته جدید"</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="tab_snapshots" msgid="4435852763803720588">"صفحات ذخیره شده"</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>
@@ -51,7 +51,7 @@
     <string name="stop" msgid="5687251076030630074">"توقف"</string>
     <string name="reload" msgid="8585220783228408062">"تازه کردن"</string>
     <string name="back" msgid="8414603107175713668">"برگشت"</string>
-    <string name="forward" msgid="4288210890526641577">"هدایت"</string>
+    <string name="forward" msgid="4288210890526641577">"باز ارسال"</string>
     <string name="save" msgid="5922311934992468496">"تأیید"</string>
     <string name="do_not_save" msgid="6777633870113477714">"لغو"</string>
     <string name="location" msgid="3411848697912600125">"آدرس"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"ذخیره برای مطالعه در حالت آفلاین"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"ذخیره برای مطالعه بصورت آفلاین انجام نشد."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"باز کردن"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"تنظیم خودکار صفحات"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"قالب صفحات وب متناسب با صفحه"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"عمومی"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"تکمیل خودکار تنظیم شود؟"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"مرورگر می تواند بصورت خودکار فرم های وب مانند این یکی را پر کند. دوست دارید نمایه خود را تنظیم کنید؟"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"تکمیل خودکار را همیشه می توانید از طریق تنظیمات مرورگر پیکربندی کنید."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"غیرفعال کردن تکمیل خودکار"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"مدیریت پهنای باند"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"پیش بارگیری نتیجه جستجو"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"به مرورگر اجازه می دهد نتایجی را که در آنها اطمینان بالایی وجود دارد از پیش در پس زمینه بارگیری کند"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"مشکل اتصال داده"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"مشکل در فایل"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"تأیید"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"محلی"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"تلفن همراه"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"دسکتاپ"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"پیش بارگیری نتایج"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3b86137..8e4fd85 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Tiedostojen lähettäminen ei ole käytössä."</string>
     <string name="new_tab" msgid="4505722538297295141">"Uusi ikkuna"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Uusi incognito-ikkuna"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Kirjanmerkit"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Useimmin avatut"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historia"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Tallennetut sivut"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Lisätty kirjanmerkkeihin"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Poistettu kirjanmerkeistä"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Kirjaudu sisään osoitteeseen <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Tallenna offline-tilassa luettavaksi"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Tallennus offline-tilassa luettavaksi epäonnistui"</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> kirjanmerkkiä"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Tyhjä kansio"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Avaa"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Aseta hakukone"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Valitse hakukone"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Aseta etusivuksi..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automaattinen sovitus"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Sovita verkkosivut näytölle"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Yleinen"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profiili tallennettu"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profiili poistettu."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Poista profiili"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Määritä autom. täytön asetukset?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Selain voi täydentää automaattisesti tämän kaltaisia verkkolomakkeita. Haluatko luoda profiilin?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automaattisen täytön asetuksia voi aina muuttaa selainasetuksista."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Poista automaattinen täyttö käytöstä"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Kaistanleveyden hallinta"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Hakutulosta esiladataan"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Anna selaimen esiladata luotettavat hakutulokset taustalla"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datayhteysongelma"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Tiedosto-ongelma"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Vahvista"</string>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Esilatauksen tulokset"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index d74a0db..44871b2 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Les transferts de fichiers sont désactivés."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nouvelle fenêtre"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Fenêtre de navigation privée"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Fenêtres"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Favoris"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Les + visités"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historique"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Pages enregistrées"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Ajouté aux favoris"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Supprimé des favoris"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Connectez-vous à <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Enregistrer pour lire hors connexion"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Échec enregistrement pour lecture hors connexion."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> favori(s)"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Dossier vide"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Ouvrir"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Définir le moteur de recherche"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Sélectionner un moteur de recherche"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Définir comme..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajustement auto des pages"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Configurer les pages Web pour qu\'elles s\'ajustent à l\'écran"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Général"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil enregistré"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil supprimé"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Supprimer le profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Configurer saisie automatique ?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Le navigateur peut remplir automatiquement des formulaires Web tels que celui-ci. Voulez-vous configurer votre profil ?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Notez que vous pouvez configurer la saisie automatique dans les paramètres du navigateur."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Désactiver la saisie automatique"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestion bande passante"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Préchargement résultats de recherche…"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Autoriser le préchargement des résultats fiables de recherche en arrière-plan"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Précharger les résultats"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 1cddc96..3a6deb0 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Prijenosi datoteka onemogućeni su."</string>
     <string name="new_tab" msgid="4505722538297295141">"Novi prozor"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Novi prozor anonimno"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Oznake"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Najposjećenije"</string>
     <string name="tab_history" msgid="1979267558744613746">"Povijest"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Spremljene stranice"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Dodano u oznake"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Uklonjeno iz oznaka"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Prijavite se na <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Spremi za izvanmrežno čitanje"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Neuspjelo spremanje za izvanmrežno čitanje."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Br. oznaka: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Prazna mapa"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Otvori"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Postavljanje tražilice"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Odabir tražilice"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Postavi na…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automatsko prilagođavanje stranicama"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatirajte web-stranice kako bi odgovarale zaslonu"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Općenito"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil spremljen"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil izbrisan"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Izbriši profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Postaviti automatsko ispunjavanje?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Preglednik može automatski popunjavati web-obrasce poput ovog. Želite li postaviti svoj profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automatsko popunjavanje može se bilo kada konfigurirati putem Postavki preglednika."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Onemogući automatsko popunjavanje"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Upravljanje širinom pojasa"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Prethodno učitavanje rezultata pretraživanja"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Dopustite preglednik da prethodno učita rezultate pretraživanja visoke pouzdanosti u pozadini"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Prethodno učitavanje rezultata"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 418269a..0301ded 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"A fájlok feltöltése le van tiltva."</string>
     <string name="new_tab" msgid="4505722538297295141">"Új ablak"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Új inkognitóablak"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Ablakok"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Könyvjelzők"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Leggyakrabban felkeresett"</string>
     <string name="tab_history" msgid="1979267558744613746">"Előzmények"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Mentett oldalak"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Hozzáadva a könyvjelzőkhöz"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Eltávolítva a könyvjelzők közül"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Jelentkezzen be ide: <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Mentés offline olvasáshoz"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Nem sikerült menteni offline olvasáshoz."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> könyvjelző"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Üres mappa"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Megnyitás"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Keresőmotor beállítása"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Válasszon ki egy keresőmotort"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Beállítás a következőre:"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Oldalak automatikus igazítása"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"A képernyőhöz igazítja a weboldalakat"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Általános"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"A profil elmentve"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"A profil törölve."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Profil törlése"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Automatikus kitöltés beállítása?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"A böngésző automatikusan ki tudja tölteni az ilyen internetes űrlapokat. Beállítja a profilját?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Az Automatikus kitöltést bármikor konfigurálhatja a Böngésző beállításai között."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Automatikus kitöltés letiltása"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Sávszélesség kezelése"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Keresési találatok előtöltése"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"A biztonságos keresési találatokat előre betöltheti a böngésző a háttérben"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Találatok előtöltése"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 56c7789..556cff0 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Pengunggahan berkas dinonaktifkan."</string>
     <string name="new_tab" msgid="4505722538297295141">"Jendela baru"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Jendela penyamaran baru"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bookmark"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Paling sering dikunjungi"</string>
     <string name="tab_history" msgid="1979267558744613746">"Riwayat"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Laman Tersimpan"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Ditambahkan ke bookmark"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Dihapus dari bookmark"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Masuk ke <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk dibaca secara luring"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Gagal menyimpan untuk dibaca secara luring."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bookmark"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Map kosong"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Buka"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Setel mesin telusur"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Pilih mesin telusur"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Setel ke..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Sesuaikan dengan laman secara otomatis"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Format laman web agar sesuai dengan layar"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Umum"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil disimpan"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil dihapus"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Hapus profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Siapkan isi-otomatis?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Peramban dapat melengkapi formulir web seperti ini. Apakah Anda ingin menyiapkan profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Isi-otomatis selalu dapat dikonfigurasi melalui Setelan Peramban."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Nonaktifkan isi-otomatis"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Pengelolaan Lebar Pita"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Pramuat hasil penelusuran"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Mengizinkan peramban melakukan pramuat hasil penelusuran pasti di latar belakang"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Lakukan pramuat hasil"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index eb6ffa2..fefab6b 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"I caricamenti di file sono disabilitati."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nuova finestra"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nuova finestra in incognito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Finestre"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Segnalibri"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"I più visitati"</string>
     <string name="tab_history" msgid="1979267558744613746">"Cronologia"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Pagine salvate"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Aggiunto a segnalibri"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Rimosso da segnalibri"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Accedi a <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Salva per lettura offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Impossibile salvare per la lettura offline."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> segnalibri"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Cartella vuota"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Apri"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Imposta motore di ricerca"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Seleziona un motore di ricerca"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Imposta su..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Adatta autom. pagine"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Adatta le pagine web allo schermo"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Generali"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilo salvato"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilo eliminato"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Elimina profilo"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Impostare compilazione automatica?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Il browser può compilare automaticamente i moduli web come questo. Vuoi impostare il tuo profilo?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"È sempre possibile configurare la compilazione automatica tramite le impostazioni del browser."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Disattiva compilazione automatica"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestione larghezza di banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Precaricamento risultati di ricerca"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Consenti al browser di precaricare i risultati di ricerca affidabili in background"</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>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Locali"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Cellulare"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Precaricamento risultati"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index b342dab..bd6930f 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"העלאות הקובץ הושבתו."</string>
     <string name="new_tab" msgid="4505722538297295141">"חלון חדש"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"חלון חדש של גלישה בסתר"</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="tab_snapshots" msgid="4435852763803720588">"דפים שמורים"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"שמור לקריאה במצב לא מקוון"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"השמירה לקריאה במצב לא מקוון נכשלה."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"פתח"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"התאם דפים באופן אוטומטי"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"עצב דפי אינטרנט כך שיתאימו למסך"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"כללי"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"להגדיר מילוי אוטומטי?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"הדפדפן יכול למלא טופסי אינטרנט כמו זה באופן אוטומטי. האם תרצה להגדיר את הפרופיל שלך?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"תוכל תמיד להגדיר את \'מילוי אוטומטי\' דרך \'הגדרות דפדפן\'."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"השבת את \'מילוי אוטומטי\'"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"ניהול רוחב פס"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"טעינה מוקדמת של תוצאות חיפוש"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"אפשר לדפדפן לטעון מראש תוצאות חיפוש בעלות אמינות גבוהה ברקע"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"בעיה בקישוריות נתונים"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"בעיה בקובץ"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"אשר"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"מקומי"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"נייד"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"שולחן עבודה"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"טעינה מוקדמת של תוצאות"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 922998f..98d1298 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"ファイルのアップロードが無効になっています。"</string>
     <string name="new_tab" msgid="4505722538297295141">"新しいウィンドウ"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"新しいシークレットウインドウ"</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="tab_snapshots" msgid="4435852763803720588">"保存したページ"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"オフラインで読めるよう保存"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"オフラインで読むための保存に失敗しました"</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"開く"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"ページの自動調整"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"画面に合わせてウェブページをフォーマットする"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"全般"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"自動入力のセットアップ"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"このようなウェブフォームにブラウザで自動入力できます。プロフィールを設定しますか?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"自動入力はいつでもブラウザの[設定]から設定できます。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"自動入力を無効にする"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"帯域幅の管理"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"検索結果のプリロード"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"ブラウザが信頼度の高い検索結果をバックグラウンドでプリロードできるようにします"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"データアクセスエラー"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"ファイルに問題があります"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"ローカル"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"モバイル"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"デスクトップ"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"結果のプリロード"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 0d5cb33..aaed780 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"파일 업로드가 사용 중지되었습니다."</string>
     <string name="new_tab" msgid="4505722538297295141">"새 창"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"새 시크릿 창"</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="tab_snapshots" msgid="4435852763803720588">"저장된 페이지"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"오프라인 읽기용으로 저장"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"오프라인 읽기용으로 저장하지 못했습니다."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"열기"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"페이지 자동 맞춤"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"화면에 맞게 웹페이지 형식 지정"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"기본설정"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"자동 입력을 설정하시겠습니까?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"브라우저에서 이 양식과 같은 웹 양식을 자동으로 완성할 수 있습니다. 프로필을 설정하시겠습니까?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"브라우저 설정에서 언제든지 자동완성을 구성할 수 있습니다."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"자동 입력 사용중지"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"대역폭 관리"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"검색결과 미리 로드"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"브라우저가 신뢰도 높은 검색결과를 백그라운드에 미리 로드하도록 허용"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"데이터 연결에 문제 발생"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"파일 문제 발생"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"확인"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"로컬"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"모바일"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"데스크톱"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"결과 미리 로드"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a1708d3..c493825 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Neleidžiama įkelti failų."</string>
     <string name="new_tab" msgid="4505722538297295141">"Naujas langas"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Naujas inkognito langas"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Žymės"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Dažniausiai lankomos"</string>
     <string name="tab_history" msgid="1979267558744613746">"Istorija"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Išsaugoti puslapiai"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Pridėta prie žymių"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Pašalinta iš žymių"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Prisijungti prie <xliff:g id="HOSTNAME">%s1</xliff:g> „<xliff:g id="REALM">%s2</xliff:g>“"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Išsaugoti, kad būtų galima skaityti neprisijungus"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Nepavyko išsaugoti, kad būtų gal. skait. neprisij."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Žymių: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Tuščias aplankas"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Atidaryti"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Nustatyti paieškos variklį"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Pasirinkti paieškos variklį"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Nustatyti…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automatiškai talpinti puslapius"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatuoti tinklalapius, kad tilptų ekrane"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Bendra"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilis išsaugotas"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilis ištrintas"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Ištrinti profilį"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Nustatyti automatinį pildymą?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Naršyklė gali automatiškai užpildyti į šią panašias žiniatinklio formas. Ar norite nustatyti profilį?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automatinį pildymą visada galima konfigūruoti skiltyje „Naršyklės nustatymai“."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Neleisti automatinio pildymo"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Pralaidumo valdymas"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Iš anksto įkeliamas paieškos rezultatas"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Leisti naršyklei fone iš anksto įkelti itin patikimus paieškos rezultatus"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Iš anksto įkelti rezultatus"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 725a263..17a05ba 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Failu augšupielādes ir atspējotas."</string>
     <string name="new_tab" msgid="4505722538297295141">"Jauns logs"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Jauns inkognito logs"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Logi"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Grāmatzīmes"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Visvairāk apmeklētās"</string>
     <string name="tab_history" msgid="1979267558744613746">"Vēsture"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Saglabātās lapas"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Pievienots grāmatzīmēm"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Noņemts no grāmatzīmēm"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Pierakstīšanās domēnā <xliff:g id="HOSTNAME">%s1</xliff:g> “<xliff:g id="REALM">%s2</xliff:g>”"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Saglabāt, lai lasītu bezsaistē"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Neizdevās saglabāt, lai lasītu bezsaistē."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> grāmatzīmes"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Tukša mape"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Atvērt"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Iestatīt meklētājprogrammu"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Atlasīt meklētājprogrammu"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Iestatīt uz…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automātiski pielāgot lapas"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatēt tīmekļa lapas, lai tās ietilptu ekrānā"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Vispārīgi"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profils ir saglabāts"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profils ir dzēsts"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Dzēst profilu"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Vai iestatīt autom. aizpildi?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Pārlūkprogramma var automātiski aizpildīt šāda veida tīmekļa veidlapas. Vai vēlaties iestatīt savu profilu?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automātisko aizpildi jebkurā brīdī var konfigurēt, izmantojot pārlūkprogrammas iestatījumus."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Atspējot automātisko aizpildi"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Joslas platuma pārvaldība"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Meklēšanas rezultātu pirmsielāde"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Ļaut pārlūkprogrammai fonā veikt atbilstošu meklēšanas rezultātu pirmsielādi"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Veikt rezultātu pirmsielādi"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ms-sw600dp/strings.xml b/res/values-ms-sw600dp/strings.xml
new file mode 100644
index 0000000..3a45dd6
--- /dev/null
+++ b/res/values-ms-sw600dp/strings.xml
@@ -0,0 +1,28 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="new_tab" msgid="2448577107218085816">"Tab baru"</string>
+    <string name="new_incognito_tab" msgid="7101126413435433601">"Tab incognito baru"</string>
+    <string name="active_tabs" msgid="2049888145890815012">"Tab"</string>
+    <string name="contextmenu_openlink_newwindow" msgid="4034130612746354398">"Buka dalam tab baru"</string>
+    <string name="contextmenu_openlink_newwindow_background" msgid="7104473293755016241">"Buka dalam tab latar belakang baru"</string>
+    <string name="open_all_in_new_window" msgid="4294281492905397499">"Buka semua dalam tab baru"</string>
+    <string name="pref_content_open_in_background_summary" msgid="4799440480107121813">"Buka tab baru di belakang tab semasa"</string>
+    <string name="recover_title" msgid="1558775426269800998">"Pulihkan tab?"</string>
+    <string name="recover_prompt" msgid="377456662058488205">"Adakah anda mahu memulihkan tab penyemak imbas anda kepada keadaan terakhirnya?"</string>
+</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 6e811e2..43d08b7 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -21,10 +21,10 @@
     <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="tab_snapshots" msgid="4435852763803720588">"Halaman Disimpan"</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>
@@ -55,8 +55,7 @@
     <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="account" msgid="5179824606448077042">"Akaun"</string>
     <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>
@@ -102,11 +101,8 @@
     <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="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk pembacaan di luar talian"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Gagal menyimpan untuk pembacaan di luar talian."</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>
@@ -145,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <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>
@@ -168,10 +160,9 @@
     <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_text" msgid="3684581827167173371">"Log masuk sebagai"</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_hide_text" msgid="3629355974385859580">"Sembunyikn"</string>
     <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>
@@ -191,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Sediakan auto-isi?"</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>
@@ -235,14 +227,10 @@
     <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_min_font_size_value" msgid="2924708480509060209">"<xliff:g id="FONT_SIZE">%d</xliff:g>pt"</string>
+    <string name="pref_text_zoom" msgid="8387229123479610157">"Zum teks"</string>
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Paksa dayakan zum"</string>
+    <string name="pref_force_userscalable_summary" msgid="4431962409438162448">"Samada mahu m\'atasi p\'mintn tpk web utk kwl klakuan zum atau tdk"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zum lalai"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Jauh"</item>
@@ -274,17 +262,21 @@
   </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_font_size_category" msgid="6288925476811083551">"Saiz fon"</string>
     <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_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) -->
+    <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Skrin penuh"</string>
+    <string name="pref_lab_fullscreen_summary" msgid="6853711692160711419">"Gunakan mod skrin penuh untuk menyembunyikan bar status."</string>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
     <skip />
-    <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
     <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Pengurusan Lebar Jalur"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Hasil carian sedang dipramuat"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Benarkan penyemak imbas mempramuat hasil carian berkeyakinan tinggi di ltr blkg"</string>
     <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>
@@ -294,8 +286,7 @@
     <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="go_home" msgid="3140773562046381164">"Laman utama"</string>
     <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>
@@ -395,14 +386,16 @@
     <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_prompt" msgid="6541354420842425606">"Adakah anda mahu memulihkan tab penyemak imbas anda kepada keadaan terakhirnya?"</string>
+    <string name="recover_yes" msgid="4540538008955917099">"Pulihkan"</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) -->
+    <string name="preview" msgid="6450823514561689038">"Pratonton"</string>
+    <string name="local_bookmarks" msgid="533816851415228520">"Tempatan"</string>
+    <string name="ua_switcher_mobile" msgid="5103260404792449606">"Mudah alih"</string>
+    <string name="ua_switcher_desktop" msgid="2535200543238676638">"Desktop"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Pramuat hasil"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
     <skip />
-    <!-- no translation found for ua_switcher_mobile (5103260404792449606) -->
-    <skip />
-    <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
     <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 51829da..0b1f4a3 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Filopplasting er deaktivert"</string>
     <string name="new_tab" msgid="4505722538297295141">"Ny fane"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nytt inkognitovindu"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Vinduer"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bokmerker"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Mest besøkt"</string>
     <string name="tab_history" msgid="1979267558744613746">"Logg"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Lagrede sider"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Lagt til bokmerker"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Fjernet fra bokmerker"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Logg på <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Lagre for frakoblet lesing"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Lagring for frakoblet lesing mislyktes."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bokmerker"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Tøm mappe"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Åpne"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Angi søkemotor"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Velg en søkemotor"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Satt til"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Tilpass sider automatisk"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Tilpass nettsteder til skjermen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Generelt"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilen er lagret"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilen ble slettet"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Slett profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Vil du konfigurere autofyll?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Nettleseren kan automatisk fylle ut slike nettskjemaer. Vil du konfigurere profilen din?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Autofyll kan alltid konfigureres via nettleserinnstillingene."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver automatisk utfylling"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Admin. av båndbredde"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Forhåndslaster søkeresultat"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"La nettleseren forhåndslaste søkeresultater med høy visshet i bakgrunnen"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datatilkoblingsproblem"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem med fil"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekreft"</string>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Forhåndslaster resultater"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b8ae5fa..67664fb 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Bestandsuploads zijn uitgeschakeld."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nieuw venster"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nieuw incognitovenster"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Vensters"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bladwijzers"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Meest bezocht"</string>
     <string name="tab_history" msgid="1979267558744613746">"Geschiedenis"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Opgeslagen pagina\'s"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Toegevoegd aan bladwijzers"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Verwijderd uit bladwijzers"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Aanmelden bij <xliff:g id="HOSTNAME">%s1</xliff:g> \'<xliff:g id="REALM">%s2</xliff:g>\'"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Opslaan voor offline lezen"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Het opslaan voor offline lezen is mislukt."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bladwijzers"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Lege map"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Openen"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Zoekmachine instellen"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Selecteer een zoekmachine"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Ingesteld op..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Pagina\'s passend maken"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Webpagina\'s zo indelen dat deze op het scherm passen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Algemeen"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profiel opgeslagen"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profiel verwijderd"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Profiel verwijderen"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Automatisch aanvullen instellen?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"De browser kan webformulieren zoals dit formulier automatisch invullen. Wilt u uw profiel instellen?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"U kunt Automatisch aanvullen altijd configureren via de browserinstellingen."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Automatisch aanvullen uitschakelen"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Bandbreedtebeheer"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Zoekresultaten vooraf laden"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Browser toestaan resultaten met hoog betrouwbaarheidsniveau vooraf te laden"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Resultaten vooraf laden"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 99ad809..e4284d8 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Przesyłanie plików jest wyłączone."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nowe okno"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nowe okno incognito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Okna"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Zakładki"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Popularne"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historia"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Zapisane strony"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Dodano do zakładek"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Usunięto z zakładek"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Zaloguj się w witrynie <xliff:g id="HOSTNAME">%s1</xliff:g> „<xliff:g id="REALM">%s2</xliff:g>”"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Zapisz do czytania offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Nie można zapisać do czytania w trybie offline."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Zakładki: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Pusty folder"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Otwórz"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Ustaw wyszukiwarkę"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Wybierz wyszukiwarkę"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Ustaw"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Autodopasowanie stron"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatuj strony internetowe, by dopasować je do ekranu"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Ogólne"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil został zapisany"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil usunięto"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Usuń profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Skonfigurować autouzupełnianie?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Takie formularze internetowe mogą być automatycznie wypełniane w przeglądarce. Czy chcesz skonfigurować swój profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Autouzupełnianie można zawsze skonfigurować w ustawieniach przeglądarki."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Wyłącz autouzupełnianie"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Zarządzanie przepustowością"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Wstępne wczytywanie wyników wyszukiwania"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Zezwalaj przeglądarce na wstępne wczytywanie sprawdzonych wyników wyszukiwania w tle"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Wstępnie wczytaj wyniki"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 22dc833..b6322da 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Os carregamentos de ficheiros estão desativados."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nova janela"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nova janela de naveg. anónima"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Janelas"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Marcadores"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Os mais visitados"</string>
     <string name="tab_history" msgid="1979267558744613746">"Histórico"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Páginas Guardadas"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Adicionado aos marcadores"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Removido dos marcadores"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Iniciar sessão em <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Guardar para leitura off-line"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Erro ao guardar para leitura off-line."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> marcadores"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Pasta vazia"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Definir motor de pesquisa"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Seleccionar um motor de pesquisa"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Definido para..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajuste auto de páginas"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatar páginas Web para se ajustarem ao ecrã"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Gerais"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Perfil guardado"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Perfil eliminado"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Eliminar perfil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Conf. preenchimento automático?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"O navegador pode preencher automaticamente os formulários Web deste tipo. Pretende configurar o seu perfil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"O Preenchimento automático pode sempre ser configurado através das Definições do navegador."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desativar preenchimento automático"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestão da Larg. de banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Pré-carreg. dos resultados da pesquisa"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permitir ao navegador pré-carreg. em 2º plano result. de pesq. de alta confiança"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Pré-carregar resultados"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 0a56ee9..b076553 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"O upload de arquivos está desativado."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nova janela"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nova janela anônima"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Janelas"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Favoritos"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Mais visitados"</string>
     <string name="tab_history" msgid="1979267558744613746">"Histórico"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Páginas salvas"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Adicionado aos favoritos"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Removido dos favoritos"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Fazer login no <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Salvar para leitura off-line"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Falha ao salvar para leitura off-line."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> favoritos"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Pasta vazia"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Definir mecanismo de pesquisa"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Selecionar um mecanismo de pesquisa"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Definir para..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Ajustar automaticamente"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatar páginas da web para se ajustarem à tela"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Geral"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Perfil salvo"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Perfil excluído"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Excluir perfil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Configurar preenchimento autom.?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"O navegador pode preencher automaticamente formulários da web como este. Gostaria de configurar seu perfil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"O preenchimento automático sempre pode ser configurado através das configurações do navegador."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desativar o preenchimento automático"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gerenc. de larg. de banda"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Pré-carreg. dos resultados da pesquisa"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permitir ao naveg. pré-carr. result. de busca de alta confiança em segundo plano"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Pré-carregar resultados"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 2ffa431..5aa74a2 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -22,10 +22,11 @@
     <skip />
     <string name="new_tab" msgid="4505722538297295141">"Nova fanestra"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nova fanestra incognito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Fanestra"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Segnapaginas"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Visità il pli savens"</string>
     <string name="tab_history" msgid="1979267558744613746">"Cronologia"</string>
+    <!-- no translation found for tab_snapshots (4435852763803720588) -->
+    <skip />
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Agiuntà als segnapaginas"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Allontanà dals segnapaginas"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"S\'annunziar tar <xliff:g id="HOSTNAME">%s1</xliff:g> «<xliff:g id="REALM">%s2</xliff:g>»"</string>
@@ -116,11 +117,10 @@
     <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) -->
+    <!-- no translation found for menu_save_snapshot (6935080344031126139) -->
     <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>
+    <!-- no translation found for snapshot_failed (6176197364690207251) -->
+    <skip />
     <!-- no translation found for contextheader_folder_bookmarkcount (353987136645619089) -->
     <skip />
     <!-- no translation found for contextheader_folder_empty (974171637803391651) -->
@@ -168,7 +168,7 @@
     <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
     <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
     <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Adattar las paginas auto."</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Adattar las paginas web al visur"</string>
@@ -248,6 +248,8 @@
     <skip />
     <!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
     <skip />
+    <!-- no translation found for autofill_setup_dialog_title (1955613311837926540) -->
+    <skip />
     <!-- no translation found for autofill_setup_dialog_message (6605682320156223114) -->
     <skip />
     <!-- no translation found for autofill_setup_dialog_negative_toast (6990737008936188620) -->
@@ -358,6 +360,16 @@
     <skip />
     <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
     <skip />
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <!-- no translation found for pref_data_title (750316606686075162) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_title (4479320472980292873) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_summary (7488335627364473744) -->
+    <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>
@@ -504,4 +516,10 @@
     <skip />
     <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
     <skip />
+    <!-- no translation found for permission_preload_label (4856971662337877316) -->
+    <skip />
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index bda392f..35a8e16 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Încărcarea fişierelor este dezactivată."</string>
     <string name="new_tab" msgid="4505722538297295141">"Fereastră nouă"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Fereastră incognito nouă"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Marcaje"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Cele mai vizitate"</string>
     <string name="tab_history" msgid="1979267558744613746">"Istoric"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Pagini salvate"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Adăugat la marcaje"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Eliminat din marcaje"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Conectaţi-vă la <xliff:g id="HOSTNAME">%s1</xliff:g> „<xliff:g id="REALM">%s2</xliff:g>”"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Salvaţi pentru lectură offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Salvarea pentru lectura offline a eşuat."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> (de) marcaje"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Dosar gol"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Deschideţi"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Setaţi motorul de căutare"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Selectaţi un motor de căutare"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Setaţi la..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Potriviţi paginile automat"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formataţi paginile web pentru a se potrivi cu ecranul"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"General"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilul a fost salvat"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilul a fost şters"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Ştergeţi profilul"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Config. completarea automată?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Browserul poate completa în mod automat formulare web ca acesta. Doriţi să vă configuraţi profilul?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Completarea automată poate fi configurată oricând din Setările browserului."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Dezactivaţi completarea automată"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Gestion. lăţimii de bandă"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Se preîncarcă rezultatele căutării"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Permiteţi browserului să preîncarce în fundal rezultatele cu încredere ridicată"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Se preîncarcă rezultatele"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index a4ff897..3f9bb45 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Добавление файлов отключено."</string>
     <string name="new_tab" msgid="4505722538297295141">"Новое окно"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Новое окно в режиме инкогнито"</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="tab_snapshots" msgid="4435852763803720588">"Сохраненные страницы"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Сохранить для чтения офлайн"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Ошибка при сохранении для чтения офлайн."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Открыть"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Мобильный вид"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Адаптировать контент к размеру экрана мобильного устройства"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Общие"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Настроить автозаполнение?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Браузер может заполнять такие формы автоматически. Настроить профиль автозаполнения?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Автозаполнение всегда можно настроить в меню \"Настройки браузера\"."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Отключить автозаполнение"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Пропускная способность"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Загрузка результатов поиска"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Разрешить браузеру загружать достоверные результаты поиска в фоновом режиме"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблема с подключением"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблема с файлом"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Подтвердить"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Локальные"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобильная"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Обычная"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Загрузить результаты"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 63f6214..336e8a9 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Odovzdávanie súborov je zakázané."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nové okno"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nové okno inkognito"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Záložky"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Najviac navštevované"</string>
     <string name="tab_history" msgid="1979267558744613746">"História"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Uložené stránky"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Pridané medzi záložky"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Odstránené zo záložiek"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Prihláste sa do služby <xliff:g id="HOSTNAME">%s1</xliff:g> „<xliff:g id="REALM">%s2</xliff:g>“"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Uložiť na čítanie offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Uloženie na čítanie offline zlyhalo."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Počet záložiek: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Prázdny priečinok"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Otvoriť"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Nastaviť vyhľadávací nástroj"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Výber vyhľadávacieho nástroja"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Nastaviť na..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Automaticky prispôsobiť"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Prispôsobiť veľkosť webových stránok obrazovke"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Všeobecné"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil uložený"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil bol odstránený."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Odstrániť profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Nastaviť automatické dopĺňanie?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Prehliadač dokáže automaticky vyplniť webové formuláre, ako je tento. Chcete nastaviť svoj profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Automatické dopĺňanie môžete kedykoľvek nakonfigurovať v Nastaveniach prehliadača."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Zakázať automatické dopĺňanie"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Správa šírky pásma"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Predbežné načít. výsledkov vyhľadávania"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Umožniť prehliadaču na pozadí predbežne načítať relevantné výsledky vyhľadávania"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Predbežné načítanie výsledkov"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 0e4ad47..78a954c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Prenosi datotek so onemogočeni."</string>
     <string name="new_tab" msgid="4505722538297295141">"Novo okno"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Novo okno brez belež. zgod."</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Okna"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Zaznamki"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Najpogosteje obiskovano"</string>
     <string name="tab_history" msgid="1979267558744613746">"Zgodovina"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Shranjene strani"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Dodano med zaznamke"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Odstranjeno iz zaznamkov"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Prijavi se v <xliff:g id="HOSTNAME">%s1</xliff:g> »<xliff:g id="REALM">%s2</xliff:g>«"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Shrani za branje brez povezave"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Shranjevanje za branje brez povezave ni uspelo."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Število zaznamkov: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Prazna mapa"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Odpri"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Nastavi iskalnik"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Izberi iskalnik"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Nastavi na ..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Samodejno prilagodi velikost strani"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Oblikuj spletne strani, da se prilegajo zaslonu"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Splošno"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil je shranjen"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil je izbrisan"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Izbriši profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Nastavitev samozapolnjevanja"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Brskalnik lahko samodejno izpolni spletne obrazce, kot je ta. Ali želite prilagoditi svoj profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Samodejno izpolnjevanje lahko nastavite v nastavitvah brskalnika."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Onemogoči samodejno izpolnjevanje"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Upravljanje pasov. širine"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Vnaprejšnje nalaganje rezultatov iskanja"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Dovoli brskalniku vnapr. nalag. rezult. z visoko stopnjo zanesljivosti v ozadju."</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Vnaprej naloži rezultate"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index acf98b8..654b1cf 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Отпремање датотека је онемогућено."</string>
     <string name="new_tab" msgid="4505722538297295141">"Нови прозор"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Нов прозор без архивирања"</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="tab_snapshots" msgid="4435852763803720588">"Сачуване странице"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Сачувај за читање ван мреже"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Чување за читање ван мреже није успело."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Отвори"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Аутоматски уклопи странице"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Подешавање формата веб страница тако да се уклопе на екран"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Општa"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Желите да под. ауто. попуњавање?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите профил?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Аутоматско попуњавање увек можете да конфигуришете у Подешавањима прегледача."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Онемогући аутоматско попуњавање"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Управљање проп. опсегом"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Учитавање резултата претраге унапред"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Дозволи да прегледач у позадини унапред учита резултате претраге високог степена поузданости"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблем при повезивању са подацима"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблем са датотеком"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Потврда"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Локални"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Мобилни"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Рачунар"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Учитавање резултата унапред"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 69163a4..4c2c2a6 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Filöverföringen har inaktiverats."</string>
     <string name="new_tab" msgid="4505722538297295141">"Nytt fönster"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Nytt inkognitofönster"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Fönster"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bokmärken"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Mest besökta"</string>
     <string name="tab_history" msgid="1979267558744613746">"Historik"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Sparade sidor"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Har lagts till i Bokmärken"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Har tagits bort från Bokmärken"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Logga in på <xliff:g id="HOSTNAME">%s1</xliff:g> <xliff:g id="REALM">%s2</xliff:g>"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Spara för läsning offline"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Det gick inte att spara för läsning offline."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bokmärken"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Tom mapp"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Öppna"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Ange sökmotor"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Välj en sökmotor"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Ställ in på..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Autoanpassa sidor"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Anpassa webbsidor efter skärmen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Allmänt"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profilen har sparats"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profilen har tagits bort"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Ta bort profil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Vill du konfigurera autofyll?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Webbläsaren kan fylla i den här typen av formulär automatiskt. Vill du skapa en profil?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Du kan när som helst ändra inställningarna för Autofyll bland inställningarna för webbläsaren."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inaktivera Autofyll"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Bandbreddshantering"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Förinläsning av sökresultat"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Låt webbläsaren läsa in säkra sökresultat i förväg i bakgrunden"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Läs in resultat i förväg"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index bd274e9..b99edb0 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -22,10 +22,11 @@
     <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>
+    <!-- no translation found for tab_snapshots (4435852763803720588) -->
+    <skip />
     <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>
@@ -142,11 +143,10 @@
     <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) -->
+    <!-- no translation found for menu_save_snapshot (6935080344031126139) -->
     <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>
+    <!-- no translation found for snapshot_failed (6176197364690207251) -->
+    <skip />
     <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) -->
@@ -211,7 +211,7 @@
     <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
     <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
     <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
     <!-- no translation found for pref_content_autofit (8260474534053660809) -->
     <skip />
@@ -259,6 +259,8 @@
     <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>
+    <!-- no translation found for autofill_setup_dialog_title (1955613311837926540) -->
+    <skip />
     <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 />
@@ -374,6 +376,16 @@
     <skip />
     <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
     <skip />
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <!-- no translation found for pref_data_title (750316606686075162) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_title (4479320472980292873) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_summary (7488335627364473744) -->
+    <skip />
     <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
     <skip />
     <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
@@ -548,4 +560,10 @@
     <skip />
     <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
     <skip />
+    <!-- no translation found for permission_preload_label (4856971662337877316) -->
+    <skip />
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-sw600dp/dimensions.xml b/res/values-sw600dp/dimensions.xml
index e1ed19e..2c4aaae 100644
--- a/res/values-sw600dp/dimensions.xml
+++ b/res/values-sw600dp/dimensions.xml
@@ -35,4 +35,6 @@
     <dimen name="qc_thumb_height">160dip</dimen>
     <dimen name="qc_item_size">48dip</dimen>
     <dimen name="suggest_item_padding">16dp</dimen>
+    <dimen name="toolbar_height">48dip</dimen>
+    <dimen name="progress_bar_margin">-11dip</dimen>
 </resources>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
index 1bd6172..41e09ae 100644
--- a/res/values-sw600dp/styles.xml
+++ b/res/values-sw600dp/styles.xml
@@ -20,7 +20,7 @@
         <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>
+        <item name="android:actionBarSize">56dip</item>
     </style>
     <style name="Suggestions" parent="@android:style/Widget.Holo.AutoCompleteTextView">
     </style>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 34fcb53..993ded5 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"การอัปโหลดไฟล์ถูกปิดใช้งาน"</string>
     <string name="new_tab" msgid="4505722538297295141">"หน้าต่างใหม่"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"หน้าต่างใหม่ที่ไม่ระบุตัวตน"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</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="tab_snapshots" msgid="4435852763803720588">"หน้าที่บันทึกไว้"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"บันทึกเพื่ออ่านแบบออฟไลน์"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"ไม่สามารถบันทึกเพื่ออ่านแบบออฟไลน์ได้"</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"เปิด"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"ปรับหน้าให้พอดีอัตโนมัติ"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"ปรับรูปแบบหน้าเว็บให้พอดีกับหน้าจอ"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"ทั่วไป"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"ตั้งค่าการป้อนอัตโนมัติหรือไม่"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"เบราว์เซอร์จะกรอกเว็บฟอร์มให้โดยอัตโนมัติเช่นฟอร์มนี้ คุณต้องการตั้งค่าโปรไฟล์ของคุณหรือไม่"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"การป้อนอัตโนมัติสามารถกำหนดค่าผ่านการตั้งค่าเบราว์เซอร์"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"ปิดใช้งานการป้อนอัตโนมัติ"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"การจัดการแบนด์วิดท์"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"การโหลดผลการค้นหาล่วงหน้า"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"อนุญาตให้เบราว์เซอร์โหลดผลการค้นหาที่เชื่อถือได้สูงก่อนล่วงหน้าในเบื้องหลัง"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"ปัญหาการเชื่อมต่อข้อมูล"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"ปัญหาเกี่ยวกับไฟล์"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"ยืนยัน"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"ในตัวเครื่อง"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"มือถือ"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"เดสก์ท็อป"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"โหลดผลลัพธ์ล่วงหน้า"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 5ab9ae9..941ce28 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Hindi pinagana ang mga pag-upload ng file."</string>
     <string name="new_tab" msgid="4505722538297295141">"Bagong window"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Bagong incognito window"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Mga Bookmark"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Pinaka-binibisita"</string>
     <string name="tab_history" msgid="1979267558744613746">"Kasaysayan"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Na-save na Pahina"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Idinagdag sa mga bookmark"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Inalis mula sa mga bookmark"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Mag-sign in sa <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"I-save para sa offline na pagbabasa"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Nabigong i-save para sa offline na pagbabasa."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> (na) bookmark"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Walang lamang folder"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Buksan"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Itakda ang search engine"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Pumili ng search engine"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Itakda sa…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Mga auto-fit na pahina"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"I-format ang mga web page upang iakma sa screen"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Pangkalahatan"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Na-save na ang profile"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Natanggal na ang profile"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Tanggalin ang profile"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"I-setup ang auto-fill?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Maaaring awtomatikong kumpletuhin ng browser ang mga form ng web katulad nito. Gusto mo bang i-set up ang iyong profile?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Mako-configure anumang oras ang auto-fill sa pamamagitan ng Mga Setting ng Browser."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Huwag paganahin ang auto-fill"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Pamamahala ng Bandwidth"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Pauna pag-load ng resulta sa paghahanap"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Payagan ang browser na una load ng taas na kumpyansa resulta paghanap sa background"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Paunang i-load ang mga resulta"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2c8885b..252d6be 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Dosya Yüklemeleri devre dışı bırakıldı."</string>
     <string name="new_tab" msgid="4505722538297295141">"Yeni pencere"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Yeni gizli pencere"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Pencereler"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Favoriler"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"En çok ziyaret edilenler"</string>
     <string name="tab_history" msgid="1979267558744613746">"Geçmiş"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Kayıtlı Sayfalar"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Favorilere eklendi"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Favorilerden kaldırıldı"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"<xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\" oturumu aç"</string>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Çevrimdışı okuma için kaydet"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Çevrimdışı okuma için kaydedilemedi."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> yer işareti"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Boş klasör"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Aç"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Arama motoru ayarlayın"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Arama moturu seçin"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Ana sayfayı ayarla..."</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Sayfaları otomatik sığdır"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Web sayfalarını ekrana sığacak şekilde biçimlendir"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Genel"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Profil kaydedildi"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Profil silindi"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Profili sil"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Otomatik doldurma ayarlansın mı?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Tarayıcı bunun gibi web formlarını otomatik olarak tamamlayabilir. Profilinizi ayarlamak ister misiniz?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Otomatik doldurmayı istediğiniz zaman Tarayıcı Ayarları\'ndan yapılandırabilirsiniz."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Otomatik doldurmayı devre dışı bırak"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Bant Genişliği Yönetimi"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Arama sonucunu önyükleme"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Tarayıcının yüksek güvenli arama sonuçlarını arka planda önyüklemesine izin ver"</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>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Sonuçları önyükle"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index db77ea8..9e59bbc 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Завантаження файлів вимкнено."</string>
     <string name="new_tab" msgid="4505722538297295141">"Нове вікно"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Нове анонімне вікно"</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="tab_snapshots" msgid="4435852763803720588">"Збережені сторінки"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Зберегти для читання в режимі офлайн"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Не вдалося зберегти для читання в режимі офлайн."</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Відкр."</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Автомат. припасув."</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Форматув. сторінки до розмірів екрана"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Загальні"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"Налаштувати автозаповнення?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати ваш профіль?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Автозаповнення завжди можна налаштувати в налаштуваннях веб-переглядача."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Вимкнути автозаповнення"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Керув.пропускн.спроможн."</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Попереднє завантаж. результатів пошуку"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Дозволити переглядачу завантажувати достовірні рез-ти пошуку у фоновому режимі"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблема з доступом до даних"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблема з файлом"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Підтверд."</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"Локальні"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"Версія для мобільного пристрою"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"Версія для комп’ютера"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Попередньо завантажувати результати"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index af441c8..7f7509d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"Nội dung tải lên của tệp bị vô hiệu hóa."</string>
     <string name="new_tab" msgid="4505722538297295141">"Cửa sổ mới"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"Cửa sổ ẩn danh mới"</string>
-    <string name="active_tabs" msgid="3050623868203544623">"Windows"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Dấu trang"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Truy cập nhiều nhất"</string>
     <string name="tab_history" msgid="1979267558744613746">"Lịch sử"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"Trang đã lưu"</string>
     <string name="added_to_bookmarks" msgid="1020224130695956728">"Đã thêm vào dấu trang"</string>
     <string name="removed_from_bookmarks" msgid="6063705902028438800">"Đã xoá khỏi dấu trang"</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Đăng nhập vào <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
@@ -32,7 +32,7 @@
     <string name="password" msgid="1177138552305184404">"Mật khẩu"</string>
     <string name="action" msgid="183105774472071343">"Đăng nhập"</string>
     <string name="bookmarks_search" msgid="5229596268214362873">"Trình duyệt"</string>
-    <string name="cancel" msgid="3017274947407233702">"Huỷ"</string>
+    <string name="cancel" msgid="3017274947407233702">"Hủy"</string>
     <string name="ok" msgid="1509280796718850364">"OK"</string>
     <string name="title_bar_loading" msgid="7438217780834640678">"Đang tải…"</string>
     <string name="page_info" msgid="4048529256302257195">"Thông tin trang"</string>
@@ -53,7 +53,7 @@
     <string name="back" msgid="8414603107175713668">"Quay lại"</string>
     <string name="forward" msgid="4288210890526641577">"Chuyển tiếp"</string>
     <string name="save" msgid="5922311934992468496">"OK"</string>
-    <string name="do_not_save" msgid="6777633870113477714">"Huỷ"</string>
+    <string name="do_not_save" msgid="6777633870113477714">"Hủy"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Lưu để đọc ngoại tuyến"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"Không thể lưu để đọc ngoại tuyến."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> dấu trang"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Thư mục trống"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Mở"</string>
@@ -143,11 +141,7 @@
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Đặt công cụ tìm kiếm"</string>
     <string name="pref_content_search_engine_summary" msgid="5162667665858487316">"Chọn công cụ tìm kiếm"</string>
     <string name="pref_set_homepage_to" msgid="7196350233061395098">"Đặt thành…"</string>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"Tự động điều chỉnh kích thước các trang"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Định dạng trang web để vừa với màn hình"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Chung"</string>
@@ -188,6 +182,7 @@
     <string name="autofill_profile_successful_save" msgid="6834102203944938409">"Đã lưu tiểu sử"</string>
     <string name="autofill_profile_successful_delete" msgid="2421442112954362732">"Đã xóa tiểu sử"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"Xóa tiểu sử"</string>
+    <string name="autofill_setup_dialog_title" msgid="1955613311837926540">"Thiết lập tự động điền vào?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Trình duyệt có thể tự động hoàn thành biểu mẫu web như biểu mẫu này. Bạn có muốn thiết lập cấu hình của mình không?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"Luôn có thể định cấu hình tính năng Tự động điền thông qua Cài đặt trình duyệt."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Tắt tính năng tự động điền"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"Quản lý băng thông"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"Tải trước kết quả tìm kiếm"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"Cho phép trình duyệt tải trước các kết quả tìm kiếm có độ tin cậy cao trong nền"</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>
@@ -303,10 +305,10 @@
     <string name="download_menu_open" msgid="4888327480367757513">"Mở"</string>
     <string name="download_menu_clear" msgid="6264454531553418124">"Xoá khỏi danh sách"</string>
     <string name="download_menu_delete" msgid="8815502136393894148">"Xoá"</string>
-    <string name="download_menu_cancel" msgid="2545333007601851574">"Huỷ tải xuống"</string>
-    <string name="download_menu_cancel_all" msgid="2136550823151999166">"Huỷ tất cả nội dung tải xuống"</string>
-    <string name="download_cancel_dlg_title" msgid="8909108500262799748">"Huỷ nội dung tải xuống"</string>
-    <string name="download_cancel_dlg_msg" msgid="6285389170052357797">"Tất cả <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> nội dung tải xuống sẽ bị huỷ và xoá khỏi lịch sử tải xuống."</string>
+    <string name="download_menu_cancel" msgid="2545333007601851574">"Hủy tải xuống"</string>
+    <string name="download_menu_cancel_all" msgid="2136550823151999166">"Hủy tất cả nội dung tải xuống"</string>
+    <string name="download_cancel_dlg_title" msgid="8909108500262799748">"Hủy nội dung tải xuống"</string>
+    <string name="download_cancel_dlg_msg" msgid="6285389170052357797">"Tất cả <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> nội dung tải xuống sẽ bị hủy và xoá khỏi lịch sử tải xuống."</string>
     <string name="download_delete_file" msgid="5330036497843073249">"Tệp sẽ bị xoá"</string>
     <string name="download_file_error_dlg_title" msgid="2693630283595384874">"Hết dung lượng"</string>
     <string name="download_file_error_dlg_msg" msgid="5156405410324072471">"Không thể tải xuống <xliff:g id="FILENAME">%s</xliff:g>."\n"Tạo thêm dung lượng trên điện thoại của bạn và thử lại."</string>
@@ -329,7 +331,7 @@
     <string name="download_pending" msgid="2599683668575349559">"Đang bắt đầu tải xuống..."</string>
     <string name="download_pending_network" msgid="6548714525679461053">"Đang đợi kết nối dữ liệu…"</string>
     <string name="download_running_paused" msgid="6418029352085656495">"Đang đợi kết nối dữ liệu…"</string>
-    <string name="download_canceled" msgid="6057083743144492515">"Đã huỷ tải xuống."</string>
+    <string name="download_canceled" msgid="6057083743144492515">"Đã hủy tải xuống."</string>
     <string name="download_not_acceptable" msgid="313769696131563652">"Không thể tải xuống. Nội dung không được hỗ trợ trên điện thoại này."</string>
     <string name="download_file_error" msgid="1206648050615176113">"Không thể hoàn tất tải xuống. Không đủ dung lượng."</string>
     <string name="download_length_required" msgid="9038605488460437406">"Không thể tải xuống. Không thể xác định kích cỡ của mục."</string>
@@ -341,13 +343,13 @@
     <string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Xoá dữ liệu đã lưu trữ"</string>
     <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Tất cả dữ liệu được lưu trữ bởi trang web này sẽ bị xoá"</string>
     <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Xoá tất cả"</string>
-    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Huỷ"</string>
+    <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Hủy"</string>
     <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB được lưu trữ trên điện thoại"</string>
     <string name="loading_video" msgid="4887871585216091096">"Đang tải video"</string>
     <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> muốn biết vị trí của bạn"</string>
     <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Chia sẻ vị trí"</string>
     <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Từ chối"</string>
-    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Nhớ tuỳ chọn"</string>
+    <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Nhớ tùy chọn"</string>
     <string name="geolocation_permissions_prompt_toast_allowed" msgid="987286072035125498">"Trang web này có thể truy cập vị trí của bạn. Thay đổi điều này trong Cài đặt -&gt; Cài đặt trang web"</string>
     <string name="geolocation_permissions_prompt_toast_disallowed" msgid="7695100950212692515">"Trang web này không thể truy cập vị trí của bạn. Thay đổi điều này trong Cài đặt -&gt; Cài đặt trang web"</string>
     <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Xóa truy cập vị trí"</string>
@@ -356,12 +358,12 @@
     <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Xóa truy cập vị trí"</string>
     <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Truy cập vị trí cho trang web này sẽ bị xoá"</string>
     <string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Xoá truy cập"</string>
-    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Huỷ"</string>
+    <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Hủy"</string>
     <string name="website_settings_clear_all" msgid="8739804325997655980">"Xoá tất cả"</string>
     <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Xoá tất cả cài đặt trang web?"</string>
     <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Tất cả các quyền về vị trí và dữ liệu trên trang web sẽ bị xoá."</string>
     <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Xoá tất cả dữ liệu"</string>
-    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Huỷ"</string>
+    <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Hủy"</string>
     <string name="progress_dialog_setting_wallpaper" msgid="4871900779338536674">"Đang đặt hình nền..."</string>
     <string name="defaultBookmarksUpButton" msgid="2303951020715704735">"Dấu trang"</string>
     <string name="empty_bookmarks_folder" msgid="7843361614634930942">"Không có dấu trang"</string>
@@ -391,4 +393,9 @@
     <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>
+    <string name="permission_preload_label" msgid="4856971662337877316">"Tải trước kết quả"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-w720dp/bools.xml b/res/values-w720dp/bools.xml
new file mode 100644
index 0000000..0d05b7f
--- /dev/null
+++ b/res/values-w720dp/bools.xml
@@ -0,0 +1,16 @@
+<?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/strings.xml b/res/values-zh-rCN/strings.xml
index d4e3f56..24158c8 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"文件上传功能已停用。"</string>
     <string name="new_tab" msgid="4505722538297295141">"新窗口"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"新隐身窗口"</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="tab_snapshots" msgid="4435852763803720588">"保存的页面"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"保存以供离线阅读"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"无法保存以供离线阅读。"</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"打开"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"自动调整页面"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"调整网页版面以适合屏幕大小"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"常规"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"要设置自动填充功能吗?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"浏览器可自动填充网络表单(例如该表单)。您希望设置个人资料吗?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"您可以随时通过“浏览器设置”配置自动填充功能。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"停用自动填充"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"带宽管理"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"搜索结果预加载"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"允许浏览器在后台预加载相关度高的搜索结果"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"数据连接性问题"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"文件有问题"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"确认"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"本地"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"移动版"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"桌面版"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"预加载结果"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b33a0d5..9405b28 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -21,10 +21,10 @@
     <string name="uploads_disabled" msgid="463761197575372994">"檔案上傳功能已停用。"</string>
     <string name="new_tab" msgid="4505722538297295141">"新視窗"</string>
     <string name="new_incognito_tab" msgid="5821404839654751753">"新的無痕式視窗"</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_most_visited" msgid="1077402532455000703">"最常造訪"</string>
     <string name="tab_history" msgid="1979267558744613746">"記錄"</string>
+    <string name="tab_snapshots" msgid="4435852763803720588">"儲存的網頁"</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>
@@ -101,10 +101,8 @@
     <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>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"儲存以供離線閱讀"</string>
+    <string name="snapshot_failed" msgid="6176197364690207251">"無法儲存頁面以供離線閱讀。"</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>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"開啟"</string>
@@ -143,11 +141,7 @@
     <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>
-    <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
-    <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
-    <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
-    <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <string name="pref_content_autofit" msgid="8260474534053660809">"自動調整頁面"</string>
     <string name="pref_content_autofit_summary" msgid="4587831659894879986">"配合螢幕大小調整網頁版面"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"一般設定"</string>
@@ -188,6 +182,7 @@
     <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_title" msgid="1955613311837926540">"設定自動填入功能?"</string>
     <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"瀏覽器可以自動填寫這類網路表單,您要建立個人資料嗎?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="6990737008936188620">"您可隨時透過 [瀏覽器設定] 設定自動填入功能。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"停用自動填入功能"</string>
@@ -275,6 +270,13 @@
     <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>
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <string name="pref_data_title" msgid="750316606686075162">"頻寬管理"</string>
+    <string name="pref_data_preload_title" msgid="4479320472980292873">"正在預先載入搜尋結果"</string>
+    <string name="pref_data_preload_summary" msgid="7488335627364473744">"允許瀏覽器在背景預先載入可信度高的搜尋結果"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"資料連線問題"</string>
     <string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"檔案有問題"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
@@ -391,4 +393,9 @@
     <string name="local_bookmarks" msgid="533816851415228520">"本機"</string>
     <string name="ua_switcher_mobile" msgid="5103260404792449606">"行動版"</string>
     <string name="ua_switcher_desktop" msgid="2535200543238676638">"電腦版"</string>
+    <string name="permission_preload_label" msgid="4856971662337877316">"預先載入結果"</string>
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 8b207a1..8c679d7 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -22,10 +22,11 @@
     <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>
+    <!-- no translation found for tab_snapshots (4435852763803720588) -->
+    <skip />
     <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>
@@ -142,11 +143,10 @@
     <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) -->
+    <!-- no translation found for menu_save_snapshot (6935080344031126139) -->
     <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>
+    <!-- no translation found for snapshot_failed (6176197364690207251) -->
+    <skip />
     <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) -->
@@ -211,7 +211,7 @@
     <!-- no translation found for pref_homepage_choices:0 (844041670142910837) -->
     <!-- no translation found for pref_homepage_choices:1 (4430498748295169195) -->
     <!-- no translation found for pref_homepage_choices:2 (5747608191946904074) -->
-    <!-- no translation found for pref_homepage_choices:3 (723023698618841163) -->
+    <!-- no translation found for pref_homepage_choices:3 (6092441301001006473) -->
     <!-- no translation found for pref_homepage_choices:4 (5021822752506507426) -->
     <!-- no translation found for pref_content_autofit (8260474534053660809) -->
     <skip />
@@ -260,6 +260,8 @@
     <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>
+    <!-- no translation found for autofill_setup_dialog_title (1955613311837926540) -->
+    <skip />
     <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 />
@@ -375,6 +377,16 @@
     <skip />
     <!-- no translation found for pref_lab_fullscreen_summary (6853711692160711419) -->
     <skip />
+    <!-- no translation found for pref_lab_inverted (1650585016924791747) -->
+    <skip />
+    <!-- no translation found for pref_lab_inverted_summary (2224690234778313947) -->
+    <skip />
+    <!-- no translation found for pref_data_title (750316606686075162) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_title (4479320472980292873) -->
+    <skip />
+    <!-- no translation found for pref_data_preload_summary (7488335627364473744) -->
+    <skip />
     <!-- no translation found for browserFrameNetworkErrorLabel (126892350904924893) -->
     <skip />
     <!-- no translation found for browserFrameFileErrorLabel (8063691502792670367) -->
@@ -435,15 +447,15 @@
     <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>
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"Isitoreji se-USB asitholakali"</string>
+    <!-- outdated translation 56777245081568508 -->     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"Isitoreji se-USB asitholakali"</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"Isitoreji se-USB siyadingeka 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="nosdcard" msgid="8081445664689818973">"Isitoreji se-USB asitholakali"</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>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="3979329954835690147">"Isitoreji se-USB simatasa. Ukuvumela ukulanda, khetha \"Vala isitoreji se-USB\' kwisaziso."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="3473883538192835204">"Ikhadi le-SD limatasa. Ukuvumela ukulanda, khetha \"Vala isitoreji nge-USB\" kwisaziso."</string>
     <!-- no translation found for cannot_download (8150552478556798780) -->
     <skip />
     <string name="download_no_application_title" msgid="1286056729168874295">"Ayikwazi ukuvula ifayela"</string>
@@ -473,7 +485,7 @@
     <!-- 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_title" msgid="1160474608059771788">"Isitoreji sesiphequluli sigcwele"</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>
@@ -549,4 +561,10 @@
     <skip />
     <!-- no translation found for ua_switcher_desktop (2535200543238676638) -->
     <skip />
+    <!-- no translation found for permission_preload_label (4856971662337877316) -->
+    <skip />
+    <!-- no translation found for empty_snapshots_folder (5788256228290785444) -->
+    <skip />
+    <!-- no translation found for remove_snapshot (1624447424544976849) -->
+    <skip />
 </resources>
diff --git a/res/values/bools.xml b/res/values/bools.xml
index 6217de1..55f8242 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -13,4 +13,5 @@
 <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/dimensions.xml b/res/values/dimensions.xml
index c4ce151..3b57f19 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -30,13 +30,13 @@
     <dimen name="widgetItemMinHeight">48dip</dimen>
     <dimen name="favicon_size">16dip</dimen>
     <dimen name="favicon_padded_size">20dip</dimen>
-    <dimen name="qc_radius_start">30dip</dimen>
-    <dimen name="qc_radius_increment">60dip</dimen>
+    <dimen name="qc_radius_start">45dip</dimen>
+    <dimen name="qc_radius_increment">70dip</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">160dip</dimen>
-    <dimen name="qc_thumb_height">120dip</dimen>
+    <dimen name="qc_tab_title_height">24dip</dimen>
+    <dimen name="qc_thumb_width">150dip</dimen>
+    <dimen name="qc_thumb_height">100dip</dimen>
     <dimen name="qc_item_size">40dip</dimen>
     <dimen name="bookmark_widget_thumb_size">32dip</dimen>
     <dimen name="bookmark_widget_favicon_size">26dip</dimen>
@@ -65,6 +65,7 @@
     <dimen name="preference_widget_width">56dp</dimen>
     <dimen name="nav_tab_spacing">8dp</dimen>
     <dimen name="menu_width">240dip</dimen>
+    <dimen name="menu_height">32dip</dimen>
     <dimen name="toolbar_height">52dip</dimen>
     <dimen name="tab_capture_size">160dp</dimen>
     <dimen name="nav_tab_width">240dip</dimen>
@@ -72,4 +73,5 @@
     <dimen name="nav_tab_text_normal">18sp</dimen>
     <dimen name="nav_tab_text_small">14sp</dimen>
     <dimen name="suggest_item_padding">8dp</dimen>
+    <dimen name="progress_bar_margin">-8dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 253d811..ee3ce95 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -26,8 +26,6 @@
     <!-- Name of menu item of a new incognito tab.  Also used in the
          title bar when displaying a new tab [CHAR LIMIT=30] -->
     <string name="new_incognito_tab">New incognito window</string>
-    <!-- Name of menu item which brings up a list of the currently active tabs -->
-    <string name="active_tabs">Windows</string>
     <!-- Name of tab containing bookmarks -->
     <string name="tab_bookmarks">Bookmarks</string>
     <!-- Name of tab containing the user's most visited websites, organized by number of visits -->
@@ -324,8 +322,8 @@
         <item>Blank page</item>
         <!-- Setting choice to set the homepage to the default page [CHAR LIMIT=40] -->
         <item>Default page</item>
-        <!-- Setting choice to set the homepage to the "Most Visited" homepage feature [CHAR LIMIT=40] -->
-        <item>Most-visited homepage</item>
+        <!-- Setting choice to set the homepage to the "Most Visited" homepage feature, which is a list of most visited sites [CHAR LIMIT=40] -->
+        <item>Most visited sites</item>
         <!-- Setting choice to set the homepage to a user entered URL [CHAR LIMIT=40] -->
         <item>Other\u2026</item>
     </string-array>
@@ -593,6 +591,8 @@
         <item>5</item>
     </string-array>
     <string name="pref_development_error_console" translatable="false">Show JavaScript Console</string>
+    <!-- Do not translate. Development option to reset the prologin time [CHAR LIMIT=20] -->
+    <string name="pref_development_reset_prelogin" translatable="false">Reset prelogin</string>
     <!-- Settings screen, setting option name -->
     <string name="pref_default_text_encoding">Text encoding</string>
     <!-- Options in the Default encoding dialog box -->
@@ -644,6 +644,10 @@
     <!-- 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 the inverted screen lab feature. This causes the screen to render with inverted colors (black becomes white and vice versa) [CHAR LIMIT=40] -->
+    <string name="pref_lab_inverted">Inverted Rendering</string>
+    <!-- Summary for the inverted screen lab feature. [CHAR LIMIT=120] -->
+    <string name="pref_lab_inverted_summary">Checking this causes the browser to invert colors. Black will become white and vice versa.</string>
     <!-- Title for bandwidth management preference [CHAR LIMIT=25] -->
     <string name="pref_data_title">Bandwidth Management</string>
     <!-- Title for search preloading [CHAR LIMIT=40] -->
@@ -1002,4 +1006,8 @@
     <string name="ua_switcher_desktop">Desktop</string>
     <!-- Preload permission label [CHAR LIMIT=40] -->
     <string name="permission_preload_label">Preload results</string>
+    <!-- Empty text for the "saved pages" tab that is shown when no saved pages exist. [CHAR LIMIT=None] -->
+    <string name="empty_snapshots_folder">There are no saved pages.</string>
+    <!-- Menu option to delete the currently selected saved page [CHAR LIMIT=50] -->
+    <string name="remove_snapshot">Delete saved page</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 061d600..76a698e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -23,9 +23,8 @@
         <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:windowActionBarOverlay">false</item>
         <item name="android:actionBarStyle">@style/ActionBarStyle</item>
-        <item name="android:actionButtonStyle">@style/ActionButton</item>
     </style>
     <style name="DialogWhenLarge" parent="@android:style/Theme.Holo.DialogWhenLarge" >
         <item name="android:windowActionBar">false</item>
@@ -40,14 +39,10 @@
         <item name="android:backgroundDimEnabled">false</item>
         <item name="android:windowIsTranslucent">true</item>
     </style>
-    <style name="ActionBarStyle">
-        <item name="android:height">56dip</item>
+    <style name="ActionBarStyle" parent="@android:style/Widget.Holo.ActionBar">
         <item name="android:background">@drawable/bg_browsertabs</item>
         <item name="android:displayOptions"></item>
     </style>
-    <style name="ActionButton">
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
     <style name="Suggestions" parent="@android:style/Widget.Holo.AutoCompleteTextView">
         <item name="android:popupBackground">#D0000000</item>
         <item name="android:dropDownVerticalOffset">0dip</item>
diff --git a/res/xml-sw600dp/lab_preferences.xml b/res/xml-sw600dp/lab_preferences.xml
index 1dbec88..512c8c1 100644
--- a/res/xml-sw600dp/lab_preferences.xml
+++ b/res/xml-sw600dp/lab_preferences.xml
@@ -16,17 +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_instant_search"
         android:defaultValue="false"
         android:title="@string/pref_use_instant_search"
         android:summary="@string/pref_use_instant_search_summary" />
-
+    <CheckBoxPreference
+        android:key="inverted"
+        android:defaultValue="false"
+        android:title="@string/pref_lab_inverted"
+        android:summary="@string/pref_lab_inverted_summary" />
 </PreferenceScreen>
diff --git a/res/xml/debug_preferences.xml b/res/xml/debug_preferences.xml
index 5126b0d..1fc4f4c 100644
--- a/res/xml/debug_preferences.xml
+++ b/res/xml/debug_preferences.xml
@@ -76,4 +76,8 @@
         android:title="@string/js_engine_flags"
         android:singleLine="true" />
 
+    <Preference
+        android:key="reset_prelogin"
+        android:title="@string/pref_development_reset_prelogin" />
+
 </PreferenceScreen>
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
index 3320cee..a3de6ca 100644
--- a/res/xml/lab_preferences.xml
+++ b/res/xml/lab_preferences.xml
@@ -26,4 +26,9 @@
         android:defaultValue="false"
         android:title="@string/pref_lab_fullscreen"
         android:summary="@string/pref_lab_fullscreen_summary" />
+    <CheckBoxPreference
+        android:key="inverted"
+        android:defaultValue="false"
+        android:title="@string/pref_lab_inverted"
+        android:summary="@string/pref_lab_inverted_summary" />
 </PreferenceScreen>
diff --git a/src/com/android/browser/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java
deleted file mode 100644
index 0feba9a..0000000
--- a/src/com/android/browser/ActiveTabsPage.java
+++ /dev/null
@@ -1,200 +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.content.Context;
-import android.graphics.Bitmap;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-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.TextView;
-
-interface OnCloseTab {
-    void onCloseTab(int position);
-}
-
-public class ActiveTabsPage extends LinearLayout implements OnClickListener,
-        OnItemClickListener, OnCloseTab {
-
-    private Context mContext;
-    private UiController mController;
-    private TabControl mTabControl;
-    private View mNewTab, mNewIncognitoTab;
-    private TabAdapter mAdapter;
-    private AbsListView mTabsList;
-
-    public ActiveTabsPage(Context context, UiController controller) {
-        super(context);
-        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();
-            }
-        }
-    }
-
-    /**
-     * Special class to hold the close drawable.  Its sole purpose is to allow
-     * 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.
-     */
-    public static class CloseHolder extends ImageView {
-        public CloseHolder(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        @Override
-        public void setPressed(boolean pressed) {
-            // If the parent is pressed, do not set to pressed.
-            if (pressed && ((View) getParent()).isPressed()) {
-                return;
-            }
-            super.setPressed(pressed);
-        }
-    }
-
-    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() {
-            return mTabControl.getTabCount();
-        }
-
-        @Override
-        public Tab getItem(int position) {
-            return mTabControl.getTab(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-    }
-}
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index f330cd5..45b1f8b 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -759,7 +759,7 @@
             try {
                 final ContentResolver cr = getContentResolver();
                 Bookmarks.addBookmark(AddBookmarkPage.this, false, url,
-                        title, thumbnail, true, mCurrentFolder);
+                        title, thumbnail, mCurrentFolder);
                 if (touchIconUrl != null) {
                     new DownloadTouchIcon(mContext, cr, url).execute(mTouchIconUrl);
                 }
@@ -959,6 +959,7 @@
             long root = mAccountAdapter.getItem(position).rootFolderId;
             if (root != mRootFolder) {
                 onRootFolderFound(root);
+                mFolderAdapter.clearRecentFolder();
             }
         }
     }
diff --git a/src/com/android/browser/AutologinBar.java b/src/com/android/browser/AutologinBar.java
new file mode 100644
index 0000000..e57d614
--- /dev/null
+++ b/src/com/android/browser/AutologinBar.java
@@ -0,0 +1,145 @@
+/*
+ * 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.ContextThemeWrapper;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import com.android.browser.DeviceAccountLogin.AutoLoginCallback;
+
+public class AutologinBar extends LinearLayout implements OnClickListener,
+        AutoLoginCallback {
+
+    protected Spinner mAutoLoginAccount;
+    protected Button mAutoLoginLogin;
+    protected ProgressBar mAutoLoginProgress;
+    protected TextView mAutoLoginError;
+    protected View mAutoLoginCancel;
+    protected DeviceAccountLogin mAutoLoginHandler;
+    protected ArrayAdapter<String> mAccountsAdapter;
+    protected TitleBar mTitleBar;
+
+    public AutologinBar(Context context) {
+        super(context);
+    }
+
+    public AutologinBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public AutologinBar(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        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 = findViewById(R.id.autologin_close);
+        mAutoLoginCancel.setOnClickListener(this);
+    }
+
+    public void setTitleBar(TitleBar titleBar) {
+        mTitleBar = titleBar;
+    }
+
+    @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);
+            }
+        }
+    }
+
+    public 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);
+        }
+    }
+
+    void showAutoLogin(boolean animate) {
+        mTitleBar.showAutoLogin(animate);
+    }
+
+    void hideAutoLogin(boolean animate) {
+        mTitleBar.hideAutoLogin(animate);
+    }
+
+    @Override
+    public void loginFailed() {
+        mAutoLoginAccount.setEnabled(true);
+        mAutoLoginLogin.setEnabled(true);
+        mAutoLoginProgress.setVisibility(View.INVISIBLE);
+        mAutoLoginError.setVisibility(View.VISIBLE);
+    }
+
+}
diff --git a/src/com/android/browser/BackgroundHandler.java b/src/com/android/browser/BackgroundHandler.java
new file mode 100644
index 0000000..a0d9243
--- /dev/null
+++ b/src/com/android/browser/BackgroundHandler.java
@@ -0,0 +1,44 @@
+/*
+ * 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.os.HandlerThread;
+import android.os.Looper;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class BackgroundHandler {
+
+    static HandlerThread sLooperThread;
+    static ExecutorService mThreadPool;
+
+    static {
+        sLooperThread = new HandlerThread("BackgroundHandler", HandlerThread.MIN_PRIORITY);
+        sLooperThread.start();
+        mThreadPool = Executors.newCachedThreadPool();
+    }
+
+    public static void execute(Runnable runnable) {
+        mThreadPool.execute(runnable);
+    }
+
+    public static Looper getLooper() {
+        return sLooperThread.getLooper();
+    }
+
+    private BackgroundHandler() {}
+}
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 8e24353..b270dea 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -17,7 +17,7 @@
 package com.android.browser;
 
 import android.app.Activity;
-import android.content.pm.PackageManager;
+import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -35,6 +35,7 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -75,7 +76,7 @@
         Gravity.CENTER);
 
     private static final int MSG_HIDE_TITLEBAR = 1;
-    private static final int HIDE_TITLEBAR_DELAY = 1500; // in ms
+    public static final int HIDE_TITLEBAR_DELAY = 1500; // in ms
 
     Activity mActivity;
     UiController mUiController;
@@ -94,8 +95,6 @@
     private WebChromeClient.CustomViewCallback mCustomViewCallback;
     private int mOriginalOrientation;
 
-    private CombinedBookmarkHistoryView mComboView;
-
     private LinearLayout mErrorConsoleContainer = null;
 
     private Toast mStopToast;
@@ -110,6 +109,8 @@
 
     private boolean mActivityPaused;
     protected boolean mUseQuickControls;
+    protected TitleBar mTitleBar;
+    private NavigationBarBase mNavigationBar;
 
     public BaseUi(Activity browser, UiController controller) {
         mActivity = browser;
@@ -140,6 +141,10 @@
                 config.getScaledOverscrollDistance());
         mTitlebarScrollTriggerSlop = Math.max(mTitlebarScrollTriggerSlop,
                 config.getScaledTouchSlop());
+        mTitleBar = new TitleBar(mActivity, mUiController, this,
+                mContentView);
+        mTitleBar.setProgress(100);
+        mNavigationBar = mTitleBar.getNavigationBar();
     }
 
     private void cancelStopToast() {
@@ -170,16 +175,14 @@
     public void onConfigurationChanged(Configuration config) {
     }
 
+    public Activity getActivity() {
+        return mActivity;
+    }
+
     // key handling
 
     @Override
     public boolean onBackKey() {
-        if (mComboView != null) {
-            if (!mComboView.onBackPressed()) {
-                mUiController.removeComboView();
-            }
-            return true;
-        }
         if (mCustomView != null) {
             mUiController.hideCustomView();
             return true;
@@ -199,13 +202,14 @@
         setFavicon(tab);
         updateLockIconToLatest(tab);
         updateNavigationState(tab);
+        mTitleBar.onTabDataChanged(tab);
     }
 
     @Override
     public void bookmarkedStatusHasChanged(Tab tab) {
         if (tab.inForeground()) {
             boolean isBookmark = tab.isBookmarkedSite();
-            getTitleBar().setCurrentUrlIsBookmark(isBookmark);
+            mNavigationBar.setCurrentUrlIsBookmark(isBookmark);
         }
     }
 
@@ -248,10 +252,11 @@
         onTabDataChanged(tab);
         onProgressChanged(tab);
         boolean incognito = mActiveTab.getWebView().isPrivateBrowsingEnabled();
-        getTitleBar().setIncognitoMode(incognito);
+        mNavigationBar.setIncognitoMode(incognito);
         updateAutoLogin(tab, false);
         if (web != null && web.getVisibleTitleHeight()
-                != getTitleBar().getEmbeddedHeight()) {
+                != mTitleBar.getEmbeddedHeight()
+                && !mUseQuickControls) {
             showTitleBarForDuration();
         }
     }
@@ -421,7 +426,9 @@
             mUiController.endActionMode();
         }
         showTitleBar();
-        getTitleBar().startEditingUrl(clearInput);
+        if (!getActiveTab().isSnapshot()) {
+            mNavigationBar.startEditingUrl(clearInput);
+        }
     }
 
     boolean canShowTitleBar() {
@@ -432,27 +439,30 @@
                 && !mUiController.isInCustomActionMode();
     }
 
-    void showTitleBar() {
+    protected void showTitleBar() {
+        mHandler.removeMessages(MSG_HIDE_TITLEBAR);
         if (canShowTitleBar()) {
-            getTitleBar().show();
+            mTitleBar.show();
         }
     }
 
     protected void hideTitleBar() {
-        if (getTitleBar().isShowing()) {
-            getTitleBar().hide();
+        if (mTitleBar.isShowing()) {
+            mTitleBar.hide();
         }
     }
 
     protected boolean isTitleBarShowing() {
-        return getTitleBar().isShowing();
+        return mTitleBar.isShowing();
     }
 
     public boolean isEditingUrl() {
-        return getTitleBar().isEditingUrl();
+        return mTitleBar.isEditingUrl();
     }
 
-    protected abstract TitleBarBase getTitleBar();
+    public TitleBar getTitleBar() {
+        return mTitleBar;
+    }
 
     protected void setTitleGravity(int gravity) {
         WebView web = getWebView();
@@ -463,63 +473,34 @@
 
     @Override
     public void showVoiceTitleBar(String title, List<String> results) {
-        getTitleBar().setInVoiceMode(true, results);
-        getTitleBar().setDisplayTitle(title);
+        mNavigationBar.setInVoiceMode(true, results);
+        mNavigationBar.setDisplayTitle(title);
     }
 
     @Override
     public void revertVoiceTitleBar(Tab tab) {
-        getTitleBar().setInVoiceMode(false, null);
+        mNavigationBar.setInVoiceMode(false, null);
         String url = tab.getUrl();
-        getTitleBar().setDisplayTitle(url);
+        mNavigationBar.setDisplayTitle(url);
     }
 
     @Override
     public void registerDropdownChangeListener(DropdownChangeListener d) {
-        getTitleBar().registerDropdownChangeListener(d);
+        mNavigationBar.registerDropdownChangeListener(d);
     }
 
     @Override
     public void showComboView(ComboViews startingView, Bundle extras) {
-        if (mComboView != null) {
-            return;
+        Intent intent = new Intent(mActivity, ComboViewActivity.class);
+        intent.putExtra(ComboViewActivity.EXTRA_INITIAL_VIEW, startingView.name());
+        intent.putExtra(ComboViewActivity.EXTRA_COMBO_ARGS, extras);
+        Tab t = getActiveTab();
+        if (t != null) {
+            intent.putExtra(ComboViewActivity.EXTRA_CURRENT_URL, t.getUrl());
         }
-        mComboView = new CombinedBookmarkHistoryView(mActivity,
-                mUiController,
-                startingView,
-                extras);
-        FrameLayout wrapper =
-            (FrameLayout) mContentView.findViewById(R.id.webview_wrapper);
-        wrapper.setVisibility(View.GONE);
-        getTitleBar().stopEditingUrl();
-        dismissIME();
-        hideTitleBar();
-        if (mActiveTab != null) {
-            mActiveTab.putInBackground();
-        }
-        mContentView.addView(mComboView, COVER_SCREEN_PARAMS);
-    }
-
-    public boolean isComboViewShowing() {
-        return (mComboView != null);
-    }
-
-    /**
-     * dismiss the ComboPage
-     */
-    @Override
-    public void hideComboView() {
-        if (mComboView != null) {
-            mContentView.removeView(mComboView);
-            FrameLayout wrapper =
-                (FrameLayout) mContentView.findViewById(R.id.webview_wrapper);
-            wrapper.setVisibility(View.VISIBLE);
-            mComboView = null;
-        }
-        if (mActiveTab != null) {
-            mActiveTab.putInForeground();
-        }
-        mActivity.invalidateOptionsMenu();
+        intent.putExtra(ComboViewActivity.EXTRA_BOOKMARK_PAGE,
+                mUiController.createBookmarkCurrentPageIntent(false));
+        mActivity.startActivityForResult(intent, Controller.COMBO_VIEW);
     }
 
     @Override
@@ -578,8 +559,7 @@
 
     @Override
     public boolean showsWeb() {
-        return mCustomView == null
-            && mComboView == null;
+        return mCustomView == null;
     }
 
     @Override
@@ -598,7 +578,7 @@
     }
 
     protected void updateAutoLogin(Tab tab, boolean animate) {
-        getTitleBar().updateAutoLogin(tab, animate);
+        mTitleBar.updateAutoLogin(tab, animate);
     }
 
     /**
@@ -620,7 +600,7 @@
         } else if (lockIconType == LockIcon.LOCK_ICON_MIXED) {
             d = mMixLockIcon;
         }
-        getTitleBar().setLock(d);
+        mNavigationBar.setLock(d);
     }
 
     protected void setUrlTitle(Tab tab) {
@@ -631,7 +611,7 @@
         }
         if (tab.isInVoiceSearchMode()) return;
         if (tab.inForeground()) {
-            getTitleBar().setDisplayTitle(url);
+            mNavigationBar.setDisplayTitle(url);
         }
     }
 
@@ -639,7 +619,7 @@
     protected void setFavicon(Tab tab) {
         if (tab.inForeground()) {
             Bitmap icon = tab.getFavicon();
-            getTitleBar().setFavicon(icon);
+            mNavigationBar.setFavicon(icon);
         }
     }
 
@@ -674,6 +654,11 @@
     }
 
     @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        return false;
+    }
+
+    @Override
     public void onOptionsMenuClosed(boolean inLoad) {
     }
 
@@ -792,7 +777,7 @@
         }
     }
 
-    protected Drawable getFaviconDrawable(Bitmap icon) {
+    public Drawable getFaviconDrawable(Bitmap icon) {
         Drawable[] array = new Drawable[3];
         array[0] = new PaintDrawable(Color.BLACK);
         PaintDrawable p = new PaintDrawable(Color.WHITE);
@@ -818,13 +803,12 @@
      * as if the user is editing the URL bar or if the page is loading
      */
     public void suggestHideTitleBar() {
-        if (!isLoading() && !isEditingUrl()) {
+        if (!isLoading() && !isEditingUrl() && !mTitleBar.wantsToBeVisible()) {
             hideTitleBar();
         }
     }
 
-    private void showTitleBarForDuration() {
-        mHandler.removeMessages(MSG_HIDE_TITLEBAR);
+    protected void showTitleBarForDuration() {
         showTitleBar();
         Message msg = Message.obtain(mHandler, MSG_HIDE_TITLEBAR);
         mHandler.sendMessageDelayed(msg, HIDE_TITLEBAR_DELAY);
@@ -842,7 +826,6 @@
                     && !isTitleBarShowing()
                     && web.getVisibleTitleHeight() == 0
                     && event.getY() > (mInitialY + mTitlebarScrollTriggerSlop)) {
-                mHandler.removeMessages(MSG_HIDE_TITLEBAR);
                 showTitleBar();
             } else if (event.getY() < mInitialY) {
                 mInitialY = event.getY();
diff --git a/src/com/android/browser/BookmarkUtils.java b/src/com/android/browser/BookmarkUtils.java
index 23765f4..2e96613 100644
--- a/src/com/android/browser/BookmarkUtils.java
+++ b/src/com/android/browser/BookmarkUtils.java
@@ -22,7 +22,6 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -38,7 +37,6 @@
 import android.graphics.drawable.PaintDrawable;
 import android.net.Uri;
 import android.os.Message;
-import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.BrowserContract;
 
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index bd3b872..190ff9d 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -67,7 +67,7 @@
      *  @param parent ID of the parent folder.
      */
     /* package */ static void addBookmark(Context context, boolean showToast, String url,
-            String name, Bitmap thumbnail, boolean retainIcon, long parent) {
+            String name, Bitmap thumbnail, long parent) {
         // Want to append to the beginning of the list
         ContentValues values = new ContentValues();
         try {
@@ -82,9 +82,6 @@
         } catch (IllegalStateException e) {
             Log.e(LOGTAG, "addBookmark", e);
         }
-        if (retainIcon) {
-            WebIconDatabase.getInstance().retainIconForPageUrl(url);
-        }
         if (showToast) {
             Toast.makeText(context, R.string.added_to_bookmarks,
                     Toast.LENGTH_LONG).show();
diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index c4412e2..76aaa0b 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -17,13 +17,9 @@
 package com.android.browser;
 
 import android.app.Application;
-import android.content.Intent;
-import android.os.AsyncTask;
 import android.util.Log;
 import android.webkit.CookieSyncManager;
 
-import dalvik.system.VMRuntime;
-
 public class Browser extends Application { 
 
     private final static String LOGTAG = "browser";
@@ -37,15 +33,6 @@
     // Set to true to enable extra debug logging.
     final static boolean LOGD_ENABLED = true;
 
-    /**
-     * Specifies a heap utilization ratio that works better
-     * for the browser than the default ratio does.
-     */
-    private final static float TARGET_HEAP_UTILIZATION = 0.75f;
-
-    public Browser() {
-    }
-
     @Override
     public void onCreate() {
         super.onCreate();
@@ -53,20 +40,11 @@
         if (LOGV_ENABLED)
             Log.v(LOGTAG, "Browser.onCreate: this=" + this);
 
-        // Fix AsyncTask to use multiple threads
-        AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-        // Fix heap utilization for better heap size characteristics.
-        VMRuntime.getRuntime().setTargetHeapUtilization(
-                TARGET_HEAP_UTILIZATION);
         // create CookieSyncManager with current Context
         CookieSyncManager.createInstance(this);
         BrowserSettings.initialize(getApplicationContext());
         Preloader.initialize(getApplicationContext());
     }
 
-    static Intent createBrowserViewIntent() {
-        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
-        return intent;
-    }
 }
 
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 1e1698b..0df2e94 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -16,15 +16,10 @@
 
 package com.android.browser;
 
-import com.google.common.annotations.VisibleForTesting;
-
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.PixelFormat;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.ActionMode;
@@ -38,6 +33,8 @@
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
 
+import com.google.common.annotations.VisibleForTesting;
+
 public class BrowserActivity extends Activity {
 
     public static final String ACTION_SHOW_BOOKMARKS = "show_bookmarks";
@@ -60,6 +57,13 @@
         }
         super.onCreate(icicle);
 
+        // 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())) {
+            finish();
+            return;
+        }
+
         BrowserSettings settings = BrowserSettings.getInstance();
 
         // render the browser in OpenGL
@@ -72,19 +76,13 @@
             this.getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
         }
 
-        // 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())) {
-            finish();
-            return;
-        }
-
-        if (((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE))
-                .isEnabled()) {
+        AccessibilityManager accessibilityManager = (AccessibilityManager)
+                getSystemService(ACCESSIBILITY_SERVICE);
+        if (accessibilityManager != null && accessibilityManager.isEnabled()) {
             setDefaultKeyMode(DEFAULT_KEYS_DISABLE);
         }
 
-        mController = new Controller(this);
+        mController = new Controller(this, icicle == null);
         boolean xlarge = isTablet(this);
         if (xlarge) {
             mUi = new XLargeUi(this, mController);
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index b6a50da..241eb1d 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -26,8 +26,6 @@
 import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -36,7 +34,6 @@
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.provider.BrowserContract;
 import android.provider.BrowserContract.Accounts;
 import android.provider.BrowserContract.ChromeSyncColumns;
@@ -53,7 +50,6 @@
 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;
@@ -67,7 +63,7 @@
     // Return true if handled
     boolean onBookmarkSelected(Cursor c, boolean isFolder);
     // Return true if handled
-    boolean onOpenInNewWindow(Cursor c);
+    boolean onOpenInNewWindow(String... urls);
 }
 
 /**
@@ -75,7 +71,7 @@
  */
 public class BrowserBookmarksPage extends Fragment implements View.OnCreateContextMenuListener,
         LoaderManager.LoaderCallbacks<Cursor>, BreadCrumbView.Controller,
-        OnMenuItemClickListener, OnChildClickListener {
+        OnChildClickListener {
 
     public static class ExtraDragState {
         public int childPosition;
@@ -94,7 +90,6 @@
 
     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;
@@ -102,7 +97,6 @@
     boolean mDisableNewWindow;
     boolean mEnableContextMenu = true;
     View mEmptyView;
-    int mCurrentView;
     View mHeader;
     HashMap<Integer, BrowserBookmarksAdapter> mBookmarkAdapters = new HashMap<Integer, BrowserBookmarksAdapter>();
     BookmarkDragHandler mDragHandler;
@@ -142,7 +136,7 @@
                 args.putString(ACCOUNT_NAME, accountName);
                 args.putString(ACCOUNT_TYPE, accountType);
                 BrowserBookmarksAdapter adapter = new BrowserBookmarksAdapter(
-                        getActivity(), mCurrentView);
+                        getActivity(), VIEW_THUMBNAILS);
                 mBookmarkAdapters.put(id, adapter);
                 mGrid.addAccount(accountName, adapter);
                 lm.restartLoader(id, args, this);
@@ -252,11 +246,6 @@
     };
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        inflater.inflate(R.menu.bookmark, menu);
-    }
-
-    @Override
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
         BookmarkContextMenuInfo info = (BookmarkContextMenuInfo) menuInfo;
         BrowserBookmarksAdapter adapter = getChildAdapter(info.groupPosition);
@@ -319,13 +308,8 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        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);
     }
 
@@ -350,13 +334,6 @@
         return mRoot;
     }
 
-     private int getDefaultView() {
-        if (BrowserActivity.isTablet(getActivity())) {
-            return VIEW_THUMBNAILS;
-        }
-        return VIEW_LIST;
-    }
-
     @Override
     public void onDestroyView() {
         super.onDestroyView();
@@ -425,7 +402,7 @@
                 long id = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
                 new OpenAllInTabsTask(id).execute();
             } else {
-                mCallbacks.onOpenInNewWindow(c);
+                mCallbacks.onOpenInNewWindow(BrowserBookmarksPage.getUrl(c));
             }
         }
     }
@@ -447,10 +424,13 @@
 
         @Override
         protected void onPostExecute(Cursor result) {
-            if (mCallbacks != null) {
+            if (mCallbacks != null && result.getCount() > 0) {
+                String[] urls = new String[result.getCount()];
+                int i = 0;
                 while (result.moveToNext()) {
-                    mCallbacks.onOpenInNewWindow(result);
+                    urls[i++] = BrowserBookmarksPage.getUrl(result);
                 }
+                mCallbacks.onOpenInNewWindow(urls);
             }
         }
 
@@ -505,19 +485,6 @@
     }
 
     @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-        case R.id.thumbnail_view:
-            selectView(VIEW_THUMBNAILS);
-            return true;
-        case R.id.list_view:
-            selectView(VIEW_LIST);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         Resources res = getActivity().getResources();
@@ -527,28 +494,6 @@
         getActivity().invalidateOptionsMenu();
     }
 
-    @Override
-    public void onPrepareOptionsMenu(Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-        menu.findItem(R.id.list_view).setVisible(mCurrentView != VIEW_LIST);
-        menu.findItem(R.id.thumbnail_view).setVisible(mCurrentView != VIEW_THUMBNAILS);
-    }
-
-    void selectView(int view) {
-        if (view == mCurrentView) {
-            return;
-        }
-        mCurrentView = view;
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-        Editor edit = prefs.edit();
-        edit.putInt(PREF_SELECTED_VIEW, mCurrentView);
-        edit.apply();
-        if (mEmptyView.getVisibility() == View.VISIBLE) {
-            return;
-        }
-        mGrid.selectView(mCurrentView);
-    }
-
     /**
      * BreadCrumb controller callback
      */
@@ -575,19 +520,6 @@
         loader.forceLoad();
     }
 
-    @Override
-    public boolean onMenuItemClick(MenuItem item) {
-        switch (item.getItemId()) {
-        case R.id.list_view:
-            selectView(BrowserBookmarksPage.VIEW_LIST);
-            return true;
-        case R.id.thumbnail_view:
-            selectView(BrowserBookmarksPage.VIEW_THUMBNAILS);
-            return true;
-        }
-        return false;
-    }
-
     public boolean onBackPressed() {
         return false;
     }
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index bcc33e2..942a8fd 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -29,18 +29,14 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Loader;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.database.DataSetObserver;
-import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.BrowserContract;
 import android.provider.BrowserContract.Combined;
@@ -53,7 +49,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewStub;
-import android.webkit.WebIconDatabase.IconListener;
 import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.AdapterView.AdapterContextMenuInfo;
@@ -66,6 +61,8 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.android.browser.CombinedBookmarkHistoryView.CombinedBookmarksCallbacks;
+
 /**
  * Activity for displaying the browser's history, divided into
  * days of viewing.
@@ -76,7 +73,7 @@
     static final int LOADER_HISTORY = 1;
     static final int LOADER_MOST_VISITED = 2;
 
-    BookmarksHistoryCallbacks mCallbacks;
+    CombinedBookmarksCallbacks mCallback;
     HistoryAdapter mAdapter;
     HistoryChildWrapper mChildWrapper;
     boolean mDisableNewWindow;
@@ -87,16 +84,6 @@
     private FragmentBreadCrumbs mFragmentBreadCrumbs;
     private ExpandableListView mHistoryList;
 
-    // Implementation of WebIconDatabase.IconListener
-    class IconReceiver implements IconListener {
-        @Override
-        public void onReceivedIcon(String url, Bitmap icon) {
-            mAdapter.notifyDataSetChanged();
-        }
-    }
-
-    // Instance of IconReceiver
-    final IconReceiver mIconReceiver = new IconReceiver();
     private View mRoot;
 
     static interface HistoryQuery {
@@ -125,17 +112,15 @@
         cm.setText(text);
     }
 
-    static BrowserHistoryPage newInstance(BookmarksHistoryCallbacks cb, Bundle args) {
+    static BrowserHistoryPage newInstance(CombinedBookmarksCallbacks cb, Bundle args) {
         BrowserHistoryPage bhp = new BrowserHistoryPage();
-        bhp.mCallbacks = cb;
+        bhp.mCallback = cb;
         bhp.setArguments(args);
         return bhp;
     }
 
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
-                getActivity());
         Uri.Builder combinedBuilder = Combined.CONTENT_URI.buildUpon();
 
         switch (id) {
@@ -241,8 +226,6 @@
         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;
     }
 
@@ -289,77 +272,69 @@
         @Override
         public void onItemClick(
                 AdapterView<?> parent, View view, int position, long id) {
-            mCallbacks.onUrlSelected(((HistoryItem) view).getUrl(), false);
+            mCallback.openUrl(((HistoryItem) view).getUrl());
         }
     };
 
     @Override
     public boolean onChildClick(ExpandableListView parent, View view,
             int groupPosition, int childPosition, long id) {
-        mCallbacks.onUrlSelected(((HistoryItem) view).getUrl(), false);
+        mCallback.openUrl(((HistoryItem) view).getUrl());
         return true;
     }
 
     @Override
     public void onDestroy() {
         super.onDestroy();
-        CombinedBookmarkHistoryView.getIconListenerSet().removeListener(mIconReceiver);
         getLoaderManager().destroyLoader(LOADER_HISTORY);
         getLoaderManager().destroyLoader(LOADER_MOST_VISITED);
     }
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        super.onCreateOptionsMenu(menu, inflater);
         inflater.inflate(R.menu.history, menu);
     }
 
+    void promptToClearHistory() {
+        final ContentResolver resolver = getActivity().getContentResolver();
+        final ClearHistoryTask clear = new ClearHistoryTask(resolver);
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.clear)
+                .setMessage(R.string.pref_privacy_clear_history_dlg)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setNegativeButton(R.string.cancel, null)
+                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+                     @Override
+                     public void onClick(DialogInterface dialog, int which) {
+                         if (which == DialogInterface.BUTTON_POSITIVE) {
+                             clear.start();
+                         }
+                     }
+                });
+        final Dialog dialog = builder.create();
+        dialog.show();
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.clear_history_menu_id:
-                final ContentResolver resolver = getActivity().getContentResolver();
-                final ClearHistoryTask clear = new ClearHistoryTask(resolver, mCallbacks);
-                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
-                        .setTitle(R.string.clear)
-                        .setMessage(R.string.pref_privacy_clear_history_dlg)
-                        .setIcon(android.R.drawable.ic_dialog_alert)
-                        .setNegativeButton(R.string.cancel, null)
-                        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
-                             @Override
-                             public void onClick(DialogInterface dialog, int which) {
-                                 if (which == DialogInterface.BUTTON_POSITIVE) {
-                                     clear.execute();
-                                 }
-                             }
-                        });
-                final Dialog dialog = builder.create();
-                dialog.show();
-                return true;
-
-            default:
-                break;
+        if (item.getItemId() == R.id.clear_history_menu_id) {
+            promptToClearHistory();
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
 
-    static class ClearHistoryTask extends AsyncTask<Void, Void, Void> {
+    static class ClearHistoryTask extends Thread {
         ContentResolver mResolver;
-        BookmarksHistoryCallbacks mCallbacks;
 
-        public ClearHistoryTask(ContentResolver resolver,
-                BookmarksHistoryCallbacks callbacks) {
+        public ClearHistoryTask(ContentResolver resolver) {
             mResolver = resolver;
-            mCallbacks = callbacks;
-        }
-        @Override
-        protected Void doInBackground(Void... params) {
-            Browser.clearHistory(mResolver);
-            return null;
         }
 
         @Override
-        protected void onPostExecute(Void result) {
-            mCallbacks.onRemoveParentChildRelationships();
+        public void run() {
+            Browser.clearHistory(mResolver);
         }
     }
 
@@ -427,10 +402,10 @@
         Activity activity = getActivity();
         switch (item.getItemId()) {
             case R.id.open_context_menu_id:
-                mCallbacks.onUrlSelected(url, false);
+                mCallback.openUrl(url);
                 return true;
             case R.id.new_window_context_menu_id:
-                mCallbacks.onUrlSelected(url, true);
+                mCallback.openInNewTab(url);
                 return true;
             case R.id.save_to_bookmarks_menu_id:
                 if (historyItem.isBookmark()) {
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 22fc3c3..8461d30 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -102,10 +102,17 @@
     private WebStorageSizeManager mWebStorageSizeManager;
     private AutofillHandler mAutofillHandler;
     private WeakHashMap<WebSettings, String> mCustomUserAgents;
+    private static boolean sInitialized = false;
+
+    // Cached values
+    private int mPageCacheCapacity = 1;
+    private String mAppCachePath;
 
     // Cached settings
     private SearchEngine mSearchEngine;
 
+    private static String sFactoryResetUrl;
+
     public static void initialize(final Context context) {
         sInstance = new BrowserSettings(context);
     }
@@ -117,43 +124,12 @@
     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();
+        BackgroundHandler.execute(mSetup);
     }
 
     public void setController(Controller controller) {
@@ -173,6 +149,73 @@
         }
     }
 
+    private Runnable mSetup = new Runnable() {
+
+        @Override
+        public void run() {
+            // 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) {
+                mPageCacheCapacity = 5;
+            }
+            mWebStorageSizeManager = new WebStorageSizeManager(mContext,
+                    new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()),
+                    new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath()));
+            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();
+            }
+
+            sFactoryResetUrl = mContext.getResources().getString(R.string.homepage_base);
+            if (sFactoryResetUrl.indexOf("{CID}") != -1) {
+                sFactoryResetUrl = sFactoryResetUrl.replace("{CID}",
+                    BrowserProvider.getClientId(mContext.getContentResolver()));
+            }
+
+            synchronized (BrowserSettings.class) {
+                sInitialized = true;
+                BrowserSettings.class.notifyAll();
+            }
+        }
+    };
+
+    private static void requireInitialization() {
+        synchronized (BrowserSettings.class) {
+            while (!sInitialized) {
+                try {
+                    BrowserSettings.class.wait();
+                } catch (InterruptedException e) {
+                }
+            }
+        }
+    }
+
     /**
      * Syncs all the settings that have a Preference UI
      */
@@ -205,6 +248,9 @@
         } else {
             settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
         }
+
+        settings.setProperty("gfxInvertedScreen",
+                useInvertedRendering() ? "true" : "false");
     }
 
     /**
@@ -233,7 +279,7 @@
         settings.setWorkersEnabled(true);  // This only affects V8.
 
         // HTML5 configuration parametersettings.
-        settings.setAppCacheMaxSize(mWebStorageSizeManager.getAppCacheMaxSize());
+        settings.setAppCacheMaxSize(getWebStorageSizeManager().getAppCacheMaxSize());
         settings.setAppCachePath(getAppCachePath());
         settings.setDatabasePath(mContext.getDir("databases", 0).getPath());
         settings.setGeolocationDatabasePath(mContext.getDir("geolocation", 0).getPath());
@@ -276,16 +322,16 @@
             if (mController.getUi() != null) {
                 mController.getUi().setFullscreen(useFullscreen());
             }
+        } else if (PREF_ENABLE_QUICK_CONTROLS.equals(key)) {
+            if (mController.getUi() != null) {
+                mController.getUi().setUseQuickControls(sharedPreferences.getBoolean(key, false));
+            }
         }
     }
 
     public 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;
+        requireInitialization();
+        return sFactoryResetUrl;
     }
 
     public LayoutAlgorithm getLayoutAlgorithm() {
@@ -307,25 +353,21 @@
         return layoutAlgorithm;
     }
 
-    // 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;
-        }
+        requireInitialization();
+        return mPageCacheCapacity;
     }
 
     public WebStorageSizeManager getWebStorageSizeManager() {
+        requireInitialization();
         return mWebStorageSizeManager;
     }
 
-    // TODO: Cache
     private String getAppCachePath() {
-        return mContext.getDir("appcache", 0).getPath();
+        if (mAppCachePath == null) {
+            mAppCachePath = mContext.getDir("appcache", 0).getPath();
+        }
+        return mAppCachePath;
     }
 
     private void updateSearchEngine(boolean force) {
@@ -359,6 +401,7 @@
     }
 
     public boolean isDebugEnabled() {
+        requireInitialization();
         return mPrefs.getBoolean(PREF_DEBUG_MENU, false);
     }
 
@@ -469,6 +512,10 @@
         return (percent - 100) / TEXT_ZOOM_STEP + TEXT_ZOOM_START_VAL;
     }
 
+    public SharedPreferences getPreferences() {
+        return mPrefs;
+    }
+
     // -----------------------------
     // getter/setters for accessibility_preferences.xml
     // -----------------------------
@@ -489,6 +536,7 @@
     }
 
     public int getTextZoom() {
+        requireInitialization();
         int textZoom = mPrefs.getInt(PREF_TEXT_ZOOM, 10);
         return getAdjustedTextZoom(textZoom);
     }
@@ -670,6 +718,10 @@
         return mPrefs.getBoolean(PREF_FULLSCREEN, false);
     }
 
+    public boolean useInvertedRendering() {
+        return mPrefs.getBoolean(PREF_INVERTED, false);
+    }
+
     // -----------------------------
     // getter/setters for privacy_security_preferences.xml
     // -----------------------------
diff --git a/src/com/android/browser/BrowserSnapshotPage.java b/src/com/android/browser/BrowserSnapshotPage.java
index 72da15b..0953879 100644
--- a/src/com/android/browser/BrowserSnapshotPage.java
+++ b/src/com/android/browser/BrowserSnapshotPage.java
@@ -43,6 +43,7 @@
 import android.widget.ResourceCursorAdapter;
 import android.widget.TextView;
 
+import com.android.browser.CombinedBookmarkHistoryView.CombinedBookmarksCallbacks;
 import com.android.browser.provider.SnapshotProvider.Snapshots;
 
 import java.text.DateFormat;
@@ -73,12 +74,12 @@
     GridView mGrid;
     View mEmpty;
     SnapshotAdapter mAdapter;
-    UiController mUiController;
+    CombinedBookmarksCallbacks mCallback;
 
-    public static BrowserSnapshotPage newInstance(UiController uiController,
+    public static BrowserSnapshotPage newInstance(CombinedBookmarksCallbacks cb,
             Bundle extras) {
         BrowserSnapshotPage instance = new BrowserSnapshotPage();
-        instance.mUiController = uiController;
+        instance.mCallback = cb;
         instance.setArguments(extras);
         return instance;
     }
@@ -98,8 +99,10 @@
     public void onDestroyView() {
         super.onDestroyView();
         getLoaderManager().destroyLoader(LOADER_SNAPSHOTS);
-        mAdapter.changeCursor(null);
-        mAdapter = null;
+        if (mAdapter != null) {
+            mAdapter.changeCursor(null);
+            mAdapter = null;
+        }
     }
 
     void setupGrid(LayoutInflater inflater) {
@@ -192,8 +195,7 @@
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position,
             long id) {
-        mUiController.removeComboView();
-        mUiController.createNewSnapshotTab(id, true);
+        mCallback.openSnapshot(id);
     }
 
     private static class SnapshotAdapter extends ResourceCursorAdapter {
@@ -216,8 +218,10 @@
             TextView title = (TextView) view.findViewById(R.id.title);
             title.setText(cursor.getString(SNAPSHOT_TITLE));
             TextView size = (TextView) view.findViewById(R.id.size);
-            int stateLen = cursor.getInt(SNAPSHOT_VIEWSTATE_LENGTH);
-            size.setText(String.format("%.2fMB", stateLen / 1024f / 1024f));
+            if (size != null) {
+                int stateLen = cursor.getInt(SNAPSHOT_VIEWSTATE_LENGTH);
+                size.setText(String.format("%.2fMB", stateLen / 1024f / 1024f));
+            }
             long timestamp = cursor.getLong(SNAPSHOT_DATE_CREATED);
             TextView date = (TextView) view.findViewById(R.id.date);
             DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 80f4a53..38bbf90 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -17,14 +17,10 @@
 package com.android.browser;
 
 import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.util.AttributeSet;
 import android.view.View;
 import android.webkit.WebView;
 
-import com.android.browser.NavTabView.WebProxyView;
-
 import java.util.Map;
 
 /**
@@ -33,10 +29,7 @@
 public class BrowserWebView extends WebView {
 
     private boolean mBackgroundRemoved = false;
-    private TitleBarBase mTitleBar;
-    private int mCaptureSize;
-    private Bitmap mCapture;
-    private WebProxyView mProxyView;
+    private TitleBar mTitleBar;
 
     /**
      * @param context
@@ -57,7 +50,6 @@
     public BrowserWebView(
             Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
         super(context, attrs, defStyle, privateBrowsing);
-        init();
     }
 
     /**
@@ -66,7 +58,6 @@
      */
     public BrowserWebView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        init();
     }
 
     /**
@@ -74,25 +65,6 @@
      */
     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
@@ -107,25 +79,13 @@
     @Override
     public void setEmbeddedTitleBar(final View title) {
         super.setEmbeddedTitleBar(title);
-        mTitleBar = (TitleBarBase) title;
+        mTitleBar = (TitleBar) title;
     }
 
     public boolean hasTitleBar() {
         return (mTitleBar != null);
     }
 
-    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);
@@ -139,13 +99,4 @@
         }
     }
 
-    @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/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java
index 184314e..7903709 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryView.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryView.java
@@ -17,31 +17,22 @@
 package com.android.browser;
 
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
 import android.app.ActionBar;
 import android.app.ActionBar.Tab;
 import android.app.ActionBar.TabListener;
 import android.app.Activity;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.content.Intent;
 import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
-import android.os.AsyncTask;
 import android.os.Bundle;
-import android.provider.Browser;
 import android.view.Gravity;
 import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
-import android.webkit.WebIconDatabase;
 import android.webkit.WebIconDatabase.IconListener;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
@@ -51,13 +42,8 @@
 import java.util.HashMap;
 import java.util.Vector;
 
-interface BookmarksHistoryCallbacks {
-    public void onUrlSelected(String url, boolean newWindow);
-    public void onRemoveParentChildRelationships();
-}
-
 public class CombinedBookmarkHistoryView extends LinearLayout
-        implements OnTouchListener, TabListener, OptionsMenuHandler {
+        implements OnTouchListener, TabListener {
 
     final static String STARTING_FRAGMENT = "fragment";
 
@@ -66,7 +52,6 @@
     final static int FRAGMENT_ID_HISTORY = 2;
     final static int FRAGMENT_ID_SNAPSHOTS = 3;
 
-    private UiController mUiController;
     private Activity mActivity;
     private ActionBar mActionBar;
 
@@ -82,7 +67,14 @@
     BrowserBookmarksPage mBookmarks;
     BrowserHistoryPage mHistory;
     BrowserSnapshotPage mSnapshots;
-    boolean mIsAnimating;
+    CombinedBookmarksCallbacks mCallback;
+
+    public static interface CombinedBookmarksCallbacks {
+        void openUrl(String url);
+        void openInNewTab(String... urls);
+        void openSnapshot(long id);
+        void close();
+    }
 
     static class IconListenerSet implements IconListener {
         // Used to store favicons as we get them from the database
@@ -121,19 +113,18 @@
         return sIconListenerSet;
     }
 
-    public CombinedBookmarkHistoryView(Activity activity, UiController controller,
-            ComboViews startingView, Bundle extras) {
+    public CombinedBookmarkHistoryView(Activity activity,
+            CombinedBookmarksCallbacks cb, ComboViews startingView,
+            Bundle extras) {
         super(activity);
-        mUiController = controller;
         mActivity = activity;
         mExtras = extras;
         mActionBar = mActivity.getActionBar();
+        mCallback = cb;
 
         View v = LayoutInflater.from(activity).inflate(R.layout.bookmarks_history, this);
         v.setOnTouchListener(this);
 
-//        setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
-
         mBookmarksHeader = new FrameLayout(mActivity);
         mBookmarksHeader.setLayoutParams(new FrameLayout.LayoutParams(
                 FrameLayout.LayoutParams.WRAP_CONTENT,
@@ -143,40 +134,7 @@
         // Start up the default fragment
         initFragments(mExtras);
 
-        // XXX: Must do this before launching the AsyncTask to avoid a
-        // potential crash if the icon database has not been created.
-        WebIconDatabase.getInstance();
-
-        // Do this every time the view is created in case a new favicon was
-        // added to the webkit db.
-        (new AsyncTask<Void, Void, Void>() {
-            @Override
-            public Void doInBackground(Void... v) {
-                Browser.requestAllIcons(mActivity.getContentResolver(),
-                        Browser.BookmarkColumns.FAVICON + " is NULL", getIconListenerSet());
-                return null;
-            }
-        }).execute();
-
-        mIsAnimating = true;
-        setAlpha(0f);
-        Resources res = mActivity.getResources();
-        animate().alpha(1f)
-                .setDuration(res.getInteger(R.integer.comboViewFadeInDuration))
-                .setListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                super.onAnimationEnd(animation);
-                mIsAnimating = false;
-                FragmentManager fm = mActivity.getFragmentManager();
-                FragmentTransaction ft = fm.beginTransaction();
-                onTabSelected(mActionBar.getSelectedTab(), ft);
-                ft.commit();
-            }
-        });
-
         setupActionBar(startingView);
-        mUiController.registerOptionsMenuHandler(this);
     }
 
     void setupActionBar(ComboViews startingView) {
@@ -224,15 +182,15 @@
             // Warning, ugly hack below
             // This is done because history uses orientation-specific padding
             FragmentManager fm = mActivity.getFragmentManager();
-            mHistory = BrowserHistoryPage.newInstance(mUiController, mHistory.getArguments());
+            mHistory = BrowserHistoryPage.newInstance(mCallback, mHistory.getArguments());
             fm.beginTransaction().replace(R.id.fragment, mHistory).commit();
         }
     }
 
     private BookmarksPageCallbacks mBookmarkCallbackWrapper = new BookmarksPageCallbacks() {
         @Override
-        public boolean onOpenInNewWindow(Cursor c) {
-            mUiController.onUrlSelected(BrowserBookmarksPage.getUrl(c), true);
+        public boolean onOpenInNewWindow(String... urls) {
+            mCallback.openInNewTab(urls);
             return true;
         }
 
@@ -241,7 +199,7 @@
             if (isFolder) {
                 return false;
             }
-            mUiController.onUrlSelected(BrowserBookmarksPage.getUrl(c), false);
+            mCallback.openUrl(BrowserBookmarksPage.getUrl(c));
             return true;
         }
     };
@@ -249,8 +207,8 @@
     private void initFragments(Bundle extras) {
         mBookmarks = BrowserBookmarksPage.newInstance(mBookmarkCallbackWrapper,
                 extras, mBookmarksHeader);
-        mHistory = BrowserHistoryPage.newInstance(mUiController, extras);
-        mSnapshots = BrowserSnapshotPage.newInstance(mUiController, extras);
+        mHistory = BrowserHistoryPage.newInstance(mCallback, extras);
+        mSnapshots = BrowserSnapshotPage.newInstance(mCallback, extras);
     }
 
     private void loadFragment(int id, FragmentTransaction ft) {
@@ -296,16 +254,12 @@
             }
             mCurrentFragment = INVALID_ID;
         }
-        mUiController.unregisterOptionsMenuHandler(this);
     }
 
     /**
      * callback for back key presses
      */
     boolean onBackPressed() {
-        if (mIsAnimating) {
-            return true;
-        }
         if (mCurrentFragment == FRAGMENT_ID_BOOKMARKS) {
             return mBookmarks.onBackPressed();
         }
@@ -328,13 +282,6 @@
 
     @Override
     public void onTabSelected(Tab tab, FragmentTransaction ft) {
-        if (mIsAnimating) {
-            // We delay set while animating (smooth animations)
-            // TODO: Signal to the fragment in advance so that it can start
-            // loading its data asynchronously
-            return;
-        }
-
         if (tab == mTabBookmarks) {
             loadFragment(FRAGMENT_ID_BOOKMARKS, ft);
         } else if (tab == mTabHistory) {
@@ -349,44 +296,4 @@
         // Ignore
     }
 
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        // Handled by fragment
-        return false;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        // Handled by fragment
-        return false;
-    }
-
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-        case android.R.id.home:
-            mUiController.getUi().onBackKey();
-            return true;
-        case R.id.go_home:
-            BrowserSettings settings = BrowserSettings.getInstance();
-            mUiController.onUrlSelected(settings.getHomePage(), false);
-            return true;
-        case R.id.add_bookmark:
-            mUiController.bookmarkCurrentPage(false);
-            return true;
-        case R.id.preferences_menu_id:
-            Intent intent = new Intent(mActivity, BrowserPreferencesPage.class);
-            intent.putExtra(BrowserPreferencesPage.CURRENT_PAGE,
-                    mUiController.getCurrentTopWebView().getUrl());
-            mActivity.startActivityForResult(intent, Controller.PREFERENCES_PAGE);
-            return true;
-        }
-
-        switch (mCurrentFragment) {
-        case FRAGMENT_ID_BOOKMARKS:
-            return mBookmarks.onOptionsItemSelected(item);
-        case FRAGMENT_ID_HISTORY:
-            return mHistory.onOptionsItemSelected(item);
-        }
-        return false;
-    }
 }
diff --git a/src/com/android/browser/ComboViewActivity.java b/src/com/android/browser/ComboViewActivity.java
new file mode 100644
index 0000000..cea1884
--- /dev/null
+++ b/src/com/android/browser/ComboViewActivity.java
@@ -0,0 +1,110 @@
+/*
+ * 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.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.browser.CombinedBookmarkHistoryView.CombinedBookmarksCallbacks;
+import com.android.browser.UI.ComboViews;
+
+public class ComboViewActivity extends Activity implements CombinedBookmarksCallbacks {
+
+    public static final String EXTRA_COMBO_ARGS = "combo_args";
+    public static final String EXTRA_INITIAL_VIEW = "initial_view";
+
+    public static final String EXTRA_OPEN_SNAPSHOT = "snapshot_id";
+    public static final String EXTRA_OPEN_ALL = "open_all";
+    public static final String EXTRA_CURRENT_URL = "url";
+    public static final String EXTRA_BOOKMARK_PAGE = "create_bookmark";
+
+    private CombinedBookmarkHistoryView mComboView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setResult(RESULT_CANCELED);
+        Bundle extras = getIntent().getExtras();
+        Bundle args = extras.getBundle(EXTRA_COMBO_ARGS);
+        String svStr = extras.getString(EXTRA_INITIAL_VIEW, null);
+        ComboViews startingView = svStr != null
+                ? ComboViews.valueOf(svStr)
+                : ComboViews.Bookmarks;
+        mComboView = new CombinedBookmarkHistoryView(this, this,
+                startingView, args);
+        setContentView(mComboView);
+    }
+
+    @Override
+    public void openUrl(String url) {
+        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+        setResult(RESULT_OK, i);
+        finish();
+    }
+
+    @Override
+    public void openInNewTab(String... urls) {
+        Intent i = new Intent();
+        i.putExtra(EXTRA_OPEN_ALL, urls);
+        setResult(RESULT_OK, i);
+        finish();
+    }
+
+    @Override
+    public void close() {
+        finish();
+    }
+
+    @Override
+    public void openSnapshot(long id) {
+        Intent i = new Intent();
+        i.putExtra(EXTRA_OPEN_SNAPSHOT, id);
+        setResult(RESULT_OK, i);
+        finish();
+    }
+
+    @Override
+    public void onBackPressed() {
+        if (!mComboView.onBackPressed()) {
+            super.onBackPressed();
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.combined, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            finish();
+            return true;
+        } else if (item.getItemId() == R.id.preferences_menu_id) {
+            String url = getIntent().getStringExtra(EXTRA_CURRENT_URL);
+            Intent intent = new Intent(this, BrowserPreferencesPage.class);
+            intent.putExtra(BrowserPreferencesPage.CURRENT_PAGE, url);
+            startActivityForResult(intent, Controller.PREFERENCES_PAGE);
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+}
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 09c7cd1..92682c1 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -30,6 +30,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
+import android.content.res.TypedArray;
 import android.database.ContentObserver;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
@@ -67,7 +68,6 @@
 import android.webkit.CookieManager;
 import android.webkit.CookieSyncManager;
 import android.webkit.HttpAuthHandler;
-import android.webkit.SearchBox;
 import android.webkit.SslErrorHandler;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
@@ -119,6 +119,7 @@
     private static final int EMPTY_MENU = -1;
 
     // activity requestCode
+    final static int COMBO_VIEW = 1;
     final static int PREFERENCES_PAGE = 3;
     final static int FILE_SELECTED = 4;
     final static int AUTOFILL_SETUP = 5;
@@ -146,7 +147,6 @@
     private TabControl mTabControl;
     private BrowserSettings mSettings;
     private WebViewFactory mFactory;
-    private OptionsMenuHandler mOptionsMenuHandler = null;
 
     private WakeLock mWakeLock;
 
@@ -206,9 +206,10 @@
     // Checks to see when the bookmarks database has changed, and updates the
     // Tabs' notion of whether they represent bookmarked sites.
     private ContentObserver mBookmarksObserver;
-    private DataController mDataController;
     private CrashRecoveryHandler mCrashRecoveryHandler;
 
+    private boolean mSimulateActionBarOverlayMode;
+
     private static class ClearThumbnails extends AsyncTask<File, Void, Void> {
         @Override
         public Void doInBackground(File... files) {
@@ -223,13 +224,15 @@
         }
     }
 
-    public Controller(Activity browser) {
+    public Controller(Activity browser, boolean preloadCrashState) {
         mActivity = browser;
         mSettings = BrowserSettings.getInstance();
-        mDataController = DataController.getInstance(mActivity);
         mTabControl = new TabControl(this);
         mSettings.setController(this);
         mCrashRecoveryHandler = CrashRecoveryHandler.initialize(this);
+        if (preloadCrashState) {
+            mCrashRecoveryHandler.preloadCrashState();
+        }
         mFactory = new BrowserWebViewFactory(browser);
 
         mUrlHandler = new UrlHandler(this);
@@ -237,10 +240,6 @@
         mPageDialogsHandler = new PageDialogsHandler(mActivity, this);
         mNfcHandler = new NfcHandler(mActivity, this);
 
-        PowerManager pm = (PowerManager) mActivity
-                .getSystemService(Context.POWER_SERVICE);
-        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
-
         startHandler();
         mBookmarksObserver = new ContentObserver(mHandler) {
             @Override
@@ -261,7 +260,8 @@
                 new SystemAllowGeolocationOrigins(mActivity.getApplicationContext());
         mSystemAllowGeolocationOrigins.start();
 
-        retainIconsOnStartup();
+        openIconDatabase();
+        mSimulateActionBarOverlayMode = !BrowserActivity.isTablet(mActivity);
     }
 
     void start(final Bundle icicle, final Intent intent) {
@@ -418,43 +418,17 @@
         return mTabControl.getTabs();
     }
 
-    // Open the icon database and retain all the icons for visited sites.
-    // This is done on a background thread so as not to stall startup.
-    private void retainIconsOnStartup() {
-        // WebIconDatabase needs to be retrieved on the UI thread so that if
-        // it has not been created successfully yet the Handler is started on the
-        // UI thread.
-        new RetainIconsOnStartupTask(WebIconDatabase.getInstance()).execute();
-    }
+    // Open the icon database.
+    private void openIconDatabase() {
+        // We have to call getInstance on the UI thread
+        final WebIconDatabase instance = WebIconDatabase.getInstance();
+        BackgroundHandler.execute(new Runnable() {
 
-    private class RetainIconsOnStartupTask extends AsyncTask<Void, Void, Void> {
-        private WebIconDatabase mDb;
-
-        public RetainIconsOnStartupTask(WebIconDatabase db) {
-            mDb = db;
-        }
-
-        @Override
-        protected Void doInBackground(Void... unused) {
-            mDb.open(mActivity.getDir("icons", 0).getPath());
-            Cursor c = null;
-            try {
-                c = Browser.getAllBookmarks(mActivity.getContentResolver());
-                if (c.moveToFirst()) {
-                    int urlIndex = c.getColumnIndex(Browser.BookmarkColumns.URL);
-                    do {
-                        String url = c.getString(urlIndex);
-                        mDb.retainIconForPageUrl(url);
-                    } while (c.moveToNext());
-                }
-            } catch (IllegalStateException e) {
-                Log.e(LOGTAG, "retainIconsOnStartup", e);
-            } finally {
-                if (c != null) c.close();
+            @Override
+            public void run() {
+                instance.open(mActivity.getDir("icons", 0).getPath());
             }
-
-            return null;
-        }
+        });
     }
 
     private void startHandler() {
@@ -515,7 +489,7 @@
                         break;
 
                     case RELEASE_WAKELOCK:
-                        if (mWakeLock.isHeld()) {
+                        if (mWakeLock != null && mWakeLock.isHeld()) {
                             mWakeLock.release();
                             // if we reach here, Browser should be still in the
                             // background loading after WAKELOCK_TIMEOUT (5-min).
@@ -536,7 +510,7 @@
 
     }
 
-
+    @Override
     public Tab getCurrentTab() {
         return mTabControl.getCurrentTab();
     }
@@ -619,6 +593,11 @@
         if (tab != null) {
             tab.pause();
             if (!pauseWebViewTimers(tab)) {
+                if (mWakeLock == null) {
+                    PowerManager pm = (PowerManager) mActivity
+                            .getSystemService(Context.POWER_SERVICE);
+                    mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
+                }
                 mWakeLock.acquire();
                 mHandler.sendMessageDelayed(mHandler
                         .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
@@ -641,7 +620,7 @@
         // focused view XXX has no id".
 
         // Save all the tabs
-        mTabControl.saveState(outState, saveImages);
+        mTabControl.saveState(outState, false);
         if (!outState.isEmpty()) {
             // Save time so that we know how old incognito tabs (if any) are.
             outState.putSerializable("lastActiveDate", Calendar.getInstance());
@@ -659,10 +638,7 @@
             current.resume();
             resumeWebViewTimers(current);
         }
-        if (mWakeLock.isHeld()) {
-            mHandler.removeMessages(RELEASE_WAKELOCK);
-            mWakeLock.release();
-        }
+        releaseWakeLock();
 
         mUi.onResume();
         mNetworkHandler.onResume();
@@ -670,6 +646,13 @@
         WebView.enablePlatformNotifications();
     }
 
+    private void releaseWakeLock() {
+        if (mWakeLock != null && mWakeLock.isHeld()) {
+            mHandler.removeMessages(RELEASE_WAKELOCK);
+            mWakeLock.release();
+        }
+    }
+
     /**
      * resume all WebView timers using the WebView instance of the given tab
      * @param tab guaranteed non-null
@@ -679,9 +662,7 @@
         if ((!mActivityPaused && !inLoad) || (mActivityPaused && inLoad)) {
             CookieSyncManager.getInstance().startSync();
             WebView w = tab.getWebView();
-            if (w != null) {
-                w.resumeTimers();
-            }
+            WebViewTimersControl.getInstance().onBrowserActivityResume(w);
         }
     }
 
@@ -695,10 +676,7 @@
             return true;
         } else if (!tab.inPageLoad()) {
             CookieSyncManager.getInstance().stopSync();
-            WebView w = getCurrentWebView();
-            if (w != null) {
-                w.pauseTimers();
-            }
+            WebViewTimersControl.getInstance().onBrowserActivityPause(getCurrentWebView());
             return true;
         }
         return false;
@@ -819,22 +797,22 @@
         if (!tab.isPrivateBrowsingEnabled()
                 && !TextUtils.isEmpty(tab.getUrl())
                 && !tab.isSnapshot()) {
+            // Only update the bookmark screenshot if the user did not
+            // cancel the load early and there is not already
+            // a pending update for the tab.
             if (tab.inForeground() && !didUserStopLoading()
                     || !tab.inForeground()) {
-                // Only update the bookmark screenshot if the user did not
-                // cancel the load early.
-                mHandler.sendMessageDelayed(mHandler.obtainMessage(
-                        UPDATE_BOOKMARK_THUMBNAIL, 0, 0, tab),
-                        500);
+                if (!mHandler.hasMessages(UPDATE_BOOKMARK_THUMBNAIL, tab)) {
+                    mHandler.sendMessageDelayed(mHandler.obtainMessage(
+                            UPDATE_BOOKMARK_THUMBNAIL, 0, 0, tab),
+                            500);
+                }
             }
         }
         // pause the WebView timer and release the wake lock if it is finished
         // while BrowserActivity is in pause state.
         if (mActivityPaused && pauseWebViewTimers(tab)) {
-            if (mWakeLock.isHeld()) {
-                mHandler.removeMessages(RELEASE_WAKELOCK);
-                mWakeLock.release();
-            }
+            releaseWakeLock();
         }
 
         // Performance probe
@@ -889,7 +867,7 @@
         }
         // Update the title in the history database if not in private browsing mode
         if (!tab.isPrivateBrowsingEnabled()) {
-            mDataController.updateHistoryTitle(pageUrl, title);
+            DataController.getInstance(mActivity).updateHistoryTitle(pageUrl, title);
         }
     }
 
@@ -936,8 +914,7 @@
                 || url.regionMatches(true, 0, "about:", 0, 6)) {
             return;
         }
-        mDataController.updateVisitedHistory(url);
-        WebIconDatabase.getInstance().retainIconForPageUrl(url);
+        DataController.getInstance(mActivity).updateVisitedHistory(url);
         if (!mActivityPaused) {
             // Since we clear the state in onPause, don't backup the current
             // state if we are already paused
@@ -1155,6 +1132,30 @@
                     mAutoFillSetupMessage = null;
                 }
                 break;
+            case COMBO_VIEW:
+                if (intent == null || resultCode != Activity.RESULT_OK) {
+                    break;
+                }
+                if (Intent.ACTION_VIEW.equals(intent.getAction())) {
+                    Tab t = getCurrentTab();
+                    Uri uri = intent.getData();
+                    loadUrl(t, uri.toString());
+                } else if (intent.hasExtra(ComboViewActivity.EXTRA_OPEN_ALL)) {
+                    String[] urls = intent.getStringArrayExtra(
+                            ComboViewActivity.EXTRA_OPEN_ALL);
+                    Tab parent = getCurrentTab();
+                    for (String url : urls) {
+                        parent = openTab(url, parent,
+                                !mSettings.openInBackground(), true);
+                    }
+                } else if (intent.hasExtra(ComboViewActivity.EXTRA_OPEN_SNAPSHOT)) {
+                    long id = intent.getLongExtra(
+                            ComboViewActivity.EXTRA_OPEN_SNAPSHOT, -1);
+                    if (id >= 0) {
+                        createNewSnapshotTab(id, true);
+                    }
+                }
+                break;
             default:
                 break;
         }
@@ -1192,56 +1193,6 @@
         mTabControl.removeParentChildRelationShips();
     }
 
-    /**
-     * callback from ComboPage when bookmark/history selection
-     */
-    @Override
-    public void onUrlSelected(String url, boolean newTab) {
-        removeComboView();
-        if (!TextUtils.isEmpty(url)) {
-            if (newTab) {
-                final Tab parent = mTabControl.getCurrentTab();
-                openTab(url,
-                        (parent != null) && parent.isPrivateBrowsingEnabled(),
-                        !mSettings.openInBackground(),
-                        true);
-            } else {
-                final Tab currentTab = mTabControl.getCurrentTab();
-                loadUrl(currentTab, url);
-            }
-        }
-    }
-
-    /**
-     * dismiss the ComboPage
-     */
-    @Override
-    public void removeComboView() {
-        mUi.hideComboView();
-    }
-
-    // active tabs page handling
-
-    protected void showActiveTabsPage() {
-        mMenuState = EMPTY_MENU;
-        mUi.showActiveTabsPage();
-    }
-
-    /**
-     * Remove the active tabs page.
-     * @param needToAttach If true, the active tabs page did not attach a tab
-     *                     to the content view, so we need to do that here.
-     */
-    @Override
-    public void removeActiveTabsPage(boolean needToAttach) {
-        mMenuState = R.id.MAIN_MENU;
-        mUi.removeActiveTabsPage();
-        if (needToAttach) {
-            setActiveTab(mTabControl.getCurrentTab());
-        }
-        getCurrentTopWebView().requestFocus();
-    }
-
     // key handling
     protected void onBackKey() {
         if (!mUi.onBackKey()) {
@@ -1266,10 +1217,6 @@
     // TODO: maybe put into separate handler
 
     protected boolean onCreateOptionsMenu(Menu menu) {
-        if (mOptionsMenuHandler != null) {
-            return mOptionsMenuHandler.onCreateOptionsMenu(menu);
-        }
-
         if (mMenuState == EMPTY_MENU) {
             return false;
         }
@@ -1284,7 +1231,7 @@
 
     protected void onCreateContextMenu(ContextMenu menu, View v,
             ContextMenuInfo menuInfo) {
-        if (v instanceof TitleBarBase) {
+        if (v instanceof TitleBar) {
             return;
         }
         if (!(v instanceof WebView)) {
@@ -1462,9 +1409,6 @@
     }
 
     boolean onPrepareOptionsMenu(Menu menu) {
-        if (mOptionsMenuHandler != null) {
-            return mOptionsMenuHandler.onPrepareOptionsMenu(menu);
-        }
         // Note: setVisible will decide whether an item is visible; while
         // setEnabled() will decide whether an item is enabled, which also means
         // whether the matching shortcut key will function.
@@ -1482,65 +1426,62 @@
                     menu.setGroupEnabled(R.id.MAIN_MENU, true);
                     menu.setGroupEnabled(R.id.MAIN_SHORTCUT_MENU, true);
                 }
-                final WebView w = getCurrentTopWebView();
-                boolean canGoBack = false;
-                boolean canGoForward = false;
-                boolean isHome = false;
-                if (w != null) {
-                    canGoBack = w.canGoBack();
-                    canGoForward = w.canGoForward();
-                    isHome = mSettings.getHomePage().equals(w.getUrl());
-                }
-                final MenuItem back = menu.findItem(R.id.back_menu_id);
-                back.setEnabled(canGoBack);
-
-                final MenuItem home = menu.findItem(R.id.homepage_menu_id);
-                home.setEnabled(!isHome);
-
-                final MenuItem forward = menu.findItem(R.id.forward_menu_id);
-                forward.setEnabled(canGoForward);
-
-                // decide whether to show the share link option
-                PackageManager pm = mActivity.getPackageManager();
-                Intent send = new Intent(Intent.ACTION_SEND);
-                send.setType("text/plain");
-                ResolveInfo ri = pm.resolveActivity(send,
-                        PackageManager.MATCH_DEFAULT_ONLY);
-                menu.findItem(R.id.share_page_menu_id).setVisible(ri != null);
-
-                boolean isNavDump = mSettings.enableNavDump();
-                final MenuItem nav = menu.findItem(R.id.dump_nav_menu_id);
-                nav.setVisible(isNavDump);
-                nav.setEnabled(isNavDump);
-
-                boolean showDebugSettings = mSettings.isDebugEnabled();
-                final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
-                counter.setVisible(showDebugSettings);
-                counter.setEnabled(showDebugSettings);
-
-                final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
-                newtab.setEnabled(getTabControl().canCreateNewTab());
-
-                MenuItem saveSnapshot = menu.findItem(R.id.save_snapshot_menu_id);
-                Tab tab = getCurrentTab();
-                saveSnapshot.setVisible(tab != null && !tab.isSnapshot());
+                updateMenuState(getCurrentTab(), menu);
                 break;
         }
         mCurrentMenuState = mMenuState;
         return mUi.onPrepareOptionsMenu(menu);
     }
 
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (mOptionsMenuHandler != null &&
-                mOptionsMenuHandler.onOptionsItemSelected(item)) {
-            return true;
+    @Override
+    public void updateMenuState(Tab tab, Menu menu) {
+        boolean canGoBack = false;
+        boolean canGoForward = false;
+        boolean isHome = false;
+        if (tab != null) {
+            canGoBack = tab.canGoBack();
+            canGoForward = tab.canGoForward();
+            isHome = mSettings.getHomePage().equals(tab.getUrl());
+        }
+        final MenuItem back = menu.findItem(R.id.back_menu_id);
+        back.setEnabled(canGoBack);
+
+        final MenuItem home = menu.findItem(R.id.homepage_menu_id);
+        home.setEnabled(!isHome);
+
+        final MenuItem forward = menu.findItem(R.id.forward_menu_id);
+        forward.setEnabled(canGoForward);
+
+        final MenuItem source = menu.findItem(mInLoad ? R.id.stop_menu_id : R.id.reload_menu_id);
+        final MenuItem dest = menu.findItem(R.id.stop_reload_menu_id);
+        if (source != null && dest != null) {
+            dest.setTitle(source.getTitle());
+            dest.setIcon(source.getIcon());
         }
 
-        if (item.getGroupId() != R.id.CONTEXT_MENU) {
-            // menu remains active, so ensure comboview is dismissed
-            // if main menu option is selected
-            removeComboView();
-        }
+        // decide whether to show the share link option
+        PackageManager pm = mActivity.getPackageManager();
+        Intent send = new Intent(Intent.ACTION_SEND);
+        send.setType("text/plain");
+        ResolveInfo ri = pm.resolveActivity(send,
+                PackageManager.MATCH_DEFAULT_ONLY);
+        menu.findItem(R.id.share_page_menu_id).setVisible(ri != null);
+
+        boolean isNavDump = mSettings.enableNavDump();
+        final MenuItem nav = menu.findItem(R.id.dump_nav_menu_id);
+        nav.setVisible(isNavDump);
+        nav.setEnabled(isNavDump);
+
+        boolean showDebugSettings = mSettings.isDebugEnabled();
+        final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
+        counter.setVisible(showDebugSettings);
+        counter.setEnabled(showDebugSettings);
+
+        MenuItem saveSnapshot = menu.findItem(R.id.save_snapshot_menu_id);
+        saveSnapshot.setVisible(tab != null && !tab.isSnapshot());
+    }
+
+    public boolean onOptionsItemSelected(MenuItem item) {
         if (null == getCurrentTopWebView()) {
             return false;
         }
@@ -1551,6 +1492,10 @@
             // won't get onKeyUp for MENU. So it is important to reset it here.
             mMenuIsDown = false;
         }
+        if (mUi.onOptionsItemSelected(item)) {
+            // ui callback handled it
+            return true;
+        }
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.new_tab_menu_id:
@@ -1569,12 +1514,8 @@
                 bookmarksOrHistoryPicker(false);
                 break;
 
-            case R.id.active_tabs_menu_id:
-                showActiveTabsPage();
-                break;
-
             case R.id.add_bookmark_menu_id:
-                bookmarkCurrentPage(false);
+                mActivity.startActivity(createBookmarkCurrentPageIntent(false));
                 break;
 
             case R.id.stop_reload_menu_id:
@@ -1586,11 +1527,11 @@
                 break;
 
             case R.id.back_menu_id:
-                getCurrentTopWebView().goBack();
+                getCurrentTab().goBack();
                 break;
 
             case R.id.forward_menu_id:
-                getCurrentTopWebView().goForward();
+                getCurrentTab().goForward();
                 break;
 
             case R.id.close_menu_id:
@@ -1831,11 +1772,28 @@
         mActivity.startActivity(intent);
     }
 
+    int getActionModeHeight() {
+        TypedArray actionBarSizeTypedArray = mActivity.obtainStyledAttributes(
+                    new int[] { android.R.attr.actionBarSize });
+        int size = (int) actionBarSizeTypedArray.getDimension(0, 0f);
+        actionBarSizeTypedArray.recycle();
+        return size;
+    }
+
     // action mode
 
     void onActionModeStarted(ActionMode mode) {
         mUi.onActionModeStarted(mode);
         mActionMode = mode;
+        if (mSimulateActionBarOverlayMode) {
+            WebView web = getCurrentWebView();
+            // Simulate overlay mode by scrolling the webview the amount it will be
+            // pushed down. Actual overlay mode doesn't work for us as otherwise
+            // the CAB will, well, overlay the content, which breaks things like
+            // find on page.
+            int scrollBy = getActionModeHeight();
+            web.scrollBy(0, scrollBy);
+        }
     }
 
     /*
@@ -1864,6 +1822,11 @@
         if (!isInCustomActionMode()) return;
         mUi.onActionModeFinished(mInLoad);
         mActionMode = null;
+        if (mSimulateActionBarOverlayMode) {
+            WebView web = getCurrentWebView();
+            int scrollBy = getActionModeHeight();
+            web.scrollBy(0, -scrollBy);
+        }
     }
 
     boolean isInLoad() {
@@ -1875,13 +1838,13 @@
     /**
      * add the current page as a bookmark to the given folder id
      * @param folderId use -1 for the default folder
-     * @param canBeAnEdit If true, check to see whether the site is already
+     * @param editExisting If true, check to see whether the site is already
      *          bookmarked, and if it is, edit that bookmark.  If false, and
      *          the site is already bookmarked, do not attempt to edit the
      *          existing bookmark.
      */
     @Override
-    public void bookmarkCurrentPage(boolean canBeAnEdit) {
+    public Intent createBookmarkCurrentPageIntent(boolean editExisting) {
         Intent i = new Intent(mActivity,
                 AddBookmarkPage.class);
         WebView w = getCurrentTopWebView();
@@ -1900,13 +1863,13 @@
                 createScreenshot(w, getDesiredThumbnailWidth(mActivity),
                 getDesiredThumbnailHeight(mActivity)));
         i.putExtra(BrowserContract.Bookmarks.FAVICON, w.getFavicon());
-        if (canBeAnEdit) {
+        if (editExisting) {
             i.putExtra(AddBookmarkPage.CHECK_FOR_DUPE, true);
         }
         // Put the dialog at the upper right of the screen, covering the
         // star on the title bar.
         i.putExtra("gravity", Gravity.RIGHT | Gravity.TOP);
-        mActivity.startActivity(i);
+        return i;
     }
 
     // file chooser
@@ -2300,8 +2263,6 @@
      */
     @Override
     public boolean switchToTab(Tab tab) {
-        // hide combo view if open
-        removeComboView();
         Tab currentTab = mTabControl.getCurrentTab();
         if (tab == null || tab == currentTab) {
             return false;
@@ -2312,9 +2273,8 @@
 
     @Override
     public void closeCurrentTab() {
-        // hide combo view if open
-        removeComboView();
         if (mTabControl.getTabCount() == 1) {
+            mCrashRecoveryHandler.clearState();
             mActivity.finish();
             return;
         }
@@ -2339,8 +2299,6 @@
      */
     @Override
     public void closeTab(Tab tab) {
-        // hide combo view if open
-        removeComboView();
         removeTab(tab);
     }
 
@@ -2396,12 +2354,11 @@
 
     @Override
     public void onUserCanceledSsl(Tab tab) {
-        WebView web = tab.getWebView();
         // TODO: Figure out the "right" behavior
-        if (web.canGoBack()) {
-            web.goBack();
+        if (tab.canGoBack()) {
+            tab.goBack();
         } else {
-            web.loadUrl(mSettings.getHomePage());
+            tab.loadUrl(mSettings.getHomePage(), null);
         }
     }
 
@@ -2418,9 +2375,8 @@
             mActivity.moveTaskToBack(true);
             return;
         }
-        WebView w = current.getWebView();
-        if (w.canGoBack()) {
-            w.goBack();
+        if (current.canGoBack()) {
+            current.goBack();
         } else {
             // Check to see if we are closing a window that was created by
             // another window. If so, we switch back to that window.
@@ -2512,14 +2468,6 @@
         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)
@@ -2529,7 +2477,8 @@
         }
 
         WebView webView = getCurrentTopWebView();
-        if (webView == null) return false;
+        Tab tab = getCurrentTab();
+        if (webView == null || tab == null) return false;
 
         boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON);
         boolean shift = event.hasModifiers(KeyEvent.META_SHIFT_ON);
@@ -2561,15 +2510,19 @@
                 if (!noModifiers) break;
                 event.startTracking();
                 return true;
+            case KeyEvent.KEYCODE_FORWARD:
+                if (!noModifiers) break;
+                tab.goForward();
+                return true;
             case KeyEvent.KEYCODE_DPAD_LEFT:
                 if (ctrl) {
-                    webView.goBack();
+                    tab.goBack();
                     return true;
                 }
                 break;
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (ctrl) {
-                    webView.goForward();
+                    tab.goForward();
                     return true;
                 }
                 break;
@@ -2677,18 +2630,6 @@
     }
 
     @Override
-    public void registerOptionsMenuHandler(OptionsMenuHandler handler) {
-        mOptionsMenuHandler = handler;
-    }
-
-    @Override
-    public void unregisterOptionsMenuHandler(OptionsMenuHandler handler) {
-        if (mOptionsMenuHandler == handler) {
-            mOptionsMenuHandler = null;
-        }
-    }
-
-    @Override
     public void registerDropdownChangeListener(DropdownChangeListener d) {
         mUi.registerDropdownChangeListener(d);
     }
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index ca538bd..02636c0 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -25,9 +25,8 @@
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.HandlerThread;
+import android.os.Message;
 import android.os.Parcel;
-import android.os.Process;
 import android.util.Log;
 
 import java.io.ByteArrayOutputStream;
@@ -35,6 +34,7 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
 
 public class CrashRecoveryHandler {
 
@@ -51,11 +51,20 @@
      */
     private static final long PROMPT_INTERVAL = 30 * 60 * 1000; // 30 minutes
 
+    private static final int MSG_WRITE_STATE = 1;
+    private static final int MSG_CLEAR_STATE = 2;
+    private static final int MSG_PRELOAD_STATE = 3;
+
     private static CrashRecoveryHandler sInstance;
 
     private Controller mController;
+    private Context mContext;
     private Handler mForegroundHandler;
     private Handler mBackgroundHandler;
+    private boolean mIsPreloading = false;
+    private boolean mDidPreload = false;
+    private boolean mShouldPrompt = false;
+    private Bundle mRecoveryState = null;
 
     public static CrashRecoveryHandler initialize(Controller controller) {
         if (sInstance == null) {
@@ -72,11 +81,46 @@
 
     private CrashRecoveryHandler(Controller controller) {
         mController = controller;
+        mContext = mController.getActivity().getApplicationContext();
         mForegroundHandler = new Handler();
-        HandlerThread thread = new HandlerThread(LOGTAG,
-                Process.THREAD_PRIORITY_BACKGROUND);
-        thread.start();
-        mBackgroundHandler = new Handler(thread.getLooper());
+        mBackgroundHandler = new Handler(BackgroundHandler.getLooper()) {
+
+            @Override
+            public void handleMessage(Message msg) {
+                switch (msg.what) {
+                case MSG_WRITE_STATE:
+                    Parcel p = Parcel.obtain();
+                    try {
+                        Bundle state = (Bundle) msg.obj;
+                        state.writeToParcel(p, 0);
+                        File stateFile = new File(mContext.getCacheDir(), STATE_FILE);
+                        FileOutputStream fout = new FileOutputStream(stateFile);
+                        fout.write(p.marshall());
+                        fout.close();
+                    } catch (Throwable e) {
+                        Log.i(LOGTAG, "Failed to save persistent state", e);
+                    } finally {
+                        p.recycle();
+                    }
+                    break;
+                case MSG_CLEAR_STATE:
+                    File state = new File(mContext.getCacheDir(), STATE_FILE);
+                    if (state.exists()) {
+                        state.delete();
+                    }
+                    break;
+                case MSG_PRELOAD_STATE:
+                    mRecoveryState = loadCrashState();
+                    mShouldPrompt = shouldPrompt();
+                    synchronized (CrashRecoveryHandler.this) {
+                        mIsPreloading = false;
+                        mDidPreload = true;
+                        CrashRecoveryHandler.this.notifyAll();
+                    }
+                    break;
+                }
+            }
+        };
     }
 
     public void backupState() {
@@ -90,9 +134,8 @@
             try {
                 final Bundle state = new Bundle();
                 mController.onSaveInstanceState(state, false);
-                Context context = mController.getActivity()
-                        .getApplicationContext();
-                mBackgroundHandler.post(new WriteState(context, state));
+                Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state)
+                        .sendToTarget();
                 // Remove any queued up saves
                 mForegroundHandler.removeCallbacks(mCreateState);
             } catch (Throwable t) {
@@ -103,42 +146,8 @@
 
     };
 
-    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);
-                File state = new File(mContext.getCacheDir(), STATE_FILE);
-                FileOutputStream fout = new FileOutputStream(state);
-                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) {
-        File state = new File(context.getCacheDir(), STATE_FILE);
-        if (state.exists()) {
-            state.delete();
-        }
+    public void clearState() {
+        mBackgroundHandler.sendEmptyMessage(MSG_CLEAR_STATE);
     }
 
     public void promptToRecover(final Bundle state, final Intent intent) {
@@ -162,7 +171,7 @@
                 .setOnCancelListener(new OnCancelListener() {
                     @Override
                     public void onCancel(DialogInterface dialog) {
-                        clearState(mController.getActivity());
+                        clearState();
                         mController.doStart(null, intent);
                     }
                 })
@@ -170,13 +179,9 @@
     }
 
     private boolean shouldPrompt() {
-        // STOPSHIP TODO: Remove once b/4971724 is fixed
-        if (true) return false;
-        Context context = mController.getActivity();
-        SharedPreferences prefs = context.getSharedPreferences(
+        SharedPreferences prefs = mContext.getSharedPreferences(
                 RECOVERY_PREFERENCES, Context.MODE_PRIVATE);
-        long lastRecovered = prefs.getLong(KEY_LAST_RECOVERED,
-                System.currentTimeMillis());
+        long lastRecovered = prefs.getLong(KEY_LAST_RECOVERED, 0);
         long timeSinceLastRecover = System.currentTimeMillis() - lastRecovered;
         if (timeSinceLastRecover > PROMPT_INTERVAL) {
             return false;
@@ -185,21 +190,20 @@
     }
 
     private void updateLastRecovered() {
-        Context context = mController.getActivity();
-        SharedPreferences prefs = context.getSharedPreferences(
+        SharedPreferences prefs = mContext.getSharedPreferences(
                 RECOVERY_PREFERENCES, Context.MODE_PRIVATE);
         prefs.edit()
             .putLong(KEY_LAST_RECOVERED, System.currentTimeMillis())
-            .commit();
+            .apply();
     }
 
-    public void startRecovery(Intent intent) {
+    private Bundle loadCrashState() {
         Bundle state = null;
         Parcel parcel = Parcel.obtain();
+        FileInputStream fin = null;
         try {
-            Context context = mController.getActivity();
-            File stateFile = new File(context.getCacheDir(), STATE_FILE);
-            FileInputStream fin = new FileInputStream(stateFile);
+            File stateFile = new File(mContext.getCacheDir(), STATE_FILE);
+            fin = new FileInputStream(stateFile);
             ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
             byte[] buffer = new byte[BUFFER_SIZE];
             int read;
@@ -210,21 +214,53 @@
             parcel.unmarshall(data, 0, data.length);
             parcel.setDataPosition(0);
             state = parcel.readBundle();
-            if (shouldPrompt()) {
-                promptToRecover(state, intent);
-                return;
-            } else {
-                updateLastRecovered();
-            }
         } catch (FileNotFoundException e) {
             // No state to recover
             state = null;
-        } catch (Exception e) {
+        } catch (Throwable e) {
             Log.w(LOGTAG, "Failed to recover state!", e);
             state = null;
         } finally {
             parcel.recycle();
+            if (fin != null) {
+                try {
+                    fin.close();
+                } catch (IOException e) { }
+            }
         }
-        mController.doStart(state, intent);
+        return state;
     }
+
+    public void startRecovery(Intent intent) {
+        synchronized (CrashRecoveryHandler.this) {
+            while (mIsPreloading) {
+                try {
+                    CrashRecoveryHandler.this.wait();
+                } catch (InterruptedException e) {}
+            }
+        }
+        if (!mDidPreload) {
+            mRecoveryState = loadCrashState();
+            mShouldPrompt = shouldPrompt();
+        }
+        if (mShouldPrompt) {
+            promptToRecover(mRecoveryState, intent);
+            return;
+        } else {
+            updateLastRecovered();
+        }
+        mController.doStart(mRecoveryState, intent);
+        mRecoveryState = null;
+    }
+
+    public void preloadCrashState() {
+        synchronized (CrashRecoveryHandler.this) {
+            if (mIsPreloading) {
+                return;
+            }
+            mIsPreloading = true;
+        }
+        mBackgroundHandler.sendEmptyMessage(MSG_PRELOAD_STATE);
+    }
+
 }
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index c7d1924..cd96346 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -16,12 +16,6 @@
 
 package com.android.browser;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.util.EntityUtils;
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
@@ -35,13 +29,17 @@
 import android.net.Uri;
 import android.net.http.AndroidHttpClient;
 import android.os.Bundle;
-import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.util.Log;
 import android.webkit.CookieSyncManager;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.util.EntityUtils;
+
 public class GoogleAccountLogin implements Runnable,
         AccountManagerCallback<Bundle>, OnCancelListener {
 
@@ -56,14 +54,11 @@
     // Google account type
     private static final String GOOGLE = "com.google";
     // Last auto login time
-    private static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
+    public static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
 
     private final Activity mActivity;
     private final Account mAccount;
     private final WebView mWebView;
-    // Does not matter if this is initialized in a non-ui thread.
-    // Dialog.dismiss() will post to the right handler.
-    private final Handler mHandler = new Handler();
     private Runnable mRunnable;
     private ProgressDialog mProgressDialog;
 
@@ -84,7 +79,7 @@
         // resumeWebViewTimers. So to avoid problems with timers not running, we
         // duplicate the work here using the off-screen WebView.
         CookieSyncManager.getInstance().startSync();
-        mWebView.resumeTimers();
+        WebViewTimersControl.getInstance().onBrowserActivityResume(mWebView);
 
         mWebView.setWebViewClient(new WebViewClient() {
             @Override
@@ -93,15 +88,13 @@
             }
             @Override
             public void onPageFinished(WebView view, String url) {
-                saveLoginTime();
                 done();
             }
         });
     }
 
     private void saveLoginTime() {
-        Editor ed = PreferenceManager.
-                getDefaultSharedPreferences(mActivity).edit();
+        Editor ed = BrowserSettings.getInstance().getPreferences().edit();
         ed.putLong(PREF_AUTOLOGIN_TIME, System.currentTimeMillis());
         ed.apply();
     }
@@ -228,7 +221,7 @@
     public static void startLoginIfNeeded(Activity activity,
             Runnable runnable) {
         // Already logged in?
-        if (isLoggedIn(activity)) {
+        if (isLoggedIn()) {
             runnable.run();
             return;
         }
@@ -246,6 +239,7 @@
     }
 
     private void startLogin() {
+        saveLoginTime();
         mProgressDialog = ProgressDialog.show(mActivity,
                 mActivity.getString(R.string.pref_autologin_title),
                 mActivity.getString(R.string.pref_autologin_progress,
@@ -263,11 +257,10 @@
     }
 
     // Checks if we already did pre-login.
-    private static boolean isLoggedIn(Context ctx) {
+    private static boolean isLoggedIn() {
         // See if we last logged in less than a week ago.
-        long lastLogin = PreferenceManager.
-                getDefaultSharedPreferences(ctx).
-                getLong(PREF_AUTOLOGIN_TIME, -1);
+        long lastLogin = BrowserSettings.getInstance().getPreferences()
+                .getLong(PREF_AUTOLOGIN_TIME, -1);
         if (lastLogin == -1) {
             return false;
         }
@@ -281,16 +274,7 @@
             Log.d(LOGTAG, "Finished login attempt for " + mAccount.name);
             mActivity.runOnUiThread(mRunnable);
 
-            // Post a delayed message to dismiss the dialog in order to avoid a
-            // flash of the progress dialog.
-                mHandler.postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mProgressDialog.isShowing()) {
-                            mProgressDialog.dismiss();
-                        }
-                    }
-                }, 2000);
+            mProgressDialog.dismiss();
             mRunnable = null;
             mActivity.runOnUiThread(new Runnable() {
                 @Override
diff --git a/src/com/android/browser/InstantSearchEngine.java b/src/com/android/browser/InstantSearchEngine.java
index e2e9c8a..4dd83fa 100644
--- a/src/com/android/browser/InstantSearchEngine.java
+++ b/src/com/android/browser/InstantSearchEngine.java
@@ -85,10 +85,10 @@
 
         mSearchBox.setQuery(query);
         mSearchBox.setVerbatim(true);
-        mSearchBox.onsubmit();
+        mSearchBox.onsubmit(null);
     }
 
-    private final class BrowserSearchboxListener implements SearchBox.SearchBoxListener {
+    private final class BrowserSearchboxListener extends SearchBox.SearchBoxListener {
         /*
          * The maximum number of out of order suggestions we accept
          * before giving up the wait.
@@ -199,7 +199,7 @@
             return false;
         }
 
-        final String currentUrl = current.getUrl();
+        final String currentUrl = mController.getCurrentTab().getUrl();
 
         if (currentUrl != null) {
             Uri uri = Uri.parse(currentUrl);
@@ -253,7 +253,7 @@
         }
 
         mSearchBox.setDimensions(0, 0, 0, mHeight);
-        mSearchBox.onresize();
+        mSearchBox.onresize(null);
 
         if (TextUtils.isEmpty(query)) {
             // To force the SRP to render an empty (no results) page.
@@ -262,7 +262,7 @@
             mSearchBox.setVerbatim(false);
         }
         mSearchBox.setQuery(query);
-        mSearchBox.onchange();
+        mSearchBox.onchange(null);
 
         // Don't bother waiting for suggestions for an empty query. We still
         // set the query so that the SRP clears itself.
@@ -327,7 +327,7 @@
             mHeight = rescaledHeight;
             if (mSearchBox != null) {
                 mSearchBox.setDimensions(0, 0, 0, rescaledHeight);
-                mSearchBox.onresize();
+                mSearchBox.onresize(null);
             }
         }
     }
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index 1a72a23..6ed5b72 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -88,7 +88,6 @@
             mController.bookmarksOrHistoryPicker(false);
             return;
         }
-        mController.removeComboView();
 
         // In case the SearchDialog is open.
         ((SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE))
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index a841989..ee20535 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -23,25 +23,22 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewConfiguration;
 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.PopupMenu;
+import android.widget.PopupMenu.OnMenuItemClickListener;
 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 {
+public class NavScreen extends RelativeLayout
+        implements OnClickListener, OnMenuItemClickListener {
 
     UiController mUiController;
     PhoneUi mUi;
@@ -61,12 +58,9 @@
     ImageButton mCloseTab;
 
     NavTabGallery mScroller;
-    float mTabAspect = 0.66f;
-    int mTabWidth;
-    int mTabHeight;
     TabAdapter mAdapter;
-    ListPopupWindow mPopup;
     int mOrientation;
+    boolean mNeedsMenu;
 
     public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
         super(activity);
@@ -82,32 +76,24 @@
     }
 
     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));
+        PopupMenu popup = new PopupMenu(mContext, mMore);
+        Menu menu = popup.getMenu();
+        popup.getMenuInflater().inflate(R.menu.browser, menu);
+        mUiController.updateMenuState(mScroller.getSelectedItem(), menu);
+        popup.setOnMenuItemClickListener(this);
         popup.show();
-        mPopup = popup;
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        mUi.hideNavScreen(false);
+        return mUiController.onOptionsItemSelected(item);
     }
 
     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) {
@@ -138,6 +124,10 @@
                 ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
         // update state for active tab
         mScroller.setSelection(mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
+        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
+        if (!mNeedsMenu) {
+            mMore.setVisibility(View.GONE);
+        }
     }
 
     @Override
@@ -146,7 +136,7 @@
         if (web != null) {
             if (mForward == v) {
                 mUi.hideNavScreen(true);
-                web.goForward();
+                mTab.goForward();
             } else if (mRefresh == v) {
                 mUi.hideNavScreen(true);
                 web.reload();
@@ -173,8 +163,11 @@
 
     private void onCloseTab(Tab tab) {
         if (tab != null) {
-            switchToSelected();
-            mUiController.closeCurrentTab();
+            if (tab == mUiController.getCurrentTab()) {
+                mUiController.closeCurrentTab();
+            } else {
+                mUiController.closeTab(tab);
+            }
             mAdapter.notifyDataSetChanged();
         }
     }
@@ -213,25 +206,6 @@
         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;
@@ -260,14 +234,15 @@
         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()));
+                        onCloseTab(tab);
                     } else if (tabview.isTitle(v)) {
+                        mScroller.setSelection(position);
+                        switchToSelected();
                         mUi.getTitleBar().setSkipTitleBarAnimations(true);
                         close(false);
                         mUi.editUrl(false);
@@ -275,7 +250,6 @@
                     } else if (tabview.isWebView(v)) {
                         mScroller.setSelection(position);
                         close();
-
                     }
                 }
             });
@@ -284,64 +258,4 @@
 
     }
 
-    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/NavTabView.java b/src/com/android/browser/NavTabView.java
index 7b547b8..23ad2f1 100644
--- a/src/com/android/browser/NavTabView.java
+++ b/src/com/android/browser/NavTabView.java
@@ -17,16 +17,10 @@
 package com.android.browser;
 
 import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
+import android.graphics.Bitmap;
 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;
@@ -34,12 +28,10 @@
 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 ImageView mImage;
     private OnClickListener mClickListener;
     private boolean mHighlighted;
 
@@ -60,10 +52,10 @@
 
     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);
+        mImage = (ImageView) findViewById(R.id.tab_view);
     }
 
     protected boolean isClose(View v) {
@@ -75,7 +67,7 @@
     }
 
     protected boolean isWebView(View v) {
-        return v == mProxy;
+        return v == mImage;
     }
 
     protected void setHighlighted(boolean highlighted) {
@@ -103,12 +95,9 @@
     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);
+        Bitmap image = tab.getScreenshot();
+        if (image != null) {
+            mImage.setImageBitmap(image);
         }
     }
 
@@ -121,52 +110,9 @@
         mClickListener = listener;
         mTitleBar.setOnClickListener(mClickListener);
         mClose.setOnClickListener(mClickListener);
-        if (mProxy != null) {
-            mProxy.setOnClickListener(mClickListener);
+        if (mImage != null) {
+            mImage.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/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
new file mode 100644
index 0000000..a059352
--- /dev/null
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -0,0 +1,333 @@
+/*
+ * 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.SearchManager;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.speech.RecognizerResultsIntent;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.webkit.WebView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnMenuItemClickListener;
+
+import com.android.browser.UI.DropdownChangeListener;
+import com.android.browser.UrlInputView.UrlInputListener;
+import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
+
+import java.util.List;
+
+public class NavigationBarBase extends LinearLayout implements OnClickListener,
+        OnMenuItemClickListener, UrlInputListener, OnFocusChangeListener,
+        TextChangeWatcher {
+
+    protected BaseUi mBaseUi;
+    protected TitleBar mTitleBar;
+    protected UiController mUiController;
+    protected UrlInputView mUrlInput;
+    protected boolean mInVoiceMode = false;
+
+    private ImageView mFavicon;
+    private ImageView mLockIcon;
+    private View mUaSwitcher;
+
+    public NavigationBarBase(Context context) {
+        super(context);
+    }
+
+    public NavigationBarBase(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public NavigationBarBase(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mLockIcon = (ImageView) findViewById(R.id.lock);
+        mFavicon = (ImageView) findViewById(R.id.favicon);
+        mUrlInput = (UrlInputView) findViewById(R.id.url);
+        mUrlInput.setUrlInputListener(this);
+        mUrlInput.setController(mUiController);
+        mUrlInput.setOnFocusChangeListener(this);
+        mUrlInput.setSelectAllOnFocus(true);
+        mUrlInput.addQueryTextWatcher(this);
+    }
+
+    public void setTitleBar(TitleBar titleBar) {
+        mTitleBar = titleBar;
+        mBaseUi = mTitleBar.getUi();
+        mUiController = mTitleBar.getUiController();
+    }
+
+    public void setLock(Drawable d) {
+        if (mLockIcon == null) return;
+        if (d == null) {
+            mLockIcon.setVisibility(View.GONE);
+        } else {
+            mLockIcon.setImageDrawable(d);
+            mLockIcon.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void setFavicon(Bitmap icon) {
+        if (mFavicon == null) return;
+        mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
+    }
+
+    public void setUaSwitcher(View v) {
+        if (mUaSwitcher != null) {
+            mUaSwitcher.setOnClickListener(null);
+        }
+        mUaSwitcher = v;
+        mUaSwitcher.setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (mUaSwitcher == v) {
+            BrowserSettings settings = BrowserSettings.getInstance();
+            WebView web = mTitleBar.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 = mTitleBar.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) {
+            mBaseUi.showTitleBar();
+            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);
+                }
+            }
+            mBaseUi.suggestHideTitleBar();
+        }
+        mUrlInput.clearNeedsUpdate();
+    }
+
+    protected void setFocusState(boolean focus) {
+    }
+
+    protected void setSearchMode(boolean voiceSearchEnabled) {}
+
+    public 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()) {
+            // 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
+
+    /**
+     * callback from suggestion dropdown
+     * user selected a suggestion
+     */
+    @Override
+    public void onAction(String text, String extra, String source) {
+        mUiController.getCurrentTopWebView().requestFocus();
+        if (UrlInputView.TYPED.equals(source)) {
+            String url = UrlUtils.smartUrlFilter(text, false);
+            Tab t = mBaseUi.getActiveTab();
+            // Only shortcut javascript URIs for now, as there is special
+            // logic in UrlHandler for other schemas
+            if (url != null && t != null && url.startsWith("javascript:")) {
+                mUiController.loadUrl(t, url);
+                setDisplayTitle(text);
+                return;
+            }
+        }
+        Intent i = new Intent();
+        String action = null;
+        if (UrlInputView.VOICE.equals(source)) {
+            action = RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS;
+            source = null;
+        } else {
+            action = Intent.ACTION_SEARCH;
+        }
+        i.setAction(action);
+        i.putExtra(SearchManager.QUERY, text);
+        if (extra != null) {
+            i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
+        }
+        if (source != null) {
+            Bundle appData = new Bundle();
+            appData.putString(com.android.common.Search.SOURCE, source);
+            i.putExtra(SearchManager.APP_DATA, appData);
+        }
+        mUiController.handleNewIntent(i);
+        setDisplayTitle(text);
+    }
+
+    @Override
+    public void onDismiss() {
+        final Tab currentTab = mBaseUi.getActiveTab();
+        mBaseUi.hideTitleBar();
+        post(new Runnable() {
+            public void run() {
+                clearFocus();
+                if ((currentTab != null) && !mInVoiceMode) {
+                    setDisplayTitle(currentTab.getUrl());
+                }
+            }
+        });
+    }
+
+    /**
+     * callback from the suggestion dropdown
+     * copy text to input field and stay in edit mode
+     */
+    @Override
+    public void onCopySuggestion(String text) {
+        mUrlInput.setText(text, true);
+        if (text != null) {
+            mUrlInput.setSelection(text.length());
+        }
+    }
+
+    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);
+    }
+
+    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
+        setVisibility(View.VISIBLE);
+        if (mTitleBar.useQuickControls()) {
+            mTitleBar.getProgressView().setVisibility(View.GONE);
+        }
+        if (!mUrlInput.hasFocus()) {
+            mUrlInput.requestFocus();
+        }
+        if (clearInput) {
+            mUrlInput.setText("");
+        } else if (mInVoiceMode) {
+            mUrlInput.showDropDown();
+        }
+    }
+
+    public void onProgressStarted() {
+    }
+
+    public void onProgressStopped() {
+    }
+
+}
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
new file mode 100644
index 0000000..400b695
--- /dev/null
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -0,0 +1,231 @@
+/*
+ * 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.Resources;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.ContextMenu;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.webkit.WebView;
+import android.widget.ImageView;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnDismissListener;
+
+import com.android.browser.UrlInputView.StateListener;
+
+public class NavigationBarPhone extends NavigationBarBase implements
+        StateListener, OnDismissListener {
+
+    private ImageView mStopButton;
+    private ImageView mVoiceButton;
+    private Drawable mStopDrawable;
+    private Drawable mRefreshDrawable;
+    private View mTabSwitcher;
+    private View mComboIcon;
+    private View mTitleContainer;
+    private View mMore;
+    private Drawable mTextfieldBgDrawable;
+    private PopupMenu mPopupMenu;
+    private boolean mMenuShowing;
+    private boolean mNeedsMenu;
+
+    public NavigationBarPhone(Context context) {
+        super(context);
+    }
+
+    public NavigationBarPhone(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public NavigationBarPhone(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mStopButton = (ImageView) findViewById(R.id.stop);
+        mStopButton.setOnClickListener(this);
+        mVoiceButton = (ImageView) findViewById(R.id.voice);
+        mVoiceButton.setOnClickListener(this);
+        mTabSwitcher = findViewById(R.id.tab_switcher);
+        mTabSwitcher.setOnClickListener(this);
+        mMore = findViewById(R.id.more);
+        mMore.setOnClickListener(this);
+        mComboIcon = findViewById(R.id.iconcombo);
+        mTitleContainer = findViewById(R.id.title_bg);
+        setFocusState(false);
+        Resources res = getContext().getResources();
+        mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark);
+        mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark);
+        mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark);
+        setUaSwitcher(mComboIcon);
+        mUrlInput.setContainer(this);
+        mUrlInput.setStateListener(this);
+        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
+    }
+
+    @Override
+    public void createContextMenu(ContextMenu menu) {
+        Activity activity = mBaseUi.getActivity();
+        MenuInflater inflater = activity.getMenuInflater();
+        inflater.inflate(R.menu.title_context, menu);
+        activity.onCreateContextMenu(menu, this, null);
+    }
+
+    @Override
+    protected void setSearchMode(boolean voiceSearchEnabled) {
+        boolean showvoicebutton = voiceSearchEnabled &&
+                mUiController.supportsVoiceSearch();
+        mVoiceButton.setVisibility(showvoicebutton ? View.VISIBLE :
+                View.GONE);
+    }
+
+    @Override
+    public void onProgressStarted() {
+        super.onProgressStarted();
+        if (mStopButton.getDrawable() != mStopDrawable) {
+            mStopButton.setImageDrawable(mStopDrawable);
+            if (mStopButton.getVisibility() != View.VISIBLE) {
+                mComboIcon.setVisibility(View.GONE);
+                mStopButton.setVisibility(View.VISIBLE);
+            }
+        }
+    }
+
+    @Override
+    public void onProgressStopped() {
+        super.onProgressStopped();
+        mStopButton.setImageDrawable(mRefreshDrawable);
+        if (!isEditingUrl()) {
+            mComboIcon.setVisibility(View.VISIBLE);
+        }
+        onStateChanged(mUrlInput.getState());
+    }
+
+    /**
+     * 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);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mStopButton) {
+            if (mTitleBar.isInLoad()) {
+                mUiController.stopLoading();
+            } else {
+                WebView web = mBaseUi.getWebView();
+                if (web != null) {
+                    stopEditingUrl();
+                    web.reload();
+                }
+            }
+        } else if (v == mVoiceButton) {
+            mUiController.startVoiceSearch();
+        } else if (v == mTabSwitcher) {
+            ((PhoneUi) mBaseUi).toggleNavScreen();
+        } else if (mMore == v) {
+            showMenu(mMore);
+        } else {
+            super.onClick(v);
+        }
+    }
+
+    public boolean isMenuShowing() {
+        return mMenuShowing;
+    }
+
+    void showMenu(View anchor) {
+        mMenuShowing = true;
+        mPopupMenu = new PopupMenu(mContext, anchor);
+        Menu menu = mPopupMenu.getMenu();
+        mPopupMenu.getMenuInflater().inflate(R.menu.browser, menu);
+        mUiController.updateMenuState(mBaseUi.getActiveTab(), menu);
+        mPopupMenu.setOnMenuItemClickListener(this);
+        mPopupMenu.setOnDismissListener(this);
+        mPopupMenu.show();
+    }
+
+    @Override
+    public void onDismiss(PopupMenu menu) {
+        onMenuHidden();
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        onMenuHidden();
+        boolean res = mUiController.onOptionsItemSelected(item);
+        if (!res) {
+            return super.onMenuItemClick(item);
+        }
+        return res;
+    }
+
+    private void onMenuHidden() {
+        mMenuShowing = false;
+        mPopupMenu = null;
+        mBaseUi.showTitleBarForDuration();
+    }
+
+    @Override
+    public void onStateChanged(int state) {
+        switch(state) {
+        case StateListener.STATE_NORMAL:
+            mComboIcon.setVisibility(View.VISIBLE);
+            mStopButton.setVisibility(View.GONE);
+            setSearchMode(mInVoiceMode);
+            mTabSwitcher.setVisibility(View.VISIBLE);
+            mTitleContainer.setBackgroundDrawable(null);
+            mMore.setVisibility(mNeedsMenu ? View.VISIBLE : View.GONE);
+            break;
+        case StateListener.STATE_HIGHLIGHTED:
+            mComboIcon.setVisibility(View.GONE);
+            mStopButton.setVisibility(View.VISIBLE);
+            setSearchMode(true);
+            mTabSwitcher.setVisibility(View.GONE);
+            mMore.setVisibility(View.GONE);
+            mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
+            break;
+        case StateListener.STATE_EDITED:
+            mComboIcon.setVisibility(View.GONE);
+            mStopButton.setVisibility(View.GONE);
+            setSearchMode(false);
+            mTabSwitcher.setVisibility(View.GONE);
+            mMore.setVisibility(View.GONE);
+            mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
+            break;
+        }
+    }
+}
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/NavigationBarTablet.java
similarity index 62%
rename from src/com/android/browser/TitleBarXLarge.java
rename to src/com/android/browser/NavigationBarTablet.java
index 6aed86c..9cb8ff2 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 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.
@@ -13,38 +13,25 @@
  * 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.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
-import android.preference.PreferenceManager;
 import android.text.TextUtils;
+import android.util.AttributeSet;
 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;
 
-/**
- * tabbed title bar for xlarge screen browser
- */
-public class TitleBarXLarge extends TitleBarBase
-        implements OnClickListener, OnFocusChangeListener, TextChangeWatcher,
-        DeviceAccountLogin.AutoLoginCallback {
-
-    private XLargeUi mUi;
+public class NavigationBarTablet extends NavigationBarBase {
 
     private Drawable mStopDrawable;
     private Drawable mReloadDrawable;
@@ -60,37 +47,50 @@
     private View mAllButton;
     private View mClearButton;
     private ImageView mVoiceSearch;
+    private View mNavButtons;
     private Drawable mFocusDrawable;
     private Drawable mUnfocusDrawable;
+    private boolean mHideNavButtons;
 
-    public TitleBarXLarge(Activity activity, UiController controller,
-            XLargeUi ui, FrameLayout parent) {
-        super(activity, controller, ui, parent);
-        mUi = ui;
-        Resources resources = activity.getResources();
+    public NavigationBarTablet(Context context) {
+        super(context);
+        init(context);
+    }
+
+    public NavigationBarTablet(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context);
+    }
+
+    public NavigationBarTablet(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init(context);
+    }
+
+    private void init(Context context) {
+        Resources resources = context.getResources();
         mStopDrawable = resources.getDrawable(R.drawable.ic_stop_holo_dark);
         mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_holo_dark);
         mFocusDrawable = resources.getDrawable(
                 R.drawable.textfield_active_holo_dark);
         mUnfocusDrawable = resources.getDrawable(
                 R.drawable.textfield_default_holo_dark);
-        mInVoiceMode = false;
-        initLayout(activity, R.layout.url_bar);
+        mHideNavButtons = resources.getBoolean(R.bool.hide_nav_buttons);
     }
 
     @Override
-    protected void initLayout(Context context, int layoutId) {
-        super.initLayout(context, layoutId);
+    protected void onFinishInflate() {
+        super.onFinishInflate();
         mAllButton = findViewById(R.id.all_btn);
         // TODO: Change enabled states based on whether you can go
         // back/forward.  Probably should be done inside onPageStarted.
+        mNavButtons = findViewById(R.id.navbuttons);
         mBackButton = (ImageButton) findViewById(R.id.back);
         mForwardButton = (ImageButton) findViewById(R.id.forward);
         mUrlIcon = (ImageView) findViewById(R.id.url_icon);
         mStar = (ImageView) findViewById(R.id.star);
         mStopButton = (ImageView) findViewById(R.id.stop);
         mSearchButton = (ImageView) findViewById(R.id.search);
-        mLockIcon = (ImageView) findViewById(R.id.lock);
         mGoButton = findViewById(R.id.go);
         mClearButton = findViewById(R.id.clear);
         mVoiceSearch = (ImageView) findViewById(R.id.voicesearch);
@@ -106,16 +106,38 @@
         mVoiceSearch.setOnClickListener(this);
         setUaSwitcher(mUrlIcon);
         mUrlInput.setContainer(mUrlContainer);
+    }
+
+    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);
+            }
+        }
+    }
+
+    @Override
+    public void setTitleBar(TitleBar titleBar) {
+        super.setTitleBar(titleBar);
         setFocusState(false);
     }
 
     void updateNavigationState(Tab tab) {
-        WebView web = tab.getWebView();
-        if (web != null) {
-            mBackButton.setImageResource(web.canGoBack()
+        if (tab != null) {
+            mBackButton.setImageResource(tab.canGoBack()
                     ? R.drawable.ic_back_holo_dark
                     : R.drawable.ic_back_disabled_holo_dark);
-            mForwardButton.setImageResource(web.canGoForward()
+            mForwardButton.setImageResource(tab.canGoForward()
                     ? R.drawable.ic_forward_holo_dark
                     : R.drawable.ic_forward_disabled_holo_dark);
         }
@@ -127,19 +149,18 @@
         mStar.setActivated(isBookmark);
     }
 
-
     @Override
     public void onClick(View v) {
         if (mBackButton == v) {
-            mUiController.getCurrentTopWebView().goBack();
+            mUiController.getCurrentTab().goBack();
         } else if (mForwardButton == v) {
-            mUiController.getCurrentTopWebView().goForward();
+            mUiController.getCurrentTab().goForward();
         } else if (mStar == v) {
-            mUiController.bookmarkCurrentPage(true);
+            getContext().startActivity(mUiController.createBookmarkCurrentPageIntent(true));
         } else if (mAllButton == v) {
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mSearchButton == v) {
-            mUi.editUrl(true);
+            mBaseUi.editUrl(true);
         } else if (mStopButton == v) {
             stopOrRefresh();
         } else if (mGoButton == v) {
@@ -156,9 +177,6 @@
         }
     }
 
-    @Override
-    void setFavicon(Bitmap icon) { }
-
     private void clearOrClose() {
         if (TextUtils.isEmpty(mUrlInput.getUserText())) {
             // close
@@ -179,17 +197,23 @@
     protected void setFocusState(boolean focus) {
         super.setFocusState(focus);
         if (focus) {
+            if (mHideNavButtons) {
+                hideNavButtons();
+            }
             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);
             mClearButton.setVisibility(View.GONE);
-            if (mUseQuickControls) {
+            if (mTitleBar.useQuickControls()) {
                 mSearchButton.setVisibility(View.GONE);
             } else {
                 mSearchButton.setVisibility(View.VISIBLE);
@@ -201,7 +225,7 @@
     }
 
     private void stopOrRefresh() {
-        if (mInLoad) {
+        if (mTitleBar.isInLoad()) {
             mUiController.stopLoading();
         } else {
             mUiController.getCurrentTopWebView().reload();
@@ -209,12 +233,12 @@
     }
 
     @Override
-    protected void onProgressStarted() {
+    public void onProgressStarted() {
         mStopButton.setImageDrawable(mStopDrawable);
     }
 
     @Override
-    protected void onProgressStopped() {
+    public void onProgressStopped() {
         mStopButton.setImageDrawable(mReloadDrawable);
     }
 
@@ -240,12 +264,34 @@
         }
     }
 
-    @Override
-    public View focusSearch(View focused, int dir) {
-        if (FOCUS_DOWN == dir && hasFocus()) {
-            return getCurrentWebView();
-        }
-        return super.focusSearch(focused, dir);
+    private void hideNavButtons() {
+        int awidth = mNavButtons.getMeasuredWidth();
+        Animator anim1 = ObjectAnimator.ofFloat(mNavButtons, View.TRANSLATION_X, 0, - awidth);
+        Animator anim2 = ObjectAnimator.ofInt(mUrlContainer, "left", mUrlContainer.getLeft(),
+                mUrlContainer.getPaddingLeft());
+        Animator anim3 = ObjectAnimator.ofFloat(mNavButtons, View.ALPHA, 1f, 0f);
+        AnimatorSet combo = new AnimatorSet();
+        combo.playTogether(anim1, anim2, anim3);
+        combo.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mNavButtons.setVisibility(View.GONE);
+            }
+        });
+        combo.setDuration(150);
+        combo.start();
+    }
+
+    private void showNavButtons() {
+        int awidth = mNavButtons.getMeasuredWidth();
+        Animator anim1 = ObjectAnimator.ofFloat(mNavButtons, View.TRANSLATION_X, -awidth, 0);
+        Animator anim2 = ObjectAnimator.ofInt(mUrlContainer, "left", 0, awidth);
+        Animator anim3 = ObjectAnimator.ofFloat(mNavButtons, View.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/NfcHandler.java b/src/com/android/browser/NfcHandler.java
index bc19950..a8e11d3 100644
--- a/src/com/android/browser/NfcHandler.java
+++ b/src/com/android/browser/NfcHandler.java
@@ -21,6 +21,10 @@
 import android.nfc.NdefRecord;
 import android.nfc.NfcAdapter;
 import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Message;
+
+import java.util.concurrent.CountDownLatch;
 
 /** This class implements sharing the URL of the currently
   * shown browser page over NFC. Sharing is only active
@@ -31,42 +35,26 @@
     private NfcAdapter mNfcAdapter;
     private Activity mActivity;
     private Controller mController;
+    private Handler mHandler;
+    private Tab mCurrentTab;
+    private boolean mIsPrivate;
+    private CountDownLatch mPrivateBrowsingSignal;
 
-    /** We need an async task to check whether the tab is private
-      * on the UI thread.
-      */
-    private class CreateMessageTask extends AsyncTask<Void, Void, NdefMessage> {
-        private boolean mIsPrivate = false;
-        private Tab mCurrentTab;
-
-        @Override
-        protected void onPreExecute() {
-            mCurrentTab = mController.getCurrentTab();
-            if ((mCurrentTab != null) && (mCurrentTab.getWebView() != null)) {
-                mIsPrivate = mCurrentTab.getWebView().isPrivateBrowsingEnabled();
-            }
-        }
-
-        @Override
-        protected NdefMessage doInBackground(Void... params) {
-            if ((mCurrentTab == null) || mIsPrivate) {
-                return null;
-            }
-            String currentUrl = mCurrentTab.getUrl();
-            if (currentUrl != null) {
-                NdefRecord record = NdefRecord.createUri(currentUrl);
-                NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
-                return msg;
-            } else {
-                return null;
-            }
-        }
-    }
+    private static final int GET_PRIVATE_BROWSING_STATE_MSG = 100;
 
     public NfcHandler(Activity browser, Controller controller) {
         mActivity = browser;
         mController = controller;
         mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity);
+        mHandler = new Handler() {
+            @Override
+            public void handleMessage(Message msg) {
+                if (msg.what == GET_PRIVATE_BROWSING_STATE_MSG) {
+                    mIsPrivate = mCurrentTab.getWebView().isPrivateBrowsingEnabled();
+                    mPrivateBrowsingSignal.countDown();
+                }
+            }
+        };
     }
 
     void onPause() {
@@ -83,11 +71,29 @@
 
     @Override
     public NdefMessage createMessage() {
-        CreateMessageTask task = new CreateMessageTask();
-        task.execute();
-        try {
-            return task.get();
-        } catch (Exception e) {
+        mCurrentTab = mController.getCurrentTab();
+        if ((mCurrentTab != null) && (mCurrentTab.getWebView() != null)) {
+            // We can only read the WebView state on the UI thread, so post
+            // a message and wait.
+            mPrivateBrowsingSignal = new CountDownLatch(1);
+            mHandler.sendMessage(mHandler.obtainMessage(GET_PRIVATE_BROWSING_STATE_MSG));
+            try {
+                mPrivateBrowsingSignal.await();
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        if ((mCurrentTab == null) || mIsPrivate) {
+            return null;
+        }
+
+        String currentUrl = mCurrentTab.getUrl();
+        if (currentUrl != null) {
+            NdefRecord record = NdefRecord.createUri(currentUrl);
+            NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
+            return msg;
+        } else {
             return null;
         }
     }
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 0c236af..28db6f0 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -23,10 +23,13 @@
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
 
+import com.android.browser.UrlInputView.StateListener;
+
 /**
  * Ui for regular phone screen sizes
  */
@@ -34,10 +37,9 @@
 
     private static final String LOGTAG = "PhoneUi";
 
-    private TitleBarPhone mTitleBar;
-    private ActiveTabsPage mActiveTabsPage;
-    private PieControl mPieControl;
+    private PieControlPhone mPieControl;
     private NavScreen mNavScreen;
+    private NavigationBarPhone mNavigationBar;
 
     boolean mExtendedMenuOpen;
     boolean mOptionsMenuOpen;
@@ -49,33 +51,9 @@
      */
     public PhoneUi(Activity browser, UiController controller) {
         super(browser, controller);
-        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
-    public void hideComboView() {
-        super.hideComboView();
-        mActivity.getActionBar().hide();
-    }
-
-    // lifecycle
-
-    @Override
-    public void onPause() {
-        // FIXME: This removes the active tabs page and resets the menu to
-        // MAIN_MENU.  A better solution might be to do this work in onNewIntent
-        // but then we would need to save it in onSaveInstanceState and restore
-        // it in onCreate/onRestoreInstanceState
-        if (mActiveTabsPage != null) {
-            mUiController.removeActiveTabsPage(true);
-        }
-        super.onPause();
+        mNavigationBar = (NavigationBarPhone) mTitleBar.getNavigationBar();
     }
 
     @Override
@@ -86,18 +64,14 @@
     @Override
     public void editUrl(boolean clearInput) {
         if (mUseQuickControls) {
-            getTitleBar().setShowProgressOnly(false);
+            mTitleBar.setShowProgressOnly(false);
         }
         super.editUrl(clearInput);
     }
 
     @Override
     public boolean onBackKey() {
-        if (mActiveTabsPage != null) {
-            // if tab page is showing, hide it
-            mUiController.removeActiveTabsPage(true);
-            return true;
-        } else if (mNavScreen != null) {
+        if (mNavScreen != null) {
             mNavScreen.close();
             return true;
         }
@@ -105,23 +79,7 @@
     }
 
     @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;
     }
 
@@ -151,7 +109,6 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
-        captureTab(mActiveTab);
         super.setActiveTab(tab);
         BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
@@ -174,35 +131,22 @@
         } else {
             revertVoiceTitleBar(tab);
         }
+        // update nav bar state
+        mNavigationBar.onStateChanged(StateListener.STATE_NORMAL);
         updateLockIconToLatest(tab);
         tab.getTopWindow().requestFocus();
     }
 
-    @Override
-    protected TitleBarBase getTitleBar() {
-        return mTitleBar;
-    }
-
-    // active tabs page
-
-    @Override
-    public void showActiveTabsPage() {
-        captureTab(mActiveTab);
-        mActiveTabsPage = new ActiveTabsPage(mActivity, mUiController);
-        mTitleBar.setVisibility(View.GONE);
-        hideTitleBar();
-        mContentView.addView(mActiveTabsPage, COVER_SCREEN_PARAMS);
-        mActiveTabsPage.requestFocus();
-    }
-
     /**
-     * Remove the active tabs page.
+     * 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
      */
     @Override
-    public void removeActiveTabsPage() {
-        mContentView.removeView(mActiveTabsPage);
-        mTitleBar.setVisibility(View.VISIBLE);
-        mActiveTabsPage = null;
+    public void suggestHideTitleBar() {
+        if (!mNavigationBar.isMenuShowing()) {
+            super.suggestHideTitleBar();
+        }
     }
 
     @Override
@@ -213,12 +157,21 @@
         super.showComboView(startWith, extras);
     }
 
+    // menu handling callbacks
+
     @Override
-    public boolean showsWeb() {
-        return super.showsWeb() && mActiveTabsPage == null;
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        menu.setGroupVisible(R.id.NAV_MENU, (mNavScreen == null));
+        return true;
     }
 
-    // menu handling callbacks
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mNavScreen != null) {
+            hideNavScreen(false);
+        }
+        return false;
+    }
 
     @Override
     public void onContextMenuCreated(Menu menu) {
@@ -254,23 +207,26 @@
     protected void setTitleGravity(int gravity) {
         if (mUseQuickControls) {
             FrameLayout.LayoutParams lp =
-                    (FrameLayout.LayoutParams) getTitleBar().getLayoutParams();
+                    (FrameLayout.LayoutParams) mTitleBar.getLayoutParams();
             lp.gravity = gravity;
-            getTitleBar().setLayoutParams(lp);
+            mTitleBar.setLayoutParams(lp);
         } else {
             super.setTitleGravity(gravity);
         }
     }
 
-    private void setUseQuickControls(boolean useQuickControls) {
+    @Override
+    public void setUseQuickControls(boolean useQuickControls) {
         mUseQuickControls = useQuickControls;
-        getTitleBar().setUseQuickControls(mUseQuickControls);
+        mTitleBar.setUseQuickControls(mUseQuickControls);
         if (useQuickControls) {
-            mPieControl = new PieControl(mActivity, mUiController, this);
+            mPieControl = new PieControlPhone(mActivity, mUiController, this);
             mPieControl.attachToContainer(mContentView);
             WebView web = getWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(null);
+                // don't show url bar on scrolling
+                web.setOnTouchListener(null);
             }
         } else {
             if (mPieControl != null) {
@@ -279,20 +235,13 @@
             WebView web = getWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(mTitleBar);
+                // show url bar on scrolling
+                web.setOnTouchListener(this);
             }
             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);
@@ -314,4 +263,17 @@
         mContentView.setVisibility(View.VISIBLE);
     }
 
+    @Override
+    public boolean needsRestoreAllTabs() {
+        return false;
+    }
+
+    public void toggleNavScreen() {
+        if (mNavScreen == null) {
+            showNavScreen();
+        } else {
+            hideNavScreen(false);
+        }
+    }
+
 }
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
deleted file mode 100644
index 8bcd972..0000000
--- a/src/com/android/browser/PieControl.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import com.android.browser.view.PieItem;
-import com.android.browser.view.PieListView;
-import com.android.browser.view.PieMenu;
-import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
-import com.android.browser.view.PieStackView;
-import com.android.browser.view.PieStackView.OnCurrentListener;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Bitmap;
-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.view.ViewGroup.LayoutParams;
-import android.webkit.WebView;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * controller for Quick Controls pie menu
- */
-public class PieControl implements OnClickListener, PieMenu.PieController {
-
-    private Activity mActivity;
-    private UiController mUiController;
-    private BaseUi mUi;
-    private PieMenu mPie;
-    private PieItem mBack;
-    private PieItem mForward;
-    private PieItem mRefresh;
-    private PieItem mUrl;
-    private PieItem mOptions;
-    private PieItem mBookmarks;
-    private PieItem mNewTab;
-    private PieItem mClose;
-    private MenuAdapter mMenuAdapter;
-    private PieItem mShowTabs;
-    private TabAdapter mTabAdapter;
-    private TextView mTabsCount;
-    private int mItemSize;
-
-    public PieControl(Activity activity, UiController controller, BaseUi ui) {
-        mActivity = activity;
-        mUiController = controller;
-        mUi = ui;
-        mItemSize = (int) activity.getResources().getDimension(R.dimen.qc_item_size);
-    }
-
-    protected void attachToContainer(FrameLayout container) {
-        if (mPie == null) {
-            mPie = new PieMenu(mActivity);
-            LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
-                    LayoutParams.MATCH_PARENT);
-            mPie.setLayoutParams(lp);
-            mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
-            mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
-            mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1);
-            mRefresh = makeItem(R.drawable.ic_refresh_holo_dark, 2);
-            mForward = makeItem(R.drawable.ic_forward_holo_dark, 2);
-            mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 2);
-            mClose = makeItem(R.drawable.ic_close_window_holo_dark, 2);
-            View tabs = makeTabsView();
-            mShowTabs = new PieItem(tabs, 2);
-            mOptions = makeItem(
-                    com.android.internal.R.drawable.ic_menu_moreoverflow_normal_holo_dark,
-                    2);
-            mMenuAdapter = new MenuAdapter(mActivity, mUiController);
-            mTabAdapter = new TabAdapter(mActivity, mUiController);
-            PieStackView stack = new PieStackView(mActivity);
-            stack.setLayoutListener(new OnLayoutListener() {
-                @Override
-                public void onLayout(int ax, int ay, boolean left) {
-                    buildTabs();
-                }
-            });
-            stack.setOnCurrentListener(mTabAdapter);
-            stack.setAdapter(mTabAdapter);
-            mShowTabs.setPieView(stack);
-            PieListView menuview = new PieListView(mActivity);
-            menuview.setLayoutListener(new OnLayoutListener() {
-                @Override
-                public void onLayout(int ax, int ay, boolean left) {
-                    buildMenu();
-                }
-            });
-
-            mOptions.setPieView(menuview);
-            menuview.setAdapter(mMenuAdapter);
-            setClickListener(mBack,
-                    mRefresh,
-                    mForward,
-                    mUrl,
-                    mBookmarks,
-                    mNewTab,
-                    mClose
-                    );
-            // level 1
-            mPie.addItem(mBack);
-            mPie.addItem(mUrl);
-            mPie.addItem(mBookmarks);
-            // level 2
-            mPie.addItem(mForward);
-            mPie.addItem(mRefresh);
-            mPie.addItem(mOptions);
-            mPie.addItem(mShowTabs);
-            mPie.addItem(mNewTab);
-            mPie.addItem(mClose);
-            mPie.setController(this);
-        }
-        container.addView(mPie);
-    }
-
-    private void buildTabs() {
-        final List<Tab> tabs = mUiController.getTabs();
-        mUi.captureTab(mUi.getActiveTab());
-        mTabAdapter.setTabs(tabs);
-        PieStackView sym = (PieStackView) mShowTabs.getPieView();
-        sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
-
-    }
-
-    private void buildMenu() {
-        Menu menu = mUi.getMenu();
-        menu.setGroupVisible(R.id.NAV_MENU, false);
-        mMenuAdapter.setMenu(menu);
-    }
-
-    protected void removeFromContainer(FrameLayout container) {
-        container.removeView(mPie);
-    }
-
-    private View makeTabsView() {
-        View v = mActivity.getLayoutInflater().inflate(R.layout.qc_tabs_view, null);
-        mTabsCount = (TextView) v.findViewById(R.id.label);
-        mTabsCount.setText("1");
-        ImageView image = (ImageView) v.findViewById(R.id.icon);
-        image.setImageResource(R.drawable.ic_windows_holo_dark);
-        image.setScaleType(ScaleType.CENTER);
-        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
-        v.setLayoutParams(lp);
-        return v;
-    }
-
-    private PieItem makeItem(int image, int l) {
-        ImageView view = new ImageView(mActivity);
-        view.setImageResource(image);
-        view.setMinimumWidth(mItemSize);
-        view.setMinimumHeight(mItemSize);
-        view.setScaleType(ScaleType.CENTER);
-        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
-        view.setLayoutParams(lp);
-        return new PieItem(view, l);
-    }
-
-    private void setClickListener(PieItem... items) {
-        for (PieItem item : items) {
-            item.getView().setOnClickListener(this);
-        }
-    }
-
-    protected void forceToTop(FrameLayout container) {
-        if (mPie.getParent() != null) {
-            container.removeView(mPie);
-            container.addView(mPie);
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        Tab tab = mUiController.getTabControl().getCurrentTab();
-        WebView web = tab.getWebView();
-        if (mBack.getView() == v) {
-            web.goBack();
-        } else if (mForward.getView() == v) {
-            web.goForward();
-        } else if (mRefresh.getView() == v) {
-            if (tab.inPageLoad()) {
-                web.stopLoading();
-            } else {
-                web.reload();
-            }
-        } else if (mUrl.getView() == v) {
-            mUi.editUrl(false);
-        } else if (mBookmarks.getView() == v) {
-            mUiController.bookmarksOrHistoryPicker(false);
-        } else if (mNewTab.getView() == v) {
-            mUiController.openTabToHomePage();
-            mUi.editUrl(false);
-        } else if (mClose.getView() == v) {
-            mUiController.closeCurrentTab();
-        }
-    }
-
-    @Override
-    public boolean onOpen() {
-        int n = mUiController.getTabControl().getTabCount();
-        mTabsCount.setText(Integer.toString(n));
-        return true;
-    }
-
-    private static class TabAdapter extends BaseAdapter implements OnCurrentListener {
-
-        LayoutInflater mInflater;
-        UiController mUiController;
-        private List<Tab> mTabs;
-        private int mCurrent;
-
-        public TabAdapter(Context ctx, UiController ctl) {
-            mInflater = LayoutInflater.from(ctx);
-            mUiController = ctl;
-            mTabs = new ArrayList<Tab>();
-            mCurrent = -1;
-        }
-
-        public void setTabs(List<Tab> tabs) {
-            mTabs = tabs;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return mTabs.size();
-        }
-
-        @Override
-        public Tab getItem(int position) {
-            return mTabs.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final Tab tab = mTabs.get(position);
-            View view = mInflater.inflate(R.layout.qc_tab,
-                    null);
-            ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
-            TextView title1 = (TextView) view.findViewById(R.id.title1);
-            TextView title2 = (TextView) view.findViewById(R.id.title2);
-            Bitmap b = tab.getScreenshot();
-            if (b != null) {
-                thumb.setImageBitmap(b);
-            }
-            if (position > mCurrent) {
-                title1.setVisibility(View.GONE);
-                title2.setText(tab.getTitle());
-            } else {
-                title2.setVisibility(View.GONE);
-                title1.setText(tab.getTitle());
-            }
-            view.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    mUiController.switchToTab(tab);
-                }
-            });
-            return view;
-        }
-
-        @Override
-        public void onSetCurrent(int index) {
-            mCurrent = index;
-        }
-
-    }
-
-    private static class MenuAdapter extends BaseAdapter
-            implements OnClickListener {
-
-        List<MenuItem> mItems;
-        UiController mUiController;
-        LayoutInflater mInflater;
-
-        public MenuAdapter(Context ctx, UiController ctl) {
-            mUiController = ctl;
-            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) {
-                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);
-            label.setLayoutParams(new LayoutParams(240, 32));
-            return label;
-        }
-
-    }
-
-}
diff --git a/src/com/android/browser/PieControlBase.java b/src/com/android/browser/PieControlBase.java
new file mode 100644
index 0000000..830afea
--- /dev/null
+++ b/src/com/android/browser/PieControlBase.java
@@ -0,0 +1,187 @@
+/*
+ * 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.graphics.Bitmap;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
+
+import com.android.browser.view.PieItem;
+import com.android.browser.view.PieMenu;
+import com.android.browser.view.PieStackView.OnCurrentListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * base controller for Quick Controls pie menu
+ */
+public abstract class PieControlBase implements PieMenu.PieController {
+
+    protected Activity mActivity;
+    protected UiController mUiController;
+    protected PieMenu mPie;
+    protected int mItemSize;
+    protected TextView mTabsCount;
+
+    public PieControlBase(Activity activity, UiController controller) {
+        mActivity = activity;
+        mUiController = controller;
+        mItemSize = (int) activity.getResources().getDimension(R.dimen.qc_item_size);
+    }
+
+    protected void attachToContainer(FrameLayout container) {
+        if (mPie == null) {
+            mPie = new PieMenu(mActivity);
+            LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
+                    LayoutParams.MATCH_PARENT);
+            mPie.setLayoutParams(lp);
+            populateMenu();
+            mPie.setController(this);
+        }
+        container.addView(mPie);
+    }
+
+    protected void removeFromContainer(FrameLayout container) {
+        container.removeView(mPie);
+    }
+
+    protected void forceToTop(FrameLayout container) {
+        if (mPie.getParent() != null) {
+            container.removeView(mPie);
+            container.addView(mPie);
+        }
+    }
+
+    protected abstract void populateMenu();
+
+    protected void setClickListener(OnClickListener listener, PieItem... items) {
+        for (PieItem item : items) {
+            item.getView().setOnClickListener(listener);
+        }
+    }
+
+    @Override
+    public boolean onOpen() {
+        int n = mUiController.getTabControl().getTabCount();
+        mTabsCount.setText(Integer.toString(n));
+        return true;
+    }
+
+    protected PieItem makeItem(int image, int l) {
+        ImageView view = new ImageView(mActivity);
+        view.setImageResource(image);
+        view.setMinimumWidth(mItemSize);
+        view.setMinimumHeight(mItemSize);
+        view.setScaleType(ScaleType.CENTER);
+        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
+        view.setLayoutParams(lp);
+        return new PieItem(view, l);
+    }
+
+    protected View makeTabsView() {
+        View v = mActivity.getLayoutInflater().inflate(R.layout.qc_tabs_view, null);
+        mTabsCount = (TextView) v.findViewById(R.id.label);
+        mTabsCount.setText("1");
+        ImageView image = (ImageView) v.findViewById(R.id.icon);
+        image.setImageResource(R.drawable.ic_windows_holo_dark);
+        image.setScaleType(ScaleType.CENTER);
+        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
+        v.setLayoutParams(lp);
+        return v;
+    }
+
+    static class TabAdapter extends BaseAdapter implements OnCurrentListener {
+
+        LayoutInflater mInflater;
+        UiController mUiController;
+        private List<Tab> mTabs;
+        private int mCurrent;
+
+        public TabAdapter(Context ctx, UiController ctl) {
+            mInflater = LayoutInflater.from(ctx);
+            mUiController = ctl;
+            mTabs = new ArrayList<Tab>();
+            mCurrent = -1;
+        }
+
+        public void setTabs(List<Tab> tabs) {
+            mTabs = tabs;
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public int getCount() {
+            return mTabs.size();
+        }
+
+        @Override
+        public Tab getItem(int position) {
+            return mTabs.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final Tab tab = mTabs.get(position);
+            View view = mInflater.inflate(R.layout.qc_tab,
+                    null);
+            ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
+            TextView title1 = (TextView) view.findViewById(R.id.title1);
+            TextView title2 = (TextView) view.findViewById(R.id.title2);
+            Bitmap b = tab.getScreenshot();
+            if (b != null) {
+                thumb.setImageBitmap(b);
+            }
+            if (position > mCurrent) {
+                title1.setVisibility(View.GONE);
+                title2.setText(tab.getTitle());
+            } else {
+                title2.setVisibility(View.GONE);
+                title1.setText(tab.getTitle());
+            }
+            view.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    mUiController.switchToTab(tab);
+                }
+            });
+            return view;
+        }
+
+        @Override
+        public void onSetCurrent(int index) {
+            mCurrent = index;
+        }
+
+    }
+
+}
diff --git a/src/com/android/browser/PieControlPhone.java b/src/com/android/browser/PieControlPhone.java
new file mode 100644
index 0000000..c4b28fa
--- /dev/null
+++ b/src/com/android/browser/PieControlPhone.java
@@ -0,0 +1,95 @@
+/*
+ * 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.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup.LayoutParams;
+import android.webkit.WebView;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
+
+import com.android.browser.view.PieItem;
+import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
+import com.android.browser.view.PieStackView;
+
+import java.util.List;
+
+/**
+ * controller for Quick Controls pie menu
+ */
+public class PieControlPhone extends PieControlBase implements OnClickListener {
+
+    private PhoneUi mUi;
+    private PieItem mBack;
+    private PieItem mUrl;
+    private PieItem mShowTabs;
+    private TabAdapter mTabAdapter;
+
+    public PieControlPhone(Activity activity, UiController controller, PhoneUi ui) {
+        super(activity, controller);
+        mUi = ui;
+    }
+
+    protected void populateMenu() {
+        mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
+        mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
+        View tabs = makeTabsView();
+        mShowTabs = new PieItem(tabs, 1);
+        mTabAdapter = new TabAdapter(mActivity, mUiController);
+        PieStackView stack = new PieStackView(mActivity);
+        stack.setLayoutListener(new OnLayoutListener() {
+            @Override
+            public void onLayout(int ax, int ay, boolean left) {
+                buildTabs();
+            }
+        });
+        stack.setOnCurrentListener(mTabAdapter);
+        stack.setAdapter(mTabAdapter);
+        mShowTabs.setPieView(stack);
+        // level 1
+        mPie.addItem(mBack);
+        mPie.addItem(mUrl);
+        mPie.addItem(mShowTabs);
+        setClickListener(this, mBack, mUrl, mShowTabs);
+    }
+
+    private void buildTabs() {
+        final List<Tab> tabs = mUiController.getTabs();
+        mUi.captureTab(mUi.getActiveTab());
+        mTabAdapter.setTabs(tabs);
+        PieStackView sym = (PieStackView) mShowTabs.getPieView();
+        sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        Tab tab = mUiController.getTabControl().getCurrentTab();
+        if (mBack.getView() == v) {
+            tab.goBack();
+        } else if (mUrl.getView() == v) {
+            mUi.editUrl(false);
+        } else if (mShowTabs.getView() == v) {
+            mUi.showNavScreen();
+        }
+    }
+
+
+}
diff --git a/src/com/android/browser/PieControlXLarge.java b/src/com/android/browser/PieControlXLarge.java
new file mode 100644
index 0000000..a036e0d
--- /dev/null
+++ b/src/com/android/browser/PieControlXLarge.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+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.view.ViewGroup.LayoutParams;
+import android.webkit.WebView;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.android.browser.view.PieItem;
+import com.android.browser.view.PieListView;
+import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
+import com.android.browser.view.PieStackView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * controller for Quick Controls pie menu
+ */
+public class PieControlXLarge extends PieControlBase implements OnClickListener {
+
+    private BaseUi mUi;
+    private PieItem mBack;
+    private PieItem mForward;
+    private PieItem mRefresh;
+    private PieItem mUrl;
+    private PieItem mOptions;
+    private PieItem mBookmarks;
+    private PieItem mNewTab;
+    private PieItem mClose;
+    private MenuAdapter mMenuAdapter;
+    private PieItem mShowTabs;
+    private TabAdapter mTabAdapter;
+
+    public PieControlXLarge(Activity activity, UiController controller, BaseUi ui) {
+        super(activity, controller);
+        mUiController = controller;
+        mUi = ui;
+    }
+
+    protected void populateMenu() {
+        mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
+        mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
+        mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1);
+        mRefresh = makeItem(R.drawable.ic_refresh_holo_dark, 2);
+        mForward = makeItem(R.drawable.ic_forward_holo_dark, 2);
+        mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 2);
+        mClose = makeItem(R.drawable.ic_close_window_holo_dark, 2);
+        View tabs = makeTabsView();
+        mShowTabs = new PieItem(tabs, 2);
+        mOptions = makeItem(com.android.internal.R.drawable.ic_menu_moreoverflow_normal_holo_dark,
+                                        2);
+        mMenuAdapter = new MenuAdapter(mActivity, mUiController);
+        mTabAdapter = new TabAdapter(mActivity, mUiController);
+        PieStackView stack = new PieStackView(mActivity);
+        stack.setLayoutListener(new OnLayoutListener() {
+            @Override
+            public void onLayout(int ax, int ay, boolean left) {
+                buildTabs();
+            }
+        });
+        stack.setOnCurrentListener(mTabAdapter);
+        stack.setAdapter(mTabAdapter);
+        mShowTabs.setPieView(stack);
+        PieListView menuview = new PieListView(mActivity);
+        menuview.setLayoutListener(new OnLayoutListener() {
+            @Override
+            public void onLayout(int ax, int ay, boolean left) {
+                buildMenu();
+            }
+        });
+
+        mOptions.setPieView(menuview);
+        menuview.setAdapter(mMenuAdapter);
+        setClickListener(this, mBack, mRefresh, mForward, mUrl, mBookmarks, mNewTab,
+                mClose);
+        // level 1
+        mPie.addItem(mBack);
+        mPie.addItem(mUrl);
+        mPie.addItem(mBookmarks);
+        // level 2
+        mPie.addItem(mForward);
+        mPie.addItem(mRefresh);
+        mPie.addItem(mOptions);
+        mPie.addItem(mShowTabs);
+        mPie.addItem(mNewTab);
+        mPie.addItem(mClose);
+    }
+
+    private void buildTabs() {
+        final List<Tab> tabs = mUiController.getTabs();
+        mUi.captureTab(mUi.getActiveTab());
+        mTabAdapter.setTabs(tabs);
+        PieStackView sym = (PieStackView) mShowTabs.getPieView();
+        sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
+    }
+
+    private void buildMenu() {
+        Menu menu = mUi.getMenu();
+        menu.setGroupVisible(R.id.NAV_MENU, false);
+        mMenuAdapter.setMenu(menu);
+    }
+
+    @Override
+    public void onClick(View v) {
+        Tab tab = mUiController.getTabControl().getCurrentTab();
+        WebView web = tab.getWebView();
+        if (mBack.getView() == v) {
+            tab.goBack();
+        } else if (mForward.getView() == v) {
+            tab.goForward();
+        } else if (mRefresh.getView() == v) {
+            if (tab.inPageLoad()) {
+                web.stopLoading();
+            } else {
+                web.reload();
+            }
+        } else if (mUrl.getView() == v) {
+            mUi.editUrl(false);
+        } else if (mBookmarks.getView() == v) {
+            mUiController.bookmarksOrHistoryPicker(false);
+        } else if (mNewTab.getView() == v) {
+            mUiController.openTabToHomePage();
+            mUi.editUrl(false);
+        } else if (mClose.getView() == v) {
+            mUiController.closeCurrentTab();
+        }
+    }
+
+    private static class MenuAdapter extends BaseAdapter
+            implements OnClickListener {
+
+        List<MenuItem> mItems;
+        UiController mUiController;
+        LayoutInflater mInflater;
+
+        public MenuAdapter(Context ctx, UiController ctl) {
+            mUiController = ctl;
+            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) {
+                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);
+            label.setLayoutParams(new LayoutParams(240, 32));
+            return label;
+        }
+
+    }
+
+}
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 08ee91f..ce8ec9f 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -70,6 +70,7 @@
     static final String PREF_NORMAL_LAYOUT = "normal_layout";
     static final String PREF_SMALL_SCREEN = "small_screen";
     static final String PREF_WIDE_VIEWPORT = "wide_viewport";
+    static final String PREF_RESET_PRELOGIN = "reset_prelogin";
 
     // ----------------------
     // Keys for lab_preferences.xml
@@ -77,6 +78,7 @@
     static final String PREF_ENABLE_QUICK_CONTROLS = "enable_quick_controls";
     static final String PREF_USE_INSTANT_SEARCH = "use_instant_search";
     static final String PREF_FULLSCREEN = "fullscreen";
+    static final String PREF_INVERTED = "inverted";
 
     // ----------------------
     // Keys for privacy_security_preferences.xml
diff --git a/src/com/android/browser/PreloadController.java b/src/com/android/browser/PreloadController.java
index 6528410..652ea8e 100644
--- a/src/com/android/browser/PreloadController.java
+++ b/src/com/android/browser/PreloadController.java
@@ -22,6 +22,7 @@
 import android.net.Uri;
 import android.net.http.SslError;
 import android.os.Message;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
 import android.webkit.HttpAuthHandler;
@@ -34,6 +35,9 @@
 
 public class PreloadController implements WebViewController {
 
+    private static final boolean LOGD_ENABLED = false;
+    private static final String LOGTAG = "PreloadController";
+
     private Context mContext;
 
     public PreloadController(Context ctx) {
@@ -48,177 +52,228 @@
 
     @Override
     public Activity getActivity() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getActivity()");
         return null;
     }
 
     @Override
     public TabControl getTabControl() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getTabControl()");
         return null;
     }
 
     @Override
     public WebViewFactory getWebViewFactory() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getWebViewFactory()");
         return null;
     }
 
     @Override
     public void onSetWebView(Tab tab, WebView view) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onSetWebView()");
     }
 
     @Override
     public void createSubWindow(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "createSubWindow()");
     }
 
     @Override
     public void onPageStarted(Tab tab, WebView view, Bitmap favicon) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onPageStarted()");
+        if (view != null) {
+            // Clear history of all previously visited pages. When the
+            // user visits a preloaded tab, the only item in the history
+            // list should the currently viewed page.
+            view.clearHistory();
+        }
     }
 
     @Override
     public void onPageFinished(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onPageFinished()");
+        if (tab != null) {
+            final WebView view = tab.getWebView();
+            if (view != null) {
+                // Clear history of all previously visited pages. When the
+                // user visits a preloaded tab.
+                view.clearHistory();
+            }
+        }
     }
 
     @Override
     public void onProgressChanged(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onProgressChanged()");
     }
 
     @Override
     public void onReceivedTitle(Tab tab, String title) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onReceivedTitle()");
     }
 
     @Override
     public void onFavicon(Tab tab, WebView view, Bitmap icon) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onFavicon()");
     }
 
     @Override
     public boolean shouldOverrideUrlLoading(Tab tab, WebView view, String url) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "shouldOverrideUrlLoading()");
         return false;
     }
 
     @Override
     public boolean shouldOverrideKeyEvent(KeyEvent event) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "shouldOverrideKeyEvent()");
         return false;
     }
 
     @Override
     public void onUnhandledKeyEvent(KeyEvent event) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onUnhandledKeyEvent()");
     }
 
     @Override
     public void doUpdateVisitedHistory(Tab tab, boolean isReload) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "doUpdateVisitedHistory()");
     }
 
     @Override
     public void getVisitedHistory(ValueCallback<String[]> callback) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getVisitedHistory()");
     }
 
     @Override
     public void onReceivedHttpAuthRequest(Tab tab, WebView view,
                                     HttpAuthHandler handler, String host,
                                     String realm) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onReceivedHttpAuthRequest()");
     }
 
     @Override
     public void onDownloadStart(Tab tab, String url, String useragent,
                                     String contentDisposition, String mimeType,
                                     long contentLength) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onDownloadStart()");
     }
 
     @Override
     public void showCustomView(Tab tab, View view, int requestedOrientation,
                                     CustomViewCallback callback) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "showCustomView()");
     }
 
     @Override
     public void hideCustomView() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "hideCustomView()");
     }
 
     @Override
     public Bitmap getDefaultVideoPoster() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getDefaultVideoPoster()");
         return null;
     }
 
     @Override
     public View getVideoLoadingProgressView() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "getVideoLoadingProgressView()");
         return null;
     }
 
     @Override
     public void showSslCertificateOnError(WebView view,
                                     SslErrorHandler handler, SslError error) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "showSslCertificateOnError()");
     }
 
     @Override
     public void onUserCanceledSsl(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onUserCanceledSsl()");
     }
 
     @Override
     public void activateVoiceSearchMode(String title, List<String> results) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "activateVoiceSearchMode()");
     }
 
     @Override
     public void revertVoiceSearchMode(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "revertVoiceSearchMode()");
     }
 
     @Override
     public boolean shouldShowErrorConsole() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "shouldShowErrorConsole()");
         return false;
     }
 
     @Override
     public void onUpdatedLockIcon(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onUpdatedLockIcon()");
     }
 
     @Override
     public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "openFileChooser()");
     }
 
     @Override
     public void endActionMode() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "endActionMode()");
     }
 
     @Override
     public void attachSubWindow(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "attachSubWindow()");
     }
 
     @Override
     public void dismissSubWindow(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "dismissSubWindow()");
     }
 
     @Override
-    public Tab openTab(String url, boolean incognito, boolean setActive,
-                                    boolean useCurrent) {
+    public Tab openTab(String url, boolean incognito, boolean setActive, boolean useCurrent) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "openTab()");
         return null;
     }
 
     @Override
-    public Tab openTab(String url, Tab parent, boolean setActive,
-                                    boolean useCurrent) {
+    public Tab openTab(String url, Tab parent, boolean setActive, boolean useCurrent) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "openTab()");
         return null;
     }
 
     @Override
     public boolean switchToTab(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "switchToTab()");
         return false;
     }
 
     @Override
     public void closeTab(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "closeTab()");
     }
 
     @Override
     public void setupAutoFill(Message message) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "setupAutoFill()");
     }
 
     @Override
     public void bookmarkedStatusHasChanged(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "bookmarkedStatusHasChanged()");
     }
 
     @Override
     public void showAutoLogin(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "showAutoLogin()");
     }
 
     @Override
     public void hideAutoLogin(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "hideAutoLogin()");
     }
 
 }
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index 99592fb..d2482a4 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -15,6 +15,7 @@
  */
 package com.android.browser;
 
+import android.net.Uri;
 import android.text.TextUtils;
 import android.util.Log;
 import android.webkit.SearchBox;
@@ -25,7 +26,7 @@
  * Class to manage the controlling of preloaded tab.
  */
 public class PreloadedTabControl {
-    private static final boolean LOGD_ENABLED = true;//com.android.browser.Browser.LOGD_ENABLED;
+    private static final boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
     private static final String LOGTAG = "PreloadedTabControl";
 
     final Tab mTab;
@@ -33,17 +34,26 @@
     private boolean mDestroyed;
 
     public PreloadedTabControl(Tab t) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "PreloadedTabControl.<init>");
         mTab = t;
     }
 
-    private void maybeSetQuery(String query, SearchBox sb) {
+    private void maybeSetQuery(final String query, SearchBox sb) {
         if (!TextUtils.equals(mLastQuery, query)) {
             if (sb != null) {
                 if (LOGD_ENABLED) Log.d(LOGTAG, "Changing searchbox query to " + query);
                 sb.setVerbatim(true);
                 sb.setQuery(query);
-                sb.onchange();
-                mLastQuery = query;
+                sb.onchange(new SearchBox.SearchBoxListener() {
+                    @Override
+                    public void onChangeComplete(boolean called) {
+                        if (mDestroyed) return;
+                        if (LOGD_ENABLED) Log.d(LOGTAG, "Changed searchbox query: " + called);
+                        if (called) {
+                            mLastQuery = query;
+                        }
+                    }
+                });
             } else {
                 if (LOGD_ENABLED) Log.d(LOGTAG, "Cannot set query: no searchbox interface");
             }
@@ -62,30 +72,34 @@
             if (LOGD_ENABLED) Log.d(LOGTAG, "No searchbox, cannot submit query");
             return false;
         }
-        sb.isSupported(new SearchBox.IsSupportedCallback() {
+        maybeSetQuery(query, sb);
+        if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
+        sb.onsubmit(new SearchBox.SearchBoxListener() {
             @Override
-            public void searchBoxIsSupported(boolean supported) {
-                if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox supported: " + supported);
-                if (mDestroyed) {
-                    if (LOGD_ENABLED) Log.d(LOGTAG, "tab has been destroyed");
-                    return;
-                }
-                if (supported) {
-                    maybeSetQuery(query, sb);
-                    if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
-                    sb.onsubmit();
-                } else {
-                    if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox not supported; falling back");
+            public void onSubmitComplete(boolean called) {
+                if (mDestroyed) return;
+                if (LOGD_ENABLED) Log.d(LOGTAG, "Query submitted: " + called);
+                if (!called) {
+                    if (LOGD_ENABLED) Log.d(LOGTAG, "Query not submitted; falling back");
                     loadUrl(fallbackUrl, fallbackHeaders);
                 }
                 mTab.getWebView().clearHistory();
-            }
-        });
+            }});
         return true;
     }
 
     public void loadUrlIfChanged(String url, Map<String, String> headers) {
-        if (!TextUtils.equals(url, mTab.getUrl())) {
+        String currentUrl = mTab.getUrl();
+        if (!TextUtils.isEmpty(currentUrl)) {
+            try {
+                // remove fragment:
+                currentUrl = Uri.parse(currentUrl).buildUpon().fragment(null).build().toString();
+            } catch (UnsupportedOperationException e) {
+                // carry on
+            }
+        }
+        if (LOGD_ENABLED) Log.d(LOGTAG, "loadUrlIfChanged\nnew: " + url + "\nold: " +currentUrl);
+        if (!TextUtils.equals(url, currentUrl)) {
             loadUrl(url, headers);
         }
     }
@@ -96,6 +110,7 @@
     }
 
     public void destroy() {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "PreloadedTabControl.destroy");
         mDestroyed = true;
         mTab.destroy();
     }
diff --git a/src/com/android/browser/Preloader.java b/src/com/android/browser/Preloader.java
index 336b77a..cc71f34 100644
--- a/src/com/android/browser/Preloader.java
+++ b/src/com/android/browser/Preloader.java
@@ -19,8 +19,8 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
+import android.webkit.WebView;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -38,7 +38,7 @@
     private final Context mContext;
     private final Handler mHandler;
     private final BrowserWebViewFactory mFactory;
-    private final HashMap<String, PreloaderSession> mSessions;
+    private volatile PreloaderSession mSession;
 
     public static void initialize(Context context) {
         sInstance = new Preloader(context);
@@ -51,32 +51,52 @@
     private Preloader(Context context) {
         mContext = context;
         mHandler = new Handler(Looper.getMainLooper());
-        mSessions = new HashMap<String, PreloaderSession>();
+        mSession = null;
         mFactory = new BrowserWebViewFactory(context);
 
     }
 
     private PreloaderSession getSession(String id) {
-        PreloaderSession s = mSessions.get(id);
-        if (s == null) {
+        if (mSession == null) {
             if (LOGD_ENABLED) Log.d(LOGTAG, "Create new preload session " + id);
-            s = new PreloaderSession(id);
-            mSessions.put(id, s);
+            mSession = new PreloaderSession(id);
+            WebViewTimersControl.getInstance().onPrerenderStart(
+                    mSession.getWebView());
+            return mSession;
+        } else if (mSession.mId.equals(id)) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Returning existing preload session " + id);
+            return mSession;
         }
-        return s;
+
+        if (LOGD_ENABLED) Log.d(LOGTAG, "Existing session in progress : " + mSession.mId +
+                " returning null.");
+        return null;
     }
 
     private PreloaderSession takeSession(String id) {
-        PreloaderSession s = mSessions.remove(id);
+        PreloaderSession s = null;
+        if (mSession != null && mSession.mId.equals(id)) {
+            s = mSession;
+            mSession = null;
+        }
+
         if (s != null) {
             s.cancelTimeout();
         }
+
+        WebViewTimersControl.getInstance().onPrerenderDone(s == null ? null : s.getWebView());
         return s;
     }
 
     public void handlePreloadRequest(String id, String url, Map<String, String> headers,
             String searchBoxQuery) {
         PreloaderSession s = getSession(id);
+        if (s == null) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Discarding preload request, existing"
+                    + " session in progress");
+            return;
+        }
+
         s.touch(); // reset timer
         PreloadedTabControl tab = s.getTabControl();
         if (searchBoxQuery != null) {
@@ -139,6 +159,11 @@
             return mTabControl;
         }
 
+        public WebView getWebView() {
+            Tab t = mTabControl.getTab();
+            return t == null? null : t.getWebView();
+        }
+
     }
 
 }
diff --git a/src/com/android/browser/ShortcutActivity.java b/src/com/android/browser/ShortcutActivity.java
index af1788d..134bf23 100644
--- a/src/com/android/browser/ShortcutActivity.java
+++ b/src/com/android/browser/ShortcutActivity.java
@@ -19,7 +19,6 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.database.Cursor;
-import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -59,7 +58,7 @@
     }
 
     @Override
-    public boolean onOpenInNewWindow(Cursor c) {
+    public boolean onOpenInNewWindow(String... urls) {
         return false;
     }
 
diff --git a/src/com/android/browser/SnapshotBar.java b/src/com/android/browser/SnapshotBar.java
new file mode 100644
index 0000000..9fb68cf
--- /dev/null
+++ b/src/com/android/browser/SnapshotBar.java
@@ -0,0 +1,219 @@
+/*
+ * 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.graphics.Bitmap;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewConfiguration;
+import android.view.ViewPropertyAnimator;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+public class SnapshotBar extends LinearLayout implements OnClickListener {
+
+    private static final int MSG_SHOW_TITLE = 1;
+    private static final long DURATION_SHOW_DATE = BaseUi.HIDE_TITLEBAR_DELAY;
+
+    private ImageView mFavicon;
+    private View mGoLive;
+    private TextView mDate;
+    private TextView mTitle;
+    private View mBookmarks;
+    private TitleBar mTitleBar;
+    private View mTabSwitcher;
+    private View mOverflowMenu;
+    private View mToggleContainer;
+    private boolean mIsAnimating;
+    private ViewPropertyAnimator mTitleAnimator, mDateAnimator;
+    private float mAnimRadius = 20f;
+    private View mDateContainer;
+
+    public SnapshotBar(Context context) {
+        super(context);
+    }
+
+    public SnapshotBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SnapshotBar(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public void setTitleBar(TitleBar titleBar) {
+        mTitleBar = titleBar;
+        setFavicon(null);
+    }
+
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == MSG_SHOW_TITLE) {
+                mIsAnimating = false;
+                showTitle();
+                mTitleBar.getUi().showTitleBarForDuration();
+            }
+        }
+    };
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mGoLive = mFavicon = (ImageView) findViewById(R.id.favicon);
+        if (mGoLive == null) {
+            mGoLive = findViewById(R.id.date_icon);
+        }
+        mDate = (TextView) findViewById(R.id.date);
+        mTitle = (TextView) findViewById(R.id.title);
+        mBookmarks = findViewById(R.id.all_btn);
+        mTabSwitcher = findViewById(R.id.tab_switcher);
+        mOverflowMenu = findViewById(R.id.more);
+        mToggleContainer = findViewById(R.id.toggle_container);
+        mDateContainer = findViewById(R.id.date_container);
+
+        if (mBookmarks != null) {
+            mBookmarks.setOnClickListener(this);
+        }
+        if (mTabSwitcher != null) {
+            mTabSwitcher.setOnClickListener(this);
+        }
+        if (mOverflowMenu != null) {
+            mOverflowMenu.setOnClickListener(this);
+            boolean showMenu = !ViewConfiguration.get(getContext())
+                    .hasPermanentMenuKey();
+            mOverflowMenu.setVisibility(showMenu ? VISIBLE : GONE);
+        }
+        if (mToggleContainer != null) {
+            mToggleContainer.setOnClickListener(this);
+            resetAnimation();
+        }
+        mGoLive.setOnClickListener(this);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        super.onLayout(changed, l, t, r, b);
+        if (mToggleContainer != null) {
+            mAnimRadius = mToggleContainer.getHeight() / 2f;
+        }
+    }
+
+    void resetAnimation() {
+        if (mToggleContainer == null) {
+            // No animation needed/used
+            return;
+        }
+        if (mTitleAnimator != null) {
+            mTitleAnimator.cancel();
+            mTitleAnimator = null;
+        }
+        if (mDateAnimator != null) {
+            mDateAnimator.cancel();
+            mDateAnimator = null;
+        }
+        mIsAnimating = false;
+        mHandler.removeMessages(MSG_SHOW_TITLE);
+        mTitle.setAlpha(1f);
+        mTitle.setTranslationY(0f);
+        mTitle.setRotationX(0f);
+        mDateContainer.setAlpha(0f);
+        mDateContainer.setTranslationY(-mAnimRadius);
+        mDateContainer.setRotationX(90f);
+    }
+
+    private void showDate() {
+        mTitleAnimator = mTitle.animate()
+                .alpha(0f)
+                .translationY(mAnimRadius)
+                .rotationX(-90f);
+        mDateAnimator = mDateContainer.animate()
+                .alpha(1f)
+                .translationY(0f)
+                .rotationX(0f);
+    }
+
+    private void showTitle() {
+        mTitleAnimator = mTitle.animate()
+                .alpha(1f)
+                .translationY(0f)
+                .rotationX(0f);
+        mDateAnimator = mDateContainer.animate()
+                .alpha(0f)
+                .translationY(-mAnimRadius)
+                .rotationX(90f);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (mBookmarks == v) {
+            mTitleBar.getUiController().bookmarksOrHistoryPicker(false);
+        } else if (mGoLive == v) {
+            goLive();
+        } else if (mTabSwitcher == v) {
+            ((PhoneUi) mTitleBar.getUi()).toggleNavScreen();
+        } else if (mOverflowMenu == v) {
+            NavigationBarBase navBar = mTitleBar.getNavigationBar();
+            if (navBar instanceof NavigationBarPhone) {
+                ((NavigationBarPhone)navBar).showMenu(mOverflowMenu);
+            }
+        } else if (mToggleContainer == v && !mIsAnimating) {
+            mIsAnimating = true;
+            showDate();
+            mTitleBar.getUi().showTitleBar();
+            Message m = mHandler.obtainMessage(MSG_SHOW_TITLE);
+            mHandler.sendMessageDelayed(m, DURATION_SHOW_DATE);
+        }
+    }
+
+    private void goLive() {
+        Tab t = mTitleBar.getUi().getActiveTab();
+        t.loadUrl(t.getUrl(), null);
+    }
+
+    public void onTabDataChanged(Tab tab) {
+        if (!tab.isSnapshot()) return;
+        SnapshotTab snapshot = (SnapshotTab) tab;
+        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
+        mDate.setText(dateFormat.format(new Date(snapshot.getDateCreated())));
+        String title = snapshot.getTitle();
+        if (TextUtils.isEmpty(title)) {
+            title = UrlUtils.stripUrl(snapshot.getUrl());
+        }
+        mTitle.setText(title);
+        setFavicon(tab.getFavicon());
+        resetAnimation();
+    }
+
+    public void setFavicon(Bitmap icon) {
+        if (mFavicon == null) return;
+        mFavicon.setImageDrawable(mTitleBar.getUi().getFaviconDrawable(icon));
+    }
+
+    public boolean isAnimating() {
+        return mIsAnimating;
+    }
+
+}
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java
index f0abf58..e57502f 100644
--- a/src/com/android/browser/SnapshotTab.java
+++ b/src/com/android/browser/SnapshotTab.java
@@ -28,6 +28,7 @@
 import com.android.browser.provider.SnapshotProvider.Snapshots;
 
 import java.io.ByteArrayInputStream;
+import java.util.Map;
 import java.util.zip.GZIPInputStream;
 
 
@@ -38,19 +39,16 @@
     private long mSnapshotId;
     private LoadData mLoadTask;
     private WebViewFactory mWebViewFactory;
-    // TODO: Support non-persistent webview's on phone
-    private boolean mPersistentWebview;
     private int mBackgroundColor;
+    private long mDateCreated;
+    private boolean mIsLive;
 
     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);
-        }
+        WebView web = mWebViewFactory.createWebView(false);
+        setWebView(web);
         loadData();
     }
 
@@ -71,9 +69,6 @@
     void putInBackground() {
         if (getWebView() == null) return;
         super.putInBackground();
-        if (!mPersistentWebview) {
-            super.destroy();
-        }
     }
 
     void loadData() {
@@ -90,7 +85,7 @@
 
     @Override
     public boolean isSnapshot() {
-        return true;
+        return !mIsLive;
     }
 
     public long getSnapshotId() {
@@ -107,6 +102,40 @@
         return false;
     }
 
+    public long getDateCreated() {
+        return mDateCreated;
+    }
+
+    @Override
+    public void loadUrl(String url, Map<String, String> headers) {
+        if (!mIsLive) {
+            mIsLive = true;
+            getWebView().clearViewState();
+        }
+        super.loadUrl(url, headers);
+    }
+
+    @Override
+    public boolean canGoBack() {
+        return super.canGoBack() || mIsLive;
+    }
+
+    @Override
+    public boolean canGoForward() {
+        return mIsLive && super.canGoForward();
+    }
+
+    @Override
+    public void goBack() {
+        if (super.canGoBack()) {
+            super.goBack();
+        } else {
+            mIsLive = false;
+            getWebView().stopLoading();
+            loadData();
+        }
+    }
+
     static class LoadData extends AsyncTask<Void, Void, Cursor> {
 
         static final String[] PROJECTION = new String[] {
@@ -116,6 +145,7 @@
             Snapshots.FAVICON, // 3
             Snapshots.VIEWSTATE, // 4
             Snapshots.BACKGROUND, // 5
+            Snapshots.DATE_CREATED, // 6
         };
 
         private SnapshotTab mTab;
@@ -156,6 +186,7 @@
                         }
                     }
                     mTab.mBackgroundColor = result.getInt(5);
+                    mTab.mDateCreated = result.getLong(6);
                     mTab.mWebViewController.onPageFinished(mTab);
                 }
             } finally {
diff --git a/src/com/android/browser/SystemAllowGeolocationOrigins.java b/src/com/android/browser/SystemAllowGeolocationOrigins.java
index b53611f..a01541f 100644
--- a/src/com/android/browser/SystemAllowGeolocationOrigins.java
+++ b/src/com/android/browser/SystemAllowGeolocationOrigins.java
@@ -73,49 +73,48 @@
     }
 
     void maybeApplySettingAsync() {
-        new AsyncTask<Void,Void,Void>() {
-            @Override
-            protected Void doInBackground(Void... params) {
-                maybeApplySetting();
-                return null;
-            }
-        }.execute();
+        BackgroundHandler.execute(mMaybeApplySetting);
     }
 
     /**
      * Checks to see if the system setting has changed and if so,
      * updates the Geolocation permissions accordingly.
      */
-    private void maybeApplySetting() {
-        // Get the new value
-        String newSetting = getSystemSetting();
+    private Runnable mMaybeApplySetting = new Runnable() {
 
-        // Get the last read value
-        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
-        String lastReadSetting =
-                preferences.getString(LAST_READ_ALLOW_GEOLOCATION_ORIGINS, "");
+        @Override
+        public void run() {
+         // Get the new value
+            String newSetting = getSystemSetting();
 
-        // If the new value is the same as the last one we read, we're done.
-        if (TextUtils.equals(lastReadSetting, newSetting)) {
-            return;
+            // Get the last read value
+            SharedPreferences preferences = BrowserSettings.getInstance()
+                    .getPreferences();
+            String lastReadSetting =
+                    preferences.getString(LAST_READ_ALLOW_GEOLOCATION_ORIGINS, "");
+
+            // If the new value is the same as the last one we read, we're done.
+            if (TextUtils.equals(lastReadSetting, newSetting)) {
+                return;
+            }
+
+            // Save the new value as the last read value
+            preferences.edit()
+                    .putString(LAST_READ_ALLOW_GEOLOCATION_ORIGINS, newSetting)
+                    .apply();
+
+            Set<String> oldOrigins = parseAllowGeolocationOrigins(lastReadSetting);
+            Set<String> newOrigins = parseAllowGeolocationOrigins(newSetting);
+            Set<String> addedOrigins = setMinus(newOrigins, oldOrigins);
+            Set<String> removedOrigins = setMinus(oldOrigins, newOrigins);
+
+            // Remove the origins in the last read value
+            removeOrigins(removedOrigins);
+
+            // Add the origins in the new value
+            addOrigins(addedOrigins);
         }
-
-        // Save the new value as the last read value
-        preferences.edit()
-                .putString(LAST_READ_ALLOW_GEOLOCATION_ORIGINS, newSetting)
-                .apply();
-
-        Set<String> oldOrigins = parseAllowGeolocationOrigins(lastReadSetting);
-        Set<String> newOrigins = parseAllowGeolocationOrigins(newSetting);
-        Set<String> addedOrigins = setMinus(newOrigins, oldOrigins);
-        Set<String> removedOrigins = setMinus(oldOrigins, newOrigins);
-
-        // Remove the origins in the last read value
-        removeOrigins(removedOrigins);
-
-        // Add the origins in the new value
-        addOrigins(addedOrigins);
-    }
+    };
 
     /**
      * Parses the value of the default geolocation permissions setting.
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index d8a3af9..beac2ff 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -26,11 +26,14 @@
 import android.content.DialogInterface.OnCancelListener;
 import android.content.Intent;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Bitmap.CompressFormat;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Picture;
 import android.net.Uri;
 import android.net.http.SslError;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
 import android.security.KeyChain;
@@ -57,6 +60,7 @@
 import android.webkit.WebResourceResponse;
 import android.webkit.WebStorage;
 import android.webkit.WebView;
+import android.webkit.WebView.PictureListener;
 import android.webkit.WebViewClient;
 import android.widget.CheckBox;
 import android.widget.LinearLayout;
@@ -79,7 +83,7 @@
 /**
  * Class for maintaining Tabs with a main WebView and a subwindow.
  */
-class Tab {
+class Tab implements PictureListener {
 
     // Log Tag
     private static final String LOGTAG = "Tab";
@@ -88,6 +92,9 @@
     // of the browser.
     private static final String CONSOLE_LOGTAG = "browser";
 
+    private static final int MSG_CAPTURE = 42;
+    private static final int CAPTURE_DELAY = 500;
+
     public enum LockIcon {
         LOCK_ICON_UNSECURE,
         LOCK_ICON_SECURE,
@@ -148,8 +155,12 @@
     // AsyncTask for downloading touch icons
     DownloadTouchIcon mTouchIconLoader;
 
-    private Bitmap mScreenshot;
     private BrowserSettings mSettings;
+    private int mCaptureWidth;
+    private int mCaptureHeight;
+    private Bitmap mCapture;
+    private Handler mHandler;
+
 
     // All the state needed for a page
     protected static class PageState {
@@ -555,6 +566,11 @@
 
         @Override
         public void onPageFinished(WebView view, String url) {
+            if (!mInPageLoad) {
+                // In page navigation links (www.something.com#footer) will
+                // trigger an onPageFinished which we don't care about.
+                return;
+            }
             if (!isPrivateBrowsingEnabled()) {
                 LogTag.logPageFinishedLoading(
                         url, SystemClock.uptimeMillis() - mLoadStartTime);
@@ -1378,6 +1394,16 @@
         };
 
         setWebView(w);
+        mCaptureWidth = mContext.getResources().getDimensionPixelSize(R.dimen.nav_tab_width);
+        mCaptureHeight = mContext.getResources().getDimensionPixelSize(R.dimen.nav_tab_height);
+        mCapture = Bitmap.createBitmap(mCaptureWidth, mCaptureHeight,
+                Bitmap.Config.RGB_565);
+        mHandler = new Handler() {
+            public void handleMessage(Message m) {
+                Tab.this.capture();
+            }
+        };
+
     }
 
     public void setController(WebViewController ctl) {
@@ -1421,6 +1447,7 @@
             // switched to another tab while waiting for the download to start.
             mMainView.setDownloadListener(mDownloadListener);
             mMainView.setWebBackForwardListClient(mWebBackForwardListClient);
+            mMainView.setPictureListener(this);
         }
     }
 
@@ -1430,6 +1457,8 @@
     void destroy() {
         if (mMainView != null) {
             dismissSubWindow();
+            // Make sure the embedded title bar isn't still attached
+            mMainView.setEmbeddedTitleBar(null);
             // save the WebView to call destroy() after detach it from the tab
             WebView webView = mMainView;
             setWebView(null);
@@ -1775,9 +1804,9 @@
     }
 
     Bundle getSavedState(boolean saveImages) {
-        if (saveImages && mScreenshot != null) {
+        if (saveImages && mCapture != null) {
             Bundle b = new Bundle(mSavedState);
-            b.putParcelable(SCREENSHOT, mScreenshot);
+            b.putParcelable(SCREENSHOT, mCapture);
             return b;
         }
         return mSavedState;
@@ -1836,7 +1865,10 @@
         mSavedState = null;
         mId = b.getLong(ID);
         mAppId = b.getString(APPID);
-        mScreenshot = b.getParcelable(SCREENSHOT);
+        final Bitmap sshot = b.getParcelable(SCREENSHOT);
+        if (sshot != null) {
+            mCapture = sshot;
+        }
         if (b.getBoolean(USERAGENT)
                 != mSettings.hasDesktopUseragent(getWebView())) {
             mSettings.toggleDesktopUseragent(getWebView());
@@ -1865,11 +1897,11 @@
     };
 
     public void setScreenshot(Bitmap screenshot) {
-        mScreenshot = screenshot;
+        mCapture = screenshot;
     }
 
     public Bitmap getScreenshot() {
-        return mScreenshot;
+        return mCapture;
     }
 
     public boolean isSnapshot() {
@@ -1922,4 +1954,43 @@
         }
     }
 
+    protected void capture() {
+        if (mMainView == null || mCapture == null) return;
+        Canvas c = new Canvas(mCapture);
+        final int left = mMainView.getScrollX();
+        final int top = mMainView.getScrollY() + mMainView.getVisibleTitleHeight();
+        c.translate(-left, -top);
+        float scale = mCaptureWidth / (float) mMainView.getWidth();
+        c.scale(scale, scale, left, top);
+        mMainView.draw(c);
+    }
+
+    @Override
+    public void onNewPicture(WebView view, Picture picture) {
+        //update screenshot
+        if (!mHandler.hasMessages(MSG_CAPTURE)) {
+            mHandler.sendEmptyMessageDelayed(MSG_CAPTURE, CAPTURE_DELAY);
+        }
+    }
+
+    public boolean canGoBack() {
+        return mMainView != null ? mMainView.canGoBack() : false;
+    }
+
+    public boolean canGoForward() {
+        return mMainView != null ? mMainView.canGoForward() : false;
+    }
+
+    public void goBack() {
+        if (mMainView != null) {
+            mMainView.goBack();
+        }
+    }
+
+    public void goForward() {
+        if (mMainView != null) {
+            mMainView.goForward();
+        }
+    }
+
 }
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 5f3995f..7055ef3 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -155,7 +155,7 @@
     }
 
     boolean canCreateNewTab() {
-        return mMaxTabs != mTabs.size();
+        return mMaxTabs > mTabs.size();
     }
 
     /**
@@ -186,11 +186,10 @@
      *         number of open tabs.
      */
     Tab createNewTab(boolean privateBrowsing) {
-        int size = mTabs.size();
-        // Return false if we have maxed out on tabs
-        if (mMaxTabs == size) {
+        if (!canCreateNewTab()) {
             return null;
         }
+
         final WebView w = createNewWebView(privateBrowsing);
 
         // Create a new tab and add it to the tab list
@@ -297,10 +296,12 @@
         long[] ids = new long[numTabs];
         int i = 0;
         for (Tab tab : mTabs) {
-            ids[i++] = tab.getId();
             if (tab.saveState()) {
+                ids[i++] = tab.getId();
                 outState.putBundle(Long.toString(tab.getId()),
                         tab.getSavedState(saveImages));
+            } else {
+                ids[i++] = -1;
             }
         }
         if (!outState.isEmpty()) {
@@ -327,13 +328,12 @@
         }
         final long oldcurrent = inState.getLong(CURRENT);
         long current = -1;
-        if (restoreIncognitoTabs ||
-                !inState.getBundle(Long.toString(oldcurrent)).getBoolean(Tab.INCOGNITO)) {
+        if (restoreIncognitoTabs || (hasState(oldcurrent, inState) && !isIncognito(oldcurrent, inState))) {
                 current = oldcurrent;
         } else {
             // pick first non incognito tab
             for (long id : ids) {
-                if (!inState.getBundle(Long.toString(id)).getBoolean(Tab.INCOGNITO)) {
+                if (hasState(id, inState) && !isIncognito(id, inState)) {
                     current = id;
                     break;
                 }
@@ -342,6 +342,20 @@
         return current;
     }
 
+    private boolean hasState(long id, Bundle state) {
+        if (id == -1) return false;
+        Bundle tab = state.getBundle(Long.toString(id));
+        return ((tab != null) && !tab.isEmpty());
+    }
+
+    private boolean isIncognito(long id, Bundle state) {
+        Bundle tabstate = state.getBundle(Long.toString(id));
+        if ((tabstate != null) && !tabstate.isEmpty()) {
+            return tabstate.getBoolean(Tab.INCOGNITO);
+        }
+        return false;
+    }
+
     /**
      * Restore the state of all the tabs.
      * @param currentId The tab id to restore.
@@ -374,6 +388,11 @@
                 // ignore tab
             } else if (id == currentId || restoreAll) {
                 Tab t = createNewTab();
+                if (t == null) {
+                    // We could "break" at this point, but we want
+                    // sNextId to be set correctly.
+                    continue;
+                }
                 tabMap.put(id, t);
                 // Me must set the current tab before restoring the state
                 // so that all the client classes are set.
@@ -401,11 +420,12 @@
                 // added the tab to the front as they are not current
                 mTabQueue.add(0, t);
             }
-            // make sure that there is no id overlap between the restored
-            // and new tabs
-            sNextId = maxId + 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));
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
new file mode 100644
index 0000000..9848a39
--- /dev/null
+++ b/src/com/android/browser/TitleBar.java
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.view.animation.DecelerateInterpolator;
+import android.webkit.WebView;
+import android.widget.AbsoluteLayout;
+import android.widget.FrameLayout;
+import android.widget.RelativeLayout;
+
+
+/**
+ * Base class for a title bar used by the browser.
+ */
+public class TitleBar extends RelativeLayout {
+
+    private static final int PROGRESS_MAX = 100;
+    private static final float ANIM_TITLEBAR_DECELERATE = 2.5f;
+
+    private UiController mUiController;
+    private BaseUi mBaseUi;
+    private FrameLayout mParent;
+    private PageProgressView mProgress;
+
+    private AutologinBar mAutoLogin;
+    private NavigationBarBase mNavBar;
+    private boolean mUseQuickControls;
+    private SnapshotBar mSnapshotBar;
+
+    //state
+    private boolean mShowing;
+    private boolean mInLoad;
+    private boolean mSkipTitleBarAnimations;
+    private Animator mTitleBarAnimator;
+
+    public TitleBar(Context context, UiController controller, BaseUi ui,
+            FrameLayout parent) {
+        super(context, null);
+        mUiController = controller;
+        mBaseUi = ui;
+        mParent = parent;
+        initLayout(context);
+    }
+
+    private void initLayout(Context context) {
+        LayoutInflater factory = LayoutInflater.from(context);
+        factory.inflate(R.layout.title_bar, this);
+        mProgress = (PageProgressView) findViewById(R.id.progress);
+        mAutoLogin = (AutologinBar) findViewById(R.id.autologin);
+        mAutoLogin.setTitleBar(this);
+        mNavBar = (NavigationBarBase) findViewById(R.id.taburlbar);
+        mNavBar.setTitleBar(this);
+        mSnapshotBar = (SnapshotBar) findViewById(R.id.snapshotbar);
+        mSnapshotBar.setTitleBar(this);
+    }
+
+    public BaseUi getUi() {
+        return mBaseUi;
+    }
+
+    public UiController getUiController() {
+        return mUiController;
+    }
+
+    public void setUseQuickControls(boolean use) {
+        mUseQuickControls = use;
+        setLayoutParams(makeLayoutParams());
+    }
+
+    void setShowProgressOnly(boolean progress) {
+        if (progress && !wantsToBeVisible()) {
+            mNavBar.setVisibility(View.GONE);
+        } else {
+            mNavBar.setVisibility(View.VISIBLE);
+        }
+    }
+
+    void setSkipTitleBarAnimations(boolean skip) {
+        mSkipTitleBarAnimations = skip;
+    }
+
+    void setupTitleBarAnimator(Animator animator) {
+        Resources res = mContext.getResources();
+        int duration = res.getInteger(R.integer.titlebar_animation_duration);
+        animator.setInterpolator(new DecelerateInterpolator(
+                ANIM_TITLEBAR_DECELERATE));
+        animator.setDuration(duration);
+    }
+
+    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);
+                setupTitleBarAnimator(mTitleBarAnimator);
+                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);
+                setupTitleBarAnimator(mTitleBarAnimator);
+                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;
+        }
+
+        @Override
+        public void onAnimationRepeat(Animator animation) {
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            if (!mWasCanceled) {
+                setTranslationY(0);
+            }
+            mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
+        }
+
+        @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.
+     */
+    public void setProgress(int newProgress) {
+        if (newProgress >= PROGRESS_MAX) {
+            mProgress.setProgress(PageProgressView.MAX_PROGRESS);
+            mProgress.setVisibility(View.GONE);
+            mInLoad = false;
+            mNavBar.onProgressStopped();
+            // check if needs to be hidden
+            if (!isEditingUrl() && !wantsToBeVisible()) {
+                hide();
+                if (mUseQuickControls) {
+                    setShowProgressOnly(false);
+                }
+            }
+        } else {
+            if (!mInLoad) {
+                mProgress.setVisibility(View.VISIBLE);
+                mInLoad = true;
+                mNavBar.onProgressStarted();
+            }
+            mProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS
+                    / PROGRESS_MAX);
+            if (!mShowing) {
+                if (mUseQuickControls && !isEditingUrl()) {
+                    setShowProgressOnly(true);
+                }
+                show();
+            }
+        }
+    }
+
+    public int getEmbeddedHeight() {
+        int height = mNavBar.getHeight();
+        if (mAutoLogin.getVisibility() == View.VISIBLE) {
+            height += mAutoLogin.getHeight();
+        }
+        return height;
+    }
+
+    public void updateAutoLogin(Tab tab, boolean animate) {
+        mAutoLogin.updateAutoLogin(tab, animate);
+    }
+
+    public void showAutoLogin(boolean animate) {
+        if (mUseQuickControls) {
+            mBaseUi.showTitleBar();
+        }
+        mAutoLogin.setVisibility(View.VISIBLE);
+        if (animate) {
+            mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
+                    getContext(), R.anim.autologin_enter));
+        }
+    }
+
+    public void hideAutoLogin(boolean animate) {
+        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();
+            }
+        }
+    }
+
+    public boolean wantsToBeVisible() {
+        return inAutoLogin()
+            || (mSnapshotBar.getVisibility() == View.VISIBLE
+                    && mSnapshotBar.isAnimating());
+    }
+
+    private boolean inAutoLogin() {
+        return mAutoLogin.getVisibility() == View.VISIBLE;
+    }
+
+    public boolean isEditingUrl() {
+        return mNavBar.isEditingUrl();
+    }
+
+    public WebView getCurrentWebView() {
+        Tab t = mBaseUi.getActiveTab();
+        if (t != null) {
+            return t.getWebView();
+        } else {
+            return null;
+        }
+    }
+
+    public PageProgressView getProgressView() {
+        return mProgress;
+    }
+
+    public NavigationBarBase getNavigationBar() {
+        return mNavBar;
+    }
+
+    public boolean useQuickControls() {
+        return mUseQuickControls;
+    }
+
+    public boolean isInLoad() {
+        return mInLoad;
+    }
+
+    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 View focusSearch(View focused, int dir) {
+        if (FOCUS_DOWN == dir && hasFocus()) {
+            return getCurrentWebView();
+        }
+        return super.focusSearch(focused, dir);
+    }
+
+    public void onTabDataChanged(Tab tab) {
+        mSnapshotBar.onTabDataChanged(tab);
+        if (tab.isSnapshot()) {
+            mSnapshotBar.setVisibility(VISIBLE);
+            mNavBar.setVisibility(GONE);
+        } else {
+            mSnapshotBar.setVisibility(GONE);
+            mNavBar.setVisibility(VISIBLE);
+        }
+    }
+
+}
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
deleted file mode 100644
index 17b9e19..0000000
--- a/src/com/android/browser/TitleBarBase.java
+++ /dev/null
@@ -1,664 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-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.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-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.view.animation.DecelerateInterpolator;
-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.PopupMenu;
-import android.widget.PopupMenu.OnMenuItemClickListener;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.TextView;
-
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.UrlInputView.UrlInputListener;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-
-import java.util.List;
-
-/**
- * Base class for a title bar used by the browser.
- */
-public class TitleBarBase extends RelativeLayout
-        implements OnClickListener, OnFocusChangeListener, UrlInputListener,
-        TextChangeWatcher, DeviceAccountLogin.AutoLoginCallback,
-        OnMenuItemClickListener {
-
-    protected static final int PROGRESS_MAX = 100;
-    private static final float ANIM_TITLEBAR_DECELERATE = 2.5f;
-
-    // These need to be set by the subclass.
-    protected ImageView mFavicon;
-    protected ImageView mLockIcon;
-
-    protected UiController mUiController;
-    protected BaseUi mBaseUi;
-    protected FrameLayout mParent;
-    protected PageProgressView mProgress;
-    protected UrlInputView mUrlInput;
-    protected boolean mInVoiceMode;
-    protected View mContainer;
-    private View mUaSwitcher;
-
-    // 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;
-        mParent = parent;
-    }
-
-    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 setupTitleBarAnimator(Animator animator) {
-        Resources res = mContext.getResources();
-        int duration = res.getInteger(R.integer.titlebar_animation_duration);
-        animator.setInterpolator(new DecelerateInterpolator(
-                ANIM_TITLEBAR_DECELERATE));
-        animator.setDuration(duration);
-    }
-
-    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);
-                setupTitleBarAnimator(mTitleBarAnimator);
-                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);
-                setupTitleBarAnimator(mTitleBarAnimator);
-                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;
-        }
-
-        @Override
-        public void onAnimationRepeat(Animator animation) {
-        }
-
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            if (!mWasCanceled) {
-                setTranslationY(0);
-            }
-            mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
-        }
-
-        @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;
-        if (null == d) {
-            mLockIcon.setVisibility(View.GONE);
-        } else {
-            mLockIcon.setImageDrawable(d);
-            mLockIcon.setVisibility(View.VISIBLE);
-        }
-    }
-
-    /* package */ void setFavicon(Bitmap icon) {
-        mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
-    }
-
-    public int getEmbeddedHeight() {
-        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) {
-            mBaseUi.showTitleBar();
-            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);
-                }
-            }
-            mBaseUi.suggestHideTitleBar();
-        }
-        mUrlInput.clearNeedsUpdate();
-    }
-
-    protected void setFocusState(boolean focus) {
-    }
-
-    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()) {
-            // 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
-
-    /**
-     * callback from suggestion dropdown
-     * user selected a suggestion
-     */
-    @Override
-    public void onAction(String text, String extra, String source) {
-        mUiController.getCurrentTopWebView().requestFocus();
-        if (UrlInputView.TYPED.equals(source)) {
-            String url = UrlUtils.smartUrlFilter(text, false);
-            Tab t = mBaseUi.getActiveTab();
-            // Only shortcut javascript URIs for now, as there is special
-            // logic in UrlHandler for other schemas
-            if (url != null && t != null && url.startsWith("javascript:")) {
-                mUiController.loadUrl(t, url);
-                setDisplayTitle(text);
-                return;
-            }
-        }
-        Intent i = new Intent();
-        String action = null;
-        if (UrlInputView.VOICE.equals(source)) {
-            action = RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS;
-            source = null;
-        } else {
-            action = Intent.ACTION_SEARCH;
-        }
-        i.setAction(action);
-        i.putExtra(SearchManager.QUERY, text);
-        if (extra != null) {
-            i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
-        }
-        if (source != null) {
-            Bundle appData = new Bundle();
-            appData.putString(com.android.common.Search.SOURCE, source);
-            i.putExtra(SearchManager.APP_DATA, appData);
-        }
-        mUiController.handleNewIntent(i);
-        setDisplayTitle(text);
-    }
-
-    @Override
-    public void onDismiss() {
-        final Tab currentTab = mBaseUi.getActiveTab();
-        mBaseUi.hideTitleBar();
-        post(new Runnable() {
-            public void run() {
-                clearFocus();
-                if ((currentTab != null) && !mInVoiceMode) {
-                    setDisplayTitle(currentTab.getUrl());
-                }
-            }
-        });
-    }
-
-    /**
-     * callback from the suggestion dropdown
-     * copy text to input field and stay in edit mode
-     */
-    @Override
-    public void onCopySuggestion(String text) {
-        mUrlInput.setText(text, true);
-        if (text != null) {
-            mUrlInput.setSelection(text.length());
-        }
-    }
-
-    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
deleted file mode 100644
index f41eca7..0000000
--- a/src/com/android/browser/TitleBarPhone.java
+++ /dev/null
@@ -1,199 +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.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.ImageView;
-
-import com.android.browser.UrlInputView.StateListener;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-
-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, StateListener {
-
-    private Activity mActivity;
-    private ImageView mStopButton;
-    private ImageView mVoiceButton;
-    private Drawable mStopDrawable;
-    private Drawable mRefreshDrawable;
-    private View mTabSwitcher;
-    private View mComboIcon;
-    private View mTitleContainer;
-    private Drawable mTextfieldBgDrawable;
-
-    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);
-        mTabSwitcher = findViewById(R.id.tab_switcher);
-        mTabSwitcher.setOnClickListener(this);
-        mComboIcon = findViewById(R.id.iconcombo);
-        mTitleContainer = findViewById(R.id.title_bg);
-        setFocusState(false);
-        Resources res = context.getResources();
-        mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark);
-        mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark);
-        mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark);
-        setUaSwitcher(mComboIcon);
-        mUrlInput.setContainer(this);
-        mUrlInput.setStateListener(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
-    void setProgress(int progress) {
-        super.setProgress(progress);
-        if (progress == 100) {
-            mStopButton.setVisibility(View.GONE);
-            mStopButton.setImageDrawable(mRefreshDrawable);
-            if (!isEditingUrl()) {
-                mComboIcon.setVisibility(View.VISIBLE);
-            }
-        } else {
-            if (mStopButton.getDrawable() != mStopDrawable) {
-                mStopButton.setImageDrawable(mStopDrawable);
-                if (mStopButton.getVisibility() != View.VISIBLE) {
-                    mComboIcon.setVisibility(View.GONE);
-                    mStopButton.setVisibility(View.VISIBLE);
-                }
-            }
-        }
-    }
-
-    /**
-     * 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);
-        }
-    }
-
-    @Override
-    public void onFocusChange(View v, boolean hasFocus) {
-        if (v == mUrlInput) {
-            if (hasFocus) {
-                mActivity.closeOptionsMenu();
-            }
-        }
-        super.onFocusChange(v, hasFocus);
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mStopButton) {
-            if (mInLoad) {
-                mUiController.stopLoading();
-            } else {
-                WebView web = mBaseUi.getWebView();
-                if (web != null) {
-                    stopEditingUrl();
-                    web.reload();
-                }
-            }
-        } else if (v == mVoiceButton) {
-            mUiController.startVoiceSearch();
-        } else if (v == mTabSwitcher) {
-            mBaseUi.onMenuKey();
-        } else {
-            super.onClick(v);
-        }
-    }
-
-    @Override
-    public void onStateChanged(int state) {
-        switch(state) {
-        case StateListener.STATE_NORMAL:
-            mComboIcon.setVisibility(View.VISIBLE);
-            mStopButton.setVisibility(View.GONE);
-            setSearchMode(false);
-            mTabSwitcher.setVisibility(View.VISIBLE);
-            mTitleContainer.setBackgroundDrawable(null);
-            break;
-        case StateListener.STATE_HIGHLIGHTED:
-            mComboIcon.setVisibility(View.GONE);
-            mStopButton.setVisibility(View.VISIBLE);
-            setSearchMode(true);
-            mTabSwitcher.setVisibility(View.GONE);
-            mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
-            break;
-        case StateListener.STATE_EDITED:
-            mComboIcon.setVisibility(View.GONE);
-            mStopButton.setVisibility(View.GONE);
-            setSearchMode(false);
-            mTabSwitcher.setVisibility(View.GONE);
-            mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
-            break;
-        }
-    }
-
-}
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 93f6e63..23897f7 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -22,6 +22,7 @@
 import android.view.ActionMode;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebView;
@@ -85,8 +86,6 @@
 
     public void showComboView(ComboViews startingView, Bundle extra);
 
-    public void hideComboView();
-
     public void showCustomView(View view, int requestedOrientation,
             CustomViewCallback callback);
 
@@ -104,6 +103,8 @@
 
     public void onExtendedMenuOpened();
 
+    public boolean onOptionsItemSelected(MenuItem item);
+
     public void onOptionsMenuClosed(boolean inLoad);
 
     public void onExtendedMenuClosed(boolean inLoad);
@@ -143,4 +144,7 @@
     void hideAutoLogin(Tab tab);
 
     void setFullscreen(boolean enabled);
+
+    void setUseQuickControls(boolean enabled);
+
 }
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index 6045d86..14d498c 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -16,19 +16,20 @@
 
 package com.android.browser;
 
-import com.android.browser.UI.DropdownChangeListener;
-
 import android.content.Intent;
+import android.view.Menu;
 import android.view.MenuItem;
 import android.webkit.WebView;
 
+import com.android.browser.UI.DropdownChangeListener;
+
 import java.util.List;
 
 
 /**
  * UI aspect of the controller
  */
-public interface UiController extends BookmarksHistoryCallbacks {
+public interface UiController {
 
     UI getUi();
 
@@ -36,6 +37,8 @@
 
     WebView getCurrentTopWebView();
 
+    Tab getCurrentTab();
+
     TabControl getTabControl();
 
     List<Tab> getTabs();
@@ -57,7 +60,7 @@
 
     void stopLoading();
 
-    void bookmarkCurrentPage(boolean canBeAnEdit);
+    Intent createBookmarkCurrentPageIntent(boolean canBeAnEdit);
 
     void bookmarksOrHistoryPicker(boolean openHistory);
 
@@ -69,14 +72,10 @@
 
     void editUrl();
 
-    void removeActiveTabsPage(boolean attach);
-
     void handleNewIntent(Intent intent);
 
     boolean shouldShowErrorConsole();
 
-    void removeComboView();
-
     void hideCustomView();
 
     void attachSubWindow(Tab tab);
@@ -89,9 +88,7 @@
 
     void shareCurrentPage();
 
-    void registerOptionsMenuHandler(OptionsMenuHandler handler);
-
-    void unregisterOptionsMenuHandler(OptionsMenuHandler handler);
+    void updateMenuState(Tab tab, Menu menu);
 
     void registerDropdownChangeListener(DropdownChangeListener d);
 
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 17d4062..74a58f3 100644
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -257,6 +257,8 @@
         }
 
         protected void onPostExecute(String result) {
+            // abort if we left browser already
+            if (mController.isActivityPaused()) return;
             // 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
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 8b5c292..2acc69b 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -187,6 +187,10 @@
         }
     }
 
+    int getState() {
+        return mState;
+    }
+
     void setVoiceResults(List<String> voiceResults) {
         mAdapter.setVoiceResults(voiceResults);
     }
diff --git a/src/com/android/browser/WebViewTimersControl.java b/src/com/android/browser/WebViewTimersControl.java
new file mode 100644
index 0000000..d6d1726
--- /dev/null
+++ b/src/com/android/browser/WebViewTimersControl.java
@@ -0,0 +1,91 @@
+/*
+ * 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.os.Looper;
+import android.util.Log;
+import android.webkit.WebView;
+
+/**
+ * Centralised point for controlling WebView timers pausing and resuming.
+ *
+ * All methods on this class should only be called from the UI thread.
+ */
+public class WebViewTimersControl {
+
+    private static final boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
+    private static final String LOGTAG = "WebViewTimersControl";
+
+    private static WebViewTimersControl sInstance;
+
+    private boolean mBrowserActive;
+    private boolean mPrerenderActive;
+
+    /**
+     * Get the static instance. Must be called from UI thread.
+     */
+    public static WebViewTimersControl getInstance() {
+        if (Looper.myLooper() != Looper.getMainLooper()) {
+            throw new IllegalStateException("WebViewTimersControl.get() called on wrong thread");
+        }
+        if (sInstance == null) {
+            sInstance = new WebViewTimersControl();
+        }
+        return sInstance;
+    }
+
+    private WebViewTimersControl() {
+    }
+
+    private void resumeTimers(WebView wv) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "Resuming webview timers, view=" + wv);
+        if (wv != null) {
+            wv.resumeTimers();
+        }
+    }
+
+    private void maybePauseTimers(WebView wv) {
+        if (!mBrowserActive && !mPrerenderActive && wv != null) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Pausing webview timers, view=" + wv);
+            wv.pauseTimers();
+        }
+    }
+
+    public void onBrowserActivityResume(WebView wv) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onBrowserActivityResume");
+        mBrowserActive = true;
+        resumeTimers(wv);
+    }
+
+    public void onBrowserActivityPause(WebView wv) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onBrowserActivityPause");
+        mBrowserActive = false;
+        maybePauseTimers(wv);
+    }
+
+    public void onPrerenderStart(WebView wv) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onPrerenderStart");
+        mPrerenderActive = true;
+        resumeTimers(wv);
+    }
+
+    public void onPrerenderDone(WebView wv) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onPrerenderDone");
+        mPrerenderActive = false;
+        maybePauseTimers(wv);
+    }
+
+}
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 6fcfab7..73821bf 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -40,9 +40,9 @@
     private ActionBar mActionBar;
     private TabBar mTabBar;
 
-    private TitleBarXLarge mTitleBar;
+    private NavigationBarTablet mNavBar;
 
-    private PieControl mPieControl;
+    private PieControlXLarge mPieControl;
     private Handler mHandler;
 
     /**
@@ -52,9 +52,7 @@
     public XLargeUi(Activity browser, UiController controller) {
         super(browser, controller);
         mHandler = new Handler();
-        mTitleBar = new TitleBarXLarge(mActivity, mUiController, this,
-                mContentView);
-        mTitleBar.setProgress(100);
+        mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar();
         mTabBar = new TabBar(mActivity, mUiController, this);
         mActionBar = mActivity.getActionBar();
         setupActionBar();
@@ -75,25 +73,19 @@
     }
 
     @Override
-    public void hideComboView() {
-        if (isComboViewShowing()) {
-            super.hideComboView();
-            // ComboView changes the action bar, set it back up to what we want
-            setupActionBar();
-            checkTabCount();
-        }
-    }
-
-    private void setUseQuickControls(boolean useQuickControls) {
+    public void setUseQuickControls(boolean useQuickControls) {
         mUseQuickControls = useQuickControls;
         mTitleBar.setUseQuickControls(mUseQuickControls);
         if (useQuickControls) {
             checkTabCount();
-            mPieControl = new PieControl(mActivity, mUiController, this);
+            mPieControl = new PieControlXLarge(mActivity, mUiController, this);
             mPieControl.attachToContainer(mContentView);
             WebView web = getWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(null);
+                // don't show url bar on scrolling
+                web.setOnTouchListener(null);
+
             }
         } else {
             mActivity.getActionBar().show();
@@ -103,6 +95,8 @@
             WebView web = getWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(mTitleBar);
+                // show url bar on scrolling
+                web.setOnTouchListener(this);
             }
             setTitleGravity(Gravity.NO_GRAVITY);
         }
@@ -123,7 +117,7 @@
     public void onResume() {
         super.onResume();
         if (!BrowserSettings.getInstance().useInstantSearch()) {
-            mTitleBar.clearCompletions();
+            mNavBar.clearCompletions();
         }
     }
 
@@ -163,11 +157,6 @@
     public void setActiveTab(final Tab tab) {
         mTitleBar.cancelTitleBarAnimation(true);
         mTitleBar.setSkipTitleBarAnimations(true);
-        if (mUseQuickControls) {
-            if (mActiveTab != null) {
-                captureTab(mActiveTab);
-            }
-        }
         super.setActiveTab(tab);
         BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
@@ -181,7 +170,7 @@
             mPieControl.forceToTop(mContentView);
         } else {
             // check if title bar is already attached by animation
-            if (mTitleBar.getParent() == null && !tab.isSnapshot()) {
+            if (mTitleBar.getParent() == null) {
                 view.setEmbeddedTitleBar(mTitleBar);
             }
         }
@@ -225,13 +214,13 @@
     @Override
     public void editUrl(boolean clearInput) {
         if (mUseQuickControls) {
-            getTitleBar().setShowProgressOnly(false);
+            mTitleBar.setShowProgressOnly(false);
         }
         super.editUrl(clearInput);
     }
 
     void stopEditingUrl() {
-        mTitleBar.stopEditingUrl();
+        mTitleBar.getNavigationBar().stopEditingUrl();
     }
 
     @Override
@@ -249,11 +238,6 @@
     }
 
     @Override
-    protected TitleBarBase getTitleBar() {
-        return mTitleBar;
-    }
-
-    @Override
     protected void setTitleGravity(int gravity) {
         if (!mUseQuickControls) {
             super.setTitleGravity(gravity);
@@ -285,7 +269,7 @@
 
     @Override
     protected void updateNavigationState(Tab tab) {
-        mTitleBar.updateNavigationState(tab);
+        mNavBar.updateNavigationState(tab);
     }
 
     @Override
@@ -302,19 +286,6 @@
     }
 
     @Override
-    public void showVoiceTitleBar(String title, List<String> vsresults) {
-        mTitleBar.setInVoiceMode(true, vsresults);
-        mTitleBar.setDisplayTitle(title);
-    }
-
-    @Override
-    public void revertVoiceTitleBar(Tab tab) {
-        mTitleBar.setInVoiceMode(false, null);
-        String url = tab.getUrl();
-        mTitleBar.setDisplayTitle(url);
-    }
-
-    @Override
     public void showCustomView(View view, int requestedOrientation,
             CustomViewCallback callback) {
         super.showCustomView(view, requestedOrientation, callback);
diff --git a/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
index 67563c0..f86c9c6 100644
--- a/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
+++ b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
@@ -154,4 +154,10 @@
         notifyDataSetChanged();
     }
 
+    public void clearRecentFolder() {
+        if (mIncludesRecentFolder) {
+            mIncludesRecentFolder = false;
+            notifyDataSetChanged();
+        }
+    }
 }
diff --git a/src/com/android/browser/preferences/DebugPreferencesFragment.java b/src/com/android/browser/preferences/DebugPreferencesFragment.java
index 984c12a..566eee2 100644
--- a/src/com/android/browser/preferences/DebugPreferencesFragment.java
+++ b/src/com/android/browser/preferences/DebugPreferencesFragment.java
@@ -18,6 +18,7 @@
 
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
+import com.android.browser.GoogleAccountLogin;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
@@ -25,10 +26,11 @@
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 
 public class DebugPreferencesFragment extends PreferenceFragment
-        implements OnPreferenceChangeListener {
+        implements OnPreferenceChangeListener, OnPreferenceClickListener {
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -38,6 +40,8 @@
 
         Preference e = findPreference(PreferenceKeys.PREF_ENABLE_HARDWARE_ACCEL);
         e.setOnPreferenceChangeListener(this);
+        e = findPreference(PreferenceKeys.PREF_RESET_PRELOGIN);
+        e.setOnPreferenceClickListener(this);
     }
 
     @Override
@@ -47,4 +51,15 @@
                 getActivity(), BrowserActivity.class));
         return true;
     }
+
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        if (PreferenceKeys.PREF_RESET_PRELOGIN.equals(preference.getKey())) {
+            BrowserSettings.getInstance().getPreferences().edit()
+                    .remove(GoogleAccountLogin.PREF_AUTOLOGIN_TIME)
+                    .apply();
+            return true;
+        }
+        return false;
+    }
 }
diff --git a/src/com/android/browser/preferences/LabPreferencesFragment.java b/src/com/android/browser/preferences/LabPreferencesFragment.java
index 0dd8805..ca3a86a 100644
--- a/src/com/android/browser/preferences/LabPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LabPreferencesFragment.java
@@ -16,23 +16,16 @@
 
 package com.android.browser.preferences;
 
-import com.android.browser.BrowserActivity;
+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 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 {
+public class LabPreferencesFragment extends PreferenceFragment {
     private BrowserSettings mBrowserSettings;
     private Preference useInstantPref;
 
@@ -44,17 +37,9 @@
 
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.lab_preferences);
-        registerChangeListener(PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS);
         useInstantPref = findPreference(PreferenceKeys.PREF_USE_INSTANT_SEARCH);
     }
 
-    private void registerChangeListener(String key) {
-        Preference e = findPreference(key);
-        if (e != null) {
-            e.setOnPreferenceChangeListener(this);
-        }
-    }
-
     @Override
     public void onResume() {
         super.onResume();
@@ -72,14 +57,4 @@
         }
     }
 
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        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/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index 6339d72..844a597 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -16,27 +16,22 @@
 
 package com.android.browser.preferences;
 
-import com.android.browser.R;
-import com.android.browser.WebStorageSizeManager;
-
 import android.app.AlertDialog;
-import android.app.FragmentTransaction;
 import android.app.ListFragment;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
 import android.preference.PreferenceActivity;
-import android.preference.PreferenceFragment;
 import android.provider.BrowserContract.Bookmarks;
 import android.util.Log;
 import android.view.LayoutInflater;
-import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
@@ -44,12 +39,13 @@
 import android.webkit.ValueCallback;
 import android.webkit.WebStorage;
 import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import java.io.Serializable;
+import com.android.browser.R;
+import com.android.browser.WebStorageSizeManager;
+
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -69,7 +65,7 @@
     private SiteAdapter mAdapter = null;
     private Site mSite = null;
 
-    static class Site implements Serializable {
+    static class Site implements Parcelable {
         private String mOrigin;
         private String mTitle;
         private Bitmap mIcon;
@@ -160,6 +156,38 @@
             Uri uri = Uri.parse(str);
             return "http".equals(uri.getScheme()) ?  str.substring(7) : str;
         }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeString(mOrigin);
+            dest.writeString(mTitle);
+            dest.writeInt(mFeatures);
+            dest.writeParcelable(mIcon, flags);
+        }
+
+        private Site(Parcel in) {
+            mOrigin = in.readString();
+            mTitle = in.readString();
+            mFeatures = in.readInt();
+            mIcon = in.readParcelable(null);
+        }
+
+        public static final Parcelable.Creator<Site> CREATOR
+                = new Parcelable.Creator<Site>() {
+            public Site createFromParcel(Parcel in) {
+                return new Site(in);
+            }
+
+            public Site[] newArray(int size) {
+                return new Site[size];
+            }
+        };
+
     }
 
     class SiteAdapter extends ArrayAdapter<Site>
@@ -597,7 +625,7 @@
                 PreferenceActivity activity = (PreferenceActivity) getActivity();
                 if (activity != null) {
                     Bundle args = new Bundle();
-                    args.putSerializable(EXTRA_SITE, site);
+                    args.putParcelable(EXTRA_SITE, site);
                     activity.startPreferencePanel(WebsiteSettingsFragment.class.getName(), args, 0,
                             site.getPrettyTitle(), null, 0);
                 }
@@ -615,7 +643,7 @@
         View view = inflater.inflate(R.layout.website_settings, container, false);
         Bundle args = getArguments();
         if (args != null) {
-            mSite = (Site) args.getSerializable(EXTRA_SITE);
+            mSite = (Site) args.getParcelable(EXTRA_SITE);
         }
         if (mSite == null) {
             View clear = view.findViewById(R.id.clear_all_button);
diff --git a/src/com/android/browser/view/Gallery.java b/src/com/android/browser/view/Gallery.java
index fa3f97a..0c73537 100644
--- a/src/com/android/browser/view/Gallery.java
+++ b/src/com/android/browser/view/Gallery.java
@@ -224,6 +224,7 @@
                 // Nothing selected
                 checkSelectionChanged();
             }
+            layout(0, false);
         } else {
             // checkFocus();
             mOldSelectedPosition = INVALID_POSITION;
@@ -231,6 +232,7 @@
             resetList();
             // Nothing selected
             checkSelectionChanged();
+            invalidate();
         }
     }
 
@@ -240,7 +242,6 @@
     void resetList() {
         mDataChanged = false;
         removeAllViewsInLayout();
-        invalidate();
     }
 
     public void setCallbackDuringFling(boolean shouldCallback) {
@@ -261,9 +262,7 @@
 
     @Override
     protected boolean getChildStaticTransformation(View child, Transformation t) {
-        t.clear();
-        t.setAlpha(child == mSelectedChild ? 1.0f : mUnselectedAlpha);
-        return true;
+        return false;
     }
 
     @Override
@@ -393,8 +392,6 @@
             // Similarly, empty space on the left
             fillToGalleryLeft();
         }
-        // Clear unused views
-        mRecycler.clear();
         setSelectionToCenterChild();
         invalidate();
     }
@@ -1199,24 +1196,6 @@
     }
 
     @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);
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
index cded435..99750f9 100644
--- a/src/com/android/browser/view/PieMenu.java
+++ b/src/com/android/browser/view/PieMenu.java
@@ -310,7 +310,6 @@
         float x = evt.getX();
         float y = evt.getY();
         int action = evt.getActionMasked();
-        int edges = evt.getEdgeFlags();
         if (MotionEvent.ACTION_DOWN == action) {
             if ((x > getWidth() - mSlop) || (x < mSlop)) {
                 setCenter((int) x, (int) y);
diff --git a/tests/src/com/android/browser/PopularUrlsTest.java b/tests/src/com/android/browser/PopularUrlsTest.java
index f1ab71b..cbe8324 100644
--- a/tests/src/com/android/browser/PopularUrlsTest.java
+++ b/tests/src/com/android/browser/PopularUrlsTest.java
@@ -21,6 +21,7 @@
 import android.net.Uri;
 import android.net.http.SslError;
 import android.os.Environment;
+import android.provider.Browser;
 import android.test.ActivityInstrumentationTestCase2;
 import android.text.TextUtils;
 import android.util.Log;
@@ -458,7 +459,7 @@
 
         while (mStatus.getIteration() < loopCount) {
             if (clearCache) {
-                webView.clearCache(true);
+                clearCacheUiThread(webView, true);
             }
             while(iterator.hasNext()) {
                 page = iterator.next();
@@ -467,6 +468,8 @@
                 Log.i(TAG, "start: " + page);
                 Uri uri = Uri.parse(page);
                 final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+                intent.putExtra(Browser.EXTRA_APPLICATION_ID,
+                    getInstrumentation().getTargetContext().getPackageName());
 
                 long startTime = System.currentTimeMillis();
                 resetForNewPage();
@@ -480,7 +483,7 @@
                 waitForLoad();
                 long stopTime = System.currentTimeMillis();
 
-                String url = webView.getUrl();
+                String url = getUrlUiThread(webView);
                 Log.i(TAG, "finish: " + url);
 
                 if (writer != null) {
@@ -534,4 +537,44 @@
             }
         }
     }
+
+    private void clearCacheUiThread(final WebView webView, final boolean includeDiskFiles) {
+        Runnable runner = new Runnable() {
+
+            @Override
+            public void run() {
+                webView.clearCache(includeDiskFiles);
+            }
+        };
+        getInstrumentation().runOnMainSync(runner);
+    }
+
+    private String getUrlUiThread(final WebView webView) {
+        WebViewUrlGetter urlGetter = new WebViewUrlGetter(webView);
+        getInstrumentation().runOnMainSync(urlGetter);
+        return urlGetter.getUrl();
+    }
+
+    private class WebViewUrlGetter implements Runnable {
+
+        private WebView mWebView;
+        private String mUrl;
+
+        public WebViewUrlGetter(WebView webView) {
+            mWebView = webView;
+        }
+
+        @Override
+        public void run() {
+                mUrl = null;
+                mUrl = mWebView.getUrl();
+        }
+
+        public String getUrl() {
+            if (mUrl != null) {
+                return mUrl;
+            } else
+                throw new IllegalStateException("url has not been fetched yet");
+        }
+    }
 }