am bc38e611: (-s ours) Import revised translations.  DO NOT MERGE

Merge commit 'bc38e611b275f4b857ef950bc1465276b76e4bdf' into eclair

* commit 'bc38e611b275f4b857ef950bc1465276b76e4bdf':
  Import revised translations.  DO NOT MERGE
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4e60e66..634851c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -71,7 +71,7 @@
             android:launchMode="singleTask"
             android:clearTaskOnLaunch="true"
             android:stateNotNeeded="true"
-            android:theme="@style/Theme"
+            android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
             android:screenOrientation="nosensor"
             android:windowSoftInputMode="stateUnspecified|adjustPan">
             <intent-filter>
@@ -85,7 +85,8 @@
         <activity
             android:name="WallpaperChooser"
             android:label="@string/pick_wallpaper"
-            android:icon="@drawable/ic_launcher_gallery">
+            android:icon="@drawable/ic_launcher_wallpaper"
+            android:finishOnCloseSystemDialogs="true">
             <intent-filter>
                 <action android:name="android.intent.action.SET_WALLPAPER" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable-hdpi/bg_appwidget_error.9.png b/res/drawable-hdpi/bg_appwidget_error.9.png
new file mode 100644
index 0000000..59d9822
--- /dev/null
+++ b/res/drawable-hdpi/bg_appwidget_error.9.png
Binary files differ
diff --git a/res/drawable-hdpi/box_launcher_bottom.9.png b/res/drawable-hdpi/box_launcher_bottom.9.png
new file mode 100644
index 0000000..f08c7a2
--- /dev/null
+++ b/res/drawable-hdpi/box_launcher_bottom.9.png
Binary files differ
diff --git a/res/drawable-hdpi/box_launcher_top_normal.9.png b/res/drawable-hdpi/box_launcher_top_normal.9.png
new file mode 100644
index 0000000..98997ad
--- /dev/null
+++ b/res/drawable-hdpi/box_launcher_top_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/box_launcher_top_pressed.9.png b/res/drawable-hdpi/box_launcher_top_pressed.9.png
new file mode 100644
index 0000000..f52fd48
--- /dev/null
+++ b/res/drawable-hdpi/box_launcher_top_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/box_launcher_top_selected.9.png b/res/drawable-hdpi/box_launcher_top_selected.9.png
new file mode 100644
index 0000000..8cacf0e
--- /dev/null
+++ b/res/drawable-hdpi/box_launcher_top_selected.9.png
Binary files differ
diff --git a/res/drawable-hdpi/delete_handle.png b/res/drawable-hdpi/delete_handle.png
new file mode 100644
index 0000000..d6134a6
--- /dev/null
+++ b/res/drawable-hdpi/delete_handle.png
Binary files differ
diff --git a/res/drawable-hdpi/delete_handle_normal.png b/res/drawable-hdpi/delete_handle_normal.png
new file mode 100644
index 0000000..442d4e6
--- /dev/null
+++ b/res/drawable-hdpi/delete_handle_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/focused_application_background.9.png b/res/drawable-hdpi/focused_application_background.9.png
new file mode 100644
index 0000000..7bf37ef
--- /dev/null
+++ b/res/drawable-hdpi/focused_application_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_delete.png b/res/drawable-hdpi/ic_delete.png
new file mode 100644
index 0000000..e550372
--- /dev/null
+++ b/res/drawable-hdpi/ic_delete.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_add_folder.png b/res/drawable-hdpi/ic_launcher_add_folder.png
new file mode 100644
index 0000000..2967926
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_add_folder.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_application.png b/res/drawable-hdpi/ic_launcher_application.png
new file mode 100644
index 0000000..8074c4c
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_appwidget.png b/res/drawable-hdpi/ic_launcher_appwidget.png
new file mode 100644
index 0000000..3dc8b20
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_appwidget.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder.png b/res/drawable-hdpi/ic_launcher_folder.png
new file mode 100644
index 0000000..dd71327
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live.png b/res/drawable-hdpi/ic_launcher_folder_live.png
new file mode 100644
index 0000000..e1b1182
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder_live.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_open.png b/res/drawable-hdpi/ic_launcher_folder_open.png
new file mode 100644
index 0000000..5b3fcec
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder_open.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_gallery.png b/res/drawable-hdpi/ic_launcher_gallery.png
new file mode 100644
index 0000000..e7b1575
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_home.png b/res/drawable-hdpi/ic_launcher_home.png
new file mode 100644
index 0000000..74f6bd7
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_shortcut.png b/res/drawable-hdpi/ic_launcher_shortcut.png
new file mode 100644
index 0000000..93ab2df
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_shortcut.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_wallpaper.png b/res/drawable-hdpi/ic_launcher_wallpaper.png
new file mode 100644
index 0000000..dcd8709
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_wallpaper.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_widget.png b/res/drawable-hdpi/ic_search_widget.png
new file mode 100644
index 0000000..06b9b25
--- /dev/null
+++ b/res/drawable-hdpi/ic_search_widget.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tray_collapse.png b/res/drawable-hdpi/ic_tray_collapse.png
new file mode 100644
index 0000000..0480ad2
--- /dev/null
+++ b/res/drawable-hdpi/ic_tray_collapse.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tray_expand.png b/res/drawable-hdpi/ic_tray_expand.png
new file mode 100644
index 0000000..dfc32a4
--- /dev/null
+++ b/res/drawable-hdpi/ic_tray_expand.png
Binary files differ
diff --git a/res/drawable-hdpi/pattern_carbon_fiber_dark.png b/res/drawable-hdpi/pattern_carbon_fiber_dark.png
new file mode 100644
index 0000000..427936f
--- /dev/null
+++ b/res/drawable-hdpi/pattern_carbon_fiber_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/placeholder_google.png b/res/drawable-hdpi/placeholder_google.png
new file mode 100644
index 0000000..923c8b8
--- /dev/null
+++ b/res/drawable-hdpi/placeholder_google.png
Binary files differ
diff --git a/res/drawable-hdpi/search_button_bg.9.png b/res/drawable-hdpi/search_button_bg.9.png
new file mode 100644
index 0000000..9fba3d1
--- /dev/null
+++ b/res/drawable-hdpi/search_button_bg.9.png
Binary files differ
diff --git a/res/drawable-hdpi/search_button_voice.png b/res/drawable-hdpi/search_button_voice.png
new file mode 100644
index 0000000..a60f7d9
--- /dev/null
+++ b/res/drawable-hdpi/search_button_voice.png
Binary files differ
diff --git a/res/drawable-hdpi/search_floater.9.png b/res/drawable-hdpi/search_floater.9.png
new file mode 100644
index 0000000..1c6d836
--- /dev/null
+++ b/res/drawable-hdpi/search_floater.9.png
Binary files differ
diff --git a/res/drawable-hdpi/textfield_searchwidget_default.9.png b/res/drawable-hdpi/textfield_searchwidget_default.9.png
new file mode 100644
index 0000000..2fe637d
--- /dev/null
+++ b/res/drawable-hdpi/textfield_searchwidget_default.9.png
Binary files differ
diff --git a/res/drawable-hdpi/textfield_searchwidget_pressed.9.png b/res/drawable-hdpi/textfield_searchwidget_pressed.9.png
new file mode 100644
index 0000000..58af9ba
--- /dev/null
+++ b/res/drawable-hdpi/textfield_searchwidget_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/textfield_searchwidget_selected.9.png b/res/drawable-hdpi/textfield_searchwidget_selected.9.png
new file mode 100644
index 0000000..8a84fdc
--- /dev/null
+++ b/res/drawable-hdpi/textfield_searchwidget_selected.9.png
Binary files differ
diff --git a/res/drawable-hdpi/tray_handle_normal.png b/res/drawable-hdpi/tray_handle_normal.png
new file mode 100644
index 0000000..f5c3f16
--- /dev/null
+++ b/res/drawable-hdpi/tray_handle_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/tray_handle_pressed.png b/res/drawable-hdpi/tray_handle_pressed.png
new file mode 100644
index 0000000..9d47cab
--- /dev/null
+++ b/res/drawable-hdpi/tray_handle_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/tray_handle_selected.png b/res/drawable-hdpi/tray_handle_selected.png
new file mode 100644
index 0000000..cc9e1b2
--- /dev/null
+++ b/res/drawable-hdpi/tray_handle_selected.png
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_bentgrass.jpg b/res/drawable-hdpi/wallpaper_bentgrass.jpg
new file mode 100644
index 0000000..811149b
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_bentgrass.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_bentgrass_small.jpg b/res/drawable-hdpi/wallpaper_bentgrass_small.jpg
new file mode 100644
index 0000000..68e11ff
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_bentgrass_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_canyon.jpg b/res/drawable-hdpi/wallpaper_canyon.jpg
new file mode 100644
index 0000000..e3e4ffd
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_canyon.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_canyon_small.jpg b/res/drawable-hdpi/wallpaper_canyon_small.jpg
new file mode 100644
index 0000000..c0c7c9d
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_canyon_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_despair.jpg b/res/drawable-hdpi/wallpaper_despair.jpg
new file mode 100644
index 0000000..49933c1
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_despair.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_despair_small.jpg b/res/drawable-hdpi/wallpaper_despair_small.jpg
new file mode 100644
index 0000000..bae448d
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_despair_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_electric.jpg b/res/drawable-hdpi/wallpaper_electric.jpg
new file mode 100644
index 0000000..e5afe4c
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_electric.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_electric_small.jpg b/res/drawable-hdpi/wallpaper_electric_small.jpg
new file mode 100644
index 0000000..c173f7e
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_electric_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_goldengate.jpg b/res/drawable-hdpi/wallpaper_goldengate.jpg
new file mode 100644
index 0000000..f168450
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_goldengate.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_goldengate_small.jpg b/res/drawable-hdpi/wallpaper_goldengate_small.jpg
new file mode 100644
index 0000000..0353b49
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_goldengate_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_grass.jpg b/res/drawable-hdpi/wallpaper_grass.jpg
new file mode 100644
index 0000000..63adc5b
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_grass.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_grass_small.jpg b/res/drawable-hdpi/wallpaper_grass_small.jpg
new file mode 100644
index 0000000..ee98370
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_grass_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_jellyfish.jpg b/res/drawable-hdpi/wallpaper_jellyfish.jpg
new file mode 100644
index 0000000..5540009
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_jellyfish.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_jellyfish_small.jpg b/res/drawable-hdpi/wallpaper_jellyfish_small.jpg
new file mode 100644
index 0000000..4ade3de
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_jellyfish_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_leaves.jpg b/res/drawable-hdpi/wallpaper_leaves.jpg
new file mode 100644
index 0000000..3d20d69
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_leaves.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_leaves_small.jpg b/res/drawable-hdpi/wallpaper_leaves_small.jpg
new file mode 100644
index 0000000..96bc7ad
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_leaves_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_monumentvalley.jpg b/res/drawable-hdpi/wallpaper_monumentvalley.jpg
new file mode 100644
index 0000000..a88c9c5
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_monumentvalley.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_monumentvalley_small.jpg b/res/drawable-hdpi/wallpaper_monumentvalley_small.jpg
new file mode 100644
index 0000000..f3560ff
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_monumentvalley_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_paradise.jpg b/res/drawable-hdpi/wallpaper_paradise.jpg
new file mode 100644
index 0000000..34e58f4
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_paradise.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_paradise_small.jpg b/res/drawable-hdpi/wallpaper_paradise_small.jpg
new file mode 100644
index 0000000..0a6e40c
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_paradise_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_rainbokeh.jpg b/res/drawable-hdpi/wallpaper_rainbokeh.jpg
new file mode 100644
index 0000000..3c256bb
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_rainbokeh.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_rainbokeh_small.jpg b/res/drawable-hdpi/wallpaper_rainbokeh_small.jpg
new file mode 100644
index 0000000..1c1413b
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_rainbokeh_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_ricefield.jpg b/res/drawable-hdpi/wallpaper_ricefield.jpg
new file mode 100644
index 0000000..f47c3de
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_ricefield.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_ricefield_small.jpg b/res/drawable-hdpi/wallpaper_ricefield_small.jpg
new file mode 100644
index 0000000..2e78048
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_ricefield_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_sunset.jpg b/res/drawable-hdpi/wallpaper_sunset.jpg
new file mode 100644
index 0000000..e912fdc
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_sunset.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_sunset_small.jpg b/res/drawable-hdpi/wallpaper_sunset_small.jpg
new file mode 100644
index 0000000..7b2ffb5
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_sunset_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_tree.jpg b/res/drawable-hdpi/wallpaper_tree.jpg
new file mode 100644
index 0000000..07e546c
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_tree.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_tree_small.jpg b/res/drawable-hdpi/wallpaper_tree_small.jpg
new file mode 100644
index 0000000..b5ba0e1
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_tree_small.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_valley.jpg b/res/drawable-hdpi/wallpaper_valley.jpg
new file mode 100644
index 0000000..084098b
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_valley.jpg
Binary files differ
diff --git a/res/drawable-hdpi/wallpaper_valley_small.jpg b/res/drawable-hdpi/wallpaper_valley_small.jpg
new file mode 100644
index 0000000..0dfcbc5
--- /dev/null
+++ b/res/drawable-hdpi/wallpaper_valley_small.jpg
Binary files differ
diff --git a/res/drawable-land-hdpi/delete_handle.png b/res/drawable-land-hdpi/delete_handle.png
new file mode 100644
index 0000000..5bab976
--- /dev/null
+++ b/res/drawable-land-hdpi/delete_handle.png
Binary files differ
diff --git a/res/drawable-land-hdpi/delete_handle_normal.png b/res/drawable-land-hdpi/delete_handle_normal.png
new file mode 100644
index 0000000..f6d4592
--- /dev/null
+++ b/res/drawable-land-hdpi/delete_handle_normal.png
Binary files differ
diff --git a/res/drawable-land-hdpi/ic_delete.png b/res/drawable-land-hdpi/ic_delete.png
new file mode 100644
index 0000000..e78d989
--- /dev/null
+++ b/res/drawable-land-hdpi/ic_delete.png
Binary files differ
diff --git a/res/drawable-land-hdpi/ic_tray_collapse.png b/res/drawable-land-hdpi/ic_tray_collapse.png
new file mode 100644
index 0000000..ccab96c
--- /dev/null
+++ b/res/drawable-land-hdpi/ic_tray_collapse.png
Binary files differ
diff --git a/res/drawable-land-hdpi/ic_tray_expand.png b/res/drawable-land-hdpi/ic_tray_expand.png
new file mode 100644
index 0000000..c1fda59
--- /dev/null
+++ b/res/drawable-land-hdpi/ic_tray_expand.png
Binary files differ
diff --git a/res/drawable-land-hdpi/tray_handle_normal.png b/res/drawable-land-hdpi/tray_handle_normal.png
new file mode 100644
index 0000000..e0cfb24
--- /dev/null
+++ b/res/drawable-land-hdpi/tray_handle_normal.png
Binary files differ
diff --git a/res/drawable-land-hdpi/tray_handle_pressed.png b/res/drawable-land-hdpi/tray_handle_pressed.png
new file mode 100644
index 0000000..646ba59
--- /dev/null
+++ b/res/drawable-land-hdpi/tray_handle_pressed.png
Binary files differ
diff --git a/res/drawable-land-hdpi/tray_handle_selected.png b/res/drawable-land-hdpi/tray_handle_selected.png
new file mode 100644
index 0000000..40aeac1
--- /dev/null
+++ b/res/drawable-land-hdpi/tray_handle_selected.png
Binary files differ
diff --git a/res/drawable-land/delete_handle.png b/res/drawable-land-mdpi/delete_handle.png
similarity index 100%
rename from res/drawable-land/delete_handle.png
rename to res/drawable-land-mdpi/delete_handle.png
Binary files differ
diff --git a/res/drawable-land/delete_handle_normal.png b/res/drawable-land-mdpi/delete_handle_normal.png
similarity index 100%
rename from res/drawable-land/delete_handle_normal.png
rename to res/drawable-land-mdpi/delete_handle_normal.png
Binary files differ
diff --git a/res/drawable-land/ic_delete.png b/res/drawable-land-mdpi/ic_delete.png
similarity index 100%
rename from res/drawable-land/ic_delete.png
rename to res/drawable-land-mdpi/ic_delete.png
Binary files differ
diff --git a/res/drawable-land/ic_tray_collapse.png b/res/drawable-land-mdpi/ic_tray_collapse.png
similarity index 100%
rename from res/drawable-land/ic_tray_collapse.png
rename to res/drawable-land-mdpi/ic_tray_collapse.png
Binary files differ
diff --git a/res/drawable-land/ic_tray_expand.png b/res/drawable-land-mdpi/ic_tray_expand.png
similarity index 100%
rename from res/drawable-land/ic_tray_expand.png
rename to res/drawable-land-mdpi/ic_tray_expand.png
Binary files differ
diff --git a/res/drawable-land/tray_handle_normal.png b/res/drawable-land-mdpi/tray_handle_normal.png
similarity index 100%
rename from res/drawable-land/tray_handle_normal.png
rename to res/drawable-land-mdpi/tray_handle_normal.png
Binary files differ
diff --git a/res/drawable-land/tray_handle_pressed.png b/res/drawable-land-mdpi/tray_handle_pressed.png
similarity index 100%
rename from res/drawable-land/tray_handle_pressed.png
rename to res/drawable-land-mdpi/tray_handle_pressed.png
Binary files differ
diff --git a/res/drawable-land/tray_handle_selected.png b/res/drawable-land-mdpi/tray_handle_selected.png
similarity index 100%
rename from res/drawable-land/tray_handle_selected.png
rename to res/drawable-land-mdpi/tray_handle_selected.png
Binary files differ
diff --git a/res/drawable/bg_appwidget_error.9.png b/res/drawable-mdpi/bg_appwidget_error.9.png
similarity index 100%
rename from res/drawable/bg_appwidget_error.9.png
rename to res/drawable-mdpi/bg_appwidget_error.9.png
Binary files differ
diff --git a/res/drawable/box_launcher_bottom.9.png b/res/drawable-mdpi/box_launcher_bottom.9.png
similarity index 100%
rename from res/drawable/box_launcher_bottom.9.png
rename to res/drawable-mdpi/box_launcher_bottom.9.png
Binary files differ
diff --git a/res/drawable/box_launcher_top_normal.9.png b/res/drawable-mdpi/box_launcher_top_normal.9.png
similarity index 100%
rename from res/drawable/box_launcher_top_normal.9.png
rename to res/drawable-mdpi/box_launcher_top_normal.9.png
Binary files differ
diff --git a/res/drawable/box_launcher_top_pressed.9.png b/res/drawable-mdpi/box_launcher_top_pressed.9.png
similarity index 100%
rename from res/drawable/box_launcher_top_pressed.9.png
rename to res/drawable-mdpi/box_launcher_top_pressed.9.png
Binary files differ
diff --git a/res/drawable/box_launcher_top_selected.9.png b/res/drawable-mdpi/box_launcher_top_selected.9.png
similarity index 100%
rename from res/drawable/box_launcher_top_selected.9.png
rename to res/drawable-mdpi/box_launcher_top_selected.9.png
Binary files differ
diff --git a/res/drawable/focused_application_background.9.png b/res/drawable-mdpi/focused_application_background.9.png
similarity index 100%
rename from res/drawable/focused_application_background.9.png
rename to res/drawable-mdpi/focused_application_background.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_add_folder.png b/res/drawable-mdpi/ic_launcher_add_folder.png
new file mode 100644
index 0000000..4c4bbf3
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_add_folder.png
Binary files differ
diff --git a/res/drawable/ic_launcher_application.png b/res/drawable-mdpi/ic_launcher_application.png
similarity index 100%
rename from res/drawable/ic_launcher_application.png
rename to res/drawable-mdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/drawable/ic_launcher_appwidget.png b/res/drawable-mdpi/ic_launcher_appwidget.png
similarity index 100%
rename from res/drawable/ic_launcher_appwidget.png
rename to res/drawable-mdpi/ic_launcher_appwidget.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder.png b/res/drawable-mdpi/ic_launcher_folder.png
similarity index 100%
rename from res/drawable/ic_launcher_folder.png
rename to res/drawable-mdpi/ic_launcher_folder.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live.png b/res/drawable-mdpi/ic_launcher_folder_live.png
similarity index 100%
rename from res/drawable/ic_launcher_folder_live.png
rename to res/drawable-mdpi/ic_launcher_folder_live.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_open.png b/res/drawable-mdpi/ic_launcher_folder_open.png
similarity index 100%
rename from res/drawable/ic_launcher_folder_open.png
rename to res/drawable-mdpi/ic_launcher_folder_open.png
Binary files differ
diff --git a/res/drawable/ic_launcher_gallery.png b/res/drawable-mdpi/ic_launcher_gallery.png
similarity index 100%
rename from res/drawable/ic_launcher_gallery.png
rename to res/drawable-mdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/drawable/ic_launcher_home.png b/res/drawable-mdpi/ic_launcher_home.png
similarity index 100%
rename from res/drawable/ic_launcher_home.png
rename to res/drawable-mdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/drawable/ic_launcher_shortcut.png b/res/drawable-mdpi/ic_launcher_shortcut.png
similarity index 100%
rename from res/drawable/ic_launcher_shortcut.png
rename to res/drawable-mdpi/ic_launcher_shortcut.png
Binary files differ
diff --git a/res/drawable/ic_launcher_gallery.png b/res/drawable-mdpi/ic_launcher_wallpaper.png
similarity index 100%
copy from res/drawable/ic_launcher_gallery.png
copy to res/drawable-mdpi/ic_launcher_wallpaper.png
Binary files differ
diff --git a/res/drawable/ic_search_widget.png b/res/drawable-mdpi/ic_search_widget.png
similarity index 100%
rename from res/drawable/ic_search_widget.png
rename to res/drawable-mdpi/ic_search_widget.png
Binary files differ
diff --git a/res/drawable/pattern_carbon_fiber_dark.png b/res/drawable-mdpi/pattern_carbon_fiber_dark.png
similarity index 100%
rename from res/drawable/pattern_carbon_fiber_dark.png
rename to res/drawable-mdpi/pattern_carbon_fiber_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/placeholder_google.png b/res/drawable-mdpi/placeholder_google.png
new file mode 100644
index 0000000..4af30aa
--- /dev/null
+++ b/res/drawable-mdpi/placeholder_google.png
Binary files differ
diff --git a/res/drawable/search_button_bg.9.png b/res/drawable-mdpi/search_button_bg.9.png
similarity index 100%
rename from res/drawable/search_button_bg.9.png
rename to res/drawable-mdpi/search_button_bg.9.png
Binary files differ
diff --git a/res/drawable/search_button_voice.png b/res/drawable-mdpi/search_button_voice.png
similarity index 100%
rename from res/drawable/search_button_voice.png
rename to res/drawable-mdpi/search_button_voice.png
Binary files differ
diff --git a/res/drawable/search_floater.9.png b/res/drawable-mdpi/search_floater.9.png
similarity index 100%
rename from res/drawable/search_floater.9.png
rename to res/drawable-mdpi/search_floater.9.png
Binary files differ
diff --git a/res/drawable/textfield_searchwidget_default.9.png b/res/drawable-mdpi/textfield_searchwidget_default.9.png
similarity index 100%
rename from res/drawable/textfield_searchwidget_default.9.png
rename to res/drawable-mdpi/textfield_searchwidget_default.9.png
Binary files differ
diff --git a/res/drawable/textfield_searchwidget_pressed.9.png b/res/drawable-mdpi/textfield_searchwidget_pressed.9.png
similarity index 100%
rename from res/drawable/textfield_searchwidget_pressed.9.png
rename to res/drawable-mdpi/textfield_searchwidget_pressed.9.png
Binary files differ
diff --git a/res/drawable/textfield_searchwidget_selected.9.png b/res/drawable-mdpi/textfield_searchwidget_selected.9.png
similarity index 100%
rename from res/drawable/textfield_searchwidget_selected.9.png
rename to res/drawable-mdpi/textfield_searchwidget_selected.9.png
Binary files differ
diff --git a/res/drawable/wallpaper_beach.jpg b/res/drawable-mdpi/wallpaper_beach.jpg
similarity index 100%
rename from res/drawable/wallpaper_beach.jpg
rename to res/drawable-mdpi/wallpaper_beach.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_beach_small.jpg b/res/drawable-mdpi/wallpaper_beach_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_beach_small.jpg
rename to res/drawable-mdpi/wallpaper_beach_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_blue.jpg b/res/drawable-mdpi/wallpaper_blue.jpg
similarity index 100%
rename from res/drawable/wallpaper_blue.jpg
rename to res/drawable-mdpi/wallpaper_blue.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_blue_small.jpg b/res/drawable-mdpi/wallpaper_blue_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_blue_small.jpg
rename to res/drawable-mdpi/wallpaper_blue_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_green.jpg b/res/drawable-mdpi/wallpaper_green.jpg
similarity index 100%
rename from res/drawable/wallpaper_green.jpg
rename to res/drawable-mdpi/wallpaper_green.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_green_small.jpg b/res/drawable-mdpi/wallpaper_green_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_green_small.jpg
rename to res/drawable-mdpi/wallpaper_green_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_grey.jpg b/res/drawable-mdpi/wallpaper_grey.jpg
similarity index 100%
rename from res/drawable/wallpaper_grey.jpg
rename to res/drawable-mdpi/wallpaper_grey.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_grey_small.jpg b/res/drawable-mdpi/wallpaper_grey_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_grey_small.jpg
rename to res/drawable-mdpi/wallpaper_grey_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_jellyfish.jpg b/res/drawable-mdpi/wallpaper_jellyfish.jpg
similarity index 100%
rename from res/drawable/wallpaper_jellyfish.jpg
rename to res/drawable-mdpi/wallpaper_jellyfish.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_jellyfish_small.jpg b/res/drawable-mdpi/wallpaper_jellyfish_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_jellyfish_small.jpg
rename to res/drawable-mdpi/wallpaper_jellyfish_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_lake.jpg b/res/drawable-mdpi/wallpaper_lake.jpg
similarity index 100%
rename from res/drawable/wallpaper_lake.jpg
rename to res/drawable-mdpi/wallpaper_lake.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_lake_small.jpg b/res/drawable-mdpi/wallpaper_lake_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_lake_small.jpg
rename to res/drawable-mdpi/wallpaper_lake_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_mountain.jpg b/res/drawable-mdpi/wallpaper_mountain.jpg
similarity index 100%
rename from res/drawable/wallpaper_mountain.jpg
rename to res/drawable-mdpi/wallpaper_mountain.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_mountain_small.jpg b/res/drawable-mdpi/wallpaper_mountain_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_mountain_small.jpg
rename to res/drawable-mdpi/wallpaper_mountain_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_path.jpg b/res/drawable-mdpi/wallpaper_path.jpg
similarity index 100%
rename from res/drawable/wallpaper_path.jpg
rename to res/drawable-mdpi/wallpaper_path.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_path_small.jpg b/res/drawable-mdpi/wallpaper_path_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_path_small.jpg
rename to res/drawable-mdpi/wallpaper_path_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_pink.jpg b/res/drawable-mdpi/wallpaper_pink.jpg
similarity index 100%
rename from res/drawable/wallpaper_pink.jpg
rename to res/drawable-mdpi/wallpaper_pink.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_pink_small.jpg b/res/drawable-mdpi/wallpaper_pink_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_pink_small.jpg
rename to res/drawable-mdpi/wallpaper_pink_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_road.jpg b/res/drawable-mdpi/wallpaper_road.jpg
similarity index 100%
rename from res/drawable/wallpaper_road.jpg
rename to res/drawable-mdpi/wallpaper_road.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_road_small.jpg b/res/drawable-mdpi/wallpaper_road_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_road_small.jpg
rename to res/drawable-mdpi/wallpaper_road_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_snow_leopard.jpg b/res/drawable-mdpi/wallpaper_snow_leopard.jpg
similarity index 100%
rename from res/drawable/wallpaper_snow_leopard.jpg
rename to res/drawable-mdpi/wallpaper_snow_leopard.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_snow_leopard_small.jpg b/res/drawable-mdpi/wallpaper_snow_leopard_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_snow_leopard_small.jpg
rename to res/drawable-mdpi/wallpaper_snow_leopard_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_sunrise.jpg b/res/drawable-mdpi/wallpaper_sunrise.jpg
similarity index 100%
rename from res/drawable/wallpaper_sunrise.jpg
rename to res/drawable-mdpi/wallpaper_sunrise.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_sunrise_small.jpg b/res/drawable-mdpi/wallpaper_sunrise_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_sunrise_small.jpg
rename to res/drawable-mdpi/wallpaper_sunrise_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_sunset.jpg b/res/drawable-mdpi/wallpaper_sunset.jpg
similarity index 100%
rename from res/drawable/wallpaper_sunset.jpg
rename to res/drawable-mdpi/wallpaper_sunset.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_sunset_small.jpg b/res/drawable-mdpi/wallpaper_sunset_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_sunset_small.jpg
rename to res/drawable-mdpi/wallpaper_sunset_small.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_zanzibar.jpg b/res/drawable-mdpi/wallpaper_zanzibar.jpg
similarity index 100%
rename from res/drawable/wallpaper_zanzibar.jpg
rename to res/drawable-mdpi/wallpaper_zanzibar.jpg
Binary files differ
diff --git a/res/drawable/wallpaper_zanzibar_small.jpg b/res/drawable-mdpi/wallpaper_zanzibar_small.jpg
similarity index 100%
rename from res/drawable/wallpaper_zanzibar_small.jpg
rename to res/drawable-mdpi/wallpaper_zanzibar_small.jpg
Binary files differ
diff --git a/res/drawable-port/delete_handle.png b/res/drawable-port-mdpi/delete_handle.png
similarity index 100%
rename from res/drawable-port/delete_handle.png
rename to res/drawable-port-mdpi/delete_handle.png
Binary files differ
diff --git a/res/drawable-port/delete_handle_normal.png b/res/drawable-port-mdpi/delete_handle_normal.png
similarity index 100%
rename from res/drawable-port/delete_handle_normal.png
rename to res/drawable-port-mdpi/delete_handle_normal.png
Binary files differ
diff --git a/res/drawable-port/ic_delete.png b/res/drawable-port-mdpi/ic_delete.png
similarity index 100%
rename from res/drawable-port/ic_delete.png
rename to res/drawable-port-mdpi/ic_delete.png
Binary files differ
diff --git a/res/drawable-port/ic_tray_collapse.png b/res/drawable-port-mdpi/ic_tray_collapse.png
similarity index 100%
rename from res/drawable-port/ic_tray_collapse.png
rename to res/drawable-port-mdpi/ic_tray_collapse.png
Binary files differ
diff --git a/res/drawable-port/ic_tray_expand.png b/res/drawable-port-mdpi/ic_tray_expand.png
similarity index 100%
rename from res/drawable-port/ic_tray_expand.png
rename to res/drawable-port-mdpi/ic_tray_expand.png
Binary files differ
diff --git a/res/drawable-port/tray_handle_normal.png b/res/drawable-port-mdpi/tray_handle_normal.png
similarity index 100%
rename from res/drawable-port/tray_handle_normal.png
rename to res/drawable-port-mdpi/tray_handle_normal.png
Binary files differ
diff --git a/res/drawable-port/tray_handle_pressed.png b/res/drawable-port-mdpi/tray_handle_pressed.png
similarity index 100%
rename from res/drawable-port/tray_handle_pressed.png
rename to res/drawable-port-mdpi/tray_handle_pressed.png
Binary files differ
diff --git a/res/drawable-port/tray_handle_selected.png b/res/drawable-port-mdpi/tray_handle_selected.png
similarity index 100%
rename from res/drawable-port/tray_handle_selected.png
rename to res/drawable-port-mdpi/tray_handle_selected.png
Binary files differ
diff --git a/res/drawable/placeholder_google.png b/res/drawable/placeholder_google.png
deleted file mode 100644
index e852909..0000000
--- a/res/drawable/placeholder_google.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/wallpaper_frog.jpg b/res/drawable/wallpaper_frog.jpg
deleted file mode 100644
index e69de29..0000000
--- a/res/drawable/wallpaper_frog.jpg
+++ /dev/null
diff --git a/res/drawable/wallpaper_frog_small.jpg b/res/drawable/wallpaper_frog_small.jpg
deleted file mode 100644
index e69de29..0000000
--- a/res/drawable/wallpaper_frog_small.jpg
+++ /dev/null
diff --git a/res/drawable/wallpaper_turtle.jpg b/res/drawable/wallpaper_turtle.jpg
deleted file mode 100644
index e69de29..0000000
--- a/res/drawable/wallpaper_turtle.jpg
+++ /dev/null
diff --git a/res/drawable/wallpaper_turtle_small.jpg b/res/drawable/wallpaper_turtle_small.jpg
deleted file mode 100644
index e69de29..0000000
--- a/res/drawable/wallpaper_turtle_small.jpg
+++ /dev/null
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 8214863..2fc5cb7 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -42,7 +42,7 @@
         android:layout_height="fill_parent"
 
         android:orientation="horizontal"
