diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6838a17..7688566 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -107,14 +107,14 @@
     <string name="no_location" msgid="4043624857489331676">"कोई स्थान नहीं"</string>
     <string name="no_connectivity" msgid="7164037617297293668">"नेटवर्क समस्‍याओं के कारण कुछ स्‍थानों को पहचाना नहीं जा सका."</string>
     <string name="sync_album_error" msgid="1020688062900977530">"इस एल्बम के फ़ोटो डाउनलोड नहीं किए जा सके. बाद में पुन: प्रयास करें."</string>
-    <string name="show_images_only" msgid="7263218480867672653">"केवल छवियां"</string>
+    <string name="show_images_only" msgid="7263218480867672653">"केवल चित्र"</string>
     <string name="show_videos_only" msgid="3850394623678871697">"केवल वीडियो"</string>
-    <string name="show_all" msgid="6963292714584735149">"छवियां और वीडियो"</string>
+    <string name="show_all" msgid="6963292714584735149">"चित्र और वीडियो"</string>
     <string name="appwidget_title" msgid="6410561146863700411">"फ़ोटो गैलरी"</string>
     <string name="appwidget_empty_text" msgid="1228925628357366957">"कोई फ़ोटो नहीं."</string>
     <string name="crop_saved" msgid="1595985909779105158">"काट-छांट की गई चित्र को <xliff:g id="FOLDER_NAME">%s</xliff:g> में सहेजा गया."</string>
     <string name="no_albums_alert" msgid="4111744447491690896">"कोई एल्‍बम उपलब्‍ध नहीं."</string>
-    <string name="empty_album" msgid="4542880442593595494">"O छवियां/वीडियो उपलब्‍ध."</string>
+    <string name="empty_album" msgid="4542880442593595494">"O चित्र/वीडियो उपलब्‍ध."</string>
     <string name="picasa_posts" msgid="1497721615718760613">"पोस्ट"</string>
     <string name="make_available_offline" msgid="5157950985488297112">"ऑफ़लाइन उपलब्ध कराएं"</string>
     <string name="sync_picasa_albums" msgid="8522572542111169872">"रीफ्रेश करें"</string>
@@ -177,7 +177,7 @@
     <string name="widget_type_album" msgid="6013045393140135468">"कोई एल्बम चुनें"</string>
     <string name="widget_type_shuffle" msgid="8594622705019763768">"सभी छवियों का क्रम बदलें"</string>
     <string name="widget_type_photo" msgid="6267065337367795355">"कोई चित्र चुनें"</string>
-    <string name="widget_type" msgid="1364653978966343448">"छवियां चुनें"</string>
+    <string name="widget_type" msgid="1364653978966343448">"चित्र चुनें"</string>
     <string name="slideshow_dream_name" msgid="6915963319933437083">"स्लाइडशो"</string>
     <string name="albums" msgid="7320787705180057947">"एल्बम"</string>
     <string name="times" msgid="2023033894889499219">"इतने बार"</string>
@@ -315,8 +315,8 @@
     <string name="pref_camera_id_label_back" msgid="8745553500400332333">"सामने का कैमरा"</string>
     <string name="pref_camera_id_label_front" msgid="8699439330056996709">"पीछे का कैमरा"</string>
     <string name="dialog_ok" msgid="6263301364153382152">"ठीक"</string>
-    <string name="spaceIsLow_content" product="nosdcard" msgid="4401325203349203177">"आपके USB संग्रहण में स्थान कम है. गुणवत्ता सेटिंग बदलें या कुछ छवियां या अन्य फ़ाइलें हटाएं."</string>
-    <string name="spaceIsLow_content" product="default" msgid="1732882643101247179">"आपके SD कार्ड में स्थान कम है. गुणवत्ता सेटिंग बदलें या कुछ छवियां या अन्य फ़ाइलें हटाएं."</string>
+    <string name="spaceIsLow_content" product="nosdcard" msgid="4401325203349203177">"आपके USB संग्रहण में स्थान कम है. गुणवत्ता सेटिंग बदलें या कुछ चित्र या अन्य फ़ाइलें हटाएं."</string>
+    <string name="spaceIsLow_content" product="default" msgid="1732882643101247179">"आपके SD कार्ड में स्थान कम है. गुणवत्ता सेटिंग बदलें या कुछ चित्र या अन्य फ़ाइलें हटाएं."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"आकार सीमा पहुंची."</string>
     <string name="pano_too_fast_prompt" msgid="2823839093291374709">"बहुत तेज़"</string>
     <string name="pano_dialog_prepare_preview" msgid="4788441554128083543">"पैनोरामा तैयार हो रहा है"</string>
