diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index 5de53d8..4dcdb81 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -430,9 +430,6 @@
             TextView icon = (TextView) mInflater.inflate(
                     R.layout.all_apps_no_items_placeholder, layout, false);
             switch (mAppFilter) {
-            case ApplicationInfo.GAME_FLAG:
-                icon.setText(mContext.getString(R.string.all_apps_no_games));
-                break;
             case ApplicationInfo.DOWNLOADED_FLAG:
                 icon.setText(mContext.getString(R.string.all_apps_no_downloads));
                 break;
@@ -446,7 +443,6 @@
                     new PagedViewCellLayout.LayoutParams(0, 0, 2, 1));
         }
     }
-
     @Override
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
         mode.setTitle(R.string.cab_app_selection_text);
@@ -462,6 +458,12 @@
         mOrigInfoButtonParent.removeView(infoButton);
         infoButton.setManageVisibility(false);
         infoButton.setVisibility(View.VISIBLE);
+        infoButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                final ApplicationInfo appInfo = (ApplicationInfo) getChosenItem();
+                mLauncher.startApplicationDetailsActivity(appInfo.componentName);
+            }
+        });
 
         DeleteZone deleteZone = (DeleteZone) mLauncher.findViewById(R.id.delete_zone);
         mOrigDeleteZoneParent = (ViewGroup) deleteZone.getParent();
@@ -469,6 +471,12 @@
         mOrigDeleteZoneParent.removeView(deleteZone);
         deleteZone.setManageVisibility(false);
         deleteZone.setVisibility(View.VISIBLE);
+        deleteZone.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                final ApplicationInfo appInfo = (ApplicationInfo) getChosenItem();
+                mLauncher.startApplicationUninstallActivity(appInfo);
+            }
+        });
 
         menu.add(0, MENU_APP_INFO, 0, R.string.cab_menu_app_info).setActionView(infoButton);
         menu.add(0, MENU_DELETE_APP, 0, R.string.cab_menu_delete_app).setActionView(deleteZone);
@@ -484,15 +492,18 @@
 
     @Override
     public void onDestroyActionMode(ActionMode mode) {
+        final Menu menu = mode.getMenu();
+
         // Re-parent the drop targets into the toolbar, and restore their layout params
+
         ApplicationInfoDropTarget infoButton =
-                (ApplicationInfoDropTarget) mLauncher.findViewById(R.id.info_button);
+                (ApplicationInfoDropTarget) menu.findItem(MENU_APP_INFO).getActionView();
         ((ViewGroup) infoButton.getParent()).removeView(infoButton);
         mOrigInfoButtonParent.addView(infoButton, mOrigInfoButtonLayoutParams);
         infoButton.setVisibility(View.GONE);
         infoButton.setManageVisibility(true);
 
-        DeleteZone deleteZone = (DeleteZone) mLauncher.findViewById(R.id.delete_zone);
+        DeleteZone deleteZone = (DeleteZone) menu.findItem(MENU_DELETE_APP).getActionView();
         ((ViewGroup) deleteZone.getParent()).removeView(deleteZone);
         mOrigDeleteZoneParent.addView(deleteZone, mOrigDeleteZoneLayoutParams);
         deleteZone.setVisibility(View.GONE);
@@ -504,16 +515,7 @@
 
     @Override
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-        final int id = item.getItemId();
-
-        // Assumes that we are in CHOICE_MODE_SINGLE
-        final ApplicationInfo appInfo = (ApplicationInfo) getChosenItem();
-
-        if (id == MENU_APP_INFO) {
-            mLauncher.startApplicationDetailsActivity(appInfo.componentName);
-        } else if (id == MENU_DELETE_APP) {
-            mLauncher.startApplicationUninstallActivity(appInfo);
-        }
+        // This is never called. Because we use setActionView(), we handle our own click events.
         return false;
     }
 
diff --git a/src/com/android/launcher2/AllAppsTabbed.java b/src/com/android/launcher2/AllAppsTabbed.java
index cc6a149..eaeb80f 100644
--- a/src/com/android/launcher2/AllAppsTabbed.java
+++ b/src/com/android/launcher2/AllAppsTabbed.java
@@ -16,24 +16,20 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
+import com.android.launcher.R;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
 import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
 import android.content.Context;
 import android.content.res.Resources;