-        android:bottomOffset="7dip"
+        android:bottomOffset="4dip"
         android:handle="@+id/all_apps"
         android:content="@+id/content">
         
diff --git a/res/layout-land/live_folder_grid.xml b/res/layout-land/live_folder_grid.xml
index bb623b0..ab06091 100644
--- a/res/layout-land/live_folder_grid.xml
+++ b/res/layout-land/live_folder_grid.xml
@@ -21,7 +21,7 @@
     android:orientation="vertical">
     
     <Button
-        android:id="@+id/close"
+        android:id="@+id/folder_close"
     	android:background="@drawable/box_launcher_top"
         android:gravity="left|center_vertical"
         android:textSize="14sp"
@@ -31,7 +31,7 @@
     	android:layout_height="wrap_content" />
 
     <GridView
-        android:id="@id/content"
+        android:id="@+id/folder_content"
         android:layout_width="fill_parent"
     	android:layout_height="0dip"
     	android:layout_weight="1"
diff --git a/res/layout-land/user_folder.xml b/res/layout-land/user_folder.xml
index fbf337b..0eba315 100644
--- a/res/layout-land/user_folder.xml
+++ b/res/layout-land/user_folder.xml
@@ -18,7 +18,7 @@
     android:orientation="vertical">
     
     <Button