diff --git a/res/values/filtershow_color.xml b/res/values/filtershow_color.xml
index f6bf7fb..927bfa2 100644
--- a/res/values/filtershow_color.xml
+++ b/res/values/filtershow_color.xml
@@ -37,4 +37,5 @@
     <color name="filtershow_stateview_selected_text">#000000</color>
     <color name="filtershow_categoryview_background">#1a1a1a</color>
     <color name="filtershow_categoryview_text">#a7a7a7</color>
+    <color name="filtershow_category_selection">#ffffffff</color>
 </resources>
\ No newline at end of file
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
index e310b2f..0a65cd9 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
@@ -21,24 +21,25 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.AbsListView;
 import android.widget.ArrayAdapter;
-import android.widget.LinearLayout;
 import android.widget.ListView;
+
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
-import com.android.gallery3d.filtershow.filters.FilterTinyPlanetRepresentation;
-import com.android.gallery3d.filtershow.filters.ImageFilter;
 import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet;
+import com.android.gallery3d.filtershow.imageshow.MasterImage;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
 import com.android.gallery3d.filtershow.ui.FilterIconButton;
 
 public class CategoryAdapter extends ArrayAdapter<Action> {
 
     private static final String LOGTAG = "CategoryAdapter";
     private int mItemHeight = 200;
-    private ListView mContainer;
+    private View mContainer;
     private int mItemWidth = ListView.LayoutParams.MATCH_PARENT;
     private boolean mUseFilterIconButton = false;
+    private int mSelectedPosition;
+    int mCategory;
 
     public CategoryAdapter(Context context, int textViewResourceId) {
         super(context, textViewResourceId);
@@ -62,6 +63,22 @@
         action.setAdapter(this);
     }
 
+    public void initializeSelection(int category) {
+        mCategory = category;
+        if (category == MainPanel.LOOKS || category == MainPanel.BORDERS) {
+            ImagePreset preset = MasterImage.getImage().getPreset();
+            if (preset != null) {
+                for (int i = 0; i < getCount(); i++) {
+                    if (preset.historyName().equals(getItem(i).getRepresentation().getName())) {
+                        mSelectedPosition = i;
+                    }
+                }
+            }
+        } else {
+            mSelectedPosition = -1;
+        }
+    }
+
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         if (mUseFilterIconButton) {
@@ -73,27 +90,55 @@
             FilterIconButton view = (FilterIconButton) convertView;
             Action action = getItem(position);
             view.setAction(action);
-            view.setup(action.getName(), null);
+            view.setup(action.getName(), null, this);
             view.setLayoutParams(
                     new ListView.LayoutParams(mItemWidth, mItemHeight));
+            view.setTag(position);
+            if (mCategory == MainPanel.LOOKS || mCategory == MainPanel.BORDERS) {
+                view.setBackground(null);
+            }
             return view;
         }
         if (convertView == null) {
             convertView = new CategoryView(getContext());
         }
         CategoryView view = (CategoryView) convertView;
-        view.setAction(getItem(position));
+        view.setAction(getItem(position), this);
         view.setLayoutParams(
                 new ListView.LayoutParams(mItemWidth, mItemHeight));
+        view.setTag(position);
         return view;
     }
 
