diff --git a/res/drawable-hdpi/grid_focused.9.png b/res/drawable-hdpi/grid_focused.9.png
index cb5aea8..f6ae267 100644
--- a/res/drawable-hdpi/grid_focused.9.png
+++ b/res/drawable-hdpi/grid_focused.9.png
Binary files differ
diff --git a/res/drawable-hdpi/grid_pressed.9.png b/res/drawable-hdpi/grid_pressed.9.png
index 548acce..cb5aea8 100644
--- a/res/drawable-hdpi/grid_pressed.9.png
+++ b/res/drawable-hdpi/grid_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/grid_selected.9.png b/res/drawable-hdpi/grid_selected.9.png
index 02ab902..add46a7 100644
--- a/res/drawable-hdpi/grid_selected.9.png
+++ b/res/drawable-hdpi/grid_selected.9.png
Binary files differ
diff --git a/res/drawable-hdpi/search_bg_panel.9.png b/res/drawable-hdpi/search_bg_panel.9.png
index c868b2f..0c00d36 100644
--- a/res/drawable-hdpi/search_bg_panel.9.png
+++ b/res/drawable-hdpi/search_bg_panel.9.png
Binary files differ
diff --git a/res/drawable-mdpi/grid_focused.9.png b/res/drawable-mdpi/grid_focused.9.png
index c7e6b06..6660a8c 100644
--- a/res/drawable-mdpi/grid_focused.9.png
+++ b/res/drawable-mdpi/grid_focused.9.png
Binary files differ
diff --git a/res/drawable-mdpi/grid_pressed.9.png b/res/drawable-mdpi/grid_pressed.9.png
index 09a7e3f..c7e6b06 100644
--- a/res/drawable-mdpi/grid_pressed.9.png
+++ b/res/drawable-mdpi/grid_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi/grid_selected.9.png b/res/drawable-mdpi/grid_selected.9.png
index a40b058..e2732b7 100644
--- a/res/drawable-mdpi/grid_selected.9.png
+++ b/res/drawable-mdpi/grid_selected.9.png
Binary files differ
diff --git a/res/drawable-mdpi/search_bg_panel.9.png b/res/drawable-mdpi/search_bg_panel.9.png
index 81f01ce..0fadc77 100644
--- a/res/drawable-mdpi/search_bg_panel.9.png
+++ b/res/drawable-mdpi/search_bg_panel.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/grid_focused.9.png b/res/drawable-xhdpi/grid_focused.9.png
index 20d4647..37228b3 100644
--- a/res/drawable-xhdpi/grid_focused.9.png
+++ b/res/drawable-xhdpi/grid_focused.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/grid_pressed.9.png b/res/drawable-xhdpi/grid_pressed.9.png
index 73a784b..20d4647 100644
--- a/res/drawable-xhdpi/grid_pressed.9.png
+++ b/res/drawable-xhdpi/grid_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/grid_selected.9.png b/res/drawable-xhdpi/grid_selected.9.png
index eb0f3dc..c8b9b6b 100644
--- a/res/drawable-xhdpi/grid_selected.9.png
+++ b/res/drawable-xhdpi/grid_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/search_bg_panel.9.png b/res/drawable-xhdpi/search_bg_panel.9.png
index 3cd534f..963cb7f 100644
--- a/res/drawable-xhdpi/search_bg_panel.9.png
+++ b/res/drawable-xhdpi/search_bg_panel.9.png
Binary files differ
diff --git a/res/layout-port/workspace_cling.xml b/res/layout-port/workspace_cling.xml
index d5aff8a..6b05c27 100644
--- a/res/layout-port/workspace_cling.xml
+++ b/res/layout-port/workspace_cling.xml
@@ -21,6 +21,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_marginLeft="20dp"
+        android:layout_marginRight="20dp"
         android:layout_marginTop="90dp">
         <LinearLayout
             android:layout_width="match_parent"
@@ -43,6 +44,8 @@
         android:id="@+id/workspace_cling_open_all_apps"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginRight="20dp"
         android:layout_marginBottom="130dp"
         android:layout_gravity="bottom"
         android:gravity="center"
diff --git a/res/layout/wallpaper_chooser.xml b/res/layout/wallpaper_chooser.xml
index 60d9719..4993076 100644
--- a/res/layout/wallpaper_chooser.xml
+++ b/res/layout/wallpaper_chooser.xml
@@ -32,7 +32,7 @@
         <Gallery android:id="@+id/gallery"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:spacing="0dp" />
+            android:spacing="-4dp" />
             
         <Button android:id="@+id/set"
             android:layout_width="wrap_content"