-        android:id="@+id/close"
+        android:id="@+id/folder_close"
     	android:background="@drawable/box_launcher_top"
         android:gravity="left|center_vertical"
         android:textSize="14sp"
@@ -28,7 +28,7 @@
     	android:layout_height="wrap_content" />
 
     <GridView
-        android:id="@id/content"
+        android:id="@id/folder_content"
         android:layout_width="fill_parent"
     	android:layout_height="0dip"
     	android:layout_weight="1"
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index 7dcacd6..9370e7d 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -42,7 +42,7 @@
         android:layout_height="fill_parent"
 
         android:topOffset="5dip"
-        android:bottomOffset="7dip"
+        android:bottomOffset="4dip"
         android:handle="@+id/all_apps"
         android:content="@+id/content">
 
diff --git a/res/layout-port/live_folder_grid.xml b/res/layout-port/live_folder_grid.xml
index e5bcafe..096d6b4 100644
--- a/res/layout-port/live_folder_grid.xml
+++ b/res/layout-port/live_folder_grid.xml
@@ -21,7 +21,7 @@
     android:orientation="vertical">
         
     <Button
-        android:id="@+id/close"
+        android:id="@+id/folder_close"
    		android:background="@drawable/box_launcher_top"
         android:gravity="left|center_vertical"
         android:textSize="14sp"
@@ -31,7 +31,7 @@
     	android:layout_height="wrap_content" />
 
     <GridView
-        android:id="@id/content"
+        android:id="@id/folder_content"
         android:layout_width="fill_parent"
     	android:layout_height="0dip"
     	android:layout_weight="1"
diff --git a/res/layout-port/user_folder.xml b/res/layout-port/user_folder.xml
index 27d70fc..47ce910 100644
--- a/res/layout-port/user_folder.xml
+++ b/res/layout-port/user_folder.xml
@@ -18,7 +18,7 @@
     android:orientation="vertical">
         
     <Button
-        android:id="@+id/close"
+        android:id="@+id/folder_close"
    		android:background="@drawable/box_launcher_top"
         android:gravity="left|center_vertical"
         android:textSize="14sp"
@@ -28,7 +28,7 @@
     	android:layout_height="wrap_content" />
 
     <GridView
-        android:id="@id/content"
+        android:id="@id/folder_content"
         android:layout_width="fill_parent"
     	android:layout_height="0dip"
     	android:layout_weight="1"
diff --git a/res/layout/application_list.xml b/res/layout/application_list.xml
index 230a951..30539cc 100644
--- a/res/layout/application_list.xml
+++ b/res/layout/application_list.xml
@@ -26,11 +26,10 @@
     android:orientation="horizontal">
 
     <ImageView android:id="@+id/icon"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_width="@android:dimen/app_icon_size"
+        android:layout_height="@android:dimen/app_icon_size"
         android:layout_gravity="center_vertical"
-
-        android:scaleType="center" />
+        android:scaleType="fitCenter" />
 
     <LinearLayout
         android:layout_width="0dip"
diff --git a/res/layout/live_folder_list.xml b/res/layout/live_folder_list.xml
index f96a190..ab7bcf2 100644
--- a/res/layout/live_folder_list.xml
+++ b/res/layout/live_folder_list.xml
@@ -21,7 +21,7 @@
     android:orientation="vertical">
     
     <Button
-        android:id="@+id/close"
+        android:id="@+id/folder_close"
     	android:background="@drawable/box_launcher_top"
         android:gravity="left|center_vertical"
         android:textSize="14sp"
@@ -31,7 +31,7 @@
     	android:layout_height="wrap_content" />
 
     <ListView
-        android:id="@id/content"
+        android:id="@id/folder_content"
         android:layout_width="fill_parent"
     	android:layout_height="0dip"
     	android:layout_weight="1"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 6551740..8895693 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Nastavit tapetu"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galerie tapet"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Aplikace není v telefonu nainstalována."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurace..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Název složky"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Přejmenovat složku"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Rámeček fotografie"</string>
     <string name="add_search" msgid="7104834713685095105">"Vyhledávání"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Na této ploše již není místo."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Byl vytvořen zástupce %s."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Zástupce %s byl odebrán."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Zástupce %s již existuje."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Zástupce <xliff:g id="NAME">%s</xliff:g> byl vytvořen."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Zástupce <xliff:g id="NAME">%s</xliff:g> byl odebrán."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Zástupce <xliff:g id="NAME">%s</xliff:g> již existuje."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Vyberte zástupce"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Vybrat složku"</string>
     <string name="menu_add" msgid="3065046628354640854">"Přidat"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index dae2499..70c9d20 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Angiv tapet"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Tapetgalleri"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Programmet er ikke installeret på din telefon."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurer ..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappenavn"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Omdøb mappe"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Billedramme"</string>
     <string name="add_search" msgid="7104834713685095105">"Søg"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Der er ikke mere plads på Startskærmen."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Genvejen \"%s\" blev oprettet."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Genvejen \"%s\" blev fjernet."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Genvejen \"%s\" findes allerede."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" blev oprettet."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" blev fjernet."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" findes allerede."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Vælg genvej"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Vælg mappe"</string>
     <string name="menu_add" msgid="3065046628354640854">"Tilføj"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3676eba..a6c8b3f 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Hintergrund festlegen"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galerie"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Anwendung ist nicht auf dem Telefon installiert."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurieren..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Ordnername"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Ordner umbenennen"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Bildrahmen"</string>
     <string name="add_search" msgid="7104834713685095105">"Suchen"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Auf dem Startbildschirm ist kein Platz mehr vorhanden."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Verknüpfung \"%s\" erstellt"</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Verknüpfung \"%s\" wurde entfernt."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Verknüpfung \"%s\" ist bereits vorhanden."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"\"<xliff:g id="NAME">%s</xliff:g>\"-Verknüpfung wurde erstellt."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"\"<xliff:g id="NAME">%s</xliff:g>\"-Verknüpfung wurde entfernt."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"\"<xliff:g id="NAME">%s</xliff:g>\"-Verknüpfung ist bereits vorhanden."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Tastenkürzel auswählen"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Ordner auswählen"</string>
     <string name="menu_add" msgid="3065046628354640854">"Hinzufügen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 091f3fd..6466262 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Ορισμός ταπετσαρίας"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Συλλογή ταπετσαριών"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Η εφαρμογή δεν έχει εγκατασταθεί στο τηλέφωνό σας."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Διαμόρφωση..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Όνομα φακέλου"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Μετονομασία φακέλου"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Πλαίσιο εικόνας"</string>
     <string name="add_search" msgid="7104834713685095105">"Αναζήτηση"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Δημιουργήθηκε η συντόμευση \"%s\"."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Η συντόμευση \"%s\" καταργήθηκε."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Η συντόμευση \"%s\" υπάρχει ήδη."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Δημιουργήθηκε η συντόμευση \"<xliff:g id="NAME">%s</xliff:g>\"."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Η συντόμευση \"<xliff:g id="NAME">%s</xliff:g>\" καταργήθηκε."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Η συντόμευση \"<xliff:g id="NAME">%s</xliff:g>\" υπάρχει ήδη."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Επιλογή συντόμευσης"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Επιλογή φακέλου"</string>
     <string name="menu_add" msgid="3065046628354640854">"Προσθήκη"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 015b48f..6b41373 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir papel tapiz"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galería de papel tapiz"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"La aplicación no está instalada en tu computadora."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configurar..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nombre de carpeta"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Cambiar nombre de carpeta"</string>
     <string name="rename_action" msgid="6016003384693240896">"Aceptar"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Marco de imagen"</string>
     <string name="add_search" msgid="7104834713685095105">"Buscar"</string>
     <string name="out_of_space" msgid="8365249326091984698">"No hay más espacio en esta pantalla de la página principal"</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"El acceso directo \"%s\" ha sido creado."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"El acceso directo \"%s\" ha sido eliminado."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"El acceso directo \"%s\" ya existe."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" creado."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"El acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" ha sido eliminado."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"El acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" ya existe."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Seleccionar acceso directo"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Seleccionar carpeta"</string>
     <string name="menu_add" msgid="3065046628354640854">"Agregar"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b9832a6..2cef42d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Establecer fondo de pantalla"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galería de fondos de pantalla"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"La aplicación no está instalada en el teléfono."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configurar..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nombre de carpeta"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Cambiar nombre de carpeta"</string>
     <string name="rename_action" msgid="6016003384693240896">"Aceptar"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Picture frame"</string>
     <string name="add_search" msgid="7104834713685095105">"Búsqueda de Google"</string>
     <string name="out_of_space" msgid="8365249326091984698">"No queda espacio en esta pantalla de página principal."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Se ha creado el acceso directo \"%s\"."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Se ha eliminado el acceso directo \"%s\"."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"El acceso directo \"%s\" ya existe."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Se ha creado el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Se ha eliminado el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"El acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" ya existe."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Seleccionar acceso directo"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Seleccionar carpeta"</string>
     <string name="menu_add" msgid="3065046628354640854">"Añadir"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f912473..4293d16 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Sélectionner"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galerie"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"L\'application n\'est pas installée sur votre téléphone."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configurer..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nom du dossier"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Renommer le dossier"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Cadre d\'image"</string>
     <string name="add_search" msgid="7104834713685095105">"Recherche"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Plus d\'espace libre sur l\'écran d\'accueil."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Raccourci \"%s\" créé."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Le raccourci \"%s\" a été supprimé."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Le raccourci \"%s\" existe déjà."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" a été créé."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" a été supprimé."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" existe déjà."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Sélectionner un raccourci"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Sélectionner le dossier"</string>
     <string name="menu_add" msgid="3065046628354640854">"Ajouter"</string>
diff --git a/res/values-hdpi/wallpapers.xml b/res/values-hdpi/wallpapers.xml
new file mode 100644
index 0000000..352a626
--- /dev/null
+++ b/res/values-hdpi/wallpapers.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2009 Google Inc.
+ *
+ * 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>
+    <string-array name="wallpapers" translatable="false">
+        <item>wallpaper_bentgrass</item>
+        <item>wallpaper_canyon</item>
+        <item>wallpaper_despair</item>
+        <item>wallpaper_electric</item>
+        <item>wallpaper_goldengate</item>
+        <item>wallpaper_grass</item>
+        <item>wallpaper_jellyfish</item>
+        <item>wallpaper_leaves</item>
+        <item>wallpaper_monumentvalley</item>
+        <item>wallpaper_paradise</item>
+        <item>wallpaper_rainbokeh</item>
+        <item>wallpaper_ricefield</item>
+        <item>wallpaper_sunset</item>
+        <item>wallpaper_tree</item>
+        <item>wallpaper_valley</item>
+    </string-array>
+</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5db6825..f13daa1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Imposta sfondo"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galleria sfondi"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Applicazione non installata sul telefono."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configura..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome cartella"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Rinomina cartella"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Cornice immagini"</string>
     <string name="add_search" msgid="7104834713685095105">"Ricerca"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Spazio nella schermata Home esaurito."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Collegamento \"%s\" creato."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"La scorciatoia \"%s\" è stata rimossa."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Scorciatoia \"%s\" già presente."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Collegamento \"<xliff:g id="NAME">%s</xliff:g>\" creato."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Il collegamento \"<xliff:g id="NAME">%s</xliff:g>\" è stato rimosso."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Collegamento \"<xliff:g id="NAME">%s</xliff:g>\" già presente."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Seleziona collegamento"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Seleziona cartella"</string>
     <string name="menu_add" msgid="3065046628354640854">"Aggiungi"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index d6eb7ab..defc4cf 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"壁紙に設定"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"壁紙ギャラリー"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"アプリケーションがインストールされていません。"</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"設定..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"フォルダ名"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"フォルダ名を変更"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"写真フレーム"</string>
     <string name="add_search" msgid="7104834713685095105">"検索"</string>
     <string name="out_of_space" msgid="8365249326091984698">"ホーム画面に空きスペースがありません。"</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"ショートカット「%s」を作成しました。"</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"ショートカット「%s」が削除されました。"</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"ショートカット「%s」は既に存在します。"</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"ショートカット「<xliff:g id="NAME">%s</xliff:g>」を作成しました。"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"ショートカット「<xliff:g id="NAME">%s</xliff:g>」を削除しました。"</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"ショートカット「<xliff:g id="NAME">%s</xliff:g>」は既に存在します。"</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"ショートカットを選択"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"フォルダの選択"</string>
     <string name="menu_add" msgid="3065046628354640854">"追加"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 451051a..be4657e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"배경화면 설정"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"배경화면 갤러리"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"휴대전화에 설치되어 있지 않은 응용프로그램입니다."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"구성..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"폴더 이름"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"폴더 이름 바꾸기"</string>
     <string name="rename_action" msgid="6016003384693240896">"확인"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"사진 프레임"</string>
     <string name="add_search" msgid="7104834713685095105">"검색"</string>
     <string name="out_of_space" msgid="8365249326091984698">"홈 화면에 더 이상 공간이 없습니다."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"바로가기(\'%s\')가 생성되었습니다."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"바로가기(\'%s\')가 삭제되었습니다."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"바로가기(\'%s\')가 이미 있습니다."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"바로가기(\'<xliff:g id="NAME">%s</xliff:g>\')가 생성되었습니다."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"바로가기(\'<xliff:g id="NAME">%s</xliff:g>\')가 삭제되었습니다."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"바로가기(\'<xliff:g id="NAME">%s</xliff:g>\')가 이미 있습니다."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"바로가기 선택"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"폴더 선택"</string>
     <string name="menu_add" msgid="3065046628354640854">"추가"</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