-    public void setContainer(ListView container) {
-        mContainer = container;
+    public void setSelected(View v) {
+        int old = mSelectedPosition;
+        mSelectedPosition = (Integer) v.getTag();
+        if (old != -1) {
+            invalidateView(old);
+        }
+        invalidateView(mSelectedPosition);
     }
 
-    public ListView getContainer() {
-        return mContainer;
+    public boolean isSelected(View v) {
+        return (Integer) v.getTag() == mSelectedPosition;
+    }
+
+    private void invalidateView(int position) {
+        View child = null;
+        if (mContainer instanceof ListView) {
+            ListView lv = (ListView) mContainer;
+            child = lv.getChildAt(position - lv.getFirstVisiblePosition());
+        } else {
+            CategoryTrack ct = (CategoryTrack) mContainer;
+            child = ct.getChildAt(position);
+        }
+        if (child != null) {
+            child.invalidate();
+        }
+    }
+
+    public void setContainer(View container) {
+        mContainer = container;
     }
 
     public void imageLoaded() {
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
index 9ddfcab..abae80f 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
@@ -50,18 +50,22 @@
         switch (adapter) {
             case MainPanel.LOOKS: {
                 mAdapter = activity.getCategoryLooksAdapter();
+                mAdapter.initializeSelection(MainPanel.LOOKS);
                 break;
             }
             case MainPanel.BORDERS: {
                 mAdapter = activity.getCategoryBordersAdapter();
+                mAdapter.initializeSelection(MainPanel.BORDERS);
                 break;
             }
             case MainPanel.GEOMETRY: {
                 mAdapter = activity.getCategoryGeometryAdapter();
+                mAdapter.initializeSelection(MainPanel.GEOMETRY);
                 break;
             }
             case MainPanel.FILTERS: {
                 mAdapter = activity.getCategoryFiltersAdapter();
+                mAdapter.initializeSelection(MainPanel.FILTERS);
                 break;
             }
         }
@@ -90,6 +94,7 @@
             CategoryTrack panel = (CategoryTrack) panelView;
             mAdapter.setUseFilterIconButton(true);
             panel.setAdapter(mAdapter);
+            mAdapter.setContainer(panel);
         } else {
             ListView panel = (ListView) main.findViewById(R.id.listItems);
             panel.setAdapter(mAdapter);
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryView.java b/src/com/android/gallery3d/filtershow/category/CategoryView.java
index c101f98..84a973b 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryView.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryView.java
@@ -29,6 +29,7 @@
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.FilterShowActivity;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.ui.SelectionRenderer;
 
 public class CategoryView extends View implements View.OnClickListener {
 
@@ -40,6 +41,9 @@
     private static int sTextSize = 32;
     private int mTextColor;
     private int mBackgroundColor;
+    private Paint mSelectPaint;
+    CategoryAdapter mAdapter;
+    private int mSelectionStroke;
 
     public static void setTextSize(int size) {
         sTextSize = size;
@@ -55,6 +59,10 @@
         Resources res = getResources();
         mBackgroundColor = res.getColor(R.color.filtershow_categoryview_background);
         mTextColor = res.getColor(R.color.filtershow_categoryview_text);
+        mSelectionStroke = res.getDimensionPixelSize(R.dimen.thumbnail_margin);
+        mSelectPaint = new Paint();
+        mSelectPaint.setStyle(Paint.Style.FILL);
+        mSelectPaint.setColor(res.getColor(R.color.filtershow_category_selection));
     }
 
     public void drawText(Canvas canvas, String text) {
@@ -71,6 +79,7 @@
         canvas.drawText(text, x, y, mPaint);
     }
 
+    @Override
     public void onDraw(Canvas canvas) {
         canvas.drawColor(mBackgroundColor);
         if (mAction != null) {
@@ -81,6 +90,10 @@
             } else {
                 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);
+                }
             }
             mPaint.setColor(mBackgroundColor);
             mPaint.setStyle(Paint.Style.STROKE);
@@ -93,8 +106,9 @@
         }
     }
 
-    public void setAction(Action action) {
+    public void setAction(Action action, CategoryAdapter adapter) {
         mAction = action;
+        mAdapter = adapter;
         invalidate();
     }
 
@@ -106,5 +120,6 @@
     public void onClick(View view) {
         FilterShowActivity activity = (FilterShowActivity) getContext();
         activity.showRepresentation(mAction.getRepresentation());
+        mAdapter.setSelected(this);
     }
 }
diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java
index 7cadbc3..9a64ffb 100644
--- a/src/com/android/gallery3d/filtershow/category/MainPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java
@@ -24,6 +24,7 @@
 import android.view.ViewGroup;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
+
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.FilterShowActivity;
 import com.android.gallery3d.filtershow.state.StatePanel;
diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
index c3c8769..96126c5 100644
--- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
+++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
@@ -17,18 +17,25 @@
 package com.android.gallery3d.filtershow.ui;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
 import android.graphics.RectF;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.LinearLayout;
 
+import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.FilterShowActivity;
 import com.android.gallery3d.filtershow.cache.RenderingRequest;
 import com.android.gallery3d.filtershow.cache.RenderingRequestCaller;
 import com.android.gallery3d.filtershow.category.Action;
+import com.android.gallery3d.filtershow.category.CategoryAdapter;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.imageshow.GeometryListener;
 import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
@@ -45,6 +52,9 @@
     private FilterRepresentation mFilterRepresentation = null;
     private Bitmap mIconBitmap = null;
     private Action mAction;
+    private Paint mSelectPaint;
+    private int mSelectStroke;
+    private CategoryAdapter mAdapter;
     public FilterIconButton(Context context) {
         super(context);
     }
@@ -57,11 +67,17 @@
         super(context, attrs, defStyle);
     }
 
-    public void setup(String text, LinearLayout parent) {
+    public void setup(String text, LinearLayout parent, CategoryAdapter adapter) {
+        mAdapter = adapter;
         setText(text);
         setContentDescription(text);
         super.setOnClickListener(this);
+        Resources res = getContext().getResources();
         MasterImage.getImage().addGeometryListener(this);
+        mSelectStroke = res.getDimensionPixelSize(R.dimen.thumbnail_margin);
+        mSelectPaint = new Paint();
+        mSelectPaint.setStyle(Paint.Style.FILL);
+        mSelectPaint.setColor(res.getColor(R.color.filtershow_category_selection));
         invalidate();
     }
 
@@ -69,6 +85,7 @@
     public void onClick(View v) {
         FilterShowActivity activity = (FilterShowActivity) getContext();
         activity.showRepresentation(mFilterRepresentation);
+        mAdapter.setSelected(v);
     }
 
     public FilterRepresentation getFilterRepresentation() {
@@ -113,6 +130,20 @@
         } else {
             super.onDraw(canvas);
         }
+        if (mAdapter.isSelected(this)) {
+            Drawable iconDrawable = getCompoundDrawables()[1];
+            if (iconDrawable != null) {
+                canvas.save();
+                int padding = getCompoundDrawablePadding();
+                canvas.translate(getScrollX() + padding + getPaddingLeft() - mSelectStroke - 1,
+                        getScrollY() + padding + getPaddingTop() - mSelectStroke - 1);
+                Rect r = iconDrawable.getBounds();
+                SelectionRenderer.drawSelection(canvas, r.left, r.top,
+                        r.right + 2 * mSelectStroke + 2, r.bottom + 2 * mSelectStroke + 2,
+                        mSelectStroke, mSelectPaint);
+                canvas.restore();
+            }
+        }
     }
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java b/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java
new file mode 100644
index 0000000..1b108bd
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/ui/SelectionRenderer.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2013 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.gallery3d.filtershow.ui;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+
+public class SelectionRenderer {
+
+    public static void drawSelection(Canvas canvas, int left, int top, int right, int bottom,
+            int stroke, Paint paint) {
+        canvas.drawRect(left, top, right, top + stroke, paint);
+        canvas.drawRect(left, bottom - stroke, right, bottom, paint);
+        canvas.drawRect(left, top, left + stroke, bottom, paint);
+        canvas.drawRect(right - stroke, top, right, bottom, paint);
+    }
+
+}