-import android.graphics.Color;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
-import android.widget.RelativeLayout;
 import android.widget.TabHost;
-import android.widget.TabWidget;
-import android.widget.TextView;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
 
 /**
  * Implements a tabbed version of AllApps2D.
@@ -43,8 +39,6 @@
     private static final String TAG = "Launcher.AllAppsTabbed";
 
     private static final String TAG_ALL = "ALL";
-    private static final String TAG_APPS = "APPS";
-    private static final String TAG_GAMES = "GAMES";
     private static final String TAG_DOWNLOADED = "DOWNLOADED";
 
     private AllAppsPagedView mAllApps;
@@ -77,27 +71,9 @@
         String label = mContext.getString(R.string.all_apps_tab_all);
         addTab(newTabSpec(TAG_ALL).setIndicator(label).setContent(contentFactory));
 
-        label = mContext.getString(R.string.all_apps_tab_apps);
-        addTab(newTabSpec(TAG_APPS).setIndicator(label).setContent(contentFactory));
-
-        label = mContext.getString(R.string.all_apps_tab_games);
-        addTab(newTabSpec(TAG_GAMES).setIndicator(label).setContent(contentFactory));
-
         label = mContext.getString(R.string.all_apps_tab_downloaded);
         addTab(newTabSpec(TAG_DOWNLOADED).setIndicator(label).setContent(contentFactory));
 
-        // TEMP: just styling the tab widget to be a bit nicer until we get the actual
-        // new assets
-        TabWidget tabWidget = getTabWidget();
-        for (int i = 0; i < tabWidget.getChildCount(); ++i) {
-            RelativeLayout tab = (RelativeLayout) tabWidget.getChildTabViewAt(i);
-            TextView text = (TextView) tab.getChildAt(1);
-            text.setTextSize(20.0f);
-            text.setPadding(20, 0, 20, 0);
-            text.setShadowLayer(1.0f, 0.0f, 1.0f, Color.BLACK);
-            tab.setBackgroundDrawable(null);
-        }
-
         setOnTabChangedListener(new OnTabChangeListener() {
             public void onTabChanged(String tabId) {
                 // animate the changing of the tab content by fading pages in and out
@@ -106,14 +82,11 @@
                 ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mAllApps, "alpha", alpha, 0.0f).
                         setDuration(duration);
                 alphaAnim.addListener(new AnimatorListenerAdapter() {
+                    @Override
                     public void onAnimationEnd(Animator animation) {
                         String tag = getCurrentTabTag();
                         if (tag == TAG_ALL) {
                             mAllApps.setAppFilter(AllAppsPagedView.ALL_APPS_FLAG);
-                        } else if (tag == TAG_APPS) {
-                            mAllApps.setAppFilter(ApplicationInfo.APP_FLAG);
-                        } else if (tag == TAG_GAMES) {
-                            mAllApps.setAppFilter(ApplicationInfo.GAME_FLAG);
                         } else if (tag == TAG_DOWNLOADED) {
                             mAllApps.setAppFilter(ApplicationInfo.DOWNLOADED_FLAG);
                         }
@@ -127,11 +100,6 @@
             }
         });
 
-        // TEMP: Working around a bug in tab host where the current tab does not initially have a
-        // highlight on it by selecting something else, then selecting the actual tab we want..
-        setCurrentTab(1);
-        setCurrentTab(0);
-
         // It needs to be INVISIBLE so that it will be measured in the layout.
         // Otherwise the animations is messed up when we show it for the first time.
         setVisibility(INVISIBLE);
diff --git a/src/com/android/launcher2/ApplicationInfoDropTarget.java b/src/com/android/launcher2/ApplicationInfoDropTarget.java
index fe5ffd1..3e5ebd5 100644
--- a/src/com/android/launcher2/ApplicationInfoDropTarget.java
+++ b/src/com/android/launcher2/ApplicationInfoDropTarget.java
@@ -118,10 +118,10 @@
     public void onDragEnd() {
         if (mActive) {
             mActive = false;
-            if (mManageVisibility) {
-                setVisibility(GONE);
-                mHandle.setVisibility(VISIBLE);
-            }
+        }
+        if (mManageVisibility) {
+            setVisibility(GONE);
+            mHandle.setVisibility(VISIBLE);
         }
     }
 
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 2da5ac3..9bb10fa 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -122,7 +122,7 @@
 
     private boolean mDragging = false;
 
-    private ObjectAnimator mDropAnim;
+    private ValueAnimator mDropAnim;
     private TimeInterpolator mEaseOutInterpolator;
 
     public CellLayout(Context context) {
@@ -252,7 +252,7 @@
             mDragOutlineAnims[i] = anim;
         }
 
-        mDropAnim = new ObjectAnimator();
+        mDropAnim = ValueAnimator.ofFloat(1.0f, 0.0f);
         mDropAnim.setInterpolator(mEaseOutInterpolator);
 
         mBackgroundRect = new Rect();
@@ -779,7 +779,7 @@
      */
     private void animateChildIntoPosition(final View child) {
         final Resources res = getResources();
-        final ObjectAnimator anim = mDropAnim;
+        final ValueAnimator anim = mDropAnim;
         final CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
         final float startX = lp.oldX - lp.x;
         final float startY = lp.oldY - lp.y;
@@ -790,18 +790,15 @@
         final int duration = (int) (res.getInteger(R.integer.config_dropAnimMaxDuration)
                 * mEaseOutInterpolator.getInterpolation(dist / maxDist));
 
-        anim.cancel(); // Make sure it's not already running
+        anim.end(); // Make sure it's not already running
         anim.setDuration(duration);
-        anim.setTarget(child);
-        anim.setPropertyName("translationX");
-        anim.setFloatValues(startX, 0);
-
+        anim.setFloatValues(1.0f, 0.0f);
         anim.removeAllUpdateListeners();
         anim.addUpdateListener(new AnimatorUpdateListener() {
             public void onAnimationUpdate(ValueAnimator animation) {
-                // Set the value of translationY based on the current x value
-                final float translationX = (Float) anim.getAnimatedValue();
-                child.setTranslationY((startY / startX) * translationX);
+                final float value = (Float) anim.getAnimatedValue();
+                child.setTranslationX(startX * value);
+                child.setTranslationY(startY * value);
             }
         });
         anim.start();
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index a01f1c0..5cfc38f 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -16,7 +16,10 @@
 
 package com.android.launcher2;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
@@ -28,12 +31,11 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
 import android.graphics.Rect;
-import android.graphics.Bitmap.Config;
 import android.graphics.Region.Op;
 import android.graphics.drawable.Drawable;
-import android.provider.LiveFolders;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.ActionMode;
@@ -41,18 +43,12 @@
 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.widget.Checkable;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import com.android.launcher.R;
 
 public class CustomizePagedView extends PagedView
     implements View.OnLongClickListener, View.OnClickListener,
@@ -60,7 +56,6 @@
 
     public enum CustomizationType {
         WidgetCustomization,
-        FolderCustomization,
         ShortcutCustomization,
         WallpaperCustomization,
         ApplicationCustomization
@@ -89,7 +84,6 @@
 
     // The raw sources of data for each of the different tabs of the customization page
     private List<AppWidgetProviderInfo> mWidgetList;
-    private List<ResolveInfo> mFolderList;
     private List<ResolveInfo> mShortcutList;
     private List<ResolveInfo> mWallpaperList;
     private List<ApplicationInfo> mApps;
@@ -256,18 +250,6 @@
             }
         };
 