new file mode 100644
index 0000000..00ec58d
--- /dev/null
+++ b/res/values-land/dimens.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<resources>
+    <dimen name="search_widget_inset">19dip</dimen>
+    <dimen name="gesture_thumbnail_inset">8dip</dimen>
+    <dimen name="gesture_thumbnail_size">64dip</dimen>
+    <dimen name="cell_width">106dip</dimen>
+    <dimen name="cell_height">74dip</dimen>
+</resources>
diff --git a/res/values-mdpi/wallpapers.xml b/res/values-mdpi/wallpapers.xml
new file mode 100644
index 0000000..33039b0
--- /dev/null
+++ b/res/values-mdpi/wallpapers.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2009 Google Inc.
+ *
+ * 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>
+    <string-array name="wallpapers" translatable="false">
+        <item>wallpaper_lake</item>
+        <item>wallpaper_sunset</item>
+        <item>wallpaper_beach</item>
+        <item>wallpaper_snow_leopard</item>
+        <item>wallpaper_path</item>
+        <item>wallpaper_sunrise</item>
+        <item>wallpaper_mountain</item>
+        <item>wallpaper_road</item>
+        <item>wallpaper_jellyfish</item>
+        <item>wallpaper_zanzibar</item>
+        <item>wallpaper_blue</item>
+        <item>wallpaper_grey</item>
+        <item>wallpaper_green</item>
+        <item>wallpaper_pink</item>
+    </string-array>
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 369252b..e9f39d3 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Velg bakgrunnsbilde"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Bildegalleri"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Applikasjonen er ikke installert."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurer"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappenavn"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Gi nytt navn til mappe"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Bilderamme"</string>
     <string name="add_search" msgid="7104834713685095105">"Søk"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Ikke nok plass på skrivebordet."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Opprettet snarveien «%s»."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Fjernet snarveien «%s»."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Snarveien «%s» finnes allerede."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Opprettet snarveien «<xliff:g id="NAME">%s</xliff:g>»."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Fjernet snarveien «<xliff:g id="NAME">%s</xliff:g>»."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Snarveien «<xliff:g id="NAME">%s</xliff:g>» finnes allerede."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Velg snarvei"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Velg mappe"</string>
     <string name="menu_add" msgid="3065046628354640854">"Legg til"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index af98a01..5640d61 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Achtergrond instellen"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Achtergrondgalerij"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Deze toepassing is niet geïnstalleerd op uw telefoon."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configureren..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mapnaam"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Naam van map wijzigen"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Fotolijstje"</string>
     <string name="add_search" msgid="7104834713685095105">"Zoeken"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Er is geen ruimte meer op dit startscherm."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Snelkoppeling \'%s\' gemaakt."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Snelkoppeling \'%s\' is verwijderd."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Snelkoppeling \'%s\' bestaat al."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' is gemaakt."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' is verwijderd."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' bestaat al."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Snelkoppeling selecteren"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Map selecteren"</string>
     <string name="menu_add" msgid="3065046628354640854">"Toevoegen"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 769295a..57671e8 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Ustaw tapetę"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galeria tapet"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Aplikacja nie jest zainstalowana w telefonie."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfiguruj..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nazwa folderu"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Zmień nazwę folderu"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Ramka obrazu"</string>
     <string name="add_search" msgid="7104834713685095105">"Wyszukiwarka"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Brak miejsca na tej stronie głównej"</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Utworzono skrót „%s”."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Skrót „%s” został usunięty."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Skrót „%s” już istnieje."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Skrót „<xliff:g id="NAME">%s</xliff:g>” został utworzony."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Skrót „<xliff:g id="NAME">%s</xliff:g>” został usunięty."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Skrót „<xliff:g id="NAME">%s</xliff:g>” już istnieje."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Wybierz skrót"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Wybierz folder"</string>
     <string name="menu_add" msgid="3065046628354640854">"Dodaj"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5d355ad..1ee3725 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir imagem de fundo"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galeria de imagens de fundo"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"A aplicação não está instalada no telefone."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configurar..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome da pasta"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Mudar o nome da pasta"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Moldura de imagem"</string>
     <string name="add_search" msgid="7104834713685095105">"Pesquisar"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Não existe espaço suficiente neste ecrã principal."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Atalho \"%s\" criado."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"O atalho \"%s\" foi removido."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"O atalho \"%s\" já existe."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" foi criado."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" foi removido."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" já existe."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Seleccione o atalho"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Seleccione a pasta"</string>
     <string name="menu_add" msgid="3065046628354640854">"Adicionar"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 65ea6de..9cf9f38 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir papel de parede"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Galeria de papel de parede"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"O aplicativo não está instalado no seu telefone."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Configurar..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome da pasta"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Renomear pasta"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Frame da imagem"</string>
     <string name="add_search" msgid="7104834713685095105">"Pesquisar"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Não há mais espaço nesta tela da Página inicial."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"O atalho \"%s\" foi criado."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"O atalho \"%s\" foi removido."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"O atalho \"%s\" já existe."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Atalho \"<xliff:g id="NAME">%s</xliff:g>\" criado."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" foi removido."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" já existe."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Selecionar atalho"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Selecionar pasta"</string>
     <string name="menu_add" msgid="3065046628354640854">"Adicionar"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 8a231cc..c92630b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Установить обои"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Фотоальбом: обои"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Приложение не установлено на телефоне."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Настроить..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Название папки"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Переименовать папку"</string>
     <string name="rename_action" msgid="6016003384693240896">"ОК"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Рамка фотографии"</string>
     <string name="add_search" msgid="7104834713685095105">"Поиск"</string>
     <string name="out_of_space" msgid="8365249326091984698">"На этом главном экране нет свободного места."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Клавиша быстрого вызова \"%s\" создана."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Клавиша быстрого вызова \"%s\" была удалена."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Клавиша быстрого вызова \"%s\" уже существует."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Ярлык \"<xliff:g id="NAME">%s</xliff:g>\" создан"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Ярлык \"<xliff:g id="NAME">%s</xliff:g>\" удален."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Ярлык \"<xliff:g id="NAME">%s</xliff:g>\" уже существует."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Выберите ярлык"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Выбор папки"</string>
     <string name="menu_add" msgid="3065046628354640854">"Добавить"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index f59dc9e..07dc10f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Ange bakgrund"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Bakgrundsgalleri"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Programmet är inte installerat på din telefon."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurera..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappnamn"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Byt namn på mapp"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Bildram"</string>
     <string name="add_search" msgid="7104834713685095105">"Sök"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Det finns inte plats för mer på den här startsidan."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"Genvägen %s har skapats."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"Genvägen %s har tagits bort."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"Genvägen %s finns redan."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"Genvägen \"<xliff:g id="NAME">%s</xliff:g>\" har skapats."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Genvägen \"<xliff:g id="NAME">%s</xliff:g>\" har tagits bort."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Genvägen \"<xliff:g id="NAME">%s</xliff:g>\" finns redan."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Välj genväg"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Välj mapp"</string>
     <string name="menu_add" msgid="3065046628354640854">"Lägg till"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 947473b..0047271 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Duvar kağıdını ayarla"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"Duvar kağıdı galerisi"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"Uygulama telefonunuza yüklenmemiş."</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Yapılandır..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Klasör adı"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Klasörü yeniden adlandır"</string>
     <string name="rename_action" msgid="6016003384693240896">"Tamam"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"Resim çerçevesi"</string>
     <string name="add_search" msgid="7104834713685095105">"Arama"</string>
     <string name="out_of_space" msgid="8365249326091984698">"Bu Ana ekranda başka yer yok."</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"\"%s\" kısayolu oluşturuldu."</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"\"%s\" kısayolu kaldırıldı."</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"\"%s\" kısayolu zaten var."</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu oluşturuldu."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu kaldırıldı."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu zaten var."</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"Kısayolu seçin"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"Klasörü seçin"</string>
     <string name="menu_add" msgid="3065046628354640854">"Ekle"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 0fa7d53..3146747 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"设置壁纸"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"壁纸图库"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"您的手机上未安装应用程序。"</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"配置..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"文件夹名称"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"重命名文件夹"</string>
     <string name="rename_action" msgid="6016003384693240896">"确定"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"相框"</string>
     <string name="add_search" msgid="7104834713685095105">"搜索"</string>
     <string name="out_of_space" msgid="8365249326091984698">"此主屏幕上已没有更多空间。"</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"已创建快捷方式“%s”。"</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"已删除快捷方式“%s”。"</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"已有快捷方式“%s”。"</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"“<xliff:g id="NAME">%s</xliff:g>”快捷方式已创建。"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"“<xliff:g id="NAME">%s</xliff:g>”快捷方式已删除。"</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"“<xliff:g id="NAME">%s</xliff:g>”快捷方式已存在。"</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"选择快捷方式"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"选择文件夹"</string>
     <string name="menu_add" msgid="3065046628354640854">"添加"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b5ccc5d..4f275d8 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -22,6 +22,7 @@
     <string name="wallpaper_instructions" msgid="4215640646180727542">"設定桌布"</string>
     <string name="pick_wallpaper" msgid="2674908923379130941">"桌布集"</string>
     <string name="activity_not_found" msgid="3571057450431950427">"應用程式未安裝到手機。"</string>
+    <string name="configure_wallpaper" msgid="2820186271419674623">"設定..."</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"資料夾名稱"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"重新命名資料夾"</string>
     <string name="rename_action" msgid="6016003384693240896">"確定"</string>
@@ -39,9 +40,9 @@
     <string name="add_photo_frame" msgid="3154058437359487954">"相框"</string>
     <string name="add_search" msgid="7104834713685095105">"搜尋"</string>
     <string name="out_of_space" msgid="8365249326091984698">"首頁已無空間"</string>
-    <string name="shortcut_installed" msgid="6179314539443046225">"已建立「%s」捷徑。"</string>
-    <string name="shortcut_uninstalled" msgid="2758997515869993129">"已移除「%s」捷徑"</string>
-    <string name="shortcut_duplicate" msgid="4887186782641532074">"已有「%s」捷徑。"</string>
+    <string name="shortcut_installed" msgid="7071557296331322355">"已建立「<xliff:g id="NAME">%s</xliff:g>」捷徑。"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"已移除「<xliff:g id="NAME">%s</xliff:g>」捷徑。"</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"已有「<xliff:g id="NAME">%s</xliff:g>」捷徑。"</string>
     <string name="title_select_shortcut" msgid="2858897527672831763">"選取捷徑"</string>
     <string name="title_select_live_folder" msgid="3753447798805166749">"選取資料夾"</string>
     <string name="menu_add" msgid="3065046628354640854">"新增"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 1fcad81..66da2f3 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -83,5 +83,8 @@
         <attr name="screen" format="string" />
         <attr name="x" format="string" />
         <attr name="y" format="string" />
+        <attr name="icon" format="reference" />
+        <attr name="title" format="reference" />
+        <attr name="uri" format="string" />
     </declare-styleable>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b802353..fbd5419 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -18,4 +18,6 @@
     <dimen name="search_widget_inset">19dip</dimen>
     <dimen name="gesture_thumbnail_inset">8dip</dimen>
     <dimen name="gesture_thumbnail_size">64dip</dimen>
+    <dimen name="cell_width">80dip</dimen>
+    <dimen name="cell_height">100dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2796171..70ddea8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -34,6 +34,8 @@
     <string name="pick_wallpaper">Wallpaper gallery</string>
     <!-- Displayed when user selects a shortcut for an app that was uninstalled -->
     <string name="activity_not_found">Application is not installed on your phone.</string>
+    <!-- List item for configuring the current wallpaper -->
+    <string name="configure_wallpaper">Configure...</string>
 
     <!-- Folders -->
     <skip />
@@ -75,11 +77,11 @@
     <!-- Error message when user has filled a home screen, possibly not used -->
     <string name="out_of_space">No more room on this Home screen.</string>
     <!-- Message displayed when a shortcut is created by an external application -->
-    <string name="shortcut_installed">Shortcut \"%s\" created.</string>
+    <string name="shortcut_installed">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" created.</string>
     <!-- Message displayed when a shortcut is uninstalled by an external application -->
-    <string name="shortcut_uninstalled">Shortcut \"%s\" was removed.</string>
+    <string name="shortcut_uninstalled">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" was removed.</string>
     <!-- Message displayed when an external application attemps to create a shortcut that already exists -->
-    <string name="shortcut_duplicate">Shortcut \"%s\" already exists.</string>
+    <string name="shortcut_duplicate">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" already exists.</string>
 
     <!-- Title of dialog when user is selecting shortcut to add to homescreen -->
     <string name="title_select_shortcut">Select shortcut</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 6f4365f..24b99fa 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -18,11 +18,6 @@
 -->
 
 <resources>
-    <style name="Theme" parent="android:Theme">
-        <item name="android:windowBackground">@null</item>
-        <item name="android:windowNoTitle">true</item>
-    </style>
-
     <style name="WorkspaceIcon">
         <item name="android:textSize">13dip</item>
         <item name="android:singleLine">true</item>
diff --git a/src/com/android/launcher/AddAdapter.java b/src/com/android/launcher/AddAdapter.java
index a6c889e..d10c10a 100644
--- a/src/com/android/launcher/AddAdapter.java
+++ b/src/com/android/launcher/AddAdapter.java
@@ -75,10 +75,10 @@
                 R.drawable.ic_launcher_appwidget, ITEM_APPWIDGET));
         
         mItems.add(new ListItem(res, R.string.group_live_folders,
-                R.drawable.ic_launcher_folder_live, ITEM_LIVE_FOLDER));
+                R.drawable.ic_launcher_add_folder, ITEM_LIVE_FOLDER));
         
         mItems.add(new ListItem(res, R.string.group_wallpapers,
-                R.drawable.ic_launcher_gallery, ITEM_WALLPAPER));
+                R.drawable.ic_launcher_wallpaper, ITEM_WALLPAPER));
 
     }
 
diff --git a/src/com/android/launcher/AllAppsGridView.java b/src/com/android/launcher/AllAppsGridView.java
index b8f7902..723ee90 100644
--- a/src/com/android/launcher/AllAppsGridView.java
+++ b/src/com/android/launcher/AllAppsGridView.java
@@ -62,6 +62,11 @@
     }
 
     @Override
+    public boolean isOpaque() {
+        return !mTexture.hasAlpha();
+    }
+
+    @Override
     protected void onFinishInflate() {
         setOnItemClickListener(this);
         setOnItemLongClickListener(this);
diff --git a/src/com/android/launcher/CellLayout.java b/src/com/android/launcher/CellLayout.java
index 73dbb3e..e53f2b3 100644
--- a/src/com/android/launcher/CellLayout.java
+++ b/src/com/android/launcher/CellLayout.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.content.res.Resources;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.util.AttributeSet;
@@ -123,8 +124,7 @@
         // Generate an id for each view, this assumes we have at most 256x256 cells
         // per workspace screen
         final LayoutParams cellParams = (LayoutParams) params;
-        child.setId(((getId() & 0xFF) << 16) |
-                (cellParams.cellX & 0xFF) << 8 | (cellParams.cellY & 0xFF));
+        cellParams.regenerateId = true;
 
         super.addView(child, index, params);
     }
@@ -344,6 +344,15 @@
             findOccupiedCells(xCount, yCount, occupied, ignoreView);
         }
 
