diff --git a/res/drawable/ic_menu_gallery.png b/res/drawable/ic_menu_gallery.png
deleted file mode 100644
index f61bbd8..0000000
--- a/res/drawable/ic_menu_gallery.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_menu_notifications.png b/res/drawable/ic_menu_notifications.png
deleted file mode 100644
index 866d4e0..0000000
--- a/res/drawable/ic_menu_notifications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_menu_preferences.png b/res/drawable/ic_menu_preferences.png
deleted file mode 100755
index b8e7141..0000000
--- a/res/drawable/ic_menu_preferences.png
+++ /dev/null
Binary files differ
diff --git a/res/layout/widget_search.xml b/res/layout/widget_search.xml
index 4343e27..95e8052 100644
--- a/res/layout/widget_search.xml
+++ b/res/layout/widget_search.xml
@@ -36,6 +36,7 @@
         android:singleLine="true"
         android:selectAllOnFocus="true"
         android:completionThreshold="1"
+        android:inputType="textAutoComplete|textSearchString"
         />
         
      <ImageButton android:id="@+id/search_go_btn"
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
new file mode 100644
index 0000000..eb217e9
--- /dev/null
+++ b/res/values-fr/strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Accueil"</string>
+    <string name="folder_name">"Dossier"</string>
+    <string name="chooser_wallpaper">"Sélectionner l\'arrière-plan à partir de"</string>
+    <string name="wallpaper_instructions">"Configurer l\'arrière-plan"</string>
+    <string name="pick_wallpaper">"Galerie des arrière-plans"</string>
+    <string name="activity_not_found">"L\'application n\'est pas installée sur votre téléphone."</string>
+    <!-- no translation found for rename_folder_label (5646236631298452787) -->
+    <skip />
+    <string name="rename_folder_title">"Renommer le dossier"</string>
+    <string name="rename_action">"OK"</string>
+    <string name="cancel_action">"Annuler"</string>
+    <!-- no translation found for menu_item_add_item (6233177331075781114) -->
+    <skip />
+    <string name="group_applications">"Application"</string>
+    <string name="group_shortcuts">"Raccourci"</string>
+    <!-- no translation found for group_live_folders (3057578584715591220) -->
+    <skip />
+    <string name="group_widgets">"Widget"</string>
+    <string name="group_wallpapers">"Arrière-plan"</string>
+    <string name="add_folder">"Dossier"</string>
+    <string name="add_clock">"Horloge"</string>
+    <string name="add_photo_frame">"Cadre d\'image"</string>
+    <string name="add_search">"Rechercher"</string>
+    <string name="out_of_space">"Plus d\'espace libre sur l\'écran Accueil."</string>
+    <string name="menu_add">"Ajouter"</string>
+    <string name="menu_wallpaper">"Arrière-plan"</string>
+    <string name="menu_search">"Rechercher"</string>
+    <string name="menu_notifications">"Notifications"</string>
+    <string name="menu_settings">"Paramètres"</string>
+    <string name="permlab_install_shortcut">"installer des raccourcis"</string>
+    <string name="permdesc_install_shortcut">"Permet à une application d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur."</string>
+    <string name="permlab_uninstall_shortcut">"désinstaller les raccourcis"</string>
+    <string name="permdesc_uninstall_shortcut">"Permet à une application de supprimer les raccourcis sans l\'intervention de l\'utilisateur."</string>
+    <!-- no translation found for permlab_read_settings (3452408290738106747) -->
+    <skip />
+    <!-- no translation found for permdesc_read_settings (8377434937176025492) -->
+    <skip />
+    <!-- no translation found for permlab_write_settings (1360567537236705628) -->
+    <skip />
+    <!-- no translation found for permdesc_write_settings (1098648778383349818) -->
+    <skip />
+    <string name="search_hint">"Recherche Google"</string>
+</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
new file mode 100644
index 0000000..d94a156
--- /dev/null
+++ b/res/values-it/strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Home"</string>
+    <string name="folder_name">"Cartella"</string>
+    <string name="chooser_wallpaper">"Seleziona sfondo da"</string>
+    <string name="wallpaper_instructions">"Imposta sfondo"</string>
+    <string name="pick_wallpaper">"Galleria sfondi"</string>
+    <string name="activity_not_found">"Applicazione non installata sul telefono."</string>
+    <!-- no translation found for rename_folder_label (5646236631298452787) -->
+    <skip />
+    <string name="rename_folder_title">"Rinomina cartella"</string>
+    <string name="rename_action">"OK"</string>
+    <string name="cancel_action">"Annulla"</string>
+    <!-- no translation found for menu_item_add_item (6233177331075781114) -->
+    <skip />
+    <string name="group_applications">"Applicazione"</string>
+    <string name="group_shortcuts">"Collegamento"</string>
+    <!-- no translation found for group_live_folders (3057578584715591220) -->
+    <skip />
+    <string name="group_widgets">"Widget"</string>
+    <string name="group_wallpapers">"Sfondo"</string>
+    <string name="add_folder">"Cartella"</string>
+    <string name="add_clock">"Orologio"</string>
+    <string name="add_photo_frame">"Cornice immagini"</string>
+    <string name="add_search">"Ricerca"</string>
+    <string name="out_of_space">"Spazio nella schermata Home esaurito."</string>
+    <string name="menu_add">"Aggiungi"</string>
+    <string name="menu_wallpaper">"Sfondo"</string>
+    <string name="menu_search">"Cerca"</string>
+    <string name="menu_notifications">"Notifiche"</string>
+    <string name="menu_settings">"Impostazioni"</string>
+    <string name="permlab_install_shortcut">"aggiungere collegamenti"</string>
+    <string name="permdesc_install_shortcut">"Consente a un\'applicazione di aggiungere collegamenti automaticamente."</string>
+    <string name="permlab_uninstall_shortcut">"eliminare collegamenti"</string>
+    <string name="permdesc_uninstall_shortcut">"Consente a un\'applicazione di rimuovere collegamenti automaticamente."</string>
+    <!-- no translation found for permlab_read_settings (3452408290738106747) -->
+    <skip />
+    <!-- no translation found for permdesc_read_settings (8377434937176025492) -->
+    <skip />
+    <!-- no translation found for permlab_write_settings (1360567537236705628) -->
+    <skip />
+    <!-- no translation found for permdesc_write_settings (1098648778383349818) -->
+    <skip />
+    <string name="search_hint">"Ricerca Google"</string>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..7657890
--- /dev/null
+++ b/res/values-zh-rCN/strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"主页"</string>
+    <string name="folder_name">"文件夹"</string>
+    <string name="chooser_wallpaper">"选择壁纸"</string>
+    <string name="wallpaper_instructions">"设置壁纸"</string>
+    <string name="pick_wallpaper">"壁纸图库"</string>
+    <string name="activity_not_found">"您的手机上没有安装应用程序。"</string>
+    <!-- no translation found for rename_folder_label (5646236631298452787) -->
+    <skip />
+    <string name="rename_folder_title">"重命名文件夹"</string>
+    <string name="rename_action">"确定"</string>
+    <string name="cancel_action">"取消"</string>
+    <!-- no translation found for menu_item_add_item (6233177331075781114) -->
+    <skip />
+    <string name="group_applications">"应用程序"</string>
+    <string name="group_shortcuts">"快捷键"</string>
+    <!-- no translation found for group_live_folders (3057578584715591220) -->
+    <skip />
+    <string name="group_widgets">"小工具"</string>
+    <string name="group_wallpapers">"壁纸"</string>
+    <string name="add_folder">"文件夹"</string>
+    <string name="add_clock">"时钟"</string>
+    <string name="add_photo_frame">"相框"</string>
+    <string name="add_search">"搜索"</string>
+    <string name="out_of_space">"该“主页”屏幕上没有多余空间。"</string>
+    <string name="menu_add">"添加"</string>
+    <string name="menu_wallpaper">"壁纸"</string>
+    <string name="menu_search">"搜索"</string>
+    <string name="menu_notifications">"通知"</string>
+    <string name="menu_settings">"设置"</string>
+    <string name="permlab_install_shortcut">"安装快捷键"</string>
+    <string name="permdesc_install_shortcut">"允许应用程序在没有用户介入的情况下添加快捷键。"</string>
+    <string name="permlab_uninstall_shortcut">"卸载快捷键"</string>
+    <string name="permdesc_uninstall_shortcut">"允许应用程序在没有用户介入的情况下删除快捷键。"</string>
+    <!-- no translation found for permlab_read_settings (3452408290738106747) -->
+    <skip />
+    <!-- no translation found for permdesc_read_settings (8377434937176025492) -->
+    <skip />
+    <!-- no translation found for permlab_write_settings (1360567537236705628) -->
+    <skip />
+    <!-- no translation found for permdesc_write_settings (1098648778383349818) -->
+    <skip />
+    <string name="search_hint">"Google 搜索"</string>
+</resources>
diff --git a/src/com/android/launcher/HandleView.java b/src/com/android/launcher/HandleView.java
index 437d559..9afe41c 100644
--- a/src/com/android/launcher/HandleView.java
+++ b/src/com/android/launcher/HandleView.java
@@ -49,7 +49,7 @@
     @Override
     public View focusSearch(int direction) {
         View newFocus = super.focusSearch(direction);
-        if (newFocus == null) {
+        if (newFocus == null && mLauncher.isDrawerDown()) {
             final Workspace workspace = mLauncher.getWorkspace();
             workspace.dispatchUnhandledMove(null, direction);
             return (mOrientation == ORIENTATION_HORIZONTAL && direction == FOCUS_DOWN) ?
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 928f4ca..01001c0 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -45,6 +45,7 @@
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.Message;
 import android.provider.*;
 import android.telephony.PhoneNumberUtils;
 import android.text.Selection;
@@ -260,7 +261,7 @@
 
     private void startLoaders() {
         sModel.loadApplications(true, this, mLocaleChanged);
-        sModel.loadUserItems(!mLocaleChanged, this, mLocaleChanged);
+        sModel.loadUserItems(!mLocaleChanged, this, mLocaleChanged, true);
         mRestoring = false;
     }
 
@@ -812,13 +813,13 @@
                 .setIcon(android.R.drawable.ic_menu_add)
                 .setAlphabeticShortcut('A');
         menu.add(0, MENU_WALLPAPER_SETTINGS, 0, R.string.menu_wallpaper)
-                 .setIcon(R.drawable.ic_menu_gallery)
+                 .setIcon(android.R.drawable.ic_menu_gallery)
                  .setAlphabeticShortcut('W');
         menu.add(0, MENU_SEARCH, 0, R.string.menu_search)
                 .setIcon(android.R.drawable.ic_search_category_default)
                 .setAlphabeticShortcut(SearchManager.MENU_KEY);
         menu.add(0, MENU_NOTIFICATIONS, 0, R.string.menu_notifications)
-                .setIcon(R.drawable.ic_menu_notifications)
+                .setIcon(android.R.drawable.ic_menu_notifications)
                 .setAlphabeticShortcut('N');
 
         final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
@@ -826,7 +827,7 @@
                 | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
 
         menu.add(0, MENU_SETTINGS, 0, R.string.menu_settings)
-                .setIcon(R.drawable.ic_menu_preferences).setAlphabeticShortcut('P')
+                .setIcon(android.R.drawable.ic_menu_preferences).setAlphabeticShortcut('P')
                 .setIntent(settings);
 
         return true;
@@ -1111,7 +1112,7 @@
     private void onFavoritesChanged() {
         mDesktopLocked = true;
         mDrawer.lock();
-        sModel.loadUserItems(false, this, false);
+        sModel.loadUserItems(false, this, false, false);
     }
 
     void onDesktopItemsLoaded() {
@@ -1119,7 +1120,80 @@
 
         bindDesktopItems();
         mAllAppsGrid.setAdapter(Launcher.getModel().getApplicationsAdapter());
+    }
 
+    /**
+     * Refreshes the shortcuts shown on the workspace.
+     */
+    private void bindDesktopItems() {
+        final ArrayList<ItemInfo> shortcuts = sModel.getDesktopItems();
+        if (shortcuts == null) {
+            return;
+        }
+
+        final Workspace workspace = mWorkspace;
+        int count = workspace.getChildCount();
+        for (int i = 0; i < count; i++) {
+            ((ViewGroup) workspace.getChildAt(i)).removeAllViewsInLayout();
+        }
+
+        count = shortcuts.size();
+
+        final DesktopItemsBinder binder = new DesktopItemsBinder(this, shortcuts);
+        binder.obtainMessage(DesktopItemsBinder.MESSAGE_BIND_ITEMS, 0, count).sendToTarget();
+    }
+
+    private void bindItems(Launcher.DesktopItemsBinder binder,
+            ArrayList<ItemInfo> shortcuts, int start, int count) {
+
+        final Workspace workspace = mWorkspace;
+        final boolean desktopLocked = mDesktopLocked;
+
+        final int end = Math.min(start + DesktopItemsBinder.ITEMS_COUNT, count);
+        int i = start;
+
+        for ( ; i < end; i++) {
+            final ItemInfo item = shortcuts.get(i);
+            switch (item.itemType) {
+                case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
+                case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
+                    final View shortcut = createShortcut((ApplicationInfo) item);
+                    workspace.addInScreen(shortcut, item.screen, item.cellX, item.cellY, 1, 1,
+                            !desktopLocked);
+                    break;
+                case LauncherSettings.Favorites.ITEM_TYPE_USER_FOLDER:
+                    final FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this,
+                            (ViewGroup) workspace.getChildAt(workspace.getCurrentScreen()),
+                            (UserFolderInfo) item);
+                    workspace.addInScreen(newFolder, item.screen, item.cellX, item.cellY, 1, 1,
+                            !desktopLocked);
+                    break;
+                case LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER:
+                    final FolderIcon newLiveFolder = LiveFolderIcon.fromXml(
+                            R.layout.live_folder_icon, this,
+                            (ViewGroup) workspace.getChildAt(workspace.getCurrentScreen()),
+                            (LiveFolderInfo) item);
+                    workspace.addInScreen(newLiveFolder, item.screen, item.cellX, item.cellY, 1, 1,
+                            !desktopLocked);
+                    break;
+                default:
+                    final Widget widget = (Widget) item;
+                    final View view = createWidget(mInflater, widget);
+                    view.setTag(widget);
+                    workspace.addWidget(view, widget, !desktopLocked);
+            }
+        }
+
+        workspace.requestLayout();
+
+        if (end >= count) {
+            finishBindDesktopItems();
+        } else {
+            binder.obtainMessage(DesktopItemsBinder.MESSAGE_BIND_ITEMS, i, count).sendToTarget();
+        }
+    }
+
+    private void finishBindDesktopItems() {
         if (mSavedState != null) {
             mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus();
 
@@ -1152,57 +1226,6 @@
         mDrawer.unlock();
     }
 
-    /**
-     * Refreshes the shortcuts shown on the workspace.
-     */
-    private void bindDesktopItems() {
-        final ArrayList<ItemInfo> shortcuts = sModel.getDesktopItems();
-        if (shortcuts == null) {
-            return;
-        }
-
-        final Workspace workspace = mWorkspace;
-        int count = workspace.getChildCount();
-        for (int i = 0; i < count; i++) {
-            ((ViewGroup) workspace.getChildAt(i)).removeAllViewsInLayout();
-        }
-
-        count = shortcuts.size();
-        for (int i = 0; i < count; i++) {
-            final ItemInfo item = shortcuts.get(i);
-            switch (item.itemType) {
-            case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
-            case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
-                final View shortcut = createShortcut((ApplicationInfo) item);
-                workspace.addInScreen(shortcut, item.screen, item.cellX, item.cellY, 1, 1,
-                        !mDesktopLocked);
-                break;
-            case LauncherSettings.Favorites.ITEM_TYPE_USER_FOLDER:
-                final FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this,
-                        (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentScreen()),
-                        ((UserFolderInfo) item));
-                workspace.addInScreen(newFolder, item.screen, item.cellX, item.cellY, 1, 1,
-                        !mDesktopLocked);
-                break;
-            case LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER:
-                final FolderIcon newLiveFolder = LiveFolderIcon.fromXml(
-                        R.layout.live_folder_icon, this,
-                        (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentScreen()),
-                        ((LiveFolderInfo) item));
-                workspace.addInScreen(newLiveFolder, item.screen, item.cellX, item.cellY, 1, 1,
-                        !mDesktopLocked);
-                break;
-            default:
-                final Widget widget = (Widget)item;
-                final View view = createWidget(mInflater, widget);
-                view.setTag(widget);
-                workspace.addWidget(view, widget, !mDesktopLocked);
-            }
-        }
-
-        workspace.requestLayout();
-    }
-
     private View createWidget(LayoutInflater inflater, Widget widget) {
         final Workspace workspace = mWorkspace;
         final int screen = workspace.getCurrentScreen();
@@ -1456,7 +1479,7 @@
 
                 if (mDesktopLocked) {
                     mDrawer.lock();
-                    sModel.loadUserItems(false, Launcher.this, false);
+                    sModel.loadUserItems(false, Launcher.this, false, false);
                 } else {
                     final FolderIcon folderIcon = (FolderIcon)
                             mWorkspace.getViewForTag(mFolderInfo);
@@ -1466,7 +1489,7 @@
                     } else {
                         mDesktopLocked = true;
                         mDrawer.lock();
-                        sModel.loadUserItems(false, Launcher.this, false);
+                        sModel.loadUserItems(false, Launcher.this, false, false);
                     }
                 }
             }
@@ -1635,4 +1658,28 @@
         public void onScrollEnded() {
         }
     }
