merge in jb-release history after reset to jb-dev
diff --git a/res/drawable-hdpi/browsertab_add.png b/res/drawable-hdpi/browsertab_add.png
index 1e52bb1..7401eed 100644
--- a/res/drawable-hdpi/browsertab_add.png
+++ b/res/drawable-hdpi/browsertab_add.png
Binary files differ
diff --git a/res/drawable-xhdpi/browsertab_add.png b/res/drawable-xhdpi/browsertab_add.png
index e44f72b..ef7603e 100644
--- a/res/drawable-xhdpi/browsertab_add.png
+++ b/res/drawable-xhdpi/browsertab_add.png
Binary files differ
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 927de05..fc91f30 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Капіяваць URL-адрас старонкі"</string>
     <string name="share_page" msgid="593756995297268343">"Адправіць старонку"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Захаваць для чытання ў аўтаномным рэжыме"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Захаванне..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Немагчыма захаваць для чытання ў аўтаномным рэжыме."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Закладак: <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Ачысцiць тэчку"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6290383..e74bdc5 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Копиране на URL адреса на страницата"</string>
     <string name="share_page" msgid="593756995297268343">"Споделяне на страницата"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Запазване за четене офлайн"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Запазва се…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Не можа да се запази за четене офлайн."</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>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 5a6173c..59fb73f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopírovat adresu URL stránky"</string>
     <string name="share_page" msgid="593756995297268343">"Sdílet stránku"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Uložit ke čtení offline"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Ukládání…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"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>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 8730e7a..cd04f72 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -102,7 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Copiar la URL de la página"</string>
     <string name="share_page" msgid="593756995297268343">"Compartir página"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Guardar para leer sin conexión"</string>
-    <string name="saving_snapshot" msgid="1693789062351182809">"Guardando..."</string>
+    <string name="saving_snapshot" msgid="1693789062351182809">"Guardando…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"La página no se guardó 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>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 8baad4c..022b294 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"کپی URL صفحه"</string>
     <string name="share_page" msgid="593756995297268343">"اشتراک گذاری صفحه"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"ذخیره برای مطالعه در حالت آفلاین"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"در حال ذخیره…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"برای خواندن آفلاین قابل ذخیره نیست."</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>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 9827a59..d4b490d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopioi sivun URL-osoite"</string>
     <string name="share_page" msgid="593756995297268343">"Jaa sivu"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Tallenna offline-tilassa luettavaksi"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Tallennetaan..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Ei voitu tallentaa offline-käyttöä varten."</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>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6bb492d..5061ebc 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"पृष्ठ url की प्रतिलिपि बनाएं"</string>
     <string name="share_page" msgid="593756995297268343">"पृष्ठ शेयर करें"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"ऑफ़लाइन पढ़ने के लिए सहेजें"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"सहेजा जा रहा है…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"ऑफ़लाइन पढ़ने के लिए सहेजा नहीं जा सका."</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>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 89a19ac..ec6836c 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopiraj URL stranice"</string>
     <string name="share_page" msgid="593756995297268343">"Dijeli stranicu"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Spremi za izvanmrežno čitanje"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Spremanje..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Spremanje za izvanmrežno čitanje nije uspjelo."</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>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 89d27aa..12ce9e0 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Salin URL laman"</string>
     <string name="share_page" msgid="593756995297268343">"Bagikan lama"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk dibaca secara offline"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Menyimpan..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Tidak dapat menyimpan untuk dibaca secara offline."</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">"Folder kosong"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 5b4e2b0..6e91db5 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"ページのURLをコピー"</string>
     <string name="share_page" msgid="593756995297268343">"ページを共有"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"オフラインで読めるよう保存"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"保存中…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"オフラインでの閲覧用に保存できませんでした。"</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>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 0e47f86..b59d57b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"페이지 URL 복사"</string>
     <string name="share_page" msgid="593756995297268343">"페이지 공유"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"오프라인 보기로 저장"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"저장 중..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"오프라인 읽기용으로 저장하지 못했습니다."</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>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index bc9e562..23a1125 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Salin URL halaman"</string>
     <string name="share_page" msgid="593756995297268343">"Kongsi halaman"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk pembacaan di luar talian"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Menyimpan..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Tidak dapat disimpan 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>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c64788b..330928a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopiuj URL strony"</string>
     <string name="share_page" msgid="593756995297268343">"Udostępnij stronę"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Zapisz do czytania offline"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Zapisywanie…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"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>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 52a1031..35b52c1 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Copiar URL da página"</string>
     <string name="share_page" msgid="593756995297268343">"Partilhar página"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Guardar para leitura off-line"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"A guardar..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Não foi possível 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>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 35445bb..5b2e63e 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Copiar URL da página"</string>
     <string name="share_page" msgid="593756995297268343">"Compartilhar página"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Salvar para leitura off-line"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Salvando…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Não foi possível 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>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 81f00d0..3a29a76 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Copiaţi adresa URL a paginii"</string>
     <string name="share_page" msgid="593756995297268343">"Distribuiţi pagina"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Salvaţi pentru lectură offline"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Se salvează..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Nu s-a putut salva pentru citire offline."</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>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 5843255..87e8037 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopírovať adresu URL stránky"</string>
     <string name="share_page" msgid="593756995297268343">"Zdieľať stránku"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Uložiť na čítanie offline"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Prebieha ukladanie..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Nepodarilo sa uložiť na čítanie v režime offline."</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>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 72d2996..f0997d5 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Копирај URL адресу странице"</string>
     <string name="share_page" msgid="593756995297268343">"Дели страницу"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Сачувај за читање ван мреже"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Чување…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Није било могуће сачувати за читање ван мреже."</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>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index b41ef9a..28aaec8 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Nakili URL ya ukurasa"</string>
     <string name="share_page" msgid="593756995297268343">"Shiriki ukurasa"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Hifadhi kwa usomaji wa nje ya mtandao"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Inahifadhi…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Haikuweza kuhifadhi usomaji mkondoni."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"Alamisho <xliff:g id="BOOKMARK_COUNT">%d</xliff:g>"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Folda iko tupu"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4a4997f..8df58bf 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"คัดลอก URL ของหน้าเว็บ"</string>
     <string name="share_page" msgid="593756995297268343">"แบ่งปันหน้าเว็บ"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"บันทึกไว้อ่านออฟไลน์"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"กำลังบันทึก…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"ไม่สามารถบันทึกไว้อ่านแบบออฟไลน์ได้"</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>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index a668e3f..7784ac0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Kopyahin ang URL ng pahina"</string>
     <string name="share_page" msgid="593756995297268343">"Ibahagi ang pahina"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"I-save para sa offline na pagbabasa"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Sine-save..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Hindi ma-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>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 75b8135..35539f3 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Sayfa URL\'sini kopyala"</string>
     <string name="share_page" msgid="593756995297268343">"Sayfayı paylaş"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Çevrimdışı okuma için kaydet"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Kaydediliyor…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Ç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>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 53a26d3..3ab6a62 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"Sao chép url của trang"</string>
     <string name="share_page" msgid="593756995297268343">"Chia sẻ trang"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Lưu để đọc ngoại tuyến"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"Đang lưu…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"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>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index eef5ead..106ed3c 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"复制网页网址"</string>
     <string name="share_page" msgid="593756995297268343">"分享网页"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"保存以供离线阅读"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"正在保存..."</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"无法保存以供离线阅读。"</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>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 159cf8d..646cb45 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -102,8 +102,7 @@
     <string name="copy_page_url" msgid="1188679152608889555">"複製網頁網址"</string>
     <string name="share_page" msgid="593756995297268343">"分享網頁"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"儲存頁面以供離線閱讀"</string>
