diff --git a/src/com/android/browser/ScrollWebView.java b/src/com/android/browser/ScrollWebView.java
index 2ee2ac0..8c89e51 100644
--- a/src/com/android/browser/ScrollWebView.java
+++ b/src/com/android/browser/ScrollWebView.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
-import android.graphics.Paint;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
@@ -36,9 +35,7 @@
     private boolean mBackgroundRemoved = false;
     private boolean mUserInitiated = false;
     private TitleBarBase mTitleBar;
-    private boolean mDrawCached = false;
     private Bitmap mBitmap;
-    private Paint mCachePaint = new Paint();
 
     /**
      * @param context
@@ -137,46 +134,22 @@
         mScrollListener = l;
     }
 
-    @Override
-    public void invalidate() {
-        if (!mDrawCached) {
-            super.invalidate();
-        }
-    }
-
     // callback for scroll events
 
     interface ScrollListener {
         public void onScroll(int visibleTitleHeight, boolean userInitiated);
     }
 
-    void setDrawCached(boolean cached) {
-        if (cached == mDrawCached) return;
-        if (cached) {
-            buildDrawingCache();
-            mBitmap = getDrawingCache(false);
-            mDrawCached = (mBitmap != null);
-        } else {
-            mDrawCached = false;
-            mBitmap = null;
-            destroyDrawingCache();
-        }
-    }
-
     @Override
     protected void onDraw(android.graphics.Canvas c) {
-        if (mDrawCached) {
-            c.drawBitmap(mBitmap, getScrollX(), getScrollY(), mCachePaint);
-        } else {
-            super.onDraw(c);
-            if (!mBackgroundRemoved && getRootView().getBackground() != null) {
-                mBackgroundRemoved = true;
-                post(new Runnable() {
-                    public void run() {
-                        getRootView().setBackgroundDrawable(null);
-                    }
-                });
-            }
+        super.onDraw(c);
+        if (!mBackgroundRemoved && getRootView().getBackground() != null) {
+            mBackgroundRemoved = true;
+            post(new Runnable() {
+                public void run() {
+                    getRootView().setBackgroundDrawable(null);
+                }
+            });
         }
     }
 
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index debb763..892b118 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -18,14 +18,9 @@
 
 import com.android.browser.ScrollWebView.ScrollListener;
 
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.ObjectAnimator;
 import android.app.ActionBar;
 import android.app.Activity;
 import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.Log;
@@ -54,7 +49,6 @@
 
     private boolean mUseQuickControls;
     private PieControl mPieControl;
-    private boolean mInAnimation = false;
     private Handler mHandler;
 
     /**
@@ -221,56 +215,8 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
-        if (mInAnimation) return;
-        if ((tab != mActiveTab) && (mActiveTab != null)) {
-            mInAnimation = true;
-            // animate between the two
-            final ScrollWebView fromWV = (ScrollWebView) mActiveTab.getWebView();
-            fromWV.setDrawCached(true);
-            fromWV.setEmbeddedTitleBar(null);
-            final ScrollWebView toWV = (ScrollWebView) tab.getWebView();
-            if (!mUseQuickControls) {
-                if (mTitleBar.getParent() == null) {
-                    toWV.setEmbeddedTitleBar(mTitleBar);
-                }
-            }
-            toWV.setDrawCached(true);
-            attachTabToContentView(tab);
-            super.setActiveTab(tab, false);
-            ObjectAnimator transition = ObjectAnimator.ofFloat(
-                    toWV, "alpha", 0f, 1f);
-            transition.setDuration(mActivity.getResources()
-                    .getInteger(R.integer.tabFadeDuration));
-            transition.addListener(new AnimatorListener() {
-                @Override
-                public void onAnimationCancel(Animator animation) {
-                    fromWV.setDrawCached(false);
-                    toWV.setDrawCached(false);
-                    setActiveTab(tab, false);
-                    mInAnimation = false;
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    fromWV.setDrawCached(false);
-                    toWV.setDrawCached(false);
-                    setActiveTab(tab, false);
-                    mInAnimation = false;
-                }
-
-                @Override
-                public void onAnimationRepeat(Animator animation) {
-                }
-
-                @Override
-                public void onAnimationStart(Animator animation) {
-                }
-            });
-            transition.start();
-        } else {
-            super.setActiveTab(tab, true);
-            setActiveTab(tab, true);
-        }
+        super.setActiveTab(tab, true);
+        setActiveTab(tab, true);
     }
 
     @Override
