diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ebcdea5..ffedec7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -94,11 +94,6 @@
             </intent-filter>
         </activity>
 
-        <!-- Enable system-default search mode for any activity in Home -->
-        <meta-data
-            android:name="android.app.default_searchable"
-            android:value="*" />
-
         <!-- Intent received used to install shortcuts from other applications -->
         <receiver
             android:name=".InstallShortcutReceiver"
diff --git a/res/drawable-hdpi/box_launcher_bottom.9.png b/res/drawable-hdpi/box_launcher_bottom.9.png
index f08c7a2..9708e73 100644
--- a/res/drawable-hdpi/box_launcher_bottom.9.png
+++ b/res/drawable-hdpi/box_launcher_bottom.9.png
Binary files differ
diff --git a/res/raw/allapps.rs b/res/raw/allapps.rs
index 1d4aed3..4f6e284 100644
--- a/res/raw/allapps.rs
+++ b/res/raw/allapps.rs
@@ -93,6 +93,7 @@
     g_LastTouchDown = 0;
     g_LastPositionX = 0;
     g_Zoom = 0;
+    g_Animation = 1.f;
     g_SpecialHWWar = 1;
     g_MoveToTime = 0;
     g_MoveToOldPos = 0;
@@ -312,7 +313,7 @@
 
             if (iconNum >= 0) {
                 float x = colWidth * col + (colWidth / 2);
-                vpConstants->Position.x = x;
+                vpConstants->Position.x = x + 0.2f;
 
                 if (state->selectedIconIndex == iconNum && !p) {
                     bindProgramFragment(NAMED_PFTexNearest);
@@ -326,14 +327,14 @@
                 bindProgramFragment(NAMED_PFTexMip);
                 vpConstants->ImgSize.x = ICON_TEXTURE_WIDTH_PX;
                 vpConstants->ImgSize.y = ICON_TEXTURE_HEIGHT_PX;
-                vpConstants->Position.y = y;
+                vpConstants->Position.y = y - 0.2f;
                 bindTexture(NAMED_PFTexMip, 0, loadI32(ALLOC_ICON_IDS, iconNum));
                 drawSimpleMesh(NAMED_SMCell);
 
                 bindProgramFragment(NAMED_PFTexMipAlpha);
                 vpConstants->ImgSize.x = 120.f;
                 vpConstants->ImgSize.y = 64.f;
-                vpConstants->Position.y = y - 64.f;
+                vpConstants->Position.y = y - 64.f - 0.2f;
                 bindTexture(NAMED_PFTexMipAlpha, 0, loadI32(ALLOC_LABEL_IDS, iconNum));
                 drawSimpleMesh(NAMED_SMCell);
             }
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1c846b8..9157436 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -33,7 +33,7 @@
     <string name="group_folder" msgid="5143593791798929193">"Neuer Ordner"</string>
     <string name="group_live_folders" msgid="2664945399140647217">"Ordner"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
-    <string name="group_wallpapers" msgid="1568191644272224858">"Hintergrundbilder"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"Hintergründe"</string>
     <string name="add_folder" msgid="3521088587367839879">"Ordner"</string>
     <string name="add_clock" msgid="2337943840175865746">"Uhr"</string>
     <string name="add_photo_frame" msgid="3154058437359487954">"Bildrahmen"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 1d3e3dd..696d846 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -27,7 +27,7 @@
     <string name="rename_folder_title" msgid="4544573104191526550">"Cambiar nombre de carpeta"</string>
     <string name="rename_action" msgid="6016003384693240896">"Aceptar"</string>
     <string name="cancel_action" msgid="3811860427489435048">"Cancelar"</string>
-    <string name="menu_item_add_item" msgid="6233177331075781114">"Añadir a pantalla de página principal"</string>
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Añadir a pantalla de inicio"</string>
     <string name="group_applications" msgid="4118484163419674240">"Aplicaciones"</string>
     <string name="group_shortcuts" msgid="9133529424900391877">"Accesos directos"</string>
     <string name="group_folder" msgid="5143593791798929193">"Nueva carpeta"</string>
@@ -37,14 +37,14 @@
     <string name="add_folder" msgid="3521088587367839879">"Carpeta"</string>
     <string name="add_clock" msgid="2337943840175865746">"Reloj"</string>
     <string name="add_photo_frame" msgid="3154058437359487954">"Picture frame"</string>
-    <string name="out_of_space" msgid="8365249326091984698">"No queda espacio en esta pantalla de página principal."</string>
+    <string name="out_of_space" msgid="8365249326091984698">"No queda espacio en esta pantalla de inicio."</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="all_apps_button_label" msgid="3953036962111614813">"Todas las aplicaciones"</string>
-    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Página principal"</string>
+    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Inicio"</string>
     <string name="menu_add" msgid="3065046628354640854">"Añadir"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Fondo de pantalla"</string>
     <string name="menu_search" msgid="4826514464423239041">"Buscar con Google"</string>
@@ -55,9 +55,9 @@
     <string name="permdesc_install_shortcut" msgid="7429365847558984148">"Permite que una aplicación añada accesos directos sin intervención del usuario."</string>
     <string name="permlab_uninstall_shortcut" msgid="7696645932555926449">"desinstalar accesos directos"</string>
     <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"Permite que una aplicación elimine accesos directos sin intervención del usuario."</string>
-    <string name="permlab_read_settings" msgid="3452408290738106747">"leer información de accesos directos y de configuración de la página principal"</string>
-    <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite que una aplicación lea la información de configuración y accesos directos de la página principal."</string>
-    <string name="permlab_write_settings" msgid="1360567537236705628">"escribir información de accesos directos y de configuración de la página principal"</string>
-    <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite que una aplicación modifique la configuración y los accesos directos de la página principal."</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"leer información de accesos directos y de configuración de la página de inicio"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite que una aplicación lea la información de configuración y accesos directos de la página de inicio."</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"escribir información de accesos directos y de configuración de la página de inicio"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite que una aplicación modifique la configuración y los accesos directos de la página de inicio."</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema al cargar el widget"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 2b19e26..f37cfef 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -44,7 +44,7 @@
     <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="all_apps_button_label" msgid="3953036962111614813">"Toutes les applications"</string>
-    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Domicile"</string>
+    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Page d\'accueil"</string>
     <string name="menu_add" msgid="3065046628354640854">"Ajouter"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Fond d\'écran"</string>
     <string name="menu_search" msgid="4826514464423239041">"Rechercher"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 0998818..2e8dd98 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -20,8 +20,7 @@
     <string name="folder_name" msgid="4588446541914685904">"Pasta"</string>
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Seleccionar imagem de fundo a partir de"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir imagem de fundo"</string>
-    <!-- no translation found for pick_wallpaper (5630222540525626723) -->
-    <skip />
+    <string name="pick_wallpaper" msgid="5630222540525626723">"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>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 08686c1..d7b3553 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -20,8 +20,7 @@
     <string name="folder_name" msgid="4588446541914685904">"Pasta"</string>
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Selecionar papel de parede de"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir papel de parede"</string>
-    <!-- no translation found for pick_wallpaper (5630222540525626723) -->
-    <skip />
+    <string name="pick_wallpaper" msgid="5630222540525626723">"Papéis 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>
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index d3503de..cf75250 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -1266,24 +1266,24 @@
          * Send the apps list structures to RS.
          */
         private void saveAppsList() {
-            mRS.contextBindRootScript(null);
+            // WTF: how could mScript be not null but mAllocIconIds null b/2460740.
+            if (mScript != null && mAllocIconIds != null) {
+                mRS.contextBindRootScript(null);
 
-            mAllocIconIds.data(mIconIds);
-            mAllocLabelIds.data(mLabelIds);
+                mAllocIconIds.data(mIconIds);
+                mAllocLabelIds.data(mLabelIds);
 
-            if (mScript != null) { // this happens when we init it
                 mScript.bindAllocation(mAllocIconIds, Defines.ALLOC_ICON_IDS);
                 mScript.bindAllocation(mAllocLabelIds, Defines.ALLOC_LABEL_IDS);
-            }
 
-            mState.save();
+                mState.save();
 
-            // Note: mScript may be null if we haven't initialized it yet.
-            // In that case, this is a no-op.
-            if (mInvokeResetWAR != null) {
-                mInvokeResetWAR.execute();
-            }
-            if (mScript != null) {
+                // Note: mScript may be null if we haven't initialized it yet.
+                // In that case, this is a no-op.
+                if (mInvokeResetWAR != null) {
+                    mInvokeResetWAR.execute();
+                }
+
                 mRS.contextBindRootScript(mScript);
             }
         }
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index 7c35f79..435004d 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -17,6 +17,7 @@
 package com.android.launcher2;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -47,7 +48,6 @@
      * Which item is being dragged
      */
     protected ShortcutInfo mDragItem;
-    private boolean mCloneInfo;
 
     /**
      * Used to inflate the Workspace from XML.
@@ -75,6 +75,10 @@
     
     public void onItemClick(AdapterView parent, View v, int position, long id) {
         ShortcutInfo app = (ShortcutInfo) parent.getItemAtPosition(position);
+        int[] pos = new int[2];
+        v.getLocationOnScreen(pos);
+        app.intent.setSourceBounds(new Rect(pos[0], pos[1],
+                pos[0] + v.getWidth(), pos[1] + v.getHeight()));
         mLauncher.startActivitySafely(app.intent);
     }
 
@@ -94,9 +98,6 @@
         }
 
         ShortcutInfo app = (ShortcutInfo) parent.getItemAtPosition(position);
-        if (mCloneInfo) {
-            app = new ShortcutInfo(app);
-        }
 
         mDragController.startDrag(view, this, app, DragController.DRAG_ACTION_COPY);
         mLauncher.closeFolder(this);
@@ -105,10 +106,6 @@
         return true;
     }
 
-    void setCloneInfo(boolean cloneInfo) {
-        mCloneInfo = cloneInfo;
-    }
-
     public void setDragController(DragController dragController) {
         mDragController = dragController;
     }
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index ee92fc7..11b26c5 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -369,7 +369,7 @@
                     completeAddApplication(this, data, mAddItemCellInfo);
                     break;
                 case REQUEST_PICK_SHORTCUT:
-                    processShortcut(data, REQUEST_PICK_APPLICATION, REQUEST_CREATE_SHORTCUT);
+                    processShortcut(data);
                     break;
                 case REQUEST_CREATE_SHORTCUT:
                     completeAddShortcut(data, mAddItemCellInfo);
@@ -1008,7 +1008,7 @@
         }
     }
 
-    void processShortcut(Intent intent, int requestCodeApplication, int requestCodeShortcut) {
+    void processShortcut(Intent intent) {
         // Handle case where user selected "Applications"
         String applicationName = getResources().getString(R.string.group_applications);
         String shortcutName = intent.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
@@ -1019,9 +1019,9 @@
 
             Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
             pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);
-            startActivityForResult(pickIntent, requestCodeApplication);
+            startActivityForResult(pickIntent, REQUEST_PICK_APPLICATION);
         } else {
-            startActivityForResult(intent, requestCodeShortcut);
+            startActivityForResult(intent, REQUEST_CREATE_SHORTCUT);
         }
     }
 
@@ -1258,11 +1258,11 @@
         Object tag = v.getTag();
         if (tag instanceof ShortcutInfo) {
             // Open shortcut
-            final Intent intent = ((ShortcutInfo)tag).intent;
+            final Intent intent = ((ShortcutInfo) tag).intent;
             int[] pos = new int[2];
             v.getLocationOnScreen(pos);
-            intent.setSourceBounds(
-                    new Rect(pos[0], pos[1], pos[0]+v.getWidth(), pos[1]+v.getHeight()));
+            intent.setSourceBounds(new Rect(pos[0], pos[1],
+                    pos[0] + v.getWidth(), pos[1] + v.getHeight()));
             startActivitySafely(intent);
         } else if (tag instanceof FolderInfo) {
             handleFolderClick((FolderInfo) tag);
@@ -1579,7 +1579,7 @@
         showDialog(DIALOG_CREATE_SHORTCUT);
     }
 
-    private void pickShortcut(int requestCode, int title) {
+    private void pickShortcut() {
         Bundle bundle = new Bundle();
 
         ArrayList<String> shortcutNames = new ArrayList<String>();
@@ -1593,10 +1593,10 @@
 
         Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
         pickIntent.putExtra(Intent.EXTRA_INTENT, new Intent(Intent.ACTION_CREATE_SHORTCUT));
-        pickIntent.putExtra(Intent.EXTRA_TITLE, getText(title));
+        pickIntent.putExtra(Intent.EXTRA_TITLE, getText(R.string.title_select_shortcut));
         pickIntent.putExtras(bundle);
 
-        startActivityForResult(pickIntent, requestCode);
+        startActivityForResult(pickIntent, REQUEST_PICK_SHORTCUT);
     }
 
     private class RenameFolder {
@@ -1801,7 +1801,7 @@
             switch (which) {
                 case AddAdapter.ITEM_SHORTCUT: {
                     // Insert extra item to handle picking application
-                    pickShortcut(REQUEST_PICK_SHORTCUT, R.string.title_select_shortcut);
+                    pickShortcut();
                     break;
                 }
 
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 24b877b..14c83b3 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -55,7 +55,8 @@
 
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlPullParser;
-import com.android.common.XmlUtils;
+
+import com.android.internal.util.XmlUtils;
 import com.android.launcher2.LauncherSettings.Favorites;
 
 public class LauncherProvider extends ContentProvider {
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index de4f051..e64c487 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -29,6 +29,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.IBinder;
 import android.os.Parcelable;
 import android.os.Parcel;
 import android.util.AttributeSet;
@@ -377,8 +378,11 @@
     }
 
     private void updateWallpaperOffset(int scrollRange) {
-        mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 0 );
-        mWallpaperManager.setWallpaperOffsets(getWindowToken(), mScrollX / (float) scrollRange, 0);
+        IBinder token = getWindowToken();
+        if (token != null) {
+            mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 0 );
+            mWallpaperManager.setWallpaperOffsets(getWindowToken(), mScrollX/(float)scrollRange, 0);
+        }
     }
     
     @Override
@@ -435,6 +439,7 @@
 
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
+        computeScroll();
         mDragController.setWindowToken(getWindowToken());
     }
 
@@ -953,7 +958,7 @@
         switch (info.itemType) {
         case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
         case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
-            if (info.container == NO_ID) {
+            if (info.container == NO_ID && info instanceof ApplicationInfo) {
                 // Came from all apps -- make a copy
                 info = new ShortcutInfo((ApplicationInfo)info);
             }