+        return findAllVacantCellsFromOccupied(occupied, xCount, yCount);
+    }
+
+    /**
+     * Variant of findAllVacantCells that uses LauncerModel as its source rather than the 
+     * views.
+     */
+    CellInfo findAllVacantCellsFromOccupied(boolean[][] occupied,
+            final int xCount, final int yCount) {
         CellInfo cellInfo = new CellInfo();
 
         cellInfo.cellX = -1;
@@ -401,16 +410,6 @@
     }
     
     /**
-     * Given a point, return the cell that most closely encloses that point
-     * @param x X coordinate of the point
-     * @param y Y coordinate of the point
-     * @param result Array of 2 ints to hold the x and y coordinate of the cell
-     */
-    void pointToCellRounded(int x, int y, int[] result) {
-        pointToCellExact(x + (mCellWidth / 2), y + (mCellHeight / 2), result);
-    }
-
-    /**
      * Given a cell coordinate, return the point that represents the upper left corner of that cell
      * 
      * @param cellX X coordinate of the cell 
@@ -496,6 +495,11 @@
                 lp.setup(cellWidth, cellHeight, mWidthGap, mHeightGap, longAxisStartPadding,
                         shortAxisStartPadding);
             }
+            
+            if (lp.regenerateId) {
+                child.setId(((getId() & 0xFF) << 16) | (lp.cellX & 0xFF) << 8 | (lp.cellY & 0xFF));
+                lp.regenerateId = false;
+            }
 
             int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
             int childheightMeasureSpec =
@@ -602,13 +606,15 @@
      * @param targetXY Destination area to move to
      */
     void onDropChild(View child, int[] targetXY) {
-        LayoutParams lp = (LayoutParams) child.getLayoutParams();
-        lp.cellX = targetXY[0];
-        lp.cellY = targetXY[1];
-        lp.isDragging = false;
-        mDragRect.setEmpty();
-        child.requestLayout();
-        invalidate();
+        if (child != null) {
+            LayoutParams lp = (LayoutParams) child.getLayoutParams();
+            lp.cellX = targetXY[0];
+            lp.cellY = targetXY[1];
+            lp.isDragging = false;
+            mDragRect.setEmpty();
+            child.requestLayout();
+            invalidate();
+        }
     }
 
     void onDropAborted(View child) {
@@ -631,49 +637,6 @@
     }
     
     /**
-     * Drag a child over the specified position
-     * 
-     * @param child The child that is being dropped
-     * @param cellX The child's new x cell location
-     * @param cellY The child's new y cell location 
-     */
-    void onDragOverChild(View child, int cellX, int cellY) {
-        int[] cellXY = mCellXY;
-        pointToCellRounded(cellX, cellY, cellXY);
-        LayoutParams lp = (LayoutParams) child.getLayoutParams();
-        cellToRect(cellXY[0], cellXY[1], lp.cellHSpan, lp.cellVSpan, mDragRect);
-        invalidate();
-    }
-    
-    /**
-     * Computes a bounding rectangle for a range of cells
-     *  
-     * @param cellX X coordinate of upper left corner expressed as a cell position
-     * @param cellY Y coordinate of upper left corner expressed as a cell position
-     * @param cellHSpan Width in cells 
-     * @param cellVSpan Height in cells
-     * @param dragRect Rectnagle into which to put the results
-     */
-    public void cellToRect(int cellX, int cellY, int cellHSpan, int cellVSpan, RectF dragRect) {
-        final boolean portrait = mPortrait;
-        final int cellWidth = mCellWidth;
-        final int cellHeight = mCellHeight;
-        final int widthGap = mWidthGap;
-        final int heightGap = mHeightGap;
-        
-        final int hStartPadding = portrait ? mShortAxisStartPadding : mLongAxisStartPadding;
-        final int vStartPadding = portrait ? mLongAxisStartPadding : mShortAxisStartPadding;
-        
-        int width = cellHSpan * cellWidth + ((cellHSpan - 1) * widthGap);
-        int height = cellVSpan * cellHeight + ((cellVSpan - 1) * heightGap);
-
-        int x = hStartPadding + cellX * (cellWidth + widthGap);
-        int y = vStartPadding + cellY * (cellHeight + heightGap);
-        
-        dragRect.set(x, y, x + width, y + height);
-    }
-    
-    /**
      * Computes the required horizontal and vertical cell spans to always 
      * fit the given rectangle.
      *  
@@ -683,13 +646,15 @@
     public int[] rectToCell(int width, int height) {
         // Always assume we're working with the smallest span to make sure we
         // reserve enough space in both orientations.
-        int actualWidth = mCellWidth + mWidthGap;
-        int actualHeight = mCellHeight + mHeightGap;
+        final Resources resources = getResources();
+        int actualWidth = resources.getDimensionPixelSize(R.dimen.cell_width);
+        int actualHeight = resources.getDimensionPixelSize(R.dimen.cell_height);
         int smallerSize = Math.min(actualWidth, actualHeight);
-        
+
         // Always round up to next largest cell
         int spanX = (width + smallerSize) / smallerSize;
         int spanY = (height + smallerSize) / smallerSize;
+
         return new int[] { spanX, spanY };
     }
 
@@ -830,6 +795,8 @@
         @ViewDebug.ExportedProperty
         int y;
 
+        boolean regenerateId;
+
         public LayoutParams(Context c, AttributeSet attrs) {
             super(c, attrs);
             cellHSpan = 1;
diff --git a/src/com/android/launcher/DragController.java b/src/com/android/launcher/DragController.java
index 29cf15a..93dbddb 100644
--- a/src/com/android/launcher/DragController.java
+++ b/src/com/android/launcher/DragController.java
@@ -66,14 +66,4 @@
      *        {@link #DRAG_ACTION_COPY}
      */
     void startDrag(View v, DragSource source, Object info, int dragAction);
-    
-    /**
-     * Sets the drag listner which will be notified when a drag starts or ends.
-     */
-    void setDragListener(DragListener l);
-    
-    /**
-     * Remove a previously installed drag listener.
-     */
-    void removeDragListener(DragListener l);
 }
diff --git a/src/com/android/launcher/DragLayer.java b/src/com/android/launcher/DragLayer.java
index 070c938..87bd87a 100644
--- a/src/com/android/launcher/DragLayer.java
+++ b/src/com/android/launcher/DragLayer.java
@@ -113,25 +113,8 @@
     private DropTarget mLastDropTarget;
 
     private final Paint mTrashPaint = new Paint();
-    private final Paint mEstimatedPaint = new Paint();
     private Paint mDragPaint;
 
-    /**
-     * If true, draw a "snag" showing where the object currently being dragged
-     * would end up if dropped from current location.
-     */
-    private static final boolean DRAW_TARGET_SNAG = false;
-
-    private Rect mEstimatedRect = new Rect();
-    private float[] mDragCenter = new float[2];
-    private float[] mEstimatedCenter = new float[2];
-    private boolean mDrawEstimated = false;
-
-    private int mTriggerWidth = -1;
-    private int mTriggerHeight = -1;
-
-    private static final int DISTANCE_DRAW_SNAG = 20;
-
     private static final int ANIMATION_STATE_STARTING = 1;
     private static final int ANIMATION_STATE_RUNNING = 2;
     private static final int ANIMATION_STATE_DONE = 3;
@@ -161,9 +144,10 @@
 
         // Make estimated paint area in gray
         int snagColor = context.getResources().getColor(R.color.snag_callout_color);
-        mEstimatedPaint.setColor(snagColor);
-        mEstimatedPaint.setStrokeWidth(3);
-        mEstimatedPaint.setAntiAlias(true);
+        Paint estimatedPaint = new Paint();
+        estimatedPaint.setColor(snagColor);
+        estimatedPaint.setStrokeWidth(3);
+        estimatedPaint.setAntiAlias(true);
 
     }
 
@@ -209,9 +193,6 @@
         int width = viewBitmap.getWidth();
         int height = viewBitmap.getHeight();
 
-        mTriggerWidth = width * 2 / 3;
-        mTriggerHeight = height * 2 / 3;
-
         Matrix scale = new Matrix();
         float scaleFactor = v.getWidth();
         scaleFactor = (scaleFactor + DRAG_SCALE) /scaleFactor;
@@ -288,12 +269,6 @@
                         break;
                 }
             } else {
-                // Only draw estimate drop "snag" when requested
-                if (DRAW_TARGET_SNAG && mDrawEstimated) {
-                    canvas.drawLine(mDragCenter[0], mDragCenter[1], mEstimatedCenter[0], mEstimatedCenter[1], mEstimatedPaint);
-                    canvas.drawCircle(mEstimatedCenter[0], mEstimatedCenter[1], 8, mEstimatedPaint);
-                }
-
                 // Draw actual icon being dragged
                 canvas.drawBitmap(mDragBitmap,
                         mScrollX + mLastMotionX - mTouchOffsetX - mBitmapOffsetX,
@@ -401,14 +376,6 @@
             // Invalidate current icon position
             rect.union(left - 1, top - 1, left + width + 1, top + height + 1);
 
-            mDragCenter[0] = rect.centerX();
-            mDragCenter[1] = rect.centerY();
-
-            // Invalidate any old estimated location
-            if (DRAW_TARGET_SNAG && mDrawEstimated) {
-                rect.union(mEstimatedRect);
-            }
-
             final int[] coordinates = mDropCoordinates;
             DropTarget dropTarget = findDropTarget((int) x, (int) y, coordinates);
             if (dropTarget != null) {
@@ -430,30 +397,6 @@
                 }
             }
 
-            // Render estimated drop "snag" only outside of width
-            mDrawEstimated = false;
-            if (DRAW_TARGET_SNAG && dropTarget != null) {
-                Rect foundEstimate = dropTarget.estimateDropLocation(mDragSource,
-                        (int) (scrollX + mLastMotionX), (int) (scrollY + mLastMotionY),
-                        (int) mTouchOffsetX, (int) mTouchOffsetY, mDragInfo, mEstimatedRect);
-
-                if (foundEstimate != null) {
-                    mEstimatedCenter[0] = foundEstimate.centerX();
-                    mEstimatedCenter[1] = foundEstimate.centerY();
-
-                    int deltaX = (int) Math.abs(mEstimatedCenter[0] - mDragCenter[0]);
-                    int deltaY = (int) Math.abs(mEstimatedCenter[1] - mDragCenter[1]);
-
-                    if (deltaX > mTriggerWidth || deltaY > mTriggerHeight) {
-                        mDrawEstimated = true;
-                    }
-                }
-            }
-
-            // Include new estimated area in invalidated rectangle
-            if (DRAW_TARGET_SNAG && mDrawEstimated) {
-                rect.union(mEstimatedRect);
-            }
             invalidate(rect);
 
             mLastDropTarget = dropTarget;
@@ -584,6 +527,7 @@
         mListener = l;
     }
 
+    @SuppressWarnings({"UnusedDeclaration"})
     public void removeDragListener(DragListener l) {
         mListener = null;
     }
