diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 1cae7bc..f40c6ef 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -154,6 +154,7 @@
 
     <!-- Camera Preferences Picture size dialog box entries -->
     <string-array name="pref_camera_picturesize_entries" translatable="false">
+        <item>@string/pref_camera_picturesize_entry_13mp</item>
         <item>@string/pref_camera_picturesize_entry_8mp</item>
         <item>@string/pref_camera_picturesize_entry_5mp</item>
         <item>@string/pref_camera_picturesize_entry_5mp</item>
@@ -170,6 +171,7 @@
          size to the first one in the list that is also supported by the
          driver -->
     <string-array name="pref_camera_picturesize_entryvalues" translatable="false">
+        <item>4128x3096</item>
         <item>3264x2448</item>
         <item>2592x1944</item>
         <item>2592x1936</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a1c2e31..0ec4da6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -672,6 +672,8 @@
     <!-- Settings screen, Picture size title -->
     <string name="pref_camera_picturesize_title">Picture size</string>
 
+    <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+    <string name="pref_camera_picturesize_entry_13mp">13M pixels</string>
     <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
     <string name="pref_camera_picturesize_entry_8mp">8M pixels</string>
     <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
diff --git a/src/com/android/camera/ActivityBase.java b/src/com/android/camera/ActivityBase.java
index c3cde8b..59bd82c 100644
--- a/src/com/android/camera/ActivityBase.java
+++ b/src/com/android/camera/ActivityBase.java
@@ -353,7 +353,7 @@
         }
     }
 
-    protected void gotoGallery() {
+    public void gotoGallery() {
         // Move the next picture with capture animation. "1" means next.
         mAppBridge.switchWithCaptureAnimation(1);
     }
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index f7830a3..2c654fc 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -91,6 +91,7 @@
     private static final int SWITCH_CAMERA = 8;
     private static final int SWITCH_CAMERA_START_ANIMATION = 9;
     private static final int HIDE_SURFACE_VIEW = 10;
+    private static final int CAPTURE_ANIMATION_DONE = 11;
 
     private static final int SCREEN_DELAY = 2 * 60 * 1000;
 
@@ -296,6 +297,11 @@
                     break;
                 }
 
+                case CAPTURE_ANIMATION_DONE: {
+                    mUI.enablePreviewThumb(false);
+                    break;
+                }
+
                 default:
                     Log.v(TAG, "Unhandled message: " + msg.what);
                     break;
@@ -578,6 +584,14 @@
                 // the preview. This will cause the preview flicker since the preview
                 // will not be continuous for a short period of time.
                 ((CameraScreenNail) mActivity.mCameraScreenNail).animateCapture(mDisplayRotation);
+
+                mUI.enablePreviewThumb(true);
+
+                // Make sure to disable the thumbnail preview after the
+                // animation is done to disable the click target.
+                mHandler.removeMessages(CAPTURE_ANIMATION_DONE);
+                mHandler.sendEmptyMessageDelayed(CAPTURE_ANIMATION_DONE,
+                        CaptureAnimManager.getAnimationDuration());
             }
         }
     }
@@ -1457,6 +1471,7 @@
 
     private void startVideoRecording() {
         Log.v(TAG, "startVideoRecording");
+        mUI.enablePreviewThumb(false);
         mActivity.setSwipingEnabled(false);
 
         mActivity.updateStorageSpaceAndHint();
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index 0c94572..dc23ec8 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -76,6 +76,7 @@
     private VideoController mController;
     private int mZoomMax;
     private List<Integer> mZoomRatios;
+    private View mPreviewThumb;
 
     public VideoUI(CameraActivity activity, VideoController controller, View parent) {
         mActivity = activity;
@@ -227,6 +228,14 @@
                 mGestures.addTouchReceiver(mReviewPlayButton);
             }
         }
