diff --git a/res/anim/widget_chooser_slide_up.xml b/res/anim/home_customization_drawer_slide_down.xml
similarity index 86%
copy from res/anim/widget_chooser_slide_up.xml
copy to res/anim/home_customization_drawer_slide_down.xml
index b43ec36..b3041c7 100644
--- a/res/anim/widget_chooser_slide_up.xml
+++ b/res/anim/home_customization_drawer_slide_down.xml
@@ -16,8 +16,7 @@
 <translate xmlns:android="http://schemas.android.com/apk/res/android"
     android:fromXDelta="0%p"
     android:toXDelta="0%p"
-    android:fromYDelta="100%p"
-    android:toYDelta="0%p"
+    android:fromYDelta="0%p"
+    android:toYDelta="100%p"
 
-    android:duration="500"
-    android:fillAfter="true" />
+    android:duration="500" />
diff --git a/res/anim/widget_chooser_slide_up.xml b/res/anim/home_customization_drawer_slide_up.xml
similarity index 93%
rename from res/anim/widget_chooser_slide_up.xml
rename to res/anim/home_customization_drawer_slide_up.xml
index b43ec36..3df2320 100644
--- a/res/anim/widget_chooser_slide_up.xml
+++ b/res/anim/home_customization_drawer_slide_up.xml
@@ -19,5 +19,4 @@
     android:fromYDelta="100%p"
     android:toYDelta="0%p"
 
-    android:duration="500"
-    android:fillAfter="true" />
+    android:duration="500" />
diff --git a/res/layout-xlarge/launcher.xml b/res/layout-xlarge/launcher.xml
index 17a5b84..ce864c2 100644
--- a/res/layout-xlarge/launcher.xml
+++ b/res/layout-xlarge/launcher.xml
@@ -39,54 +39,83 @@
         <include android:id="@+id/cell5" layout="@layout/workspace_screen" />
     </com.android.launcher2.Workspace>
 
-    <com.android.launcher2.DeleteZone
-        android:id="@+id/delete_zone"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/delete_zone_padding"
-        android:layout_gravity="top|right"
 
-        android:scaleType="center"
-        android:src="@drawable/delete_zone_selector"
-        android:visibility="gone"
-        launcher:direction="horizontal"
-        />
-    <ImageView
-        android:id="@+id/add_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/delete_zone_padding"
-        android:layout_gravity="top|right"
-
-        android:scaleType="center"
-        android:src="@drawable/add_button"
-
-        android:onClick="onClickAddButton"
-        android:focusable="true"
-        android:clickable="true" />
 
     <RelativeLayout
         android:id="@+id/all_apps_button_cluster"
-        android:layout_width="@dimen/button_bar_height"
-        android:layout_height="@dimen/button_bar_height"
-        android:layout_gravity="top|left"
-        android:paddingTop="2dip"
-        >
-       <com.android.launcher2.HandleView
-           style="@style/HotseatButton"
-           android:id="@+id/all_apps_button"
-           android:layout_centerHorizontal="true"
-           android:layout_alignParentBottom="true"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="top|right">
+        <com.android.launcher2.HandleView
+            style="@style/HotseatButton"
+            android:id="@+id/all_apps_button"
+            android:layout_width="@dimen/button_bar_height"
 
-           android:src="@drawable/all_apps_button"
-           launcher:direction="horizontal"
-           />
+            android:src="@drawable/all_apps_button"
+            launcher:direction="horizontal"  />
+        <ImageView
+            android:id="@+id/add_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toRightOf="@id/all_apps_button"
+
+            android:layout_centerVertical="true"
+            android:scaleType="center"
+            android:src="@drawable/add_button"
+
+            android:onClick="onClickAddButton"
+            android:focusable="true"
+            android:clickable="true" />
+        <com.android.launcher2.DeleteZone
+            android:id="@+id/delete_zone"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingTop="@dimen/delete_zone_padding"
+            android:layout_toRightOf="@id/all_apps_button"
+
+            android:scaleType="center"
+            android:src="@drawable/delete_zone_selector"
+            android:visibility="gone"
+            launcher:direction="horizontal" />
     </RelativeLayout>