-    <!-- no translation found for saving_snapshot (1693789062351182809) -->
-    <skip />
+    <string name="saving_snapshot" msgid="1693789062351182809">"儲存中…"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"無法儲存網頁以供離線閱讀。"</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>
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 8d2b6f0..7b7e25f 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -443,13 +443,13 @@
         }
     }
 
-    public void editUrl(boolean clearInput) {
+    public void editUrl(boolean clearInput, boolean forceIME) {
         if (mUiController.isInCustomActionMode()) {
             mUiController.endActionMode();
         }
         showTitleBar();
         if ((getActiveTab() != null) && !getActiveTab().isSnapshot()) {
-            mNavigationBar.startEditingUrl(clearInput);
+            mNavigationBar.startEditingUrl(clearInput, forceIME);
         }
     }
 
diff --git a/src/com/android/browser/BookmarkDragHandler.java b/src/com/android/browser/BookmarkDragHandler.java
deleted file mode 100644
index fc0752f..0000000
--- a/src/com/android/browser/BookmarkDragHandler.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.app.Activity;
-import android.content.ClipData;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.BrowserContract;
-import android.view.ActionMode;
-import android.view.ActionMode.Callback;
-import android.view.DragEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnDragListener;
-import android.view.ViewGroup;
-
-public class BookmarkDragHandler implements Callback {
-
-    public static interface BookmarkDragController {
-        boolean startDrag(Cursor item);
-
-        ViewGroup getActionModeView(ActionMode mode, BookmarkDragState state);
-        void actionItemClicked(View v, BookmarkDragState state);
-    }
-
-    public static interface BookmarkDragAdapter {
-        void setBookmarkDragHandler(BookmarkDragHandler handler);
-        Cursor getItemForView(View v);
-    }
-
-    public static class BookmarkDragState {
-        public long id;
-        public long parent;
-        public Object extraState;
-    }
-
-    static final String BOOKMARK_DRAG_LABEL = "com.android.browser.BOOKMARK_LABEL";
-
-    private Activity mActivity;
-    private BookmarkDragController mDragController;
-    private BookmarkDragAdapter mDragAdapter;
-    private ActionMode mActionMode;
-    private BookmarkDragState mDragState;
-
-    public BookmarkDragHandler(Activity activity, BookmarkDragController controller,
-            BookmarkDragAdapter adapter) {
-        mActivity = activity;
-        mDragController = controller;
-        mDragAdapter = adapter;
-        mDragAdapter.setBookmarkDragHandler(this);
-    }
-
-    public boolean startDrag(View view, Cursor item, long id, Object extraState) {
-        if (!mDragController.startDrag(item)) {
-            return false;
-        }
-        Uri uri = ContentUris.withAppendedId(
-                BrowserContract.Bookmarks.CONTENT_URI, id);
-        ClipData data = ClipData.newRawUri(BOOKMARK_DRAG_LABEL, uri);
-        BookmarkDragState state = new BookmarkDragState();
-        state.id = id;
-        state.parent = item.getLong(BookmarksLoader.COLUMN_INDEX_PARENT);
-        state.extraState = extraState;
-        mDragState = state;
-        view.startDrag(data, new View.DragShadowBuilder(view), state, 0);
-        mActionMode = view.startActionMode(this);
-        return true;
-    }
-
-    public void registerBookmarkDragHandler(View view) {
-        view.setOnDragListener(mBookmarkDragListener);
-    }
-
-    private OnDragListener mBookmarkDragListener = new OnDragListener() {
-
-        @Override
-        public boolean onDrag(View v, DragEvent event) {
-            Cursor c = mDragAdapter.getItemForView(v);
-            BookmarkDragState state = (BookmarkDragState) event.getLocalState();
-            switch (event.getAction()) {
-            case DragEvent.ACTION_DRAG_STARTED:
-                return true;
-            case DragEvent.ACTION_DROP:
-                long id = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
-                if (id == state.id) {
-                    // We dropped onto ourselves, show the context menu
-                    v.showContextMenu();
-                    return false;
-                }
-                long parent = c.getLong(BookmarksLoader.COLUMN_INDEX_PARENT);
-                if (isFolder(c)) {
-                    parent = c.getLong(BookmarksLoader.COLUMN_INDEX_ID);
-                }
-                if (parent != state.parent) {
-                    ContentResolver cr = mActivity.getContentResolver();
-                    ContentValues values = new ContentValues();
-                    values.put(BrowserContract.Bookmarks.PARENT, parent);
-                    Uri uri = event.getClipData().getItemAt(0).getUri();
-                    cr.update(uri, values, null, null);
-                }
-                break;
-            }
-            return false;
-        }
-    };
-
-    private OnDragListener mActionModeDragListener = new OnDragListener() {
-
-        @Override
-        public boolean onDrag(View v, DragEvent event) {
-            BookmarkDragState state = (BookmarkDragState) event.getLocalState();
-            switch (event.getAction()) {
-            case DragEvent.ACTION_DRAG_STARTED:
-                return true;
-            case DragEvent.ACTION_DROP:
-                mDragController.actionItemClicked(v, state);
-                // fall through
-            case DragEvent.ACTION_DRAG_ENDED:
-                if (mActionMode != null) {
-                    mActionMode.finish();
-                    mActionMode = null;
-                }
-                return true;
-            }
-            return false;
-        }
-    };
-
-    static boolean isFolder(Cursor c) {
-        return c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
-    }
-
-    @Override
-    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-        ViewGroup view = mDragController.getActionModeView(mode, mDragState);
-        int count = view.getChildCount();
-        for (int i = 0; i < count; i++) {
-            view.getChildAt(i).setOnDragListener(mActionModeDragListener);
-        }
-        mode.setCustomView(view);
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
-        return true;
-    }
-
-    @Override
-    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-        return false;
-    }
-
-    @Override
-    public void onDestroyActionMode(ActionMode mode) {
-    }
-
-}
diff --git a/src/com/android/browser/BookmarksLoader.java b/src/com/android/browser/BookmarksLoader.java
index 80d4255..8601c98 100644
--- a/src/com/android/browser/BookmarksLoader.java
+++ b/src/com/android/browser/BookmarksLoader.java
@@ -20,7 +20,6 @@
 import android.content.CursorLoader;
 import android.net.Uri;
 import android.provider.BrowserContract.Bookmarks;