+
+        mPreviewThumb = mActivity.findViewById(R.id.preview_thumb);
+        mPreviewThumb.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mActivity.gotoGallery();
+            }
+        });
     }
 
     public void setPrefChangedListener(OnPreferenceChangedListener listener) {
@@ -520,4 +529,16 @@
         }
     }
 
+    /**
+     * Enable or disable the preview thumbnail for click events.
+     */
+    public void enablePreviewThumb(boolean enabled) {
+        if (enabled) {
+            mGestures.addTouchReceiver(mPreviewThumb);
+            mPreviewThumb.setVisibility(View.VISIBLE);
+        } else {
+            mGestures.removeTouchReceiver(mPreviewThumb);
+            mPreviewThumb.setVisibility(View.GONE);
+        }
+    }
 }
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index e5ddbf5..67ae3b5 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -721,6 +721,7 @@
                 int position = adapter.undo();
                 mMasterImage.onHistoryItemClick(position);
                 mImageShow.showToast("Undo");
+                backToMain();
                 invalidateViews();
                 return true;
             }
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
index 0a65cd9..cfa64bc 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
@@ -34,7 +34,7 @@
 public class CategoryAdapter extends ArrayAdapter<Action> {
 
     private static final String LOGTAG = "CategoryAdapter";
-    private int mItemHeight = 200;
+    private int mItemHeight;
     private View mContainer;
     private int mItemWidth = ListView.LayoutParams.MATCH_PARENT;
     private boolean mUseFilterIconButton = false;
@@ -43,6 +43,7 @@
 
     public CategoryAdapter(Context context, int textViewResourceId) {
         super(context, textViewResourceId);
+        mItemHeight = (int) (context.getResources().getDisplayMetrics().density * 100);
     }
 
     public CategoryAdapter(Context context) {
@@ -95,7 +96,7 @@
                     new ListView.LayoutParams(mItemWidth, mItemHeight));
             view.setTag(position);
             if (mCategory == MainPanel.LOOKS || mCategory == MainPanel.BORDERS) {
-                view.setBackground(null);
+                view.setBackgroundResource(0);
             }
             return view;
         }
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryView.java b/src/com/android/gallery3d/filtershow/category/CategoryView.java
index 84a973b..059eb10 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryView.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryView.java
@@ -44,6 +44,8 @@
     private Paint mSelectPaint;
     CategoryAdapter mAdapter;
     private int mSelectionStroke;
+    private Paint mBorderPaint;
+    private int mBorderStroke;
 
     public static void setTextSize(int size) {
         sTextSize = size;
@@ -63,6 +65,9 @@
         mSelectPaint = new Paint();
         mSelectPaint.setStyle(Paint.Style.FILL);
         mSelectPaint.setColor(res.getColor(R.color.filtershow_category_selection));
+        mBorderPaint = new Paint(mSelectPaint);
+        mBorderPaint.setColor(Color.BLACK);
+        mBorderStroke = mSelectionStroke / 3;
     }
 
     public void drawText(Canvas canvas, String text) {
@@ -91,8 +96,10 @@
                 Bitmap bitmap = mAction.getImage();
                 canvas.drawBitmap(bitmap, 0, 0, mPaint);
                 if (mAdapter.isSelected(this)) {
-                    SelectionRenderer.drawSelection(canvas, 0, 0, bitmap.getWidth(),
-                            bitmap.getHeight(), mSelectionStroke, mSelectPaint);
+                    SelectionRenderer.drawSelection(canvas, 0, 0,
+                            Math.min(bitmap.getWidth(), getWidth()),
+                            Math.min(bitmap.getHeight(), getHeight()),
+                            mSelectionStroke, mSelectPaint, mBorderStroke, mBorderPaint);
                 }
             }
             mPaint.setColor(mBackgroundColor);
diff --git a/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java b/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java
index e334fc9..8ceb375 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java
@@ -118,6 +118,13 @@
         mScrToImg.mapPoints(point);
         x = point[0];
         y = point[1];
