diff --git a/res/layout-xlarge/apps_customize_widget.xml b/res/layout-xlarge/apps_customize_widget.xml
new file mode 100644
index 0000000..31c3fbe
--- /dev/null
+++ b/res/layout-xlarge/apps_customize_widget.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+<com.android.launcher2.PagedViewWidget
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
+
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_weight="1"
+    android:orientation="vertical"
+
+    launcher:blurColor="#FF6B8CF0"
+    launcher:outlineColor="#FF8CD2FF"
+
+    android:background="@drawable/focusable_view_bg"
+    android:focusable="true">
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="4dp"
+        android:orientation="vertical"
+        android:background="@drawable/widget_info_bg">
+        <!-- The name of the widget. -->
+        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/widget_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:gravity="left|bottom"
+            android:singleLine="true"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal"
+
+            android:textColor="#FFBBBBBB"
+            android:textSize="14sp"
+            android:shadowColor="#FF000000"
+            android:shadowDx="0.0"
+            android:shadowDy="1.0"
+            android:shadowRadius="1.0" />
+
+        <!-- The original dimensions of the widget (can't be the same text as above due to different
+             style. -->
+        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/widget_dims"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:gravity="left|bottom"
+
+            android:textColor="#FF999999"
+            android:textSize="12sp"
+            android:shadowColor="#99000000"
+            android:shadowDx="0.0"
+            android:shadowDy="1.0"
+            android:shadowRadius="1.0" />
+    </LinearLayout>
+
+    <!-- The icon of the widget. -->
+    <ImageView
+        android:id="@+id/widget_preview"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:adjustViewBounds="true"
+        android:scaleType="fitStart" />
+</com.android.launcher2.PagedViewWidget>
diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml
index 31c3fbe..57a9962 100644
--- a/res/layout/apps_customize_widget.xml
+++ b/res/layout/apps_customize_widget.xml
@@ -29,18 +29,18 @@
     android:focusable="true">
 
     <LinearLayout
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="4dp"
-        android:orientation="vertical"
+        android:orientation="horizontal"
         android:background="@drawable/widget_info_bg">
         <!-- The name of the widget. -->
         <TextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/widget_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_weight="0"
-            android:gravity="left|bottom"
+            android:layout_weight="1"
+            android:gravity="left"
             android:singleLine="true"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
@@ -58,10 +58,12 @@
             android:id="@+id/widget_dims"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_gravity="bottom"
+            android:layout_marginLeft="5dp"
             android:layout_weight="0"
-            android:gravity="left|bottom"
+            android:gravity="left"
 
-            android:textColor="#FF999999"
+            android:textColor="#FF666666"
             android:textSize="12sp"
             android:shadowColor="#99000000"
             android:shadowDx="0.0"
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index ea761ce..4f6bc41 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -60,5 +60,5 @@
     <dimen name="apps_customize_widget_cell_width_gap">30dp</dimen>
     <dimen name="apps_customize_widget_cell_height_gap">5dp</dimen>
     <integer name="apps_customize_widget_cell_count_x">3</integer>
-    <integer name="apps_customize_widget_cell_count_y">1</integer>
+    <integer name="apps_customize_widget_cell_count_y">2</integer>
 </resources>
diff --git a/res/values-large-land/dimens.xml b/res/values-large-land/dimens.xml
index 4358ff9..61d993e 100644
--- a/res/values-large-land/dimens.xml
+++ b/res/values-large-land/dimens.xml
@@ -35,4 +35,6 @@
     <dimen name="apps_customize_pageLayoutPaddingBottom">14dp</dimen>
     <dimen name="apps_customize_pageLayoutPaddingLeft">40dp</dimen>
     <dimen name="apps_customize_pageLayoutPaddingRight">40dp</dimen>
+    <integer name="apps_customize_widget_cell_count_x">3</integer>
+    <integer name="apps_customize_widget_cell_count_y">2</integer>
 </resources>
diff --git a/res/values-large-port/dimens.xml b/res/values-large-port/dimens.xml
index 4e1cf8f..ebf837d 100644
--- a/res/values-large-port/dimens.xml
+++ b/res/values-large-port/dimens.xml
@@ -38,4 +38,6 @@
     <dimen name="apps_customize_pageLayoutPaddingBottom">10dp</dimen>
     <dimen name="apps_customize_pageLayoutPaddingLeft">10dp</dimen>
     <dimen name="apps_customize_pageLayoutPaddingRight">10dp</dimen>
+    <integer name="apps_customize_widget_cell_count_x">2</integer>
+    <integer name="apps_customize_widget_cell_count_y">3</integer>
 </resources>
\ No newline at end of file
diff --git a/res/values-port/dimens.xml b/res/values-port/dimens.xml
index 088d3fd..2abd9d7 100644
--- a/res/values-port/dimens.xml
+++ b/res/values-port/dimens.xml
@@ -36,5 +36,5 @@
     <dimen name="apps_customize_widget_cell_width_gap">20dp</dimen>
     <dimen name="apps_customize_widget_cell_height_gap">10dp</dimen>
     <integer name="apps_customize_widget_cell_count_x">2</integer>
-    <integer name="apps_customize_widget_cell_count_y">2</integer>
+    <integer name="apps_customize_widget_cell_count_y">3</integer>
 </resources>
diff --git a/res/values-xlarge-land/dimens.xml b/res/values-xlarge-land/dimens.xml
new file mode 100644
index 0000000..6a54265
--- /dev/null
+++ b/res/values-xlarge-land/dimens.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<resources>
+    <integer name="apps_customize_widget_cell_count_x">4</integer>
+    <integer name="apps_customize_widget_cell_count_y">2</integer>
+</resources>
\ No newline at end of file
diff --git a/res/values-xlarge-port/dimens.xml b/res/values-xlarge-port/dimens.xml
index 0850e8c..22d56d9 100644
--- a/res/values-xlarge-port/dimens.xml
+++ b/res/values-xlarge-port/dimens.xml
@@ -18,4 +18,6 @@
     <!-- We can also afford to have a slightly wider portrait layout in
          xlarge -->
     <dimen name="apps_customize_pageLayoutWidthGap">36dp</dimen>
+    <integer name="apps_customize_widget_cell_count_x">3</integer>
+    <integer name="apps_customize_widget_cell_count_y">3</integer>
 </resources>
\ No newline at end of file
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 16dad1b..9d03995 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -282,8 +282,6 @@
         mWidgetSpacingLayout.calculateCellCount(width, height, maxCellCountX, maxCellCountY);
         mCellCountX = mWidgetSpacingLayout.getCellCountX();
         mCellCountY = mWidgetSpacingLayout.getCellCountY();
-        mWidgetCountX = Math.max(1, (int) Math.round(mCellCountX / 2f));
-        mWidgetCountY = Math.max(1, (int) Math.round(mCellCountY / 3f));
 
         // Force a measure to update recalculate the gaps
         int widthSpec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.AT_MOST);
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index 45f58a4..e25ce5c 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -38,7 +38,7 @@
  * because we want to make the bubble taller than the text and TextView's clip is
  * too aggressive.
  */