-import android.provider.BrowserContract.ChromeSyncColumns;
 
 public class BookmarksLoader extends CursorLoader {
     public static final String ARG_ACCOUNT_TYPE = "acct_type";
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index be3c211..93cf5d9 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -35,52 +35,32 @@
         ThreadedCursorAdapter<BrowserBookmarksAdapterItem> {
 
     LayoutInflater mInflater;
-    int mCurrentView;
     Context mContext;
 
     /**
      *  Create a new BrowserBookmarksAdapter.
      */
-    public BrowserBookmarksAdapter(Context context, int defaultView) {
+    public BrowserBookmarksAdapter(Context context) {
         // Make sure to tell the CursorAdapter to avoid the observer and auto-requery
         // since the Loader will do that for us.
         super(context, null);
         mInflater = LayoutInflater.from(context);
         mContext = context;
-        selectView(defaultView);
     }
 
     @Override
     public View newView(Context context, ViewGroup parent) {
-        if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
-            return mInflater.inflate(R.layout.bookmark_list, parent, false);
-        } else {
-            return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false);
-        }
+        return mInflater.inflate(R.layout.bookmark_thumbnail, parent, false);
     }
 
     @Override
     public void bindView(View view, BrowserBookmarksAdapterItem object) {
         BookmarkContainer container = (BookmarkContainer) view;
         container.setIgnoreRequestLayout(true);
-        if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
-            bindListView(view, mContext, object);
-        } else {
-            bindGridView(view, mContext, object);
-        }
+        bindGridView(view, mContext, object);
         container.setIgnoreRequestLayout(false);
     }
 