@@ -615,7 +559,6 @@
 
         public void run() {
             if (mDragScroller != null) {
-                mDrawEstimated = false;
                 if (mDirection == SCROLL_LEFT) {
                     mDragScroller.scrollLeft();
                 } else {
diff --git a/src/com/android/launcher/DragSource.java b/src/com/android/launcher/DragSource.java
index 0ac25bb..743352a 100644
--- a/src/com/android/launcher/DragSource.java
+++ b/src/com/android/launcher/DragSource.java
@@ -23,6 +23,5 @@
  *
  */
 public interface DragSource {
-    void setDragger(DragController dragger);
     void onDropCompleted(View target, boolean success);
 }
diff --git a/src/com/android/launcher/DropTarget.java b/src/com/android/launcher/DropTarget.java
index 4835323..ef2f87c 100644
--- a/src/com/android/launcher/DropTarget.java
+++ b/src/com/android/launcher/DropTarget.java
@@ -59,23 +59,4 @@
      * @return True if the drop will be accepted, false otherwise.
      */
     boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo);
-
-    /**
-     * Estimate the surface area where this object would land if dropped at the
-     * given location.
-     * 
-     * @param source DragSource where the drag started
-     * @param x X coordinate of the drop location
-     * @param y Y coordinate of the drop location
-     * @param xOffset Horizontal offset with the object being dragged where the
-     *            original touch happened
-     * @param yOffset Vertical offset with the object being dragged where the
-     *            original touch happened
-     * @param dragInfo Data associated with the object being dragged
-     * @param recycle {@link Rect} object to be possibly recycled.
-     * @return Estimated area that would be occupied if object was dropped at
-     *         the given location. Should return null if no estimate is found,
-     *         or if this target doesn't provide estimations.
-     */
-    Rect estimateDropLocation(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo, Rect recycle);
 }
diff --git a/src/com/android/launcher/Folder.java b/src/com/android/launcher/Folder.java
index fb4e8d6..0644f8b 100644
--- a/src/com/android/launcher/Folder.java
+++ b/src/com/android/launcher/Folder.java
@@ -47,7 +47,6 @@
      * Which item is being dragged
      */
     protected ApplicationInfo mDragItem;
-    private boolean mCloneInfo;
 
     /**
      * Used to inflate the Workspace from XML.
@@ -64,11 +63,11 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        mContent = (AbsListView) findViewById(R.id.content);
+        mContent = (AbsListView) findViewById(R.id.folder_content);
         mContent.setOnItemClickListener(this);
         mContent.setOnItemLongClickListener(this);
         
-        mCloseButton = (Button) findViewById(R.id.close);
+        mCloseButton = (Button) findViewById(R.id.folder_close);
         mCloseButton.setOnClickListener(this);
         mCloseButton.setOnLongClickListener(this);
     }
@@ -94,9 +93,6 @@
         }
 
         ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position);
-        if (mCloneInfo) {
-            app = new ApplicationInfo(app);
-        }
 
         mDragger.startDrag(view, this, app, DragController.DRAG_ACTION_COPY);
         mLauncher.closeFolder(this);
@@ -105,10 +101,6 @@
         return true;
     }
 
-    void setCloneInfo(boolean cloneInfo) {
-        mCloneInfo = cloneInfo;
-    }
-
     public void setDragger(DragController dragger) {
         mDragger = dragger;
     }
diff --git a/src/com/android/launcher/ItemInfo.java b/src/com/android/launcher/ItemInfo.java
index 71cee18..0962ef0 100644
--- a/src/com/android/launcher/ItemInfo.java
+++ b/src/com/android/launcher/ItemInfo.java
@@ -129,5 +129,5 @@
             }
         }
     }
-    
+
 }
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 710578f..b247542 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -18,12 +18,12 @@
 
 import android.app.Activity;
 import android.app.AlertDialog;
-import android.app.Application;
 import android.app.Dialog;
 import android.app.ISearchManager;
-import android.app.IWallpaperService;
 import android.app.SearchManager;
 import android.app.StatusBarManager;
+import android.app.WallpaperInfo;
+import android.app.WallpaperManager;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -34,6 +34,7 @@
 import android.content.IntentFilter;
 import android.content.Intent.ShortcutIconResource;
 import android.content.pm.ActivityInfo;
+import android.content.pm.LabeledIntent;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
@@ -41,12 +42,10 @@
 import android.database.ContentObserver;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.TransitionDrawable;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.MessageQueue;
@@ -59,6 +58,7 @@
 import android.text.TextUtils;
 import android.text.method.TextKeyListener;
 import static android.util.Log.*;
+import android.util.SparseArray;
 import android.view.Display;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -96,8 +96,6 @@
     private static final boolean PROFILE_ROTATE = false;
     private static final boolean DEBUG_USER_INTERFACE = false;
 
-    private static final int WALLPAPER_SCREENS_SPAN = 2;
-
     private static final int MENU_GROUP_ADD = 1;
     private static final int MENU_ADD = Menu.FIRST + 1;
     private static final int MENU_WALLPAPER_SETTINGS = MENU_ADD + 1;
@@ -118,6 +116,7 @@
     static final String EXTRA_CUSTOM_WIDGET = "custom_widget";
     static final String SEARCH_WIDGET = "search_widget";
 
+    static final int WALLPAPER_SCREENS_SPAN = 2;
     static final int SCREEN_COUNT = 3;
     static final int DEFAULT_SCREN = 1;
     static final int NUMBER_CELLS_X = 4;
@@ -157,15 +156,13 @@
 
     private static final LauncherModel sModel = new LauncherModel();
 
-    private static Bitmap sWallpaper;
-
     private static final Object sLock = new Object();
     private static int sScreen = DEFAULT_SCREN;
 
-    private static WallpaperIntentReceiver sWallpaperReceiver;
-
     private final BroadcastReceiver mApplicationsReceiver = new ApplicationsIntentReceiver();
+    private final BroadcastReceiver mCloseSystemDialogsReceiver = new CloseSystemDialogsIntentReceiver();
     private final ContentObserver mObserver = new FavoritesChangeObserver();
+    private final ContentObserver mWidgetObserver = new AppWidgetResetObserver();
 
     private LayoutInflater mInflater;
 
@@ -341,19 +338,14 @@
     }
 
     private void setWallpaperDimension() {
-        IBinder binder = ServiceManager.getService(WALLPAPER_SERVICE);
-        IWallpaperService wallpaperService = IWallpaperService.Stub.asInterface(binder);
+        WallpaperManager wpm = (WallpaperManager)getSystemService(WALLPAPER_SERVICE);
 
         Display display = getWindowManager().getDefaultDisplay();
         boolean isPortrait = display.getWidth() < display.getHeight();
 
         final int width = isPortrait ? display.getWidth() : display.getHeight();
         final int height = isPortrait ? display.getHeight() : display.getWidth();
-        try {
-            wallpaperService.setDimensionHints(width * WALLPAPER_SCREENS_SPAN, height);
-        } catch (RemoteException e) {
-            // System is dead!
-        }
+        wpm.suggestDesiredDimensions(width * WALLPAPER_SCREENS_SPAN, height);
     }
 
     @Override
@@ -561,7 +553,6 @@
         workspace.setOnLongClickListener(this);
         workspace.setDragger(dragLayer);
         workspace.setLauncher(this);
-        loadWallpaper();
 
         deleteZone.setLauncher(this);
         deleteZone.setDragController(dragLayer);
@@ -788,35 +779,39 @@
         return info;
     }
 
+    void closeSystemDialogs() {
+        getWindow().closeAllPanels();
+        
+        try {
+            dismissDialog(DIALOG_CREATE_SHORTCUT);
+            // Unlock the workspace if the dialog was showing
+            mWorkspace.unlock();
+        } catch (Exception e) {
+            // An exception is thrown if the dialog is not visible, which is fine
+        }
+
+        try {
+            dismissDialog(DIALOG_RENAME_FOLDER);
+            // Unlock the workspace if the dialog was showing
+            mWorkspace.unlock();
+        } catch (Exception e) {
+            // An exception is thrown if the dialog is not visible, which is fine
+        }
+    }
+    
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
 
         // Close the menu
         if (Intent.ACTION_MAIN.equals(intent.getAction())) {
-            getWindow().closeAllPanels();
+            closeSystemDialogs();
             
             // Set this flag so that onResume knows to close the search dialog if it's open,
             // because this was a new intent (thus a press of 'home' or some such) rather than
             // for example onResume being called when the user pressed the 'back' button.
             mIsNewIntent = true;
 
-            try {
-                dismissDialog(DIALOG_CREATE_SHORTCUT);
-                // Unlock the workspace if the dialog was showing
-                mWorkspace.unlock();
-            } catch (Exception e) {
-                // An exception is thrown if the dialog is not visible, which is fine
-            }
-
-            try {
-                dismissDialog(DIALOG_RENAME_FOLDER);
-                // Unlock the workspace if the dialog was showing
-                mWorkspace.unlock();
-            } catch (Exception e) {
-                // An exception is thrown if the dialog is not visible, which is fine
-            }
-
             if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=
                     Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) {
 
@@ -840,12 +835,63 @@
 
     @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) {
-        // Do not call super here
+        // NOTE: Do NOT do this. Ever. This is a terrible and horrifying hack.
+        //
+        // Home loads the content of the workspace on a background thread. This means that
+        // a previously focused view will be, after orientation change, added to the view
+        // hierarchy at an undeterminate time in the future. If we were to invoke
+        // super.onRestoreInstanceState() here, the focus restoration would fail because the
+        // view to focus does not exist yet.
+        //
+        // However, not invoking super.onRestoreInstanceState() is equally bad. In such a case,
+        // panels would not be restored properly. For instance, if the menu is open then the
+        // user changes the orientation, the menu would not be opened in the new orientation.
+        //
+        // To solve both issues Home messes up with the internal state of the bundle to remove
+        // the properties it does not want to see restored at this moment. After invoking
+        // super.onRestoreInstanceState(), it removes the panels state.
+        //
+        // Later, when the workspace is done loading, Home calls super.onRestoreInstanceState()
+        // again to restore focus and other view properties. It will not, however, restore
+        // the panels since at this point the panels' state has been removed from the bundle.
+        //
+        // This is a bad example, do not do this.
+        //
+        // If you are curious on how this code was put together, take a look at the following
+        // in Android's source code:
+        // - Activity.onRestoreInstanceState()
+        // - PhoneWindow.restoreHierarchyState()
+        // - PhoneWindow.DecorView.onAttachedToWindow()
+        //
+        // The source code of these various methods shows what states should be kept to
+        // achieve what we want here.
+
+        Bundle windowState = savedInstanceState.getBundle("android:viewHierarchyState");
+        SparseArray<Parcelable> savedStates = null;
+        int focusedViewId = View.NO_ID;
+
+        if (windowState != null) {
+            savedStates = windowState.getSparseParcelableArray("android:views");
+            windowState.remove("android:views");
+            focusedViewId = windowState.getInt("android:focusedViewId", View.NO_ID);
+            windowState.remove("android:focusedViewId");
+        }
+
+        super.onRestoreInstanceState(savedInstanceState);
+
+        if (windowState != null) {
+            windowState.putSparseParcelableArray("android:views", savedStates);
+            windowState.putInt("android:focusedViewId", focusedViewId);
+            windowState.remove("android:Panels");
+        }
+
         mSavedInstanceState = savedInstanceState;
     }
 
     @Override
     protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
         outState.putInt(RUNTIME_STATE_CURRENT_SCREEN, mWorkspace.getCurrentScreen());
 
         final ArrayList<Folder> folders = mWorkspace.getOpenFolders();
@@ -857,8 +903,6 @@
                 ids[i] = info.id;
             }
             outState.putLongArray(RUNTIME_STATE_USER_FOLDERS, ids);
-        } else {
-            super.onSaveInstanceState(outState);
         }
 
         final boolean isConfigurationChange = getChangingConfigurations() != 0;
@@ -910,7 +954,9 @@
         sModel.abortLoaders();
 
         getContentResolver().unregisterContentObserver(mObserver);
+        getContentResolver().unregisterContentObserver(mWidgetObserver);
         unregisterReceiver(mApplicationsReceiver);
+        unregisterReceiver(mCloseSystemDialogsReceiver);
     }
 
     @Override
@@ -990,7 +1036,7 @@
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        if (mDesktopLocked) return false;
+        if (mDesktopLocked && mSavedInstanceState == null) return false;
 
         super.onCreateOptionsMenu(menu);
         menu.add(MENU_GROUP_ADD, MENU_ADD, 0, R.string.menu_add)
@@ -1021,7 +1067,9 @@
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
 
-        mMenuAddInfo = mWorkspace.findAllVacantCells(null);
+        // We can't trust the view state here since views we may not be done binding.
+        // Get the vacancy state from the model instead.
+        mMenuAddInfo = mWorkspace.findAllVacantCellsFromModel();
         menu.setGroupEnabled(MENU_GROUP_ADD, mMenuAddInfo != null && mMenuAddInfo.valid);
 
         return true;
@@ -1268,7 +1316,18 @@
 
     private void startWallpaper() {
         final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
-        startActivity(Intent.createChooser(pickWallpaper, getString(R.string.chooser_wallpaper)));
+        Intent chooser = Intent.createChooser(pickWallpaper,
+                getText(R.string.chooser_wallpaper));
+        WallpaperManager wm = (WallpaperManager)
+                getSystemService(Context.WALLPAPER_SERVICE);
+        WallpaperInfo wi = wm.getWallpaperInfo();
+        if (wi != null && wi.getSettingsActivity() != null) {
+            LabeledIntent li = new LabeledIntent(getPackageName(),
+                    R.string.configure_wallpaper, 0);
+            li.setClassName(wi.getPackageName(), wi.getSettingsActivity());
+            chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { li });
+        }
+        startActivity(chooser);
     }
 
     /**
@@ -1277,22 +1336,13 @@
      * wallpaper.
      */
     private void registerIntentReceivers() {
-        if (sWallpaperReceiver == null) {
-            final Application application = getApplication();
-
-            sWallpaperReceiver = new WallpaperIntentReceiver(application, this);
-
-            IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
-            application.registerReceiver(sWallpaperReceiver, filter);
-        } else {
-            sWallpaperReceiver.setLauncher(this);
-        }
-
         IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
         filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
         filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
         filter.addDataScheme("package");
         registerReceiver(mApplicationsReceiver, filter);
+        filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        registerReceiver(mCloseSystemDialogsReceiver, filter);
     }
 
     /**
@@ -1302,6 +1352,8 @@
     private void registerContentObservers() {
         ContentResolver resolver = getContentResolver();
         resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mObserver);
+        resolver.registerContentObserver(LauncherProvider.CONTENT_APPWIDGET_RESET_URI,
+                true, mWidgetObserver);
     }
 
     @Override
@@ -1309,11 +1361,20 @@
         if (event.getAction() == KeyEvent.ACTION_DOWN) {
             switch (event.getKeyCode()) {
                 case KeyEvent.KEYCODE_BACK:
-                    mWorkspace.dispatchKeyEvent(event);
-                    if (mDrawer.isOpened()) {
-                        closeDrawer();
-                    } else {
-                        closeFolder();
+                    return true;
+                case KeyEvent.KEYCODE_HOME:
+                    return true;
+            }
+        } else if (event.getAction() == KeyEvent.ACTION_UP) {
+            switch (event.getKeyCode()) {
+                case KeyEvent.KEYCODE_BACK:
+                    if (!event.isCanceled()) {
+                        mWorkspace.dispatchKeyEvent(event);
+                        if (mDrawer.isOpened()) {
+                            closeDrawer();
+                        } else {
+                            closeFolder();
+                        }
                     }
                     return true;
                 case KeyEvent.KEYCODE_HOME:
@@ -1367,6 +1428,13 @@
         sModel.loadUserItems(false, this, false, false);
     }
 
+    /**
+     * Re-listen when widgets are reset.
+     */
+    private void onAppWidgetReset() {
+        mAppWidgetHost.startListening();
+    }
+
     void onDesktopItemsLoaded(ArrayList<ItemInfo> shortcuts,
             ArrayList<LauncherAppWidgetInfo> appWidgets) {
         if (mDestroyed) {
@@ -1559,10 +1627,6 @@
         }
     }
 
-    DragController getDragController() {
-        return mDragLayer;
-    }
-
     /**
      * Launches the intent referred by the clicked shortcut.
      *
@@ -1617,20 +1681,6 @@
         }
     }
 
-    private void loadWallpaper() {
-        // The first time the application is started, we load the wallpaper from
-        // the ApplicationContext
-        if (sWallpaper == null) {
-            final Drawable drawable = getWallpaper();
-            if (drawable instanceof BitmapDrawable) {
-                sWallpaper = ((BitmapDrawable) drawable).getBitmap();
-            } else {
-                throw new IllegalStateException("The wallpaper must be a BitmapDrawable.");
-            }
-        }
-        mWorkspace.loadWallpaper(sWallpaper);
-    }
-
     /**
      * Opens the user fodler described by the specified tag. The opening of the folder
      * is animated relative to the specified View. If the View is null, no animation
@@ -2044,6 +2094,16 @@
     }
 
     /**
+     * Receives notifications when applications are added/removed.
+     */
+    private class CloseSystemDialogsIntentReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            closeSystemDialogs();
+        }
+    }
+
+    /**
      * Receives notifications whenever the user favorites have changed.
      */
     private class FavoritesChangeObserver extends ContentObserver {
@@ -2058,39 +2118,16 @@
     }
 
     /**
-     * Receives intents from other applications to change the wallpaper.
+     * Receives notifications whenever the appwidgets are reset.
      */
-    private static class WallpaperIntentReceiver extends BroadcastReceiver {
-        private final Application mApplication;
-        private WeakReference<Launcher> mLauncher;
-
-        WallpaperIntentReceiver(Application application, Launcher launcher) {
-            mApplication = application;
-            setLauncher(launcher);
-        }
-
-        void setLauncher(Launcher launcher) {
-            mLauncher = new WeakReference<Launcher>(launcher);
+    private class AppWidgetResetObserver extends ContentObserver {
+        public AppWidgetResetObserver() {
+            super(new Handler());
         }
 
         @Override
-        public void onReceive(Context context, Intent intent) {
-            // Load the wallpaper from the ApplicationContext and store it locally
-            // until the Launcher Activity is ready to use it
-            final Drawable drawable = mApplication.getWallpaper();
-            if (drawable instanceof BitmapDrawable) {
-                sWallpaper = ((BitmapDrawable) drawable).getBitmap();
-            } else {
-                throw new IllegalStateException("The wallpaper must be a BitmapDrawable.");
-            }
-
-            // If Launcher is alive, notify we have a new wallpaper
-            if (mLauncher != null) {
-                final Launcher launcher = mLauncher.get();
-                if (launcher != null) {
-                    launcher.loadWallpaper();
-                }
-            }
+        public void onChange(boolean selfChange) {
+            onAppWidgetReset();
         }
     }
 
diff --git a/src/com/android/launcher/LauncherModel.java b/src/com/android/launcher/LauncherModel.java
index d69bd13..25cbca3 100644
--- a/src/com/android/launcher/LauncherModel.java
+++ b/src/com/android/launcher/LauncherModel.java
@@ -48,7 +48,7 @@
  * for the Launcher.
  */
 public class LauncherModel {
-    static final boolean DEBUG_LOADERS = true;
+    static final boolean DEBUG_LOADERS = false;
     static final String LOG_TAG = "HomeLoaders";
 
     private static final int UI_NOTIFICATION_RATE = 4;
@@ -476,7 +476,7 @@
                 Utilities.createIconThumbnail(info.activityInfo.loadIcon(manager), context);
         application.filtered = false;
     }
-
+ 
     private static final AtomicInteger sAppsLoaderCount = new AtomicInteger(1);
     private static final AtomicInteger sWorkspaceLoaderCount = new AtomicInteger(1);
 
@@ -1132,6 +1132,43 @@
     }
 
     /**
+     * Fills in the occupied structure with all of the shortcuts, apps, folders and widgets in
+     * the model. 
+     */
+    void findAllOccupiedCells(boolean[][] occupied, int countX, int countY, int screen) {
+        final ArrayList<ItemInfo> desktopItems = mDesktopItems;
+        if (desktopItems != null) {
+            final int count = desktopItems.size();
+            for (int i = 0; i < count; i++) {
+                ItemInfo item = desktopItems.get(i);
+                addOccupiedCells(occupied, screen, desktopItems.get(i));
+            }
+        }
+        
+        final ArrayList<LauncherAppWidgetInfo> desktopAppWidgets = mDesktopAppWidgets;
+        if (desktopAppWidgets != null) {
+            final int count = desktopAppWidgets.size();
+            for (int i = 0; i < count; i++) {
+                addOccupiedCells(occupied, screen, desktopAppWidgets.get(i));
+            }
+        }
+    }
+
+    /**
+     * Add the footprint of the specified item to the occupied array
+     */
+    private void addOccupiedCells(boolean[][] occupied, int screen,
+            ItemInfo item) {
+        if (item.screen == screen) {
+            for (int xx = item.cellX; xx < item.cellX + item.spanX; xx++) {
+                for (int yy = item.cellY; yy < item.cellY + item.spanY; yy++) {
+                    occupied[xx][yy] = true;
+                }
+            }
+        }
+    }
+    
+    /**
      * @return The current list of applications
      */
     ApplicationsAdapter getApplicationsAdapter() {
@@ -1139,20 +1176,6 @@
     }
 
     /**
-     * @return The current list of desktop items
-     */
-    ArrayList<ItemInfo> getDesktopItems() {
-        return mDesktopItems;
-    }
-
-    /**
-     * @return The current list of desktop items
-     */
-    ArrayList<LauncherAppWidgetInfo> getDesktopAppWidgets() {
-        return mDesktopAppWidgets;
-    }
-
-    /**
      * Add an item to the desktop
      * @param info
      */
@@ -1394,26 +1417,6 @@
     }
 
     /**
-     * Add an item to the database in a specified container. Sets the container, screen, cellX and
-     * cellY fields of the item. Also assigns an ID to the item.
-     */
-    static boolean addGestureToDatabase(Context context, ItemInfo item, boolean notify) {
-        final ContentValues values = new ContentValues();
-        final ContentResolver cr = context.getContentResolver();
-
-        item.onAddToDatabase(values);
-
-        Uri result = cr.insert(notify ? LauncherSettings.Gestures.CONTENT_URI :
-                LauncherSettings.Gestures.CONTENT_URI_NO_NOTIFICATION, values);
-
-        if (result != null) {
-            item.id = Integer.parseInt(result.getPathSegments().get(1));
-        }
-
-        return result != null;
-    }
-
-    /**
      * Update an item to the database in a specified container.
      */
     static void updateItemInDatabase(Context context, ItemInfo item) {
@@ -1447,84 +1450,4 @@
         cr.delete(LauncherSettings.Favorites.CONTENT_URI,
                 LauncherSettings.Favorites.CONTAINER + "=" + info.id, null);
     }
-
-    static void deleteGestureFromDatabase(Context context, ItemInfo item) {
-        final ContentResolver cr = context.getContentResolver();
-
-        cr.delete(LauncherSettings.Gestures.getContentUri(item.id, false), null, null);
-    }
-
-    static void updateGestureInDatabase(Context context, ItemInfo item) {
-        final ContentValues values = new ContentValues();
-        final ContentResolver cr = context.getContentResolver();
-
-        item.onAddToDatabase(values);
-
-        cr.update(LauncherSettings.Gestures.getContentUri(item.id, false), values, null, null);
-    }
-
-
-    ApplicationInfo queryGesture(Context context, String id) {
-        final ContentResolver contentResolver = context.getContentResolver();
-        final PackageManager manager = context.getPackageManager();
-        final Cursor c = contentResolver.query(
-                LauncherSettings.Gestures.CONTENT_URI, null, LauncherSettings.Gestures._ID + "=?",
-                new String[] { id }, null);
-
-        ApplicationInfo info = null;
-
-        try {
-            final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures._ID);
-            final int intentIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.INTENT);
-            final int titleIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.TITLE);
-            final int iconTypeIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.ICON_TYPE);
-            final int iconIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.ICON);
-            final int iconPackageIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.ICON_PACKAGE);
-            final int iconResourceIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.ICON_RESOURCE);
-            final int itemTypeIndex = c.getColumnIndexOrThrow(LauncherSettings.Gestures.ITEM_TYPE);
-
-            String intentDescription;
-            Intent intent;
-
-            if (c.moveToNext()) {
-                int itemType = c.getInt(itemTypeIndex);
-
-                switch (itemType) {
-                    case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
-                    case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
-                        intentDescription = c.getString(intentIndex);
-                        try {
-                            intent = Intent.parseUri(intentDescription, 0);
-                        } catch (java.net.URISyntaxException e) {
-                            return null;
-                        }
-
-                        if (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
-                            info = getApplicationInfo(manager, intent, context);
-                        } else {
-                            info = getApplicationInfoShortcut(c, context, iconTypeIndex,
-                                    iconPackageIndex, iconResourceIndex, iconIndex);
-                        }
-
-                        if (info == null) {
-                            info = new ApplicationInfo();
-                            info.icon = manager.getDefaultActivityIcon();
-                        }
-
-                        info.isGesture = true;
-                        info.title = c.getString(titleIndex);
-                        info.intent = intent;
-                        info.id = c.getLong(idIndex);
-
-                        break;
-                }
-            }
-        } catch (Exception e) {
-            w(LOG_TAG, "Could not load gesture with name " + id);
-        } finally {
-            c.close();
-        }
-
-        return info;
-    }
 }