-public class BubbleTextView extends TextView implements VisibilityChangedBroadcaster {
+public class BubbleTextView extends TextView {
     static final float CORNER_RADIUS = 4.0f;
     static final float SHADOW_LARGE_RADIUS = 4.0f;
     static final float SHADOW_SMALL_RADIUS = 1.75f;
@@ -67,8 +67,6 @@
 
     private boolean mStayPressed;
 
-    private VisibilityChangedListener mOnVisibilityChangedListener;
-
     public BubbleTextView(Context context) {
         super(context);
         init();
@@ -240,18 +238,6 @@
         return result;
     }
 
-    public void setVisibilityChangedListener(VisibilityChangedListener listener) {
-        mOnVisibilityChangedListener = listener;
-    }
-
-    @Override
-    protected void onVisibilityChanged(View changedView, int visibility) {
-        if (mOnVisibilityChangedListener != null) {
-            mOnVisibilityChangedListener.receiveVisibilityChangedMessage(this);
-        }
-        super.onVisibilityChanged(changedView, visibility);
-    }
-
     void setStayPressed(boolean stayPressed) {
         mStayPressed = stayPressed;
         if (!stayPressed) {
diff --git a/src/com/android/launcher2/CachedViewGroup.java b/src/com/android/launcher2/CachedViewGroup.java
deleted file mode 100644
index f314b32..0000000
--- a/src/com/android/launcher2/CachedViewGroup.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package com.android.launcher2;
-
-import com.android.launcher.R;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.Bitmap.Config;
-import android.graphics.PorterDuff.Mode;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-// This class caches the drawing of this View's children in a bitmap when the scale factor
-// falls below a certain size. Only used by CellLayout, but in a separate class to keep cache
-// logic separate from the other logic in CellLayout
-public class CachedViewGroup extends ViewGroup implements VisibilityChangedListener {
-    static final String TAG = "CachedViewGroup";
-
-    private Bitmap mCache;
-    private Canvas mCacheCanvas;
-    private Rect mCacheRect;
-    private Paint mCachePaint;
-
-    private boolean mIsCacheEnabled = true;
-    private boolean mDisableCacheUpdates = false;
-    private boolean mForceCacheUpdate = false;
-    private boolean isUpdatingCache = false;
-    private boolean mIsCacheDirty = true;
-    private float mBitmapCacheScale;
-    private float mMaxScaleForUsingBitmapCache;
-
-    private Rect mBackgroundRect;
-
-    public CachedViewGroup(Context context) {
-        super(context);
-        init();
-    }
-
-    public CachedViewGroup(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        init();
-    }
-
-    private void init() {
-        mBackgroundRect = new Rect();
-        mCacheRect = new Rect();
-        final Resources res = getResources();
-        mBitmapCacheScale =
-            res.getInteger(R.integer.config_workspaceScreenBitmapCacheScale) / 100.0f;
-        mMaxScaleForUsingBitmapCache =
-            res.getInteger(R.integer.config_maxScaleForUsingWorkspaceScreenBitmapCache) / 100.0f;
-        mCacheCanvas = new Canvas();
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        // sub-classes (namely CellLayout) will need to implement this
-        prepareCacheBitmap();
-        invalidateCache();
-    }
-
-    private void invalidateIfNeeded() {
-        if (mIsCacheDirty) {
-            // Force a redraw to update the cache if it's dirty
-            invalidate();
-        }
-    }
-
-    public void enableCache() {
-        mIsCacheEnabled = true;
-        invalidateIfNeeded();
-    }
-
-    public void disableCache() {
-        mIsCacheEnabled = false;
-    }
-
-    public void disableCacheUpdates() {
-        mDisableCacheUpdates = true;
-        // Force just one update before we enter a period of no cache updates
-        mForceCacheUpdate = true;
-    }
-
-    public void enableCacheUpdates() {
-        mDisableCacheUpdates = false;
-        invalidateIfNeeded();
-    }
-
-    private void invalidateCache() {
-        mIsCacheDirty = true;
-        invalidate();
-    }
-
-    public void receiveVisibilityChangedMessage(View v) {
-        invalidateCache();
-    }
-
-    private void prepareCacheBitmap() {
-        if (mCache == null) {
-            mCache = Bitmap.createBitmap((int) (getWidth() * mBitmapCacheScale),
-                    (int) (getHeight() * mBitmapCacheScale), Config.ARGB_8888);
-
-            mCachePaint = new Paint();
-            mCachePaint.setFilterBitmap(true);
-            mCacheCanvas.setBitmap(mCache);
-            mCacheCanvas.scale(mBitmapCacheScale, mBitmapCacheScale);
-        }
-    }
-
-
-    public void updateCache() {
-        mCacheCanvas.drawColor(0, Mode.CLEAR);
-
-        float alpha = getAlpha();
-        setAlpha(1.0f);
-        isUpdatingCache = true;
-        drawChildren(mCacheCanvas);
-        isUpdatingCache = false;
-        setAlpha(alpha);
-
-        mIsCacheDirty = false;
-    }
-
-    public void drawChildren(Canvas canvas) {
-        super.dispatchDraw(canvas);
-    }
-
-    @Override
-    public void removeAllViews() {
-        super.removeAllViews();
-        invalidateCache();
-    }
-
-    @Override
-    public void removeAllViewsInLayout() {
-        super.removeAllViewsInLayout();
-        invalidateCache();
-    }
-
-    @Override
-    public void removeView(View view) {
-        super.removeView(view);
-        invalidateCache();
-    }
-
-    @Override
-    public void removeViewAt(int index) {
-        super.removeViewAt(index);
-        invalidateCache();
-    }
-
-    @Override
-    public void removeViewInLayout(View view) {
-        super.removeViewInLayout(view);
-        invalidateCache();
-    }
-
-    @Override
-    public void removeViews(int start, int count) {
-        super.removeViews(start, count);
-        invalidateCache();
-    }
-
-    @Override
-    public void removeViewsInLayout(int start, int count) {
-        super.removeViewsInLayout(start, count);
-        invalidateCache();
-    }
-
-    @Override
-    public void dispatchDraw(Canvas canvas) {
-        final int count = getChildCount();
-
-        boolean useBitmapCache = false;
-        if (!isUpdatingCache) {
-            if (!mIsCacheDirty) {
-                // Check if one of the children (an icon or widget) is dirty
-                for (int i = 0; i < count; i++) {
-                    final View child = getChildAt(i);
-                    if (child.isDirty()) {
-                        mIsCacheDirty = true;
-                        break;
-                    }
-                }
-            }
-
-            useBitmapCache = mIsCacheEnabled && getScaleX() < mMaxScaleForUsingBitmapCache;
-            if (mForceCacheUpdate ||
-                    (useBitmapCache && !mDisableCacheUpdates)) {
-                // Sometimes we force a cache update-- this is used to make sure the cache will look as
-                // up-to-date as possible right when we disable cache updates
-                if (mIsCacheDirty) {
-                    updateCache();
-                }
-                mForceCacheUpdate = false;
-            }
-        }
-
-        if (useBitmapCache) {
-            mCachePaint.setAlpha((int)(255*getAlpha()));
-            canvas.drawBitmap(mCache, mCacheRect, mBackgroundRect, mCachePaint);
-        } else {
-            super.dispatchDraw(canvas);
-        }
-    }
-
-    @Override
-    public void addView(View child, int index, ViewGroup.LayoutParams params) {
-        super.addView(child, index, params);
-
-        // invalidate the cache to have it reflect the new item
-        invalidateCache();
-
-        if (child instanceof VisibilityChangedBroadcaster) {
-            VisibilityChangedBroadcaster v = (VisibilityChangedBroadcaster) child;
-            v.setVisibilityChangedListener(this);
-        }
-    }
-
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-        mBackgroundRect.set(0, 0, w, h);
-        mCacheRect.set(0, 0, (int) (mBitmapCacheScale * w), (int) (mBitmapCacheScale * h));
-        mCache = null;
-        prepareCacheBitmap();
-        invalidateCache();
-    }
-}
-
-
-//Custom interfaces used to listen to "visibility changed" events of *children* of Views. Avoided
-//using "onVisibilityChanged" in the names because there's a method of that name in framework
-//(which can only can be used to listen to ancestors' "visibility changed" events)
-interface VisibilityChangedBroadcaster {
-    public void setVisibilityChangedListener(VisibilityChangedListener listener);
-}
-
-interface VisibilityChangedListener {
-    public void receiveVisibilityChangedMessage(View v);
-}
\ No newline at end of file
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index a17e2d6..6f59d1f 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -292,8 +292,20 @@
         return minGap * (numCells - 1) + cellHeight * numCells;
     }
 
+    @Override
+    public void setChildrenLayersEnabled(boolean enabled) {
+        // see "Hardware Layer Note" lower in the code
+        if (LauncherApplication.isScreenLarge()) {
+            super.setChildrenLayersEnabled(enabled);
+        } else {
+            mChildren.setChildrenLayersEnabled(enabled);
+        }
+    }
     public void enableHardwareLayers() {
-        mChildren.enableHardwareLayers();
+        // see "Hardware Layer Note" lower in the code
+        if (LauncherApplication.isScreenLarge()) {
+            mChildren.enableHardwareLayers();
+        }
     }
 
     public void setGridSize(int x, int y) {
@@ -638,6 +650,16 @@
 
             child.setId(childId);
 
+            if (!LauncherApplication.isScreenLarge()) {
+                // Hardware Layer Note:
+                // On phones, we set hardware layers on individual items
+                // On tablets, we set hardware layers on the entire mChildren view
+                // Setting the hardware layers on individual items only uses
+                // less memory but on tablet-size devices it has worse performance
+                // (a drop of ~6fps) whereas on phones the performance is the same
+                // with both approaches
+                child.setLayerType(LAYER_TYPE_HARDWARE, null);
+            }
             mChildren.addView(child, index, lp);
 
             if (markCells) markCellsAsOccupiedForView(child);
diff --git a/src/com/android/launcher2/LauncherAppWidgetHostView.java b/src/com/android/launcher2/LauncherAppWidgetHostView.java
index 670c8b6..7c3b993 100644
--- a/src/com/android/launcher2/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher2/LauncherAppWidgetHostView.java
@@ -30,12 +30,10 @@
 /**
  * {@inheritDoc}
  */
-public class LauncherAppWidgetHostView extends AppWidgetHostView
-    implements VisibilityChangedBroadcaster {
+public class LauncherAppWidgetHostView extends AppWidgetHostView {
     private boolean mHasPerformedLongPress;
     private CheckForLongPress mPendingCheckForLongPress;
     private LayoutInflater mInflater;
-    private VisibilityChangedListener mOnVisibilityChangedListener;
 
     public LauncherAppWidgetHostView(Context context) {
         super(context);
@@ -120,18 +118,6 @@
         }
     }
 
-    public void setVisibilityChangedListener(VisibilityChangedListener listener) {
-        mOnVisibilityChangedListener = listener;
-    }
-
-    @Override
-    protected void onVisibilityChanged(View changedView, int visibility) {
-        if (mOnVisibilityChangedListener != null) {
-            mOnVisibilityChangedListener.receiveVisibilityChangedMessage(this);
-        }
-        super.onVisibilityChanged(changedView, visibility);
-    }
-
     @Override
     public int getDescendantFocusability() {
         return ViewGroup.FOCUS_BLOCK_DESCENDANTS;
diff --git a/src/com/android/launcher2/PagedViewWidget.java b/src/com/android/launcher2/PagedViewWidget.java
index d9c2a84..053c2ea 100644
--- a/src/com/android/launcher2/PagedViewWidget.java
+++ b/src/com/android/launcher2/PagedViewWidget.java
@@ -111,8 +111,10 @@
         name.setText(info.label);
         name.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
         final TextView dims = (TextView) findViewById(R.id.widget_dims);
-        dims.setText(String.format(mDimensionsFormatString, cellSpan[0], cellSpan[1]));
-        dims.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        if (dims != null) {
+            dims.setText(String.format(mDimensionsFormatString, cellSpan[0], cellSpan[1]));
+            dims.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        }
     }
 
     public void applyFromResolveInfo(PackageManager pm, ResolveInfo info,
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index e2fcfec..947c946 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -390,7 +390,9 @@
         return SmoothPagedView.X_LARGE_MODE;
     }
 
-    private void onAddView(View child) {
+    @Override
+    protected void onViewAdded(View child) {
+        super.onViewAdded(child);
         if (!(child instanceof CellLayout)) {
             throw new IllegalArgumentException("A Workspace can only have CellLayout children.");
         }
@@ -400,36 +402,6 @@
         cl.enableHardwareLayers();
     }
 
-    @Override
-    public void addView(View child, int index, LayoutParams params) {
-        onAddView(child);
-        super.addView(child, index, params);
-    }
-
-    @Override
-    public void addView(View child) {
-        onAddView(child);
-        super.addView(child);
-    }
-
-    @Override
-    public void addView(View child, int index) {
-        onAddView(child);
-        super.addView(child, index);
-    }
-
-    @Override
-    public void addView(View child, int width, int height) {
-        onAddView(child);
-        super.addView(child, width, height);
-    }
-
-    @Override
-    public void addView(View child, LayoutParams params) {
-        onAddView(child);
-        super.addView(child, params);
-    }
-
     /**
      * @return The open folder on the current screen, or null if there is none
      */