-    void clearView(View view) {
-        if (mCurrentView == BrowserBookmarksPage.VIEW_LIST) {
-            ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
-            favicon.setImageBitmap(null);
-        } else {
-            ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
-            thumb.setImageBitmap(null);
-        }
-    }
-
     CharSequence getTitle(Cursor cursor) {
         int type = cursor.getInt(BookmarksLoader.COLUMN_INDEX_TYPE);
         switch (type) {
@@ -117,53 +97,15 @@
         }
     }
 
-    void bindListView(View view, Context context, BrowserBookmarksAdapterItem item) {
-        ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
-        TextView tv = (TextView) view.findViewById(R.id.label);
-
-        tv.setText(item.title);
-        if (item.is_folder) {
-            // folder
-            favicon.setImageResource(R.drawable.ic_folder_holo_dark);
-            favicon.setBackground(null);
-        } else {
-            if (item.favicon == null) {
-                favicon.setImageResource(R.drawable.app_web_browser_sm);
-            } else {
-                favicon.setImageDrawable(item.favicon);
-            }
-            favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg);
-        }
-    }
-
-    public void selectView(int view) {
-        if (view != BrowserBookmarksPage.VIEW_LIST
-                && view != BrowserBookmarksPage.VIEW_THUMBNAILS) {
-            throw new IllegalArgumentException("Unknown view specified: " + view);
-        }
-        mCurrentView = view;
-    }
-
-    public int getViewMode() {
-        return mCurrentView;
-    }
-
     @Override
     public BrowserBookmarksAdapterItem getRowObject(Cursor c,
             BrowserBookmarksAdapterItem item) {
         if (item == null) {
             item = new BrowserBookmarksAdapterItem();
         }
-        Bitmap favicon = item.favicon != null ? item.favicon.getBitmap() : null;
         Bitmap thumbnail = item.thumbnail != null ? item.thumbnail.getBitmap() : null;
-        favicon = BrowserBookmarksPage.getBitmap(c,
-                BookmarksLoader.COLUMN_INDEX_FAVICON, favicon);
         thumbnail = BrowserBookmarksPage.getBitmap(c,
                 BookmarksLoader.COLUMN_INDEX_THUMBNAIL, thumbnail);
-        if (favicon != null
-                && (item.favicon == null || item.favicon.getBitmap() != favicon)) {
-            item.favicon = new BitmapDrawable(mContext.getResources(), favicon);
-        }
         if (thumbnail != null
                 && (item.thumbnail == null || item.thumbnail.getBitmap() != thumbnail)) {
             item.thumbnail = new BitmapDrawable(mContext.getResources(), thumbnail);
diff --git a/src/com/android/browser/BrowserBookmarksAdapterItem.java b/src/com/android/browser/BrowserBookmarksAdapterItem.java
index 913b0fd..64b1ca2 100644
--- a/src/com/android/browser/BrowserBookmarksAdapterItem.java
+++ b/src/com/android/browser/BrowserBookmarksAdapterItem.java
@@ -15,13 +15,11 @@
  */
 package com.android.browser;
 
-import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 
 public class BrowserBookmarksAdapterItem {
     public String url;
     public CharSequence title;
-    public BitmapDrawable favicon;
     public BitmapDrawable thumbnail;
     public boolean is_folder;
 }
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 5a609b1..b11162c 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -38,7 +38,6 @@
 import android.os.Bundle;
 import android.provider.BrowserContract;
 import android.provider.BrowserContract.Accounts;
-import android.view.ActionMode;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.LayoutInflater;
@@ -48,12 +47,8 @@
 import android.view.ViewGroup;
 import android.widget.ExpandableListView;
 import android.widget.ExpandableListView.OnChildClickListener;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.Toast;
 
-import com.android.browser.BookmarkDragHandler.BookmarkDragController;
-import com.android.browser.BookmarkDragHandler.BookmarkDragState;
 import com.android.browser.provider.BrowserProvider2;
 import com.android.browser.view.BookmarkExpandableView;
 import com.android.browser.view.BookmarkExpandableView.BookmarkContextMenuInfo;
@@ -93,9 +88,6 @@
     static final String ACCOUNT_TYPE = "account_type";
     static final String ACCOUNT_NAME = "account_name";
 
-    public static final int VIEW_THUMBNAILS = 1;
-    public static final int VIEW_LIST = 2;
-
     BookmarksPageCallbacks mCallbacks;
     View mRoot;
     BookmarkExpandableView mGrid;
@@ -104,7 +96,6 @@
     View mEmptyView;
     View mHeader;
     HashMap<Integer, BrowserBookmarksAdapter> mBookmarkAdapters = new HashMap<Integer, BrowserBookmarksAdapter>();
-    BookmarkDragHandler mDragHandler;
     JSONObject mState;
 
     @Override
@@ -134,7 +125,7 @@
                 args.putString(ACCOUNT_NAME, accountName);
                 args.putString(ACCOUNT_TYPE, accountType);
                 BrowserBookmarksAdapter adapter = new BrowserBookmarksAdapter(
-                        getActivity(), VIEW_THUMBNAILS);
+                        getActivity());
                 mBookmarkAdapters.put(id, adapter);
                 boolean expand = true;
                 try {
@@ -161,6 +152,10 @@
 
     @Override
     public void onLoaderReset(Loader<Cursor> loader) {
+        if (loader.getId() >= LOADER_BOOKMARKS) {
+            BrowserBookmarksAdapter adapter = mBookmarkAdapters.get(loader.getId());
+            adapter.changeCursor(null);
+        }
     }
 
     @Override
@@ -400,8 +395,6 @@
         mGrid.setColumnWidthFromLayout(R.layout.bookmark_thumbnail);
         mGrid.setBreadcrumbController(this);
         setEnableContextMenu(mEnableContextMenu);
-        mDragHandler = new BookmarkDragHandler(getActivity(), mDragController,
-                mGrid.getDragAdapter());
 
         // Start the loaders
         LoaderManager lm = getLoaderManager();
@@ -618,45 +611,6 @@
         }
     }
 