-        // get the list of live folder intents
-        Intent liveFolderIntent = new Intent(LiveFolders.ACTION_CREATE_LIVE_FOLDER);
-        mFolderList = mPackageManager.queryIntentActivities(liveFolderIntent, 0);
-
-        // 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();
-        mFolderList.add(0, folder);
-        Collections.sort(mFolderList, resolveInfoComparator);
-
         // get the list of shortcuts
         Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
         mShortcutList = mPackageManager.queryIntentActivities(shortcutsIntent, 0);
@@ -321,10 +303,6 @@
             mChoiceModeTitleText = R.string.cab_app_selection_text;
             enterChoiceMode = true;
             break;
-        case FolderCustomization:
-            mChoiceModeTitleText = R.string.cab_folder_selection_text;
-            enterChoiceMode = true;
-            break;
         case ShortcutCustomization:
             mChoiceModeTitleText = R.string.cab_shortcut_selection_text;
             enterChoiceMode = true;
@@ -403,19 +381,6 @@
             // Cleanup the icon
             b.recycle();
             return true;
-        case FolderCustomization:
-            if (v.getTag() instanceof UserFolderInfo) {
-                // The UserFolderInfo tag is only really used for live folders
-                UserFolderInfo folderInfo = (UserFolderInfo) v.getTag();
-                mDragController.startDrag(
-                        v, this, folderInfo, DragController.DRAG_ACTION_COPY, null);
-            } else {
-                createItemInfo = (PendingAddItemInfo) v.getTag();
-                mDragController.startDrag(
-                        v, this, createItemInfo, DragController.DRAG_ACTION_COPY, null);
-            }
-            mLauncher.getWorkspace().onDragStartedWithItemSpans(1, 1);
-            return true;
         case ShortcutCustomization:
             createItemInfo = (PendingAddItemInfo) v.getTag();
             mDragController.startDrag(
@@ -645,20 +610,6 @@
             case WallpaperCustomization:
                 icon.setOnClickListener(this);
                 break;
-            case FolderCustomization:
-                if (info.labelRes != R.string.group_folder) {
-                    createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER;
-                    createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
-                            info.activityInfo.name);
-                    icon.setTag(createItemInfo);
-                } else {
-                    UserFolderInfo folderInfo = new UserFolderInfo();
-                    folderInfo.title = getResources().getText(R.string.folder_name);
-                    icon.setTag(folderInfo);
-                }
-                icon.setOnClickListener(this);
-                icon.setOnLongClickListener(this);
-                break;
             case ShortcutCustomization:
                 createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
                 createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