+
+    private static class DesktopItemsBinder extends Handler {
+        static final int MESSAGE_BIND_ITEMS = 0x1;
+        // Number of items to bind in every pass
+        static final int ITEMS_COUNT = 6;
+
+        private final ArrayList<ItemInfo> mShortcuts;
+        private final WeakReference<Launcher> mLauncher;
+
+        DesktopItemsBinder(Launcher launcher, ArrayList<ItemInfo> shortcuts) {
+            mLauncher = new WeakReference<Launcher>(launcher);
+            mShortcuts = shortcuts;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_BIND_ITEMS:
+                    Launcher launcher = mLauncher.get();
+                    if (launcher != null) launcher.bindItems(this, mShortcuts, msg.arg1, msg.arg2);
+                    break;
+            }
+        }
+    }
 }
diff --git a/src/com/android/launcher/LauncherModel.java b/src/com/android/launcher/LauncherModel.java
index 0ef2a80..314a502 100644
--- a/src/com/android/launcher/LauncherModel.java
+++ b/src/com/android/launcher/LauncherModel.java
@@ -28,9 +28,9 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.drawable.BitmapDrawable;
 import android.net.Uri;
 import android.util.Log;
+import android.os.Process;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -45,7 +45,6 @@
  * Maintains in-memory state of the Launcher. It is expected that there should be only one
  * LauncherModel object held in a static. Also provide APIs for updating the database state
  * for the Launcher