-    private BookmarkDragController mDragController = new BookmarkDragController() {
-
-        @Override
-        public boolean startDrag(Cursor item) {
-            return canEdit(item);
-        }
-
-        @Override
-        public ViewGroup getActionModeView(ActionMode mode,
-                BookmarkDragState state) {
-            LayoutInflater inflater = LayoutInflater.from(getActivity());
-            LinearLayout view = (LinearLayout) inflater.inflate(
-                    R.layout.bookmarks_drag_actionmode, null);
-            view.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
-            ExtraDragState extraState = (ExtraDragState) state.extraState;
-            BrowserBookmarksAdapter adapter = getChildAdapter(extraState.groupPosition);
-            Cursor c = adapter.getItem(extraState.childPosition);
-            boolean isFolder = c.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
-            if (isFolder) {
-                view.findViewById(R.id.open_context_menu_id).setVisibility(View.GONE);
-                ImageView iv = (ImageView) view.findViewById(
-                        R.id.new_window_context_menu_id);
-                iv.setImageResource(R.drawable.ic_windows_holo_dark);
-            }
-            return view;
-        }
-
-        @Override
-        public void actionItemClicked(View v, BookmarkDragState state) {
-            if (v.getId() == R.id.info) {
-                mGrid.showContextMenuForState(state);
-            } else {
-                ExtraDragState extraState = (ExtraDragState) state.extraState;
-                handleContextItem(v.getId(), extraState.groupPosition,
-                        extraState.childPosition);
-            }
-        }
-    };
-
     private static class LookupBookmarkCount extends AsyncTask<Long, Void, Integer> {
         Context mContext;
         BookmarkItem mHeader;
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 36f6a1a..0c86988 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1104,7 +1104,7 @@
     // callback from phone title bar
     public void editUrl() {
         if (mOptionsMenuOpen) mActivity.closeOptionsMenu();
-        mUi.editUrl(false);
+        mUi.editUrl(false, true);
     }
 
     public void startVoiceSearch() {
@@ -2837,7 +2837,7 @@
     }
 
     public boolean onSearchRequested() {
-        mUi.editUrl(false);
+        mUi.editUrl(false, true);
         return true;
     }
 
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 8314f73..1d2114e 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -242,7 +242,7 @@
                         switchToTab(tab);
                         mUi.getTitleBar().setSkipTitleBarAnimations(true);
                         close(position, false);
-                        mUi.editUrl(false);
+                        mUi.editUrl(false, true);
                         mUi.getTitleBar().setSkipTitleBarAnimations(false);
                     } else if (tabview.isWebView(v)) {
                         close(position);
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 41af619..d66c877 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -247,7 +247,7 @@
      * called from the Ui when the user wants to edit
      * @param clearInput clear the input field
      */
-    void startEditingUrl(boolean clearInput) {
+    void startEditingUrl(boolean clearInput, boolean forceIME) {
         // editing takes preference of progress
         setVisibility(View.VISIBLE);
         if (mTitleBar.useQuickControls()) {
@@ -261,7 +261,7 @@
         } else if (mInVoiceMode) {
             mUrlInput.showDropDown();
         }
-        if (mTitleBar.useQuickControls()) {
+        if (forceIME) {
             mUrlInput.showIME();
         }
     }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index 3403fd7..37b1f17 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -177,7 +177,7 @@
         } else if (mAllButton == v) {
             mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
         } else if (mSearchButton == v) {
-            mBaseUi.editUrl(true);
+            mBaseUi.editUrl(true, false);
         } else if (mStopButton == v) {
             stopOrRefresh();
         } else if (mGoButton == v) {
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 7f64643..b269586 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -76,11 +76,11 @@
     }
 
     @Override
-    public void editUrl(boolean clearInput) {
+    public void editUrl(boolean clearInput, boolean forceIME) {
         if (mUseQuickControls) {
             mTitleBar.setShowProgressOnly(false);
         }
-        super.editUrl(clearInput);
+        super.editUrl(clearInput, forceIME);
     }
 
     @Override
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
index f7e2c9f..abe8d37 100644
--- a/src/com/android/browser/PieControl.java
+++ b/src/com/android/browser/PieControl.java
@@ -197,7 +197,7 @@
                 web.reload();
             }
         } else if (mUrl.getView() == v) {
-            mUi.editUrl(false);
+            mUi.editUrl(false, true);
         } else if (mBookmarks.getView() == v) {
             mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
         } else if (mHistory.getView() == v) {
@@ -206,10 +206,10 @@
             mUiController.bookmarkCurrentPage();
         } else if (mNewTab.getView() == v) {
             mUiController.openTabToHomePage();
-            mUi.editUrl(false);
+            mUi.editUrl(false, true);
         } else if (mIncognito.getView() == v) {
             mUiController.openIncognitoTab();
-            mUi.editUrl(false);
+            mUi.editUrl(false, true);
         } else if (mClose.getView() == v) {
             mUiController.closeCurrentTab();
         } else if (mOptions.getView() == v) {
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index bd17c74..cf82e01 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -197,7 +197,7 @@
                     mUi.hideTitleBar();
                 } else {
                     mUi.stopWebViewScrolling();
-                    mUi.editUrl(false);
+                    mUi.editUrl(false, false);
                 }
             } else if (mUi.isTitleBarShowing() && !isLoading()) {
                 mUi.stopEditingUrl();
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 2bd3754..034f136 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -134,7 +134,7 @@
 
     void showMaxTabsWarning();
 
-    void editUrl(boolean clearInput);
+    void editUrl(boolean clearInput, boolean forceIME);
 
     boolean isEditingUrl();
 
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index e0a6be2..1969978 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -207,11 +207,11 @@
     }
 
     @Override