diff --git a/src/com/android/launcher2/Cling.java b/src/com/android/launcher2/Cling.java
index 4f37cb9..09c5062 100644
--- a/src/com/android/launcher2/Cling.java
+++ b/src/com/android/launcher2/Cling.java
@@ -62,10 +62,6 @@
 
     private Paint mErasePaint;
 
-    private View mWorkspaceDesc1;
-    private View mWorkspaceDesc2;
-    private View mAllAppsDesc;
-
     public Cling(Context context) {
         this(context, null, 0);
     }
@@ -98,10 +94,6 @@
                 r.getDimensionPixelSize(R.dimen.toolbar_button_horizontal_padding);
             mButtonBarHeight = r.getDimensionPixelSize(R.dimen.button_bar_height);
 
-            mWorkspaceDesc1 = findViewById(R.id.workspace_cling_move_item);
-            mWorkspaceDesc2 = findViewById(R.id.workspace_cling_open_all_apps);
-            mAllAppsDesc = findViewById(R.id.all_apps_cling_add_item);
-
             mErasePaint = new Paint();
             mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
             mErasePaint.setColor(0xFFFFFF);
@@ -140,11 +132,6 @@
             double diff = Math.sqrt(Math.pow(event.getX() - pos[0], 2) +
                     Math.pow(event.getY() - pos[1], 2));
             if (diff < mRevealRadius) {
-                if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT)) {
-                    // Do nothing
-                } else if (mDrawIdentifier.equals(ALLAPPS_PORTRAIT)) {
-                    // Do nothing
-                }
                 return false;
             }
         } else if (mDrawIdentifier.equals(FOLDER_PORTRAIT) ||
@@ -167,7 +154,7 @@
             DisplayMetrics metrics = new DisplayMetrics();
             mLauncher.getWindowManager().getDefaultDisplay().getMetrics(metrics);
 
-            // Draw the background
+            // Initialize the draw buffer (to allow punching through)
             Bitmap b = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(),
                     Bitmap.Config.ARGB_8888);
             Canvas c = new Canvas(b);
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 318601d..3c2c3da 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -77,10 +77,10 @@
 import android.view.View;
 import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
+import android.view.ViewParent;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.AccelerateDecelerateInterpolator;
-import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Advanceable;
@@ -3130,41 +3130,56 @@
             anim.start();
         }
     }
+    private void removeCling(int id) {
+        final View cling = findViewById(id);
+        if (cling != null) {
+            final ViewGroup parent = (ViewGroup) cling.getParent();
+            parent.post(new Runnable() {
+                @Override
+                public void run() {
+                    parent.removeView(cling);
+                }
+            });
+        }
+    }
     public void showFirstRunWorkspaceCling() {
-        if (!isClingsEnabled()) return;
-
         // Enable the clings only if they have not been dismissed before
         SharedPreferences prefs =
             getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE);
-        if (!prefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false)) {
+        if (isClingsEnabled() && !prefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false)) {
             initCling(R.id.workspace_cling, null, false, 0);
+        } else {
+            removeCling(R.id.workspace_cling);
         }
     }
     public void showFirstRunAllAppsCling(int[] position) {
-        if (!isClingsEnabled()) return;
-
         // Enable the clings only if they have not been dismissed before
         SharedPreferences prefs =
             getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE);
-        if (!prefs.getBoolean(Cling.ALLAPPS_CLING_DISMISSED_KEY, false)) {
+        if (isClingsEnabled() && !prefs.getBoolean(Cling.ALLAPPS_CLING_DISMISSED_KEY, false)) {
             initCling(R.id.all_apps_cling, position, true, 0);
+        } else {
+            removeCling(R.id.all_apps_cling);
         }
     }
     public Cling showFirstRunFoldersCling() {
-        if (!isClingsEnabled()) return null;
-
         // Enable the clings only if they have not been dismissed before
         SharedPreferences prefs =
             getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE);
         Cling cling = null;
-        if (!prefs.getBoolean(Cling.FOLDER_CLING_DISMISSED_KEY, false)) {
+        if (isClingsEnabled() && !prefs.getBoolean(Cling.FOLDER_CLING_DISMISSED_KEY, false)) {
             cling = initCling(R.id.folder_cling, null, true, 0);
+        } else {
+            removeCling(R.id.folder_cling);
         }
         return cling;
     }
     public boolean isFolderClingVisible() {
         Cling cling = (Cling) findViewById(R.id.folder_cling);
-        return cling.getVisibility() == View.VISIBLE;
+        if (cling != null) {
+            return cling.getVisibility() == View.VISIBLE;
+        }
+        return false;
     }
     public void dismissWorkspaceCling(View v) {
         Cling cling = (Cling) findViewById(R.id.workspace_cling);