+
+        // Test if the matrix is swapping x and y
+        point[0] = 0;
+        point[1] = 1;
+        mScrToImg.mapVectors(point);
+        boolean swapxy = (point[0] > 0.0f);
+
         int sign = 1;
         switch (handle) {
             case HAN_CENTER:
@@ -129,14 +136,24 @@
             case HAN_NORTH:
                 sign = -1;
             case HAN_SOUTH:
-                float raddy = mDownRadiusY - Math.abs(mDownY - mDownCenterY);
-                oval.setRadiusY(Math.abs(y - oval.getCenterY() + sign * raddy));
+                if (swapxy) {
+                    float raddx = mDownRadiusY - Math.abs(mDownX - mDownCenterY);
+                    oval.setRadiusY(Math.abs(x - oval.getCenterY() + sign * raddx));
+                } else {
+                    float raddy = mDownRadiusY - Math.abs(mDownY - mDownCenterY);
+                    oval.setRadiusY(Math.abs(y - oval.getCenterY() + sign * raddy));
+                }
                 break;
             case HAN_EAST:
                 sign = -1;
             case HAN_WEST:
-                float raddx = mDownRadiusX - Math.abs(mDownX - mDownCenterX);
-                oval.setRadiusX(Math.abs(x - oval.getCenterX() - sign * raddx));
+                if (swapxy) {
+                    float raddy = mDownRadiusX - Math.abs(mDownY - mDownCenterX);
+                    oval.setRadiusX(Math.abs(y - oval.getCenterX() + sign * raddy));
+                } else {
+                    float raddx = mDownRadiusX - Math.abs(mDownX - mDownCenterX);
+                    oval.setRadiusX(Math.abs(x - oval.getCenterX() - sign * raddx));
+                }
                 break;
             case HAN_SE:
             case HAN_NE:
diff --git a/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java b/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java
index 1b108bd..ef40c5e 100644
--- a/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java
+++ b/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java
@@ -29,4 +29,20 @@
         canvas.drawRect(right - stroke, top, right, bottom, paint);
     }
 
+    public static void drawSelection(Canvas canvas, int left, int top, int right, int bottom,
+            int stroke, Paint selectPaint, int border, Paint borderPaint) {
+        canvas.drawRect(left, top, right, top + stroke, selectPaint);
+        canvas.drawRect(left, bottom - stroke, right, bottom, selectPaint);
+        canvas.drawRect(left, top, left + stroke, bottom, selectPaint);
+        canvas.drawRect(right - stroke, top, right, bottom, selectPaint);
+        canvas.drawRect(left + stroke, top + stroke, right - stroke,
+                top + stroke + border, borderPaint);
+        canvas.drawRect(left + stroke, bottom - stroke - border, right - stroke,
+                bottom - stroke, borderPaint);
+        canvas.drawRect(left + stroke, top + stroke, left + stroke + border,
+                bottom - stroke, borderPaint);
+        canvas.drawRect(right - stroke - border, top + stroke, right - stroke,
+                bottom - stroke, borderPaint);
+    }
+
 }
diff --git a/src/com/android/photos/data/GalleryBitmapPool.java b/src/com/android/photos/data/GalleryBitmapPool.java
index a5a17ed..aca3e4b 100644
--- a/src/com/android/photos/data/GalleryBitmapPool.java
+++ b/src/com/android/photos/data/GalleryBitmapPool.java
@@ -19,7 +19,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Point;
 import android.util.Pools.Pool;
-import android.util.Pools.SimplePool;
+import android.util.Pools.SynchronizedPool;
 
 import com.android.photos.data.SparseArrayBitmapPool.Node;
 
@@ -36,7 +36,7 @@
 
     private int mCapacityBytes;
     private SparseArrayBitmapPool [] mPools;
-    private Pool<Node> mSharedNodePool = new SimplePool<Node>(128);
+    private Pool<Node> mSharedNodePool = new SynchronizedPool<Node>(128);
 
     private GalleryBitmapPool(int capacityBytes) {
         mPools = new SparseArrayBitmapPool[3];