-    public void editUrl(boolean clearInput) {
+    public void editUrl(boolean clearInput, boolean forceIME) {
         if (mUseQuickControls) {
             mTitleBar.setShowProgressOnly(false);
         }
-        super.editUrl(clearInput);
+        super.editUrl(clearInput, forceIME);
     }
 
     @Override
@@ -285,13 +285,13 @@
                     case KeyEvent.KEYCODE_DPAD_UP:
                     case KeyEvent.KEYCODE_DPAD_LEFT:
                         if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) {
-                            editUrl(false);
+                            editUrl(false, false);
                             return true;
                         }
                 }
                 boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON);
                 if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) {
-                    editUrl(true);
+                    editUrl(true, false);
                     return mContentView.dispatchKeyEvent(event);
                 }
             }
diff --git a/src/com/android/browser/util/ThreadedCursorAdapter.java b/src/com/android/browser/util/ThreadedCursorAdapter.java
index fe59ad1..b70ca36 100644
--- a/src/com/android/browser/util/ThreadedCursorAdapter.java
+++ b/src/com/android/browser/util/ThreadedCursorAdapter.java
@@ -21,8 +21,8 @@
 import android.os.HandlerThread;
 import android.os.Message;
 import android.os.Process;
+import android.os.SystemProperties;
 import android.util.Log;