-    <com.android.launcher2.WidgetChooser
-        android:id="@+id/widget_chooser"
+
+    <TabHost
+        android:id="@android:id/tabhost"
         android:layout_width="match_parent"
-        android:layout_height="100dip"
+        android:layout_height="200dip"
         android:layout_gravity="bottom"
-        android:visibility="gone"
-        />
+        android:visibility="gone">
+      <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+         <TabWidget
+           android:id="@android:id/tabs"
+           android:layout_width="match_parent"
+           android:layout_height="wrap_content" />
+         <FrameLayout
+           android:id="@android:id/tabcontent"
+           android:background="#ff000000"
+           android:layout_width="match_parent"
+           android:layout_height="match_parent">
+           <com.android.launcher2.WidgetChooser
+             android:id="@+id/widget_chooser"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent" />
+           <com.android.launcher2.FolderChooser
+             android:id="@+id/folder_chooser"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent" />
+           <com.android.launcher2.ShortcutChooser
+             android:id="@+id/shortcut_chooser"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent" />
+           <TextView
+             android:id="@+id/wallpaperstab"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent"
+             android:text="@string/wallpapers_temp_tab_text" />
+          </FrameLayout>
+        </LinearLayout>
+    </TabHost>
 </com.android.launcher2.DragLayer>
diff --git a/res/layout/widget_item.xml b/res/layout/home_customization_drawer_item.xml
similarity index 68%
rename from res/layout/widget_item.xml
rename to res/layout/home_customization_drawer_item.xml
index c79bd31..e3d20a1 100644
--- a/res/layout/widget_item.xml
+++ b/res/layout/home_customization_drawer_item.xml
@@ -14,9 +14,11 @@
      limitations under the License.
 -->
 
-<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:background="?android:attr/galleryItemBackground"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:scaleType="fitXY"
-    android:focusable="true" />
+    android:layout_width="200dip"
+    android:layout_height="match_parent"
+    android:padding="20dip"
+    android:orientation="vertical"
+    android:gravity="center_horizontal|center_vertical|clip_vertical"
+    android:textAppearance="?android:attr/textAppearanceMedium" />
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 86c1b3c..f61871d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -43,6 +43,11 @@
     <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>
+    <string name="widgets_tab_label">Widgets</string>
+    <string name="folders_tab_label">Folders</string>
+    <string name="shortcuts_tab_label">Shortcuts</string>
+    <string name="wallpapers_tab_label">Wallpapers</string>
+    <string name="wallpapers_temp_tab_text">This will be the wallpapers tab</string>
 
     <!-- Folders -->
     <skip />
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index d69c56f..1d45565 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -1104,7 +1104,9 @@
 
             boolean found = false;
 
-            if (this.spanX >= spanX && this.spanY >= spanY) {
+            // return the span represented by the CellInfo only there is no view there
+            //   (this.cell == null) and there is enough space
+            if (this.cell == null && this.spanX >= spanX && this.spanY >= spanY) {
                 cellXY[0] = cellX;
                 cellXY[1] = cellY;
                 found = true;
diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java
index c683207..ab71670 100644
--- a/src/com/android/launcher2/DragLayer.java
+++ b/src/com/android/launcher2/DragLayer.java
@@ -18,13 +18,13 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.view.MotionEvent;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.FrameLayout;
 
 /**
- * A ViewGroup that coordinated dragging across its dscendants
+ * A ViewGroup that coordinates dragging across its descendants
  */
 public class DragLayer extends FrameLayout {
     DragController mDragController;
@@ -33,7 +33,7 @@
      * Used to create a new DragLayer from XML.
      *
      * @param context The application's context.
-     * @param attrs The attribtues set containing the Workspace's customization values.
+     * @param attrs The attributes set containing the Workspace's customization values.
      */
     public DragLayer(Context context, AttributeSet attrs) {
         super(context, attrs);
diff --git a/src/com/android/launcher2/FolderChooser.java b/src/com/android/launcher2/FolderChooser.java
new file mode 100644
index 0000000..b152ad5
--- /dev/null
+++ b/src/com/android/launcher2/FolderChooser.java
@@ -0,0 +1,37 @@
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.provider.LiveFolders;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.AdapterView;
+
+public class FolderChooser extends HomeCustomizationItemGallery {
+
+    public FolderChooser(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+        // todo: this code sorta overlaps with other places
+        ResolveInfo info = (ResolveInfo)getAdapter().getItem(position);
+        mLauncher.prepareAddItemFromHomeCustomizationDrawer();
+
+        Intent createFolderIntent = new Intent(LiveFolders.ACTION_CREATE_LIVE_FOLDER);
+        if (info.labelRes == R.string.group_folder) {
+            // Create app shortcuts is a special built-in case of shortcuts
+            createFolderIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getContext().getString(R.string.group_folder));
+        } else {
+            ComponentName name = new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
+            createFolderIntent.setComponent(name);
+        }
+        mLauncher.addLiveFolder(createFolderIntent);
+
+        return true;
+    }
+}
diff --git a/src/com/android/launcher2/FolderListAdapter.java b/src/com/android/launcher2/FolderListAdapter.java
new file mode 100644
index 0000000..bdfeaeb
--- /dev/null
+++ b/src/com/android/launcher2/FolderListAdapter.java
@@ -0,0 +1,20 @@
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.Context;
+import android.content.pm.ResolveInfo;
+
+public class FolderListAdapter extends IntentListAdapter {
+
+    public FolderListAdapter(Context context, String actionFilter) {
+        super(context, actionFilter);
+
+        // Manually create a separate entry for creating a folder in Launcher
+        ResolveInfo folder = new ResolveInfo();
+        folder.icon = R.drawable.ic_launcher_folder;
+        folder.labelRes = R.string.group_folder;
+        folder.resolvePackageName = context.getPackageName();
+        mIntentList.add(0, folder);
+    }
+}
diff --git a/src/com/android/launcher2/HomeCustomizationItemGallery.java b/src/com/android/launcher2/HomeCustomizationItemGallery.java
new file mode 100644
index 0000000..df64d5e
--- /dev/null
+++ b/src/com/android/launcher2/HomeCustomizationItemGallery.java
@@ -0,0 +1,50 @@
+package com.android.launcher2;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.Gallery;
+
+public abstract class HomeCustomizationItemGallery extends Gallery
+    implements Gallery.OnItemLongClickListener {
+
+    protected Context mContext;
+
+    protected Launcher mLauncher;
+
+    protected int mMotionDownRawX;
+    protected int mMotionDownRawY;
+
+    public HomeCustomizationItemGallery(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setLongClickable(true);
+        setOnItemLongClickListener(this);
+        mContext = context;
+
+        setCallbackDuringFling(false);
+    }
+
+    public void setLauncher(Launcher launcher) {
+        mLauncher = launcher;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN && mLauncher.isAllAppsVisible()) {
+            return false;
+        }
+
+        super.onTouchEvent(ev);
+
+        int x = (int) ev.getX();
+        int y = (int) ev.getY();
+
+        switch (ev.getAction()) {
+        case MotionEvent.ACTION_DOWN:
+            mMotionDownRawX = (int) ev.getRawX();
+            mMotionDownRawY = (int) ev.getRawY();
+        }
+        return true;
+    }
+}
+
diff --git a/src/com/android/launcher2/IntentListAdapter.java b/src/com/android/launcher2/IntentListAdapter.java
new file mode 100644
index 0000000..7ebffd4
--- /dev/null
+++ b/src/com/android/launcher2/IntentListAdapter.java
@@ -0,0 +1,67 @@
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+import android.provider.LiveFolders;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.util.List;
+
+public class IntentListAdapter extends BaseAdapter {
+    private LayoutInflater mLayoutInflater;
+    private PackageManager mPackageManager;
+    protected List<ResolveInfo> mIntentList;
+
+    public IntentListAdapter(Context context, String actionFilter) {
+        mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mPackageManager = context.getPackageManager();
+
+        Intent createLiveFolderIntent = new Intent(actionFilter);
+        mIntentList = mPackageManager.queryIntentActivities(createLiveFolderIntent, 0);
+    }
+
+    public int getCount() {
+        return mIntentList.size();
+    }
+
+    public Object getItem(int position) {
+        return mIntentList.get(position);
+    }
+
+    public long getItemId(int position) {
+        return position;
+    }
+
+    public View getView(int position, View convertView, ViewGroup parent) {
+        TextView textView;
+
+        if (convertView == null) {
+            textView = (TextView) mLayoutInflater.inflate(
+                    R.layout.home_customization_drawer_item, parent, false);
+        } else {
+            textView = (TextView) convertView;
+        }
+
+        ResolveInfo info = mIntentList.get(position);
+        Drawable image = info.loadIcon(mPackageManager);
+        image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
+        textView.setCompoundDrawables(null, image, null, null);
+
+        CharSequence label = info.loadLabel(mPackageManager);
+        textView.setText(label);
+
+        return textView;
+    }
+}
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 69911a7..e413a70 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -16,19 +16,14 @@
 
 package com.android.launcher2;
 
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import com.android.common.Search;
+import com.android.launcher.R;
 
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.SearchManager;
 import android.app.StatusBarManager;
+import android.app.TabActivity;
 import android.app.WallpaperManager;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
@@ -71,27 +66,37 @@
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
+import android.widget.TabHost;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.android.common.Search;
-import com.android.launcher.R;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * Default launcher application.
  */
-public final class Launcher extends Activity
-        implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks, AllAppsView.Watcher {
+public final class Launcher extends TabActivity
+        implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,
+                   AllAppsView.Watcher, View.OnTouchListener {
     static final String TAG = "Launcher";
     static final boolean LOGD = false;
 
@@ -183,7 +188,7 @@
     private DeleteZone mDeleteZone;
     private HandleView mHandleView;
     private AllAppsView mAllAppsGrid;
-    private WidgetChooser mWidgetChooser;
+    private TabHost mHomeCustomizationDrawer;
 
     private Bundle mSavedState;
 
@@ -243,6 +248,22 @@
         setWallpaperDimension();
         setContentView(R.layout.launcher);
 
+        mHomeCustomizationDrawer = getTabHost();
+
+        String widgetsLabel = getString(R.string.widgets_tab_label);
+        mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec("widgets")
+                .setIndicator(widgetsLabel).setContent(R.id.widget_chooser));
+        String foldersLabel = getString(R.string.folders_tab_label);
+        mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec("folders")
+                .setIndicator(foldersLabel).setContent(R.id.folder_chooser));
+        String shortcutsLabel = getString(R.string.shortcuts_tab_label);
+        mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec("shortcuts")
+                .setIndicator(shortcutsLabel).setContent(R.id.shortcut_chooser));
+        String wallpapersLabel = getString(R.string.wallpapers_tab_label);
+        mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec("wallpapers")
+                .setIndicator(wallpapersLabel).setContent(R.id.wallpaperstab));
+
+        mHomeCustomizationDrawer.setCurrentTab(0);
         setupViews();
 
         registerContentObservers();
@@ -562,8 +583,6 @@
                     break;
                 case REQUEST_CREATE_APPWIDGET:
                     int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
-                    // TODO: Is this log message meaningful?
-                    if (LOGD) Log.d(TAG, "dumping extras content=" + data.getExtras());
                     completeAddAppWidget(appWidgetId, mAddItemCellInfo);
                     break;
                 case REQUEST_PICK_WALLPAPER:
@@ -739,6 +758,7 @@
         mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
         final Workspace workspace = mWorkspace;
         workspace.setHapticFeedbackEnabled(false);
+        workspace.setOnInterceptTouchListener(this);
 
         DeleteZone deleteZone = (DeleteZone) dragLayer.findViewById(R.id.delete_zone);
         mDeleteZone = deleteZone;
@@ -748,10 +768,22 @@
         mHandleView.setOnClickListener(this);
         mHandleView.setOnLongClickListener(this);
 
-        mWidgetChooser = (WidgetChooser) findViewById(R.id.widget_chooser);
-        if (mWidgetChooser != null) {
-            mWidgetChooser.setDragController(dragController);
-            mWidgetChooser.setLauncher(this);
+        WidgetChooser widgetChooser = (WidgetChooser) findViewById(R.id.widget_chooser);
+        if (widgetChooser != null) {
+            WidgetListAdapter widgetGalleryAdapter = new WidgetListAdapter(this);
+            widgetChooser.setAdapter(widgetGalleryAdapter);
+            widgetChooser.setDragController(dragController);
+            widgetChooser.setLauncher(this);
+
+            FolderChooser folderChooser = (FolderChooser) findViewById(R.id.folder_chooser);
+            IntentListAdapter folderTypes = new FolderListAdapter(this, LiveFolders.ACTION_CREATE_LIVE_FOLDER);
+            folderChooser.setAdapter(folderTypes);
+            folderChooser.setLauncher(this);
+
+            ShortcutChooser shortcutChooser = (ShortcutChooser) findViewById(R.id.shortcut_chooser);
+            IntentListAdapter shortcutTypes = new ShortcutListAdapter(this, Intent.ACTION_CREATE_SHORTCUT);
+            shortcutChooser.setAdapter(shortcutTypes);
+            shortcutChooser.setLauncher(this);
         } else {
              ImageView hotseatLeft = (ImageView) findViewById(R.id.hotseat_left);
              hotseatLeft.setContentDescription(mHotseatLabels[0]);
@@ -1161,6 +1193,13 @@
         return true;
     }
 
+    // we need to initialize mAddItemCellInfo before adding something to the homescreen -- when
+    // using the settings menu to add an item, something similar happens in showAddDialog
+    public void prepareAddItemFromHomeCustomizationDrawer() {
+        mMenuAddInfo = mWorkspace.findAllVacantCells(null);
+        mAddItemCellInfo = mMenuAddInfo;
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
@@ -1502,6 +1541,29 @@
         }
     }
 
+    private final class SlideDownFinishedListener implements Animation.AnimationListener {
+        TabHost mHomeCustomizationDrawer;
+        SlideDownFinishedListener(TabHost homeCustomizationDrawer) {
+            mHomeCustomizationDrawer = homeCustomizationDrawer;
+        }
+        public void onAnimationEnd(Animation animation) {
+            mHomeCustomizationDrawer.setVisibility(View.GONE);
+        }
+        public void onAnimationRepeat(Animation animation) {}
+        public void onAnimationStart(Animation animation) {}
+    }
+
+    public boolean onTouch(View v, MotionEvent event) {
+        // this is being forwarded from mWorkspace;
+        // clicking anywhere on the workspace causes the drawer to slide down
+        if (mHomeCustomizationDrawer.getVisibility() == View.VISIBLE) {
+            Animation slideDownAnimation = AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_down);
+            slideDownAnimation.setAnimationListener(new SlideDownFinishedListener(mHomeCustomizationDrawer));
+            mHomeCustomizationDrawer.startAnimation(slideDownAnimation);
+        }
+        return false;
+    }
+
     /**
      * Event handler for the "plus" button that appears on the home screen, which
      * enters home screen customization mode.
@@ -1509,11 +1571,12 @@
      * @param v The view that was clicked.
      */
     public void onClickAddButton(View v) {
-        View widgetChooser = findViewById(R.id.widget_chooser);
-        widgetChooser.setVisibility(View.VISIBLE);
 
         // Animate the widget chooser up from the bottom of the screen
-        widgetChooser.startAnimation(AnimationUtils.loadAnimation(this, R.anim.widget_chooser_slide_up));
+        if (mHomeCustomizationDrawer.getVisibility() == View.GONE) {
+            mHomeCustomizationDrawer.setVisibility(View.VISIBLE);
+            mHomeCustomizationDrawer.startAnimation(AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_up));
+        }
     }
 
     public void onClickAllAppsButton(View w) {
@@ -1841,6 +1904,7 @@
     }
 
     private void pickShortcut() {
+        // Insert extra item to handle picking application
         Bundle bundle = new Bundle();
 
         ArrayList<String> shortcutNames = new ArrayList<String>();
@@ -2070,7 +2134,6 @@
 
             switch (which) {
                 case AddAdapter.ITEM_SHORTCUT: {
-                    // Insert extra item to handle picking application
                     pickShortcut();
                     break;
                 }
diff --git a/src/com/android/launcher2/ShortcutChooser.java b/src/com/android/launcher2/ShortcutChooser.java
new file mode 100644
index 0000000..1e3e5d0
--- /dev/null
+++ b/src/com/android/launcher2/ShortcutChooser.java
@@ -0,0 +1,37 @@
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.AdapterView;
+
+public class ShortcutChooser extends HomeCustomizationItemGallery {
+
+    public ShortcutChooser(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+        // todo: this code sorta overlaps with other places
+        ResolveInfo info = (ResolveInfo)getAdapter().getItem(position);
+        mLauncher.prepareAddItemFromHomeCustomizationDrawer();
+
+        Intent createShortcutIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
+        if (info.labelRes == R.string.group_applications) {
+            // Create app shortcuts is a special built-in case of shortcuts
+            createShortcutIntent.putExtra(
+                    Intent.EXTRA_SHORTCUT_NAME,getContext().getString(R.string.group_applications));
+        } else {
+            ComponentName name = new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
+            createShortcutIntent.setComponent(name);
+        }
+        mLauncher.processShortcut(createShortcutIntent);
+
+        return true;
+    }
+}
diff --git a/src/com/android/launcher2/ShortcutListAdapter.java b/src/com/android/launcher2/ShortcutListAdapter.java
new file mode 100644
index 0000000..be05ca4
--- /dev/null
+++ b/src/com/android/launcher2/ShortcutListAdapter.java
@@ -0,0 +1,26 @@
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.Intent.ShortcutIconResource;
+import android.content.pm.ResolveInfo;
+
+import java.util.ArrayList;
+
+
+public class ShortcutListAdapter extends IntentListAdapter {
+
+    public ShortcutListAdapter(Context context, String actionFilter) {
+        super(context, actionFilter);
+
+        // Manually create a separate entry for creating an Application shortcut
+        ResolveInfo folder = new ResolveInfo();
+
+        folder.icon = R.drawable.ic_launcher_application;
+        folder.labelRes = R.string.group_applications;
+        folder.resolvePackageName = context.getPackageName();
+        mIntentList.add(0, folder);
+    }
+}
diff --git a/src/com/android/launcher2/WidgetChooser.java b/src/com/android/launcher2/WidgetChooser.java
index fc354d7..4718c6c 100644
--- a/src/com/android/launcher2/WidgetChooser.java
+++ b/src/com/android/launcher2/WidgetChooser.java
@@ -6,52 +6,23 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
-import android.view.MotionEvent;
 import android.view.View;
 import android.widget.AdapterView;
-import android.widget.Gallery;
 
-public class WidgetChooser extends Gallery
-    implements Gallery.OnItemLongClickListener, DragSource {
-
-    Context mContext;
-
-    private Launcher mLauncher;
+public class WidgetChooser extends HomeCustomizationItemGallery implements DragSource {
     private DragController mDragController;
-    private WidgetGalleryAdapter mWidgetGalleryAdapter;
-
-    private int mMotionDownRawX;
-    private int mMotionDownRawY;
 
     public WidgetChooser(Context context, AttributeSet attrs) {
         super(context, attrs);
-        setLongClickable(true);
-        setOnItemLongClickListener(this);
-        mContext = context;
-
-        setCallbackDuringFling(false);
-
-        mWidgetGalleryAdapter = new WidgetGalleryAdapter(context);
-        setAdapter(mWidgetGalleryAdapter);
-    }
-
-    public void onDropCompleted(View target, boolean success) {
-        // TODO Auto-generated method stub
-
     }
 
     public void setDragController(DragController dragger) {
         mDragController = dragger;
     }
 
-    public void setLauncher(Launcher launcher) {
-        mLauncher = launcher;
-    }
-
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
-        AppWidgetProviderInfo info = (AppWidgetProviderInfo)mWidgetGalleryAdapter.getItem(position);
+        AppWidgetProviderInfo info = (AppWidgetProviderInfo)getAdapter().getItem(position);
         try {
             Resources r = mContext.getPackageManager().getResourcesForApplication(info.provider.getPackageName());
 
@@ -73,22 +44,7 @@
         }
     }
 
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN && mLauncher.isAllAppsVisible()) {
-            return false;
-        }
-
-        super.onTouchEvent(ev);
-
-        int x = (int) ev.getX();
-        int y = (int) ev.getY();
-
-        switch (ev.getAction()) {
-        case MotionEvent.ACTION_DOWN:
-            mMotionDownRawX = (int) ev.getRawX();
-            mMotionDownRawY = (int) ev.getRawY();
-        }
-        return true;
+    public void onDropCompleted(View target, boolean success) {
     }
 }
+
diff --git a/src/com/android/launcher2/WidgetGalleryAdapter.java b/src/com/android/launcher2/WidgetListAdapter.java
similarity index 81%
rename from src/com/android/launcher2/WidgetGalleryAdapter.java
rename to src/com/android/launcher2/WidgetListAdapter.java
index bdb3551..5a569ea 100644
--- a/src/com/android/launcher2/WidgetGalleryAdapter.java
+++ b/src/com/android/launcher2/WidgetListAdapter.java
@@ -29,16 +29,18 @@
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import java.util.List;
 
-public class WidgetGalleryAdapter extends BaseAdapter {
+public class WidgetListAdapter extends BaseAdapter {
     private LayoutInflater mLayoutInflater;
     private PackageManager mPackageManager;
     private List<AppWidgetProviderInfo> mWidgets;
     private static final String TAG = "Launcher.WidgetGalleryAdapter";
 
-    WidgetGalleryAdapter(Context context) {
+    WidgetListAdapter(Context context) {
         mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
         mWidgets = widgetManager.getInstalledProviders();
@@ -58,12 +60,13 @@
     }
 
     public View getView(int position, View convertView, ViewGroup parent) {
-        ImageView imageView;
+        TextView textView;
 
         if (convertView == null) {
-            imageView = (ImageView) mLayoutInflater.inflate(R.layout.widget_item, parent, false);
+            textView = (TextView) mLayoutInflater.inflate(
+                    R.layout.home_customization_drawer_item, parent, false);
         } else {
-            imageView = (ImageView) convertView;
+            textView = (TextView) convertView;
         }
 
         AppWidgetProviderInfo info = mWidgets.get(position);
@@ -79,8 +82,10 @@
         if (image == null) {
             image = mPackageManager.getDrawable(info.provider.getPackageName(), info.icon, null);
         }
-        imageView.setImageDrawable(image);
+        image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
+        textView.setCompoundDrawables(null, image, null, null);
+        textView.setText(info.label);
 
-        return imageView;
+        return textView;
     }
 }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 0f41cc9..57195ad 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -48,6 +48,7 @@
 import android.view.animation.Animation.AnimationListener;
 import android.widget.Scroller;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -97,6 +98,7 @@
 
     private int mTouchState = TOUCH_STATE_REST;
 
+    private OnTouchListener mInterceptTouchListener;
     private OnLongClickListener mLongClickListener;
 
     private Launcher mLauncher;
@@ -512,6 +514,10 @@
         }
     }
 
+    public void setOnInterceptTouchListener(View.OnTouchListener listener) {
+        mInterceptTouchListener = listener;
+    }
+
     /**
      * Registers the specified listener on each screen contained in this workspace.
      *
@@ -747,6 +753,9 @@
 
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
+        if (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev)) {
+            return true;
+        }
         final boolean workspaceLocked = mLauncher.isWorkspaceLocked();
         final boolean allAppsVisible = mLauncher.isAllAppsVisible();
         if (workspaceLocked || allAppsVisible) {
@@ -1289,7 +1298,12 @@
             mVacantCache = layout.findAllVacantCells(null, ignoreView);
         }
 
-        return mVacantCache.findCellForSpan(mTempEstimate, spanX, spanY, false);
+        if (mVacantCache.findCellForSpan(mTempEstimate, spanX, spanY, false)) {
+            return true;
+        } else {
+            Toast.makeText(getContext(), getContext().getString(R.string.out_of_space), Toast.LENGTH_SHORT).show();
+            return false;
+        }
     }
 
     /**