diff --git a/src/com/android/launcher/LauncherProvider.java b/src/com/android/launcher/LauncherProvider.java
index fc38cdd..848cbdc 100644
--- a/src/com/android/launcher/LauncherProvider.java
+++ b/src/com/android/launcher/LauncherProvider.java
@@ -16,6 +16,9 @@
 
 package com.android.launcher;
 
+import static android.util.Log.d;
+import static android.util.Log.w;
+
 import android.appwidget.AppWidgetHost;
 import android.content.ContentProvider;
 import android.content.Context;
@@ -24,6 +27,7 @@
 import android.content.ComponentName;
 import android.content.ContentUris;
 import android.content.ContentResolver;
+import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.content.res.TypedArray;
 import android.content.pm.PackageManager;
@@ -42,6 +46,7 @@
 import android.provider.Settings;
 
 import java.io.IOException;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 
 import org.xmlpull.v1.XmlPullParserException;
@@ -173,6 +178,7 @@
     private static class DatabaseHelper extends SQLiteOpenHelper {
         private static final String TAG_FAVORITES = "favorites";
         private static final String TAG_FAVORITE = "favorite";
+        private static final String TAG_SHORTCUT = "shortcut";
         private static final String TAG_CLOCK = "clock";
         private static final String TAG_SEARCH = "search";
 
@@ -531,11 +537,13 @@
                             a.getString(R.styleable.Favorite_y));
 
                     if (TAG_FAVORITE.equals(name)) {
-                        added = addShortcut(db, values, a, packageManager, intent);
+                        added = addAppShortcut(db, values, a, packageManager, intent);
                     } else if (TAG_SEARCH.equals(name)) {
                         added = addSearchWidget(db, values);
                     } else if (TAG_CLOCK.equals(name)) {
                         added = addClockWidget(db, values);
+                    } else if (TAG_SHORTCUT.equals(name)) {
+                        added = addShortcut(db, values, a);
                     }
 
                     if (added) i++;
@@ -551,7 +559,7 @@
             return i;
         }
 
-        private boolean addShortcut(SQLiteDatabase db, ContentValues values, TypedArray a,
+        private boolean addAppShortcut(SQLiteDatabase db, ContentValues values, TypedArray a,
                 PackageManager packageManager, Intent intent) {
 
             ActivityInfo info;
@@ -576,6 +584,42 @@
             }
             return true;
         }
+        
+        private boolean addShortcut(SQLiteDatabase db, ContentValues values, TypedArray a) {
+            Resources r = mContext.getResources();
+            
+            final int iconResId = a.getResourceId(R.styleable.Favorite_icon, 0);
+            final int titleResId = a.getResourceId(R.styleable.Favorite_title, 0);
+            
+            Intent intent = null;
+            String uri = null;
+            try {
+                uri = a.getString(R.styleable.Favorite_uri);
+                intent = Intent.parseUri(uri, 0);
+            } catch (URISyntaxException e) {
+                w(LauncherModel.LOG_TAG, "Shortcut has malformed uri: " + uri);
+                return false; // Oh well
+            }
+            
+            if (iconResId == 0 || titleResId == 0) {
+                w(LauncherModel.LOG_TAG, "Shortcut is missing title or icon resource ID");
+                return false;
+            }
+            
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            values.put(Favorites.INTENT, intent.toUri(0));
+            values.put(Favorites.TITLE, r.getString(titleResId));
+            values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_SHORTCUT);
+            values.put(Favorites.SPANX, 1);
+            values.put(Favorites.SPANY, 1);
+            values.put(Favorites.ICON_TYPE, Favorites.ICON_TYPE_RESOURCE);
+            values.put(Favorites.ICON_PACKAGE, mContext.getPackageName());
+            values.put(Favorites.ICON_RESOURCE, mContext.getResources().getResourceName(iconResId));
+
+            db.insert(TABLE_FAVORITES, null, values);
+
+            return true;
+        }
 
         private boolean addSearchWidget(SQLiteDatabase db, ContentValues values) {
             // Add a search box
diff --git a/src/com/android/launcher/LauncherSettings.java b/src/com/android/launcher/LauncherSettings.java
index 8cc2559..6c0e2e2 100644
--- a/src/com/android/launcher/LauncherSettings.java
+++ b/src/com/android/launcher/LauncherSettings.java
@@ -90,37 +90,6 @@
         static final String ICON = "icon";
     }
 
-    static final class Gestures implements BaseLauncherColumns {
-                /**
-         * The content:// style URL for this table
-         */
-        static final Uri CONTENT_URI = Uri.parse("content://" +
-                LauncherProvider.AUTHORITY + "/" + LauncherProvider.TABLE_GESTURES +
-                "?" + LauncherProvider.PARAMETER_NOTIFY + "=true");
-
-        /**
-         * The content:// style URL for this table. When this Uri is used, no notification is
-         * sent if the content changes.
-         */
-        static final Uri CONTENT_URI_NO_NOTIFICATION = Uri.parse("content://" +
-                LauncherProvider.AUTHORITY + "/" + LauncherProvider.TABLE_GESTURES +
-                "?" + LauncherProvider.PARAMETER_NOTIFY + "=false");
-
-        /**
-         * The content:// style URL for a given row, identified by its id.
-         *
-         * @param id The row id.
-         * @param notify True to send a notification is the content changes.
-         *
-         * @return The unique content URL for the specified row.
-         */
-        static Uri getContentUri(long id, boolean notify) {
-            return Uri.parse("content://" + LauncherProvider.AUTHORITY +
-                    "/" + LauncherProvider.TABLE_GESTURES + "/" + id + "?" +
-                    LauncherProvider.PARAMETER_NOTIFY + "=" + notify);
-        }
-    }
-
     /**
      * Favorites. When changing these values, be sure to update
      * {@link com.android.settings.LauncherAppWidgetBinder} as needed.
diff --git a/src/com/android/launcher/UserFolderInfo.java b/src/com/android/launcher/UserFolderInfo.java
index 639894e..f5907f2 100644
--- a/src/com/android/launcher/UserFolderInfo.java
+++ b/src/com/android/launcher/UserFolderInfo.java
@@ -41,16 +41,7 @@
     public void add(ApplicationInfo item) {
         contents.add(item);
     }
-    
-    /**
-     * Remove an app or shortcut
-     * 
-     * @param item
-     */
-    public void remove(ApplicationInfo item) {
-        contents.remove(item);
-    }
-    
+
     @Override
     void onAddToDatabase(ContentValues values) { 
         super.onAddToDatabase(values);
diff --git a/src/com/android/launcher/Utilities.java b/src/com/android/launcher/Utilities.java
index 4a22cba..30a7893 100644
--- a/src/com/android/launcher/Utilities.java
+++ b/src/com/android/launcher/Utilities.java
@@ -25,7 +25,6 @@
 import android.graphics.PaintFlagsDrawFilter;
 import android.graphics.Paint;
 import android.graphics.Rect;
-import android.util.DisplayMetrics;
 import android.content.res.Resources;
 import android.content.Context;
 
@@ -46,27 +45,6 @@
                 Paint.FILTER_BITMAP_FLAG));
     }
 