-import android.util.SparseArray;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Adapter;
@@ -32,11 +32,10 @@
 import com.android.browser.R;
 
 import java.lang.ref.WeakReference;
-import java.util.HashMap;
 
 public abstract class ThreadedCursorAdapter<T> extends BaseAdapter {
 
-    private static final String LOGTAG = "tca";
+    private static final String LOGTAG = "BookmarksThreadedAdapter";
     private static final boolean DEBUG = false;
 
     private Context mContext;
@@ -46,6 +45,8 @@
     private Handler mLoadHandler;
     private Handler mHandler;
     private int mSize;
+    private boolean mHasCursor;
+    private long mGeneration;
 
     private class LoadContainer {
         WeakReference<View> view;
@@ -53,10 +54,12 @@
         T bind_object;
         Adapter owner;
         boolean loaded;
+        long generation;
     }
 
     public ThreadedCursorAdapter(Context context, Cursor c) {
         mContext = context;
+        mHasCursor = (c != null);
         mCursorAdapter = new CursorAdapter(context, c, 0) {
 
             @Override
@@ -73,6 +76,7 @@
             public void notifyDataSetChanged() {
                 super.notifyDataSetChanged();
                 mSize = getCount();
+                mGeneration++;
                 ThreadedCursorAdapter.this.notifyDataSetChanged();
             }
 
@@ -80,6 +84,7 @@
             public void notifyDataSetInvalidated() {
                 super.notifyDataSetInvalidated();
                 mSize = getCount();
+                mGeneration++;
                 ThreadedCursorAdapter.this.notifyDataSetInvalidated();
             }
 
@@ -109,7 +114,9 @@
                 View view = container.view.get();
                 if (view == null
                         || container.owner != ThreadedCursorAdapter.this
-                        || container.position != msg.what) {
+                        || container.position != msg.what
+                        || view.getWindowToken() == null
+                        || container.generation != mGeneration) {
                     return;
                 }
                 container.loaded = true;
@@ -142,6 +149,9 @@
         }
         synchronized (mCursorLock) {
             Cursor c = (Cursor) mCursorAdapter.getItem(position);
+            if (c == null || c.isClosed()) {
+                return;
+            }
             container.bind_object = getRowObject(c, container.bind_object);
         }
         mHandler.obtainMessage(position, container).sendToTarget();
@@ -161,14 +171,18 @@
         }
         if (container.position == position
                 && container.owner == this
-                && container.loaded) {
+                && container.loaded
+                && container.generation == mGeneration) {
             bindView(convertView, container.bind_object);
         } else {
             bindView(convertView, cachedLoadObject());
-            container.position = position;
-            container.loaded = false;
-            container.owner = this;
-            mLoadHandler.obtainMessage(position, container).sendToTarget();
+            if (mHasCursor) {
+                container.position = position;
+                container.loaded = false;
+                container.owner = this;
+                container.generation = mGeneration;
+                mLoadHandler.obtainMessage(position, container).sendToTarget();
+            }
         }
         return convertView;
     }
@@ -181,7 +195,10 @@
     }
 
     public void changeCursor(Cursor cursor) {
+        mLoadHandler.removeCallbacksAndMessages(null);
+        mHandler.removeCallbacksAndMessages(null);
         synchronized (mCursorLock) {
+            mHasCursor = (cursor != null);
             mCursorAdapter.changeCursor(cursor);
         }
     }
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
index 0283448..095bb7b 100644
--- a/src/com/android/browser/view/BookmarkExpandableView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -17,7 +17,6 @@
 package com.android.browser.view;
 
 import android.content.Context;
-import android.database.Cursor;
 import android.database.DataSetObserver;
 import android.provider.BrowserContract;
 import android.util.AttributeSet;
@@ -33,13 +32,8 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.android.browser.BookmarkDragHandler;
-import com.android.browser.BookmarkDragHandler.BookmarkDragAdapter;
-import com.android.browser.BookmarkDragHandler.BookmarkDragState;
 import com.android.browser.BreadCrumbView;
 import com.android.browser.BrowserBookmarksAdapter;
-import com.android.browser.BrowserBookmarksPage;
-import com.android.browser.BrowserBookmarksPage.ExtraDragState;
 import com.android.browser.R;
 import com.android.internal.view.menu.MenuBuilder;
 
@@ -54,9 +48,6 @@
 
     public static final String LOCAL_ACCOUNT_NAME = "local";
 
-    // Experimental drag & drop
-    private static final boolean ENABLE_DRAG_DROP = false;
-
     private BookmarkAccountAdapter mAdapter;
     private int mColumnWidth;
     private Context mContext;
@@ -65,9 +56,7 @@
     private OnCreateContextMenuListener mOnCreateContextMenuListener;
     private boolean mLongClickable;
     private BreadCrumbView.Controller mBreadcrumbController;