- *
  */
 public class LauncherModel {
     private static final int UI_NOTIFICATION_RATE = 4;
@@ -104,6 +103,13 @@
         }
 
         mApplicationsLoaded = false;
+
+        if (!isLaunching) {
+            startApplicationsLoader(launcher);
+        }
+    }
+
+    private void startApplicationsLoader(Launcher launcher) {
         mApplicationsLoader = new ApplicationsLoader(launcher);
         mLoader = new Thread(mApplicationsLoader, "Applications Loader");
         mLoader.start();
@@ -130,6 +136,8 @@
         public void run() {
             mRunning = true;
 
+            android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+
             Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
             mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 
@@ -221,8 +229,11 @@
      * Loads all of the items on the desktop, in folders, or in the dock.
      * These can be apps, shortcuts or widgets
      */
-    void loadUserItems(boolean isLaunching, Launcher launcher, boolean localeChanged) {
+    void loadUserItems(boolean isLaunching, Launcher launcher, boolean localeChanged,
+            boolean loadApplications) {
+
         if (isLaunching && mDesktopItems != null && mDesktopItemsLoaded) {
+            if (loadApplications) startApplicationsLoader(launcher);
             // We have already loaded our data from the DB
             launcher.onDesktopItemsLoaded();
             return;
@@ -240,7 +251,7 @@
         }
 
         mDesktopItemsLoaded = false;
-        mDesktopItemsLoader = new DesktopItemsLoader(launcher, localeChanged);
+        mDesktopItemsLoader = new DesktopItemsLoader(launcher, localeChanged, loadApplications);
         mDesktopLoader = new Thread(mDesktopItemsLoader, "Desktop Items Loader");
         mDesktopLoader.start();
     }
@@ -317,9 +328,11 @@
         private volatile boolean mRunning;
 
         private final WeakReference<Launcher> mLauncher;
-        private boolean mLocaleChanged;
+        private final boolean mLocaleChanged;
+        private final boolean mLoadApplications;
 
-        DesktopItemsLoader(Launcher launcher, boolean localeChanged) {
+        DesktopItemsLoader(Launcher launcher, boolean localeChanged, boolean loadApplications) {
+            mLoadApplications = loadApplications;
             mLauncher = new WeakReference<Launcher>(launcher);
             mLocaleChanged = localeChanged;
         }
@@ -532,6 +545,7 @@
                         launcher.onDesktopItemsLoaded();
                     }
                 });
+                if (mLoadApplications) startApplicationsLoader(launcher);
             }
 
             if (!mStopped) {