-    static Bitmap centerToFit(Bitmap bitmap, int width, int height, Context context) {
-        final int bitmapWidth = bitmap.getWidth();
-        final int bitmapHeight = bitmap.getHeight();
-
-        if (bitmapWidth < width || bitmapHeight < height) {
-            int color = context.getResources().getColor(R.color.window_background);
-
-            Bitmap centered = Bitmap.createBitmap(bitmapWidth < width ? width : bitmapWidth,
-                    bitmapHeight < height ? height : bitmapHeight, Bitmap.Config.RGB_565);
-            centered.setDensity(bitmap.getDensity());
-            Canvas canvas = new Canvas(centered);
-            canvas.drawColor(color);
-            canvas.drawBitmap(bitmap, (width - bitmapWidth) / 2.0f, (height - bitmapHeight) / 2.0f,
-                    null);
-
-            bitmap = centered;
-        }
-
-        return bitmap;
-    }
-
     /**
      * Returns a Drawable representing the thumbnail of the specified Drawable.
      * The size of the thumbnail is defined by the dimension
@@ -176,27 +154,40 @@
         final int bitmapWidth = bitmap.getWidth();
         final int bitmapHeight = bitmap.getHeight();
 
-        if (width > 0 && height > 0 && (width < bitmapWidth || height < bitmapHeight)) {
-            final float ratio = (float) bitmapWidth / bitmapHeight;
-
-            if (bitmapWidth > bitmapHeight) {
-                height = (int) (width / ratio);
-            } else if (bitmapHeight > bitmapWidth) {
-                width = (int) (height * ratio);
+        if (width > 0 && height > 0) {
+            if (width < bitmapWidth || height < bitmapHeight) {
+                final float ratio = (float) bitmapWidth / bitmapHeight;
+    
+                if (bitmapWidth > bitmapHeight) {
+                    height = (int) (width / ratio);
+                } else if (bitmapHeight > bitmapWidth) {
+                    width = (int) (height * ratio);
+                }
+    
+                final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?
+                        bitmap.getConfig() : Bitmap.Config.ARGB_8888;
+                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
+                final Canvas canvas = sCanvas;
+                final Paint paint = sPaint;
+                canvas.setBitmap(thumb);
+                paint.setDither(false);
+                paint.setFilterBitmap(true);
+                sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);
+                sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);
+                canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);
+                return thumb;
+            } else if (bitmapWidth < width || bitmapHeight < height) {
+                final Bitmap.Config c = Bitmap.Config.ARGB_8888;
+                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
+                final Canvas canvas = sCanvas;
+                final Paint paint = sPaint;
+                canvas.setBitmap(thumb);
+                paint.setDither(false);
+                paint.setFilterBitmap(true);
+                canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,
+                        (sIconHeight - bitmapHeight) / 2, paint);
+                return thumb;
             }
-
-            final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?
-                    bitmap.getConfig() : Bitmap.Config.ARGB_8888;
-            final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-            final Canvas canvas = sCanvas;
-            final Paint paint = sPaint;
-            canvas.setBitmap(thumb);
-            paint.setDither(false);
-            paint.setFilterBitmap(true);
-            sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);
-            sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);
-            canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);
-            return thumb;
         }
 
         return bitmap;
diff --git a/src/com/android/launcher/WallpaperChooser.java b/src/com/android/launcher/WallpaperChooser.java
index c88a02a..09a9bf7 100644
--- a/src/com/android/launcher/WallpaperChooser.java
+++ b/src/com/android/launcher/WallpaperChooser.java
@@ -17,7 +17,13 @@
 package com.android.launcher;
 
 import android.app.Activity;
+import android.app.WallpaperManager;
+import android.content.res.Resources;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.AsyncTask;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -26,65 +32,24 @@
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
-import android.widget.Button;
 import android.widget.Gallery;
 import android.widget.ImageView;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.content.res.Resources;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Collections;
 
 public class WallpaperChooser extends Activity implements AdapterView.OnItemSelectedListener,
         OnClickListener {
 
-    private static final Integer[] THUMB_IDS = {
-            R.drawable.wallpaper_lake_small,
-            R.drawable.wallpaper_sunset_small,
-            R.drawable.wallpaper_beach_small,
-            R.drawable.wallpaper_snow_leopard_small,
-            R.drawable.wallpaper_path_small,
-            R.drawable.wallpaper_sunrise_small,
-            R.drawable.wallpaper_mountain_small,
-            R.drawable.wallpaper_road_small,
-            R.drawable.wallpaper_jellyfish_small,
-            R.drawable.wallpaper_zanzibar_small,
-            R.drawable.wallpaper_blue_small,
-            R.drawable.wallpaper_grey_small,
-            R.drawable.wallpaper_green_small,
-            R.drawable.wallpaper_pink_small,
-    };
-
-    private static final Integer[] IMAGE_IDS = {
-            R.drawable.wallpaper_lake,
-            R.drawable.wallpaper_sunset,
-            R.drawable.wallpaper_beach,
-            R.drawable.wallpaper_snow_leopard,
-            R.drawable.wallpaper_path,
-            R.drawable.wallpaper_sunrise,
-            R.drawable.wallpaper_mountain,
-            R.drawable.wallpaper_road,
-            R.drawable.wallpaper_jellyfish,
-            R.drawable.wallpaper_zanzibar,
-            R.drawable.wallpaper_blue,
-            R.drawable.wallpaper_grey,
-            R.drawable.wallpaper_green,
-            R.drawable.wallpaper_pink,
-    };
-
     private Gallery mGallery;
     private ImageView mImageView;
     private boolean mIsWallpaperSet;
 
-    private BitmapFactory.Options mOptions;
     private Bitmap mBitmap;
 
     private ArrayList<Integer> mThumbs;
     private ArrayList<Integer> mImages;
+    private WallpaperLoader mLoader;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -95,32 +60,29 @@
 
         setContentView(R.layout.wallpaper_chooser);
 
-        mOptions = new BitmapFactory.Options();
-        mOptions.inDither = false;
-        mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
-
         mGallery = (Gallery) findViewById(R.id.gallery);
         mGallery.setAdapter(new ImageAdapter(this));
         mGallery.setOnItemSelectedListener(this);
         mGallery.setCallbackDuringFling(false);
 
-        Button b = (Button) findViewById(R.id.set);
-        b.setOnClickListener(this);
+        findViewById(R.id.set).setOnClickListener(this);
 
         mImageView = (ImageView) findViewById(R.id.wallpaper);
     }
 
     private void findWallpapers() {
-        mThumbs = new ArrayList<Integer>(THUMB_IDS.length + 4);
-        Collections.addAll(mThumbs, THUMB_IDS);
-
-        mImages = new ArrayList<Integer>(IMAGE_IDS.length + 4);
-        Collections.addAll(mImages, IMAGE_IDS);
+        mThumbs = new ArrayList<Integer>(24);
+        mImages = new ArrayList<Integer>(24);
 
         final Resources resources = getResources();
-        final String[] extras = resources.getStringArray(R.array.extra_wallpapers);
         final String packageName = getApplication().getPackageName();
 
+        addWallpapers(resources, packageName, R.array.wallpapers);
+        addWallpapers(resources, packageName, R.array.extra_wallpapers);
+    }
+
+    private void addWallpapers(Resources resources, String packageName, int list) {
+        final String[] extras = resources.getStringArray(list);
         for (String extra : extras) {
             int res = resources.getIdentifier(extra, "drawable", packageName);
             if (res != 0) {
@@ -141,20 +103,21 @@
         mIsWallpaperSet = false;
     }
 
-    public void onItemSelected(AdapterView parent, View v, int position, long id) {
-        final ImageView view = mImageView;
-        Bitmap b = BitmapFactory.decodeResource(getResources(), mImages.get(position), mOptions);
-        view.setImageBitmap(b);
-
-        // Help the GC
-        if (mBitmap != null) {
-            mBitmap.recycle();
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        
+        if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
+            mLoader.cancel(true);
+            mLoader = null;
         }
-        mBitmap = b;
+    }
 
-        final Drawable drawable = view.getDrawable();
-        drawable.setFilterBitmap(true);
-        drawable.setDither(true);
+    public void onItemSelected(AdapterView parent, View v, int position, long id) {
+        if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
+            mLoader.cancel();
+        }
+        mLoader = (WallpaperLoader) new WallpaperLoader().execute(position);
     }
 
     /*
@@ -169,8 +132,8 @@
 
         mIsWallpaperSet = true;
         try {
-            InputStream stream = getResources().openRawResource(mImages.get(position));
-            setWallpaper(stream);
+            WallpaperManager wpm = (WallpaperManager)getSystemService(WALLPAPER_SERVICE);
+            wpm.setResource(mImages.get(position));
             setResult(RESULT_OK);
             finish();
         } catch (IOException e) {
@@ -208,9 +171,17 @@
             } else {
                 image = (ImageView) convertView;
             }
-
-            image.setImageResource(mThumbs.get(position));
-            image.getDrawable().setDither(true);
+            
+            int thumbRes = mThumbs.get(position);
+            image.setImageResource(thumbRes);
+            Drawable thumbDrawable = image.getDrawable();
+            if (thumbDrawable != null) {
+                thumbDrawable.setDither(true);
+            } else {
+                Log.e(Launcher.LOG_TAG, String.format(
+                    "Error decoding thumbnail resId=%d for wallpaper #%d",
+                    thumbRes, position));
+            }
             return image;
         }
     }
@@ -218,4 +189,56 @@
     public void onClick(View v) {
         selectWallpaper(mGallery.getSelectedItemPosition());
     }
+
+    class WallpaperLoader extends AsyncTask<Integer, Void, Bitmap> {
+        BitmapFactory.Options mOptions;
+
+        WallpaperLoader() {
+            mOptions = new BitmapFactory.Options();
+            mOptions.inDither = false;
+            mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;            
+        }
+        
+        protected Bitmap doInBackground(Integer... params) {
+            if (isCancelled()) return null;
+            try {
+                return BitmapFactory.decodeResource(getResources(),
+                        mImages.get(params[0]), mOptions);
+            } catch (OutOfMemoryError e) {
+                return null;
+            }            
+        }
+
+        @Override
+        protected void onPostExecute(Bitmap b) {
+            if (b == null) return;
+
+            if (!isCancelled() && !mOptions.mCancel) {
+                // Help the GC
+                if (mBitmap != null) {
+                    mBitmap.recycle();
+                }
+    
+                final ImageView view = mImageView;
+                view.setImageBitmap(b);
+    
+                mBitmap = b;
+    
+                final Drawable drawable = view.getDrawable();
+                drawable.setFilterBitmap(true);
+                drawable.setDither(true);
+
+                view.postInvalidate();
+
+                mLoader = null;
+            } else {
+               b.recycle(); 
+            }
+        }
+
+        void cancel() {
+            mOptions.requestCancelDecode();
+            super.cancel(true);
+        }
+    }
 }
diff --git a/src/com/android/launcher/Workspace.java b/src/com/android/launcher/Workspace.java
index f5dc633..6a4455c 100644
--- a/src/com/android/launcher/Workspace.java
+++ b/src/com/android/launcher/Workspace.java
@@ -16,14 +16,12 @@
 
 package com.android.launcher;
 
+import android.app.WallpaperManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ComponentName;
 import android.content.res.TypedArray;
-import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.RectF;
 import android.graphics.Rect;
 import android.graphics.Region;
 import android.graphics.drawable.Drawable;
@@ -56,13 +54,7 @@
 
     private int mDefaultScreen;
 
-    private Paint mPaint;
-    private Bitmap mWallpaper;
-
-    private int mWallpaperWidth;
-    private int mWallpaperHeight;
-    private float mWallpaperOffset;
-    private boolean mWallpaperLoaded;
+    private final WallpaperManager mWallpaperManager;
 
     private boolean mFirstLayout = true;
 
@@ -133,6 +125,8 @@
     public Workspace(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
 
+        mWallpaperManager = WallpaperManager.getInstance(context);
+        
         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Workspace, defStyle, 0);
         mDefaultScreen = a.getInt(R.styleable.Workspace_defaultScreen, 1);
         a.recycle();
@@ -148,24 +142,11 @@
         mCurrentScreen = mDefaultScreen;
         Launcher.setScreen(mCurrentScreen);
 
-        mPaint = new Paint();
-        mPaint.setDither(false);
-
         final ViewConfiguration configuration = ViewConfiguration.get(getContext());
         mTouchSlop = configuration.getScaledTouchSlop();
         mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
     }
 
-    /**
-     * Set the background's wallpaper.
-     */
-    void loadWallpaper(Bitmap bitmap) {
-        mWallpaper = bitmap;
-        mWallpaperLoaded = true;
-        requestLayout();
-        invalidate();
-    }
-
     @Override
     public void addView(View child, int index, LayoutParams params) {
         if (!(child instanceof CellLayout)) {
@@ -256,20 +237,6 @@
     }
 
     /**
-     * Computes a bounding rectangle for a range of cells
-     *
-     * @param cellX X coordinate of upper left corner expressed as a cell position
-     * @param cellY Y coordinate of upper left corner expressed as a cell position
-     * @param cellHSpan Width in cells
-     * @param cellVSpan Height in cells
-     * @param rect Rectnagle into which to put the results
-     */
-    public void cellToRect(int cellX, int cellY, int cellHSpan, int cellVSpan, RectF rect) {
-        ((CellLayout)getChildAt(mCurrentScreen)).cellToRect(cellX, cellY,
-                cellHSpan, cellVSpan, rect);
-    }
-
-    /**
      * Sets the current screen.
      *
      * @param currentScreen
@@ -282,13 +249,6 @@
     }
 
     /**
-     * Shows the default screen (defined by the firstScreen attribute in XML.)
-     */
-    void showDefaultScreen() {
-        setCurrentScreen(mDefaultScreen);
-    }
-
-    /**
      * Adds the specified child in the current screen. The position and dimension of
      * the child are defined by x, y, spanX and spanY.
      *
@@ -367,11 +327,6 @@
         }
     }
 
-    void addWidget(View view, Widget widget) {
-        addInScreen(view, widget.screen, widget.cellX, widget.cellY, widget.spanX,
-                widget.spanY, false);
-    }
-
     void addWidget(View view, Widget widget, boolean insert) {
         addInScreen(view, widget.screen, widget.cellX, widget.cellY, widget.spanX,
                 widget.spanY, insert);
@@ -384,6 +339,18 @@
         }
         return null;
     }
+    
+    CellLayout.CellInfo findAllVacantCellsFromModel() {
+        CellLayout group = (CellLayout) getChildAt(mCurrentScreen);
+        if (group != null) {
+            int countX = group.getCountX();
+            int countY = group.getCountY();
+            boolean occupied[][] = new boolean[countX][countY];
+            Launcher.getModel().findAllOccupiedCells(occupied, countX, countY, mCurrentScreen);
+            return group.findAllVacantCellsFromOccupied(occupied, countX, countY);
+        }
+        return null;
+    }
 
     private void clearVacantCache() {
         if (mVacantCache != null) {
@@ -391,55 +358,6 @@
             mVacantCache = null;
         }
     }
-    
-    /**
-     * Returns the coordinate of a vacant cell for the current screen.
-     */
-    boolean getVacantCell(int[] vacant, int spanX, int spanY) {
-        CellLayout group = (CellLayout) getChildAt(mCurrentScreen);
-        if (group != null) {
-            return group.getVacantCell(vacant, spanX, spanY);
-        }
-        return false;
-    }
-
-    /**
-     * Adds the specified child in the current screen. The position and dimension of
-     * the child are defined by x, y, spanX and spanY.
-     *
-     * @param child The child to add in one of the workspace's screens.
-     * @param spanX The number of cells spanned horizontally by the child.
-     * @param spanY The number of cells spanned vertically by the child.
-     */
-    void fitInCurrentScreen(View child, int spanX, int spanY) {
-        fitInScreen(child, mCurrentScreen, spanX, spanY);
-    }
-
-    /**
-     * Adds the specified child in the specified screen. The position and dimension of
-     * the child are defined by x, y, spanX and spanY.
-     *
-     * @param child The child to add in one of the workspace's screens.
-     * @param screen The screen in which to add the child.
-     * @param spanX The number of cells spanned horizontally by the child.
-     * @param spanY The number of cells spanned vertically by the child.
-     */
-    void fitInScreen(View child, int screen, int spanX, int spanY) {
-        if (screen < 0 || screen >= getChildCount()) {
-            throw new IllegalStateException("The screen must be >= 0 and < " + getChildCount());
-        }
-
-        final CellLayout group = (CellLayout) getChildAt(screen);
-        boolean vacant = group.getVacantCell(mTempCell, spanX, spanY);
-        if (vacant) {
-            group.addView(child,
-                    new CellLayout.LayoutParams(mTempCell[0], mTempCell[1], spanX, spanY));
-            child.setOnLongClickListener(mLongClickListener);
-            if (!(child instanceof Folder)) {
-                child.setOnLongClickListener(mLongClickListener);
-            }
-        }
-    }
 
     /**
      * Registers the specified listener on each screen contained in this workspace.
@@ -455,11 +373,20 @@
         }
     }
 
+    private void updateWallpaperOffset() {
+        updateWallpaperOffset(getChildAt(getChildCount() - 1).getRight() - (mRight - mLeft));
+    }
+
+    private void updateWallpaperOffset(int scrollRange) {
+        mWallpaperManager.setWallpaperOffsets(getWindowToken(), mScrollX / (float) scrollRange, 0);
+    }
+    
     @Override
     public void computeScroll() {
         if (mScroller.computeScrollOffset()) {
             mScrollX = mScroller.getCurrX();
             mScrollY = mScroller.getCurrY();
+            updateWallpaperOffset();
             postInvalidate();
         } else if (mNextScreen != INVALID_SCREEN) {
             mCurrentScreen = Math.max(0, Math.min(mNextScreen, getChildCount() - 1));
@@ -471,7 +398,7 @@
 
     @Override
     public boolean isOpaque() {
-        return !mWallpaper.hasAlpha();
+        return false;
     }
 
     @Override
@@ -499,13 +426,6 @@
                     top + mDrawerContentHeight, Region.Op.DIFFERENCE);
         }
 
-        float x = mScrollX * mWallpaperOffset;
-        if (x + mWallpaperWidth < mRight - mLeft) {
-            x = mRight - mLeft - mWallpaperWidth;
-        }
-
-        canvas.drawBitmap(mWallpaper, x, (mBottom - mTop - mWallpaperHeight) / 2, mPaint);
-
         // ViewGroup.dispatchDraw() supports many features we don't need:
         // clip to padding, layout animation, animation listener, disappearing
         // children, etc. The following implementation attempts to fast-track
@@ -557,20 +477,9 @@
             getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
         }
 
-        if (mWallpaperLoaded) {
-            mWallpaperLoaded = false;
-            mWallpaper = Utilities.centerToFit(mWallpaper, width,
-                    MeasureSpec.getSize(heightMeasureSpec), getContext());
-            mWallpaperWidth = mWallpaper.getWidth();
-            mWallpaperHeight = mWallpaper.getHeight();
-        }
-
-        final int wallpaperWidth = mWallpaperWidth;
-        mWallpaperOffset = wallpaperWidth > width ? (count * width - wallpaperWidth) /
-                ((count - 1) * (float) width) : 1.0f;
-
         if (mFirstLayout) {
             scrollTo(mCurrentScreen * width, 0);
+            updateWallpaperOffset(width * (getChildCount() - 1));
             mFirstLayout = false;
         }
     }
@@ -803,12 +712,14 @@
                 if (deltaX < 0) {
                     if (mScrollX > 0) {
                         scrollBy(Math.max(-mScrollX, deltaX), 0);
+                        updateWallpaperOffset();
                     }
                 } else if (deltaX > 0) {
                     final int availableToScroll = getChildAt(getChildCount() - 1).getRight() -
                             mScrollX - getWidth();
                     if (availableToScroll > 0) {
                         scrollBy(Math.min(availableToScroll, deltaX), 0);
+                        updateWallpaperOffset();
                     }
                 }
             }
@@ -908,10 +819,6 @@
         }
     }
 
-    void addApplicationShortcut(ApplicationInfo info, CellLayout.CellInfo cellInfo) {
-        addApplicationShortcut(info, cellInfo, false);
-    }
-
     void addApplicationShortcut(ApplicationInfo info, CellLayout.CellInfo cellInfo,
             boolean insertAtFirst) {
         final CellLayout layout = (CellLayout) getChildAt(cellInfo.screen);
@@ -929,7 +836,8 @@
             // Move internally
             if (mDragInfo != null) {
                 final View cell = mDragInfo.cell;
-                if (mCurrentScreen != mDragInfo.screen) {
+                int index = mScroller.isFinished() ? mCurrentScreen : mNextScreen;                
+                if (index != mDragInfo.screen) {
                     final CellLayout originalCellLayout = (CellLayout) getChildAt(mDragInfo.screen);
                     originalCellLayout.removeView(cell);
                     cellLayout.addView(cell);
@@ -941,7 +849,7 @@
                 final ItemInfo info = (ItemInfo)cell.getTag();
                 CellLayout.LayoutParams lp = (CellLayout.LayoutParams) cell.getLayoutParams();
                 LauncherModel.moveItemInDatabase(mLauncher, info,
-                        LauncherSettings.Favorites.CONTAINER_DESKTOP, mCurrentScreen, lp.cellX, lp.cellY);
+                        LauncherSettings.Favorites.CONTAINER_DESKTOP, index, lp.cellX, lp.cellY);
             }
         }
     }
@@ -1031,8 +939,7 @@
     /**
      * {@inheritDoc}
      */
-    public Rect estimateDropLocation(DragSource source, int x, int y,
-            int xOffset, int yOffset, Object dragInfo, Rect recycle) {
+    public Rect estimateDropLocation(int x, int y, int xOffset, int yOffset, Rect recycle) {
         final CellLayout layout = getCurrentDropLayout();
         
         final CellLayout.CellInfo cellInfo = mDragInfo;
@@ -1072,8 +979,7 @@
         }
 
         // Find the best target drop location
-        return layout.findNearestVacantArea(pixelX, pixelY,
-                spanX, spanY, mVacantCache, recycle);
+        return layout.findNearestVacantArea(pixelX, pixelY, spanX, spanY, mVacantCache, recycle);
     }
     
     void setLauncher(Launcher launcher) {
@@ -1085,6 +991,9 @@
     }
 
     public void onDropCompleted(View target, boolean success) {
+        // This is a bit expensive but safe
+        clearVacantCache();
+
         if (success){
             if (target != this && mDragInfo != null) {
                 final CellLayout cellLayout = (CellLayout) getChildAt(mDragInfo.screen);