-    private BookmarkDragHandler mDragHandler;
     private int mMaxColumnCount;
-    private int mCurrentView = -1;
 
     public BookmarkExpandableView(Context context) {
         super(context);
@@ -141,9 +130,6 @@
                 adapter.registerDataSetObserver(mAdapter.mObserver);
             }
         } else {
-            if (mCurrentView >= 0) {
-                adapter.selectView(mCurrentView);
-            }
             mAdapter.mGroups.add(accountName);
             mAdapter.mChildren.add(adapter);
             adapter.registerDataSetObserver(mAdapter.mObserver);
@@ -229,36 +215,6 @@
         return mAdapter.mChildren.get(groupPosition);
     }
 
-    public BookmarkDragAdapter getDragAdapter() {
-        return mDragAdapter;
-    }
-
-    public void showContextMenuForState(BookmarkDragState state) {
-        ExtraDragState extraState = (ExtraDragState) state.extraState;
-        mContextMenuInfo = new BookmarkContextMenuInfo(
-                extraState.childPosition,
-                extraState.groupPosition);
-        if (getParent() != null) {
-            getParent().showContextMenuForChild(BookmarkExpandableView.this);
-        }
-    }
-
-    private BookmarkDragAdapter mDragAdapter = new BookmarkDragAdapter() {
-
-        @Override
-        public void setBookmarkDragHandler(BookmarkDragHandler handler) {
-            mDragHandler = handler;
-        }
-
-        @Override
-        public Cursor getItemForView(View v) {
-            int groupPosition = (Integer) v.getTag(R.id.group_position);
-            int childPosition = (Integer) v.getTag(R.id.child_position);
-            return getChildAdapter(groupPosition).getItem(childPosition);
-        }
-
-    };
-
     private OnClickListener mChildClickListener = new OnClickListener() {
 
         @Override
@@ -293,35 +249,10 @@
         }
     };
 
-    private OnLongClickListener mChildOnLongClickListener = new OnLongClickListener() {
-
-        @Override
-        public boolean onLongClick(View v) {
-            if (!ENABLE_DRAG_DROP) {
-                return false;
-            }
-            ExtraDragState state = new ExtraDragState();
-            state.groupPosition = (Integer) v.getTag(R.id.group_position);
-            state.childPosition = (Integer) v.getTag(R.id.child_position);
-            long id = (Long) v.getTag(R.id.child_id);
-            Cursor c = getChildAdapter(state.groupPosition)
-                    .getItem(state.childPosition);
-            return mDragHandler.startDrag(v, c, id, state);
-        }
-    };
-
     public BreadCrumbView getBreadCrumbs(int groupPosition) {
         return mAdapter.getBreadCrumbView(groupPosition);
     }
 
-    public void selectView(int view) {
-        mCurrentView = view;
-        for (BrowserBookmarksAdapter adapter : mAdapter.mChildren) {
-            adapter.selectView(mCurrentView);
-        }
-        mAdapter.notifyDataSetChanged();
-    }
-
     public JSONObject saveGroupState() throws JSONException {
         JSONObject obj = new JSONObject();
         int count = mAdapter.getGroupCount();
@@ -386,9 +317,6 @@
             }
             BrowserBookmarksAdapter childAdapter = mChildren.get(groupPosition);
             int rowCount = mRowCount;
-            if (childAdapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
-                rowCount = 1;
-            }
             LinearLayout row = (LinearLayout) convertView;
             if (row.getChildCount() > rowCount) {
                 row.removeViews(rowCount, row.getChildCount() - rowCount);
@@ -406,10 +334,6 @@
                     v.setTag(R.id.child_id, childAdapter.getItemId(realChildPosition));
                     v.setOnClickListener(mChildClickListener);
                     v.setLongClickable(mLongClickable);
-                    if (mDragHandler != null) {
-                        v.setOnLongClickListener(mChildOnLongClickListener);
-                        mDragHandler.registerBookmarkDragHandler(v);
-                    }
                     if (cv == null) {
                         row.addView(v);
                     } else if (cv != v) {
@@ -428,9 +352,6 @@
         @Override
         public int getChildrenCount(int groupPosition) {
             BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
-            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
-                return adapter.getCount();
-            }
             return (int) Math.ceil(adapter.getCount() / (float)mRowCount);
         }
 
@@ -517,20 +438,6 @@
         public boolean isChildSelectable(int groupPosition, int childPosition) {
             return true;
         }
-
-        @Override
-        public int getChildTypeCount() {
-            return 2;
-        }
-
-        @Override
-        public int getChildType(int groupPosition, int childPosition) {
-            BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
-            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
-                return 1;
-            }
-            return 0;
-        }
     }
 
     public static class BookmarkContextMenuInfo implements ContextMenuInfo {