diff --git a/res/layout/home_customization_drawer_item.xml b/res/layout/home_customization_drawer_item.xml
index 2ef527d..4d61dbf 100644
--- a/res/layout/home_customization_drawer_item.xml
+++ b/res/layout/home_customization_drawer_item.xml
@@ -15,10 +15,10 @@
 -->
 
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:background="?android:attr/galleryItemBackground"
-    android:layout_width="600dip"
-    android:layout_height="match_parent"
+    android:layout_width="200dip"
+    android:layout_height="200dip"
     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
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:textColor="#ffffffff" />
\ No newline at end of file
diff --git a/res/layout/home_customization_drawer_widget.xml b/res/layout/home_customization_drawer_widget.xml
new file mode 100644
index 0000000..1581308
--- /dev/null
+++ b/res/layout/home_customization_drawer_widget.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="600dip"
+    android:layout_height="match_parent"
+    android:padding="20dip"
+    android:orientation="vertical"
+    android:gravity="center_horizontal|center_vertical|clip_vertical"
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:textColor="#ffffffff" />
\ No newline at end of file
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index feb247e..1a085a3 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -778,12 +778,14 @@
             widgetChooser.setLauncher(this);
 
             FolderChooser folderChooser = (FolderChooser) findViewById(R.id.folder_chooser);
-            IntentListAdapter folderTypes = new FolderListAdapter(this, LiveFolders.ACTION_CREATE_LIVE_FOLDER);
+            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);
+            IntentListAdapter shortcutTypes = new IntentListAdapter(
+                    this, Intent.ACTION_CREATE_SHORTCUT);
             shortcutChooser.setAdapter(shortcutTypes);
             shortcutChooser.setLauncher(this);
         } else {
@@ -813,7 +815,12 @@
 
         deleteZone.setLauncher(this);
         deleteZone.setDragController(dragController);
-        int deleteZoneHandleId = LauncherApplication.isScreenXLarge() ? R.id.add_button : R.id.all_apps_button_cluster;
+        int deleteZoneHandleId;
+        if (LauncherApplication.isScreenXLarge()) {
+            deleteZoneHandleId = R.id.add_button;
+        } else {
+            deleteZoneHandleId = R.id.all_apps_button_cluster;
+        }
         deleteZone.setHandle(findViewById(deleteZoneHandleId));
 
         dragController.setDragScoller(workspace);
@@ -2121,7 +2128,8 @@
     }
 
     private boolean isCustomizationDrawerVisible() {
-        return mHomeCustomizationDrawer != null && mHomeCustomizationDrawer.getVisibility() == View.VISIBLE;
+        return mHomeCustomizationDrawer != null &&
+                mHomeCustomizationDrawer.getVisibility() == View.VISIBLE;
     }
 
     private void showCustomizationDrawer() {
@@ -2130,12 +2138,14 @@
             closeAllApps(false);
         }
         mHomeCustomizationDrawer.setVisibility(View.VISIBLE);
-        mHomeCustomizationDrawer.startAnimation(AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_up));
+        mHomeCustomizationDrawer.startAnimation(
+                AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_up));
     }
 
     private void hideCustomizationDrawer() {
         if (isCustomizationDrawerVisible()) {
-            Animation slideDownAnimation = AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_down);
+            Animation slideDownAnimation = AnimationUtils.loadAnimation(
+                    this, R.anim.home_customization_drawer_slide_down);
             slideDownAnimation.setAnimationListener(new Animation.AnimationListener() {
                 public void onAnimationEnd(Animation animation) {
                     mHomeCustomizationDrawer.setVisibility(View.GONE);
diff --git a/src/com/android/launcher2/ShortcutListAdapter.java b/src/com/android/launcher2/ShortcutListAdapter.java
deleted file mode 100644
index be05ca4..0000000
--- a/src/com/android/launcher2/ShortcutListAdapter.java
+++ /dev/null
@@ -1,26 +0,0 @@
-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/WidgetListAdapter.java b/src/com/android/launcher2/WidgetListAdapter.java
index 597ecf9..7ec0112 100644
--- a/src/com/android/launcher2/WidgetListAdapter.java
+++ b/src/com/android/launcher2/WidgetListAdapter.java
@@ -73,7 +73,7 @@
             LayoutInflater inflater =
                 (LayoutInflater)mLauncher.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             textView = (TextView) inflater.inflate(
-                    R.layout.home_customization_drawer_item, parent, false);
+                    R.layout.home_customization_drawer_widget, parent, false);
         } else {
             textView = (TextView) convertView;
         }
