diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index ffcaaf8..a13eca3 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -529,12 +529,14 @@
                 if (mTitleBarBitmap == null
                         || mTitleBarBitmap.getWidth() != tbar.getWidth()
                         || mTitleBarBitmap.getHeight() != tbar.getEmbeddedHeight()) {
-                    mTitleBarBitmap = Bitmap.createBitmap(tbar.getWidth(),
-                            tbar.getEmbeddedHeight(), Bitmap.Config.RGB_565);
+                    mTitleBarBitmap = safeCreateBitmap(tbar.getWidth(),
+                            tbar.getEmbeddedHeight());
                 }
-                Canvas c = new Canvas(mTitleBarBitmap);
-                tbar.draw(c);
-                c.setBitmap(null);
+                if (mTitleBarBitmap != null) {
+                    Canvas c = new Canvas(mTitleBarBitmap);
+                    tbar.draw(c);
+                    c.setBitmap(null);
+                }
             } else {
                 mTitleBarBitmap = null;
             }
@@ -544,18 +546,28 @@
             if (mContentBitmap == null
                     || mContentBitmap.getWidth() != web.getWidth()
                     || mContentBitmap.getHeight() != h) {
-                mContentBitmap = Bitmap.createBitmap(web.getWidth(), h,
-                        Bitmap.Config.RGB_565);
+                mContentBitmap = safeCreateBitmap(web.getWidth(), h);
             }
-            Canvas c = new Canvas(mContentBitmap);
-            int tx = web.getScrollX();
-            int ty = web.getScrollY();
-            c.translate(-tx, -ty - tbar.getEmbeddedHeight());
-            web.draw(c);
-            c.setBitmap(null);
+            if (mContentBitmap != null) {
+                Canvas c = new Canvas(mContentBitmap);
+                int tx = web.getScrollX();
+                int ty = web.getScrollY();
+                c.translate(-tx, -ty - tbar.getEmbeddedHeight());
+                web.draw(c);
+                c.setBitmap(null);
+            }
             mContent.setImageBitmap(mContentBitmap);
         }
 
+        private Bitmap safeCreateBitmap(int width, int height) {
+            if (width <= 0 || height <= 0) {
+                Log.w(LOGTAG, "safeCreateBitmap failed! width: " + width
+                        + ", height: " + height);
+                return null;
+            }
+            return Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
+        }
+
         public void set(Bitmap image) {
             mTitle.setVisibility(View.GONE);
             mContent.setImageBitmap(image);
diff --git a/src/com/android/browser/UrlBarAutoShowManager.java b/src/com/android/browser/UrlBarAutoShowManager.java
index f1bbe7f..294115e 100644
--- a/src/com/android/browser/UrlBarAutoShowManager.java
+++ b/src/com/android/browser/UrlBarAutoShowManager.java
@@ -46,6 +46,7 @@
     private boolean mHasTriggered;
     private long mLastScrollTime;
     private long mTriggeredTime;
+    private boolean mIsScrolling;
 
     public UrlBarAutoShowManager(BaseUi ui) {
         mUi = ui;
@@ -71,6 +72,7 @@
     public void onScrollChanged(int l, int t, int oldl, int oldt) {
         mLastScrollTime = SystemClock.uptimeMillis();
         if (t != oldt) {
+            mIsScrolling = true;
             if (t != 0) {
                 // If it is showing, extend it
                 if (mUi.isTitleBarShowing()) {
@@ -88,6 +90,7 @@
     void stopTracking() {
         if (mIsTracking) {
             mIsTracking = false;
+            mIsScrolling = false;
             if (mUi.isTitleBarShowing()) {
                 mUi.showTitleBarForDuration();
             }
@@ -124,7 +127,8 @@
                     float angle = (float) Math.atan2(ady, adx);
                     if (dy > mSlop && angle > V_TRIGGER_ANGLE
                             && !mUi.isTitleBarShowing()
-                            && web.getVisibleTitleHeight() == 0) {
+                            && (web.getVisibleTitleHeight() == 0
+                            || (!mIsScrolling && web.getScrollY() > 0))) {
                         mTriggeredTime = SystemClock.uptimeMillis();
                         mUi.showTitleBar();
                     }