@@ -727,10 +678,6 @@
         case WidgetCustomization:
             syncWidgetPages();
             break;
-        case FolderCustomization:
-            syncListPages(mFolderList);
-            centerPagedViewCellLayouts = true;
-            break;
         case ShortcutCustomization:
             syncListPages(mShortcutList);
             centerPagedViewCellLayouts = true;
@@ -773,9 +720,6 @@
         case WidgetCustomization:
             syncWidgetPageItems(page);
             break;
-        case FolderCustomization:
-            syncListPageItems(page, mFolderList);
-            break;
         case ShortcutCustomization:
             syncListPageItems(page, mShortcutList);
             break;
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index baec7e3..5d45d27 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -17,15 +17,15 @@
 
 package com.android.launcher2;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
 import com.android.common.Search;
 import com.android.launcher.R;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
-import android.animation.AnimatorSet;
+import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -53,7 +53,6 @@
 import android.database.ContentObserver;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Rect;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -90,11 +89,9 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
-import android.widget.RelativeLayout;
 import android.widget.TabHost;
 import android.widget.TabHost.OnTabChangeListener;
 import android.widget.TabHost.TabContentFactory;
-import android.widget.TabWidget;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -168,7 +165,6 @@
     // tags for the customization tabs
     private static final String WIDGETS_TAG = "widgets";
     private static final String APPLICATIONS_TAG = "applications";
-    private static final String FOLDERS_TAG = "folders";
     private static final String SHORTCUTS_TAG = "shortcuts";
     private static final String WALLPAPERS_TAG = "wallpapers";
 
@@ -291,9 +287,6 @@
             String applicationsLabel = getString(R.string.applications_tab_label);
             mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec(APPLICATIONS_TAG)
                     .setIndicator(applicationsLabel).setContent(contentFactory));
-            String foldersLabel = getString(R.string.folders_tab_label);
-            mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec(FOLDERS_TAG)
-                    .setIndicator(foldersLabel).setContent(contentFactory));
             String wallpapersLabel = getString(R.string.wallpapers_tab_label);
             mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec(WALLPAPERS_TAG)
                     .setIndicator(wallpapersLabel).setContent(contentFactory));
@@ -301,18 +294,6 @@
             mHomeCustomizationDrawer.addTab(mHomeCustomizationDrawer.newTabSpec(SHORTCUTS_TAG)
                     .setIndicator(shortcutsLabel).setContent(contentFactory));
 
-            // TEMP: just styling the tab widget to be a bit nicer until we get the actual
-            // new assets
-            TabWidget tabWidget = mHomeCustomizationDrawer.getTabWidget();
-            for (int i = 0; i < tabWidget.getChildCount(); ++i) {
-                RelativeLayout tab = (RelativeLayout) tabWidget.getChildTabViewAt(i);
-                TextView text = (TextView) tab.getChildAt(1);
-                text.setTextSize(20.0f);
-                text.setPadding(20, 0, 20, 0);
-                text.setShadowLayer(1.0f, 0.0f, 1.0f, Color.BLACK);
-                tab.setBackgroundDrawable(null);
-            }
-
             mHomeCustomizationDrawer.setOnTabChangedListener(new OnTabChangeListener() {
                 public void onTabChanged(String tabId) {
                     // animate the changing of the tab content by fading pages in and out
@@ -322,6 +303,7 @@
                             "alpha", alpha, 0.0f);
                     alphaAnim.setDuration(duration);
                     alphaAnim.addListener(new AnimatorListenerAdapter() {
+                        @Override
                         public void onAnimationEnd(Animator animation) {
                             String tag = mHomeCustomizationDrawer.getCurrentTabTag();
                             if (tag == WIDGETS_TAG) {
@@ -330,9 +312,6 @@
                             } else if (tag == APPLICATIONS_TAG) {
                                 mCustomizePagedView.setCustomizationFilter(
                                         CustomizePagedView.CustomizationType.ApplicationCustomization);
-                            } else if (tag == FOLDERS_TAG) {
-                                mCustomizePagedView.setCustomizationFilter(
-                                    CustomizePagedView.CustomizationType.FolderCustomization);
                             } else if (tag == WALLPAPERS_TAG) {
                                 mCustomizePagedView.setCustomizationFilter(
                                     CustomizePagedView.CustomizationType.WallpaperCustomization);
@@ -351,11 +330,6 @@
                     alphaAnim.start();
                 }
             });
-    
-            // TEMP: Working around a bug in tab host where the current tab does not initially have
-            // a highlight on it by selecting something else, then selecting the actual tab we want..
-            mHomeCustomizationDrawer.setCurrentTab(1);
-            mHomeCustomizationDrawer.setCurrentTab(0);
         }
         setupViews();
 
@@ -424,6 +398,7 @@
 
             final LocaleConfiguration localeConfiguration = sLocaleConfiguration;
             new Thread("WriteLocaleConfiguration") {
+                @Override
                 public void run() {
                     writeConfiguration(Launcher.this, localeConfiguration);
                 }
@@ -2306,9 +2281,11 @@
             Animator anim = ObjectAnimator.ofFloat(view, "alpha", show ? 1.0f : 0.0f);
             anim.setDuration(duration);
             anim.addListener(new AnimatorListenerAdapter() {
+                @Override
                 public void onAnimationStart(Animator animation) {
                     if (showing) showToolbarButton(view);
                 }
+                @Override
                 public void onAnimationEnd(Animator animation) {
                     if (hiding) hideToolbarButton(view);
                 }
@@ -2409,6 +2386,7 @@
             scaleAnim.setDuration(duration);
             scaleAnim.setInterpolator(new DecelerateInterpolator());
             scaleAnim.addListener(new AnimatorListenerAdapter() {
+                @Override
                 public void onAnimationStart(Animator animation) {
                     // Prepare the position
                     toView.setTranslationX(0.0f);
@@ -2472,6 +2450,7 @@
             scaleAnim.setDuration(duration);
             scaleAnim.setInterpolator(new AccelerateInterpolator());
             mStateAnimation.addListener(new AnimatorListenerAdapter() {
+                @Override
                 public void onAnimationEnd(Animator animation) {
                     fromView.setVisibility(View.GONE);
                     fromView.setScaleX(1.0f);
@@ -2531,10 +2510,12 @@
             if (mStateAnimation != null) mStateAnimation.cancel();
             mStateAnimation = new AnimatorSet();
             mStateAnimation.addListener(new AnimatorListenerAdapter() {
+                @Override
                 public void onAnimationStart(Animator animation) {
                     toView.setVisibility(View.VISIBLE);
                     toView.setY(toViewStartY);
                 }
+                @Override
                 public void onAnimationEnd(Animator animation) {
                     fromView.setVisibility(View.GONE);
                 }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 7399a9e..ce613f1 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -854,9 +854,6 @@
     // never dragged over
     public void onDragStopped() {
         updateWhichPagesAcceptDrops(mShrunkenState);
-        if (mShrunkenState == ShrinkPosition.SHRINK_TO_BOTTOM_VISIBLE) {
-            shrink(ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN, true);
-        }
     }
 
     // We call this when we trigger an unshrink by clicking on the CellLayout cl
