diff --git a/res/drawable/adjust.xml b/res/drawable/adjust.xml
index 3ce4ed2..ac0cff0 100644
--- a/res/drawable/adjust.xml
+++ b/res/drawable/adjust.xml
@@ -34,5 +34,5 @@
         android:viewportHeight="12.0">
     <path
         android:pathData="M5.984,6.016m-5.859,0a5.859,5.859 0,1 1,11.718 0a5.859,5.859 0,1 1,-11.718 0"
-        android:fillColor="#00E3FF"/>
+        android:fillColor="#4f92e9"/>
 </vector>
diff --git a/res/drawable/crop_1_1.xml b/res/drawable/crop_1_1.xml
new file mode 100644
index 0000000..332eff7
--- /dev/null
+++ b/res/drawable/crop_1_1.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M3,3L3,87L87,87L87,3L3,3ZM78.99,78.99L11.01,78.99L11.01,11.01L78.99,11.01L78.99,78.99Z"/>
+</vector>
diff --git a/res/drawable/crop_1_1_select.xml b/res/drawable/crop_1_1_select.xml
new file mode 100644
index 0000000..8928707
--- /dev/null
+++ b/res/drawable/crop_1_1_select.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF4F92E9" android:pathData="M3,3L3,87L87,87L87,3L3,3ZM78.99,78.99L11.01,78.99L11.01,11.01L78.99,11.01L78.99,78.99Z"/>
+</vector>
diff --git a/res/drawable/crop_crop.xml b/res/drawable/crop_crop.xml
new file mode 100644
index 0000000..0272da2
--- /dev/null
+++ b/res/drawable/crop_crop.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M15,67C15,71.42 18.58,75 23,75L23,75L67,75L67,87L75,87L75,75L87,75L87,67L23,67L23,3L15,3L15,15L3,15L3,23L15,23L15,67ZM67,59L75,59L75,23C75,18.58 71.42,15 67,15L31,15L31,23L67,23L67,59Z"/>
+</vector>
diff --git a/res/drawable/crop_free.xml b/res/drawable/crop_free.xml
new file mode 100644
index 0000000..eac62fb
--- /dev/null
+++ b/res/drawable/crop_free.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M11,62L3,62L3,87L28,87L28,79L11,79L11,62ZM79,79L62,79L62,87L87,87L87,62L79,62L79,79ZM3,28L11,28L11,11L28,11L28,3L3,3L3,28ZM62,3L62,11L79,11L79,28L87,28L87,3L62,3Z"/>
+</vector>
diff --git a/res/drawable/crop_free_background.xml b/res/drawable/crop_free_background.xml
new file mode 100644
index 0000000..4404d4e
--- /dev/null
+++ b/res/drawable/crop_free_background.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/crop_free" android:state_selected="false"></item>
+    <item android:drawable="@drawable/crop_free_select" android:state_selected="true"></item>
+</selector>
\ No newline at end of file
diff --git a/res/drawable/crop_free_select.xml b/res/drawable/crop_free_select.xml
new file mode 100644
index 0000000..f246997
--- /dev/null
+++ b/res/drawable/crop_free_select.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF4F92E9" android:pathData="M11,62L3,62L3,87L28,87L28,79L11,79L11,62ZM79,79L62,79L62,87L87,87L87,62L79,62L79,79ZM3,28L11,28L11,11L28,11L28,3L3,3L3,28ZM62,3L62,11L79,11L79,28L87,28L87,3L62,3Z"/>
+</vector>
diff --git a/res/drawable/crop_one_background.xml b/res/drawable/crop_one_background.xml
new file mode 100644
index 0000000..aa035ed
--- /dev/null
+++ b/res/drawable/crop_one_background.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/crop_1_1" android:state_selected="false"></item>
+    <item android:drawable="@drawable/crop_1_1_select" android:state_selected="true"></item>
+</selector>
\ No newline at end of file
diff --git a/res/drawable/crop_original.xml b/res/drawable/crop_original.xml
new file mode 100644
index 0000000..91eef6c
--- /dev/null
+++ b/res/drawable/crop_original.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M9,1L9,89L81,89L81,1L9,1ZM17,46L44,46L44,81L17,81L17,46ZM73,81L48,81L48,42L17,42L17,9L73,9L73,81Z"/>
+</vector>
diff --git a/res/drawable/crop_original_background.xml b/res/drawable/crop_original_background.xml
new file mode 100644
index 0000000..eafe861
--- /dev/null
+++ b/res/drawable/crop_original_background.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/crop_original" android:state_selected="false"></item>
+    <item android:drawable="@drawable/crop_original_select" android:state_selected="true"></item>
+</selector>
\ No newline at end of file
diff --git a/res/drawable/crop_original_select.xml b/res/drawable/crop_original_select.xml
new file mode 100644
index 0000000..3bb0f76
--- /dev/null
+++ b/res/drawable/crop_original_select.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF4F92E9" android:pathData="M9,1L9,89L81,89L81,1L9,1ZM17,46L44,46L44,81L17,81L17,46ZM73,81L48,81L48,42L17,42L17,9L73,9L73,81Z"/>
+</vector>
diff --git a/res/drawable/crop_rotate.xml b/res/drawable/crop_rotate.xml
new file mode 100644
index 0000000..8caf459
--- /dev/null
+++ b/res/drawable/crop_rotate.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="90.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M45,5C32.42,5 21.21,10.81 13.88,19.88L5,11L5.01,33.99L6.55,33.99C6.55,33.99 6.55,34 6.54,34L14.94,34C14.94,34 14.94,33.99 14.95,33.99L27.99,33.99L19.57,25.57C25.42,17.93 34.63,13 45,13C62.67,13 77,27.33 77,45C77,62.67 62.67,77 45,77C27.33,77 13,62.67 13,45L5,45C5,67.09 22.91,85 45,85C67.09,85 85,67.09 85,45C85,22.91 67.09,5 45,5Z"/>
+</vector>
diff --git a/res/drawable/crop_straighten.xml b/res/drawable/crop_straighten.xml
new file mode 100644
index 0000000..9fda1f4
--- /dev/null
+++ b/res/drawable/crop_straighten.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:height="24dp" android:viewportHeight="90.0"
+    android:viewportWidth="89.844" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M87.85,22.54L73.87,22.54L73.87,29.53L82.86,29.53L82.86,75.44L48.91,75.44L48.91,82.43L87.85,82.43C88.95,82.43 89.84,81.53 89.84,80.43L89.84,24.54C89.84,23.44 88.95,22.54 87.85,22.54ZM74.82,64.32L65.09,9.23C64.9,8.15 63.86,7.42 62.77,7.61L1.66,18.37C0.57,18.56 -0.16,19.6 0.03,20.68L9.77,75.77C9.96,76.86 11,77.59 12.09,77.39L73.2,66.64C74.29,66.45 75.01,65.41 74.82,64.32ZM44.55,36.57L31.7,61L21.53,51.79L14.88,64.43L7.8,24.39L59.06,15.37L66.28,56.22L44.55,36.57Z"/>
+</vector>
diff --git a/res/drawable/sliderbg.xml b/res/drawable/sliderbg.xml
index 974ab91..efc809f 100644
--- a/res/drawable/sliderbg.xml
+++ b/res/drawable/sliderbg.xml
@@ -35,5 +35,5 @@
     <path
         android:pathData="M0,1h216v2h-216z"
         android:fillAlpha="0.2"
-        android:fillColor="#FFFFFF"/>
+        android:fillColor="#99FFFFFF"/>
 </vector>
diff --git a/res/drawable/sliderprogress.xml b/res/drawable/sliderprogress.xml
index 9ca10b6..5c2b541 100644
--- a/res/drawable/sliderprogress.xml
+++ b/res/drawable/sliderprogress.xml
@@ -34,5 +34,5 @@
         android:viewportHeight="4.0">
     <path
         android:pathData="M0,1h216v2h-216z"
-        android:fillColor="#00E3FF"/>
+        android:fillColor="#4f92e9"/>
 </vector>
diff --git a/res/layout-land/filtershow_category_panel_new.xml b/res/layout-land/filtershow_category_panel_new.xml
deleted file mode 100644
index 26b92e7..0000000
--- a/res/layout-land/filtershow_category_panel_new.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@color/edit_actionbar_background"
-    android:orientation="horizontal" >
-
-    <!-- <com.android.gallery3d.filtershow.category.IconView -->
-    <!-- android:id="@+id/addButton" -->
-    <!-- android:layout_width="match_parent" -->
-    <!-- android:layout_height="@dimen/category_panel_height" -->
-    <!-- android:src="@drawable/filtershow_add"/> -->
-
-
-    <!-- <ListView -->
-    <!-- android:id="@+id/listItems" -->
-    <!-- android:orientation="vertical" -->
-    <!-- android:layout_width="match_parent" -->
-    <!-- android:layout_height="@dimen/category_panel_height" -->
-    <!-- android:layout_margin="8dip" -->
-    <!-- android:divider="@android:color/transparent" -->
-    <!-- android:dividerHeight="8dip" -->
-    <!-- android:layout_weight="1"/> -->
-
-    <HorizontalScrollView
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:scrollbars="none" >
-
-        <com.android.gallery3d.filtershow.category.CategoryTrack
-            android:id="@+id/listItems"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/category_panel_height"
-            android:divider="@android:color/transparent"
-            android:dividerPadding="8dip"
-            custom:iconSize="@dimen/category_panel_icon_size" />
-    </HorizontalScrollView>
-
-    <com.android.gallery3d.filtershow.category.IconView
-        android:id="@+id/addButton"
-        android:layout_width="@dimen/category_panel_height"
-        android:layout_height="@dimen/category_panel_height"
-        android:src="@drawable/filtershow_add" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-land/filtershow_editor_panel.xml b/res/layout-land/filtershow_editor_panel.xml
deleted file mode 100644
index 59885e0..0000000
--- a/res/layout-land/filtershow_editor_panel.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/top"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:visibility="visible" >
-
-    <!-- <RelativeLayout -->
-    <!-- android:layout_width="match_parent" -->
-    <!-- android:layout_height="match_parent" > -->
-
-    <Button
-        android:id="@+id/toggle_state"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentTop="true"
-        android:background="@color/background_main_toolbar"
-        android:text="@string/imageState"
-        android:visibility="gone" />
-
-    <!-- <LinearLayout -->
-    <!-- android:id="@+id/applyBar" -->
-    <!-- android:layout_width="match_parent" -->
-    <!-- android:layout_height="48dip" -->
-    <!-- android:layout_above="@id/bottomControlLineBottom" -->
-    <!-- android:background="@color/background_main_toolbar" -->
-    <!-- android:baselineAligned="false" -->
-    <!-- android:orientation="horizontal" -->
-    <!-- android:visibility="visible" > -->
-
-
-    <!-- <ImageButton -->
-    <!-- android:id="@+id/cancelFilter" -->
-    <!-- android:layout_width="wrap_content" -->
-    <!-- android:layout_height="fill_parent" -->
-    <!-- android:layout_gravity="left|center_vertical" -->
-    <!-- android:layout_weight=".1" -->
-    <!-- android:background="@android:color/transparent" -->
-    <!-- android:gravity="center" -->
-    <!-- android:src="@drawable/ic_menu_cancel_holo_light" -->
-    <!-- android:textSize="18dip" /> -->
-
-
-    <!-- <LinearLayout -->
-    <!-- android:id="@+id/panelAccessoryViewList" -->
-    <!-- android:layout_width="wrap_content" -->
-    <!-- android:layout_height="match_parent" -->
-    <!-- android:layout_weight="1" -->
-    <!-- android:orientation="horizontal" -->
-    <!-- android:visibility="visible" > -->
-
-
-    <!-- <com.android.gallery3d.filtershow.editors.SwapButton -->
-    <!-- android:id="@+id/applyEffect" -->
-    <!-- android:layout_width="fill_parent" -->
-    <!-- android:layout_height="fill_parent" -->
-    <!-- android:layout_gravity="center" -->
-    <!-- android:background="@android:color/transparent" -->
-    <!-- android:drawableEnd="@drawable/filtershow_menu_marker_rtl" -->
-    <!-- android:text="@string/apply_effect" -->
-    <!-- android:textSize="18dip" /> -->
-    <!-- </LinearLayout> -->
-
-
-    <!-- <ImageButton -->
-    <!-- android:id="@+id/applyFilter" -->
-    <!-- android:layout_width="wrap_content" -->
-    <!-- android:layout_height="fill_parent" -->
-    <!-- android:layout_gravity="right|center_vertical" -->
-    <!-- android:layout_weight=".1" -->
-    <!-- android:background="@android:color/transparent" -->
-    <!-- android:gravity="center" -->
-    <!-- android:src="@drawable/ic_menu_done_holo_light" -->
-    <!-- android:textSize="18dip" /> -->
-    <!-- </LinearLayout> -->
-
-    <LinearLayout
-        android:id="@+id/controlArea"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="bottom"
-        android:orientation="horizontal"
-        android:visibility="visible" >
-
-        <SeekBar
-            android:id="@+id/primarySeekBar"
-            style="@style/FilterShowSlider"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:visibility="gone" />
-    </LinearLayout>
-    <!-- </RelativeLayout> -->
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/filtershow_actionbar.xml b/res/layout/filtershow_actionbar.xml
index 7e6d625..a23ca80 100644
--- a/res/layout/filtershow_actionbar.xml
+++ b/res/layout/filtershow_actionbar.xml
@@ -27,7 +27,7 @@
         android:scaleType="fitCenter"
         android:src="@drawable/cancel"
         android:layout_gravity="left|center_vertical"
-        android:paddingStart="16dp" />
+        android:paddingStart="6dp" />
 
     <TextView
         android:id="@+id/filtershow_done"
@@ -36,6 +36,7 @@
         android:paddingRight="13dp"
         android:textSize="17sp"
         android:text="@string/save"
+        android:textAllCaps="true"
         android:layout_gravity="center_vertical|right"
         android:textColor="#ffffff" />
 
diff --git a/res/layout/filtershow_category_geometry_panel.xml b/res/layout/filtershow_category_geometry_panel.xml
new file mode 100644
index 0000000..92dc359
--- /dev/null
+++ b/res/layout/filtershow_category_geometry_panel.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@android:color/transparent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/category_panel_height"
+        android:background="@android:color/transparent"
+        android:clickable="true"
+        android:orientation="horizontal">
+
+        <LinearLayout
+            android:id="@+id/leftPanel"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:background="@android:color/transparent"
+            android:orientation="vertical" >
+
+            <ImageButton
+                android:id="@+id/leftButton"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/crop_icon_size"
+                android:scaleType="centerInside"
+                android:background="@android:color/transparent"
+                android:layout_marginTop="@dimen/crop_icon_margin_padding" />
+
+            <TextView
+                android:id="@+id/leftText"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:clickable="true"
+                android:background="@android:color/transparent"
+                android:layout_marginTop="@dimen/crop_text_margin_padding"
+                android:textColor="#ffffff"
+                android:textSize="12sp" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/centerPanel"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:clickable="true"
+            android:background="@android:color/transparent"
+            android:orientation="vertical">
+
+            <ImageButton
+                android:id="@+id/centerButton"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/crop_icon_size"
+                android:scaleType="centerInside"
+                android:background="@android:color/transparent"
+                android:layout_marginTop="@dimen/crop_icon_margin_padding" />
+
+            <TextView
+                android:id="@+id/centerText"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:clickable="true"
+                android:background="@android:color/transparent"
+                android:layout_marginTop="@dimen/crop_text_margin_padding"
+                android:textColor="#ffffff"
+                android:textSize="12sp" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/rightPanel"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:clickable="true"
+            android:background="@android:color/transparent"
+            android:orientation="vertical">
+
+            <ImageButton
+                android:id="@+id/rightButton"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/crop_icon_size"
+                android:scaleType="centerInside"
+                android:layout_marginTop="@dimen/crop_icon_margin_padding"
+                android:background="@android:color/transparent" />
+
+            <TextView
+                android:id="@+id/rightText"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:clickable="true"
+                android:background="@android:color/transparent"
+                android:layout_marginTop="@dimen/crop_text_margin_padding"
+                android:textColor="#ffffff"
+                android:textSize="12sp" />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <FrameLayout
+        android:id="@+id/bottom_panel"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/category_actionbar_panel_height"
+        android:background="@color/edit_actionbar_background"
+        android:visibility="gone">
+
+        <ImageButton
+            android:id="@+id/cancel"
+            android:layout_width="@dimen/category_actionbar_panel_height"
+            android:layout_height="@dimen/category_actionbar_panel_height"
+            android:background="@color/edit_actionbar_background"
+            android:src="@drawable/cancel" />
+
+        <TextView
+            android:id="@+id/editor_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="16sp"
+            android:textColor="#fff"
+            android:layout_gravity="center"/>
+
+        <ImageButton
+            android:id="@+id/done"
+            android:layout_width="@dimen/category_actionbar_panel_height"
+            android:layout_height="@dimen/category_actionbar_panel_height"
+            android:background="@color/edit_actionbar_background"
+            android:layout_gravity="right"
+            android:src="@drawable/done" />
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/res/layout/filtershow_editor_panel.xml b/res/layout/filtershow_editor_panel.xml
index 8fc01ec..b7ec266 100644
--- a/res/layout/filtershow_editor_panel.xml
+++ b/res/layout/filtershow_editor_panel.xml
@@ -22,6 +22,15 @@
     android:orientation="vertical"
     android:visibility="visible" >
 
+    <Button
+        android:id="@+id/toggle_state"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:background="@color/background_main_toolbar"
+        android:text="@string/imageState"
+        android:visibility="gone"/>
+
     <!-- <View -->
     <!-- android:layout_width="match_parent" -->
     <!-- android:layout_height="1dip" -->
diff --git a/res/layout/filtershow_seekbar.xml b/res/layout/filtershow_seekbar.xml
index f4d5577..5b884ae 100644
--- a/res/layout/filtershow_seekbar.xml
+++ b/res/layout/filtershow_seekbar.xml
@@ -22,49 +22,31 @@
     android:orientation="horizontal"
     android:visibility="visible" >
 
-    <LinearLayout
-        android:id="@+id/basicFilterContainer"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" >
-
-        <TextView
-            android:id="@+id/tvFilterValue"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_gravity="left|center_vertical"
-            android:paddingLeft="23dp"
-            android:paddingTop="20dp"
-            android:textColor="#ffffff"
-            android:textSize="20sp"
-            android:visibility="gone" />
-
-        <TextView
-            android:id="@+id/tvFilterName"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_below="@+id/tvFilterValue"
-            android:layout_gravity="center_vertical"
-            android:paddingLeft="12dp"
-            android:paddingTop="14dp"
-            android:text="@string/apply_effect"
-            android:textColor="#ffffff"
-            android:textSize="14sp"
-            android:visibility="gone" />
-    </LinearLayout>
+    <ImageButton
+        android:id="@+id/slider_cancel"
+        android:layout_width="60dp"
+        android:layout_height="60dp"
+        android:src="@drawable/cancel"
+        android:layout_gravity="center_vertical"
+        android:background="#000000" />
 
     <SeekBar
         android:id="@+id/primarySeekBar"
         style="@style/FilterShowSlider"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="match_parent"
         android:layout_gravity="center_vertical|center_horizontal"
-        android:layout_marginRight="34dp"
         android:layout_toRightOf="@+id/tvFilterName"
-        android:layout_weight="1"
-        android:paddingTop="20dp"
-        android:visibility="gone" />
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
+        android:layout_weight="1" />
+
+    <ImageButton
+        android:id="@+id/slider_save"
+        android:layout_width="60dp"
+        android:layout_height="60dp"
+        android:src="@drawable/done"
+        android:layout_gravity="center_vertical"
+        android:background="#000000" />
 
 </LinearLayout>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index b664562..9fd9192 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -79,7 +79,7 @@
     <color name="toolbar_theme">#e53935</color>
     <color name="multiselect_background">#ffffff</color>
     <color name="edit_background">#212121</color>
-    <color name="edit_actionbar_background">#000000</color>
+    <color name="edit_actionbar_background">#8A000000</color>
     <color name="dialog_button_color">#009688</color>
     <color name="timeline_title_text_color">#26000000</color>
     <color name="timeline_title_number_text_color">#1a000000</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ea0ced6..6b5a515 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -185,6 +185,12 @@
     <dimen name="toolbar_height">84dp</dimen>
     <dimen name="slot_width_album">116dp</dimen>
     <dimen name="slot_height_album">116dp</dimen>
+    <dimen name="crop_icon_size">30dp</dimen>
+    <dimen name="crop_icon_margin_padding">20dp</dimen>
+    <dimen name="crop_text_margin_padding">6dp</dimen>
+    <dimen name="crop_rect_stroke">2dp</dimen>
+    <dimen name="crop_line_stroke">1dp</dimen>
+    <dimen name="crop_corner_length">14dp</dimen>
 
     <!-- configuration for album page in listview -->
     <integer name="albumlist_cols_land">1</integer>
diff --git a/res/values/filtershow_color.xml b/res/values/filtershow_color.xml
index 8d6bf04..a768e69 100644
--- a/res/values/filtershow_color.xml
+++ b/res/values/filtershow_color.xml
@@ -65,4 +65,5 @@
 
     <color name="iconview_bottom_color">#80000000</color>
     <color name="crop_panel_background_color">#A5000000</color>
+    <color name="crop_text_color">#4f92e9</color>
 </resources>
\ No newline at end of file
diff --git a/res/values/filtershow_strings.xml b/res/values/filtershow_strings.xml
index d3a4e7c..1a4d2cd 100644
--- a/res/values/filtershow_strings.xml
+++ b/res/values/filtershow_strings.xml
@@ -124,7 +124,7 @@
     <!--  Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
     <string name="aspect9to16_effect">16:9</string>
     <!--  Label for the aspect None effect [CHAR LIMIT=15] -->
-    <string name="aspectNone_effect">None</string>
+    <string name="aspectNone_effect">Free</string>
     <!--  Label for the aspect None effect [CHAR LIMIT=15] -->
     <string name="aspectOriginal_effect">@string/original</string>
     <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
diff --git a/res/values/filtershow_styles.xml b/res/values/filtershow_styles.xml
index 1e97acc..974b813 100644
--- a/res/values/filtershow_styles.xml
+++ b/res/values/filtershow_styles.xml
@@ -56,13 +56,11 @@
         <item name="android:indeterminateOnly">false</item>
         <item name="android:progressDrawable">@drawable/filtershow_slider</item>
         <item name="android:indeterminateDrawable">@drawable/filtershow_slider</item>
-        <item name="android:minHeight">13dip</item>
-        <item name="android:maxHeight">13dip</item>
+        <item name="android:minHeight">4dip</item>
+        <item name="android:maxHeight">4dip</item>
         <item name="android:thumb">@drawable/adjust</item>
-        <item name="android:thumbOffset">16dip</item>
+        <item name="android:thumbOffset">0dip</item>
         <item name="android:focusable">true</item>
-        <item name="android:paddingStart">16dip</item>
-        <item name="android:paddingEnd">16dip</item>
     </style>
 
 </resources>
\ No newline at end of file
diff --git a/res/values/filtershow_values.xml b/res/values/filtershow_values.xml
index 1af341e..c15df94 100644
--- a/res/values/filtershow_values.xml
+++ b/res/values/filtershow_values.xml
@@ -27,6 +27,8 @@
     <!-- Category Panel Icon Size -->
     <dimen name="category_panel_icon_size">80dip</dimen>
 
+    <dimen name="category_actionbar_panel_height">60dip</dimen>
+
     <!-- Category Panel Text Size -->
     <dimen name="category_panel_text_size">11dip</dimen>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f34f829..e4b02fc 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -35,7 +35,6 @@
     </style>
     <style name="Theme.FilterShow" parent="Theme.Gallery">
         <item name="android:windowBackground">@null</item>
-        <item name="android:windowTranslucentStatus">false</item>
         <item name="android:actionBarStyle">@style/FilterShowActionBar</item>
     </style>
     <style name="Theme.Crop" parent="Theme.GalleryBase">
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 39dfbd4..102aaaa 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -49,7 +49,6 @@
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v4.print.PrintHelper;
 import android.util.DisplayMetrics;
@@ -86,16 +85,18 @@
 import com.android.gallery3d.filtershow.category.CategoryAdapter;
 import com.android.gallery3d.filtershow.category.CategorySelected;
 import com.android.gallery3d.filtershow.category.CategoryView;
+import com.android.gallery3d.filtershow.category.EditorCropPanel;
 import com.android.gallery3d.filtershow.category.MainPanel;
+import com.android.gallery3d.filtershow.category.StraightenPanel;
 import com.android.gallery3d.filtershow.category.SwipableView;
 import com.android.gallery3d.filtershow.data.UserPresetsManager;
 import com.android.gallery3d.filtershow.editors.Editor;
+import com.android.gallery3d.filtershow.editors.EditorCrop;
 import com.android.gallery3d.filtershow.editors.EditorDualCamFusion;
 import com.android.gallery3d.filtershow.editors.EditorManager;
 import com.android.gallery3d.filtershow.editors.EditorPanel;
+import com.android.gallery3d.filtershow.editors.EditorStraighten;
 import com.android.gallery3d.filtershow.editors.ImageOnlyEditor;
-import com.android.gallery3d.filtershow.editors.TrueScannerEditor;
-import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterRotateRepresentation;
@@ -103,7 +104,6 @@
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilter;
 import com.android.gallery3d.filtershow.filters.SimpleMakeupImageFilter;
-import com.android.gallery3d.filtershow.filters.TrueScannerActs;
 import com.android.gallery3d.filtershow.history.HistoryItem;
 import com.android.gallery3d.filtershow.history.HistoryManager;
 import com.android.gallery3d.filtershow.imageshow.ImageShow;
@@ -327,11 +327,50 @@
 
     public void loadEditorPanel(FilterRepresentation representation,
                                 final Editor currentEditor) {
+        if (currentEditor.showsActionBar()) {
+            setActionBar();
+            showActionBar(true);
+        } else {
+            showActionBar(false);
+        }
+
         if (representation.getEditorId() == ImageOnlyEditor.ID) {
             currentEditor.reflectCurrentFilter();
             return;
         }
         final int currentId = currentEditor.getID();
+        if (currentId == EditorCrop.ID) {
+            new Runnable() {
+                @Override
+                public void run() {
+                    EditorCropPanel panel = new EditorCropPanel();
+                    FragmentTransaction transaction =
+                            getSupportFragmentManager().beginTransaction();
+                    transaction.remove(getSupportFragmentManager().findFragmentByTag(
+                            MainPanel.FRAGMENT_TAG));
+                    transaction.replace(R.id.main_panel_container, panel,
+                            MainPanel.FRAGMENT_TAG);
+                    transaction.commit();
+                }
+            }.run();
+            return;
+        }
+        if (currentId == EditorStraighten.ID) {
+            new Runnable() {
+                @Override
+                public void run() {
+                    StraightenPanel panel = new StraightenPanel();
+                    FragmentTransaction transaction =
+                            getSupportFragmentManager().beginTransaction();
+                    transaction.remove(getSupportFragmentManager().findFragmentByTag(
+                            MainPanel.FRAGMENT_TAG));
+                    transaction.replace(R.id.main_panel_container, panel,
+                            MainPanel.FRAGMENT_TAG);
+                    transaction.commit();
+                }
+            }.run();
+            return;
+        }
         Runnable showEditor = new Runnable() {
             @Override
             public void run() {
@@ -404,9 +443,8 @@
 
                     HistoryManager adapter = mMasterImage.getHistory();
                     int position = adapter.backToOriginal();// adapter.undo();
-                    mMasterImage.onHistoryItemClick(position);
+                    mMasterImage.onHistoryItemClick(position, false);
                     v.setPressed(true);
-                    backToMain();
                     invalidateViews();
                 }
                 if (action == MotionEvent.ACTION_UP
@@ -415,7 +453,7 @@
                     v.setPressed(false);
                     HistoryManager adapter = mMasterImage.getHistory();
                     int position = adapter.backToCurrent();
-                    mMasterImage.onHistoryItemClick(position);
+                    mMasterImage.onHistoryItemClick(position, false);
                     invalidateViews();
 
                 }
@@ -430,12 +468,21 @@
                 imgComparison.setVisibility(View.GONE);
     }
 
+    private void showSaveButtonIfNeed() {
+        if (MasterImage.getImage().hasModifications()) {
+            mSaveButton.setVisibility(View.VISIBLE);
+        } else {
+            mSaveButton.setVisibility(View.GONE);
+        }
+    }
+
     public void setActionBar() {
         setActionBar(false);
     }
 
     public void setActionBar(boolean isEffectClicked) {
         ActionBar actionBar = getActionBar();
+        actionBar.setShowHideAnimationEnabled(false);
         actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
         actionBar.setBackgroundDrawable(new ColorDrawable(getResources()
                 .getColor(R.color.edit_actionbar_background)));
@@ -452,6 +499,9 @@
                 saveImage();
             }
         });
+
+        showSaveButtonIfNeed();
+
         mExitButton = actionBar.getCustomView().findViewById(R.id.filtershow_exit);
         mExitButton.setOnClickListener(new OnClickListener() {
             @Override
@@ -515,6 +565,21 @@
         }
     }
 
+    private void showActionBar(boolean show) {
+        ActionBar actionBar = getActionBar();
+        if (actionBar != null ) {
+            if (show) {
+                if (!actionBar.isShowing()) {
+                    actionBar.show();
+                }
+            } else {
+                if (actionBar.isShowing()) {
+                    actionBar.hide();
+                }
+            }
+        }
+    }
+
     public void cancelCurrentFilter() {
         MasterImage masterImage = MasterImage.getImage();
         HistoryManager adapter = masterImage.getHistory();
@@ -924,6 +989,7 @@
                 FilterRepresentation filterRepresentation = representation.copy();
                 MasterImage.getImage().setPreset(copy, filterRepresentation, true);
                 MasterImage.getImage().setCurrentFilterRepresentation(null);
+                showSaveButtonIfNeed();
                 return;
             }
         }
@@ -1349,6 +1415,9 @@
         //MenuItem redoItem = mMenu.findItem(R.id.redoButton);
         MenuItem resetItem = mMenu.findItem(R.id.resetHistoryButton);
         //mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem);
+        if (!mMasterImage.hasModifications()) {
+            mMenu.removeItem(R.id.resetHistoryButton);
+        }
     }
 
     @Override
@@ -1634,6 +1703,7 @@
         mMasterImage.setPreset(original, rep, true);
         invalidateViews();
         backToMain();
+        showSaveButtonIfNeed();
     }
 
     public void showDefaultImageView() {
@@ -1648,19 +1718,25 @@
     }
 
     public void backToMain() {
+        showActionBar(true);
         Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG);
         if (currentPanel instanceof MainPanel) {
             return;
         }
         loadMainPanel();
         showDefaultImageView();
+        showComparisonButton();
+    }
+
+    private void showComparisonButton() {
+        if (imgComparison != null && imgComparison.getVisibility() == View.GONE) {
+            imgComparison.setVisibility(View.VISIBLE);
+        }
     }
 
     @Override
     public void onBackPressed() {
-        if (imgComparison != null && imgComparison.getVisibility() == View.GONE) {
-            imgComparison.setVisibility(View.VISIBLE);
-        }
+        showComparisonButton();
         Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(
                 MainPanel.FRAGMENT_TAG);
 
diff --git a/src/com/android/gallery3d/filtershow/category/BasicGeometryPanel.java b/src/com/android/gallery3d/filtershow/category/BasicGeometryPanel.java
new file mode 100644
index 0000000..30d8740
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/BasicGeometryPanel.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.gallery3d.filtershow.category;
+
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.android.gallery3d.R;
+
+public class BasicGeometryPanel extends Fragment {
+    protected View mMainView;
+    protected ImageButton mExitButton;
+    protected ImageButton mApplyButton;
+    protected View mBottomPanel;
+    protected TextView mEditorName;
+
+    protected ImageButton[] mButtons;
+    protected TextView[] mTextViews;
+    protected View[] mPanels;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        mMainView = inflater.inflate(R.layout.filtershow_category_geometry_panel, container, false);
+        mEditorName = (TextView) mMainView.findViewById(R.id.editor_name);
+
+        initButtons();
+        initTexts();
+        initPanels();
+
+        mBottomPanel = mMainView.findViewById(R.id.bottom_panel);
+
+        mExitButton = (ImageButton) mMainView.findViewById(R.id.cancel);
+        mApplyButton = (ImageButton) mMainView.findViewById(R.id.done);
+        return mMainView;
+    }
+
+    protected void initButtons() {
+        mButtons = new ImageButton[] {
+                (ImageButton) mMainView.findViewById(R.id.leftButton),
+                (ImageButton) mMainView.findViewById(R.id.centerButton),
+                (ImageButton) mMainView.findViewById(R.id.rightButton)
+        };
+    }
+
+    protected void initTexts() {
+        mTextViews = new TextView[] {
+                (TextView) mMainView.findViewById(R.id.leftText),
+                (TextView) mMainView.findViewById(R.id.centerText),
+                (TextView) mMainView.findViewById(R.id.rightText)
+        };
+    }
+
+    protected void initPanels() {
+        mPanels = new View[] {
+                mMainView.findViewById(R.id.leftPanel),
+                mMainView.findViewById(R.id.centerPanel),
+                mMainView.findViewById(R.id.rightPanel)
+        };
+    }
+}
diff --git a/src/com/android/gallery3d/filtershow/category/EditorCropPanel.java b/src/com/android/gallery3d/filtershow/category/EditorCropPanel.java
new file mode 100644
index 0000000..d98f79d
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/EditorCropPanel.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.gallery3d.filtershow.category;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.editors.EditorCrop;
+
+public class EditorCropPanel extends BasicGeometryPanel {
+    private EditorCrop mEditorCrop;
+
+    private int mSelectPosition = 0;
+
+    private final int[] mCropAspectIds = {
+            R.id.crop_menu_none,
+            R.id.crop_menu_original,
+            R.id.crop_menu_1to1
+    };
+
+    private final int[] mCropDrawableIds = {
+            R.drawable.crop_free_background,
+            R.drawable.crop_original_background,
+            R.drawable.crop_one_background
+    };
+
+    private final int[] mCropTextIds = {
+            R.string.aspectNone_effect,
+            R.string.aspectOriginal_effect,
+            R.string.aspect1to1_effect
+    };
+
+    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            int index = (int) v.getTag();
+            changeSelection(index);
+        }
+    };
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        FilterShowActivity filterShowActivity = (FilterShowActivity) activity;
+        mEditorCrop = (EditorCrop) filterShowActivity.getEditor(EditorCrop.ID);
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        mEditorName.setText(R.string.crop);
+        mMainView.setBackgroundColor(getContext().getResources().getColor(
+                R.color.edit_actionbar_background));
+
+        mBottomPanel.setVisibility(View.VISIBLE);
+
+        if (mEditorCrop != null) {
+            mEditorCrop.reflectCurrentFilter();
+        }
+
+        highlightIndex(mSelectPosition);
+
+        final FilterShowActivity activity = (FilterShowActivity) getActivity();
+        mApplyButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mEditorCrop.finalApplyCalled();
+                activity.backToMain();
+                activity.setActionBar(false);
+            }
+        });
+        mExitButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                activity.cancelCurrentFilter();
+                activity.backToMain();
+                activity.setActionBar(false);
+            }
+        });
+    }
+
+    @Override
+    protected void initButtons() {
+        super.initButtons();
+        int size = mButtons.length;
+        for (int i = 0; i < size; i++) {
+            ImageButton view = mButtons[i];
+            view.setImageDrawable(getResources().getDrawable(mCropDrawableIds[i]));
+            // ues tag to store index.
+            view.setTag(i);
+            view.setOnClickListener(mOnClickListener);
+        }
+    }
+
+    @Override
+    protected void initTexts() {
+        super.initTexts();
+        int size = mTextViews.length;
+        for (int i = 0; i < size; i++) {
+            TextView view = mTextViews[i];
+            view.setText(mCropTextIds[i]);
+        }
+    }
+
+    private void changeSelection(int index) {
+        if (index >= 0 && index < mButtons.length) {
+            mSelectPosition = index;
+            mEditorCrop.changeCropAspect(mCropAspectIds[index]);
+            highlightIndex(index);
+        }
+    }
+
+    private void highlightIndex(int index) {
+        int size = mButtons.length;
+        for (int i = 0; i < size; i++) {
+            View view = mButtons[i];
+            view.setSelected(index == i);
+        }
+        size = mTextViews.length;
+        for (int i = 0; i < size; i++) {
+            TextView view = mTextViews[i];
+            view.setTextColor(index == i ?
+                    getResources().getColor(R.color.crop_text_color) :
+                    Color.WHITE);
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        if (mEditorCrop != null) {
+            mEditorCrop.detach();
+        }
+        super.onDetach();
+    }
+}
diff --git a/src/com/android/gallery3d/filtershow/category/GeometryPanel.java b/src/com/android/gallery3d/filtershow/category/GeometryPanel.java
new file mode 100644
index 0000000..b0d3917
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/GeometryPanel.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.gallery3d.filtershow.category;
+
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FiltersManager;
+
+import java.util.ArrayList;
+
+public class GeometryPanel extends BasicGeometryPanel {
+
+    ArrayList<FilterRepresentation> mFiltersRepresentations;
+
+    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            int index = (int) v.getTag();
+            if (index >= 0 && index < mButtons.length) {
+                final FilterShowActivity activity = (FilterShowActivity) getActivity();
+                activity.showRepresentation(mFiltersRepresentations.get(index));
+            }
+        }
+    };
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        FiltersManager filtersManager = FiltersManager.getManager();
+        mFiltersRepresentations = filtersManager.getTools();
+        return super.onCreateView(inflater, container, savedInstanceState);
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+    }
+
+    @Override
+    protected void initButtons() {
+        super.initButtons();
+        Resources res = getActivity().getResources();
+        int size = mButtons.length;
+        for (int i = 0; i < size; i++) {
+            ImageButton view = mButtons[i];
+            view.setImageDrawable(res.getDrawable(mFiltersRepresentations.get(i).getOverlayId()));
+            // ues tag to store index.
+            view.setTag(i);
+            view.setOnClickListener(mOnClickListener);
+        }
+    }
+
+    @Override
+    protected void initTexts() {
+        super.initTexts();
+        Resources res = getActivity().getResources();
+        int size = mTextViews.length;
+        for (int i = 0; i < size; i++) {
+            TextView view = mTextViews[i];
+            view.setText(res.getString(mFiltersRepresentations.get(i).getTextId()));
+        }
+    }
+}
diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java
index ef554e6..c68f83c 100644
--- a/src/com/android/gallery3d/filtershow/category/MainPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java
@@ -228,7 +228,7 @@
         return true;
     }
 
-    private void setCategoryFragment(CategoryPanel category, boolean fromRight) {
+    private void setCategoryFragment(Fragment category, boolean fromRight) {
         FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
         FilterShowActivity activity = (FilterShowActivity) getActivity();
         if (fromRight) {
@@ -289,8 +289,7 @@
         }
         boolean fromRight = isRightAnimation(GEOMETRY);
         selection(mCurrentSelected, false);
-        CategoryPanel categoryPanel = new CategoryPanel();
-        categoryPanel.setAdapter(GEOMETRY);
+        GeometryPanel categoryPanel = new GeometryPanel();
         setCategoryFragment(categoryPanel, fromRight);
         mCurrentSelected = GEOMETRY;
         selection(mCurrentSelected, true);
diff --git a/src/com/android/gallery3d/filtershow/category/StraightenPanel.java b/src/com/android/gallery3d/filtershow/category/StraightenPanel.java
new file mode 100644
index 0000000..c3be2c9
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/StraightenPanel.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.gallery3d.filtershow.category;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.editors.EditorStraighten;
+
+public class StraightenPanel extends BasicGeometryPanel {
+    private EditorStraighten mEditorStraighten;
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        FilterShowActivity filterShowActivity = (FilterShowActivity) activity;
+        mEditorStraighten = (EditorStraighten) filterShowActivity.getEditor(EditorStraighten.ID);
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        mEditorName.setText(R.string.straighten);
+
+        mBottomPanel.setVisibility(View.VISIBLE);
+
+        final FilterShowActivity activity = (FilterShowActivity) getActivity();
+        mExitButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                activity.cancelCurrentFilter();
+                activity.backToMain();
+                activity.setActionBar(false);
+            }
+        });
+        mApplyButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mEditorStraighten.finalApplyCalled();
+                activity.backToMain();
+                activity.setActionBar(false);
+            }
+        });
+    }
+
+    @Override
+    protected void initPanels() {
+        super.initPanels();
+        int size = mPanels.length;
+        for (int i = 0; i < size; i++) {
+            View view = mPanels[i];
+            view.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        if (mEditorStraighten != null) {
+            mEditorStraighten.detach();
+        }
+        super.onDetach();
+    }
+}
diff --git a/src/com/android/gallery3d/filtershow/controller/BasicSlider.java b/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
index 1ff3e16..10ac659 100644
--- a/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
+++ b/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
@@ -21,17 +21,15 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
 import android.widget.SeekBar;
 import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
 
 import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.FilterShowActivity;
 import com.android.gallery3d.filtershow.editors.Editor;
 
 public class BasicSlider implements Control {
     private SeekBar mSeekBar;
-    private TextView mFilterValue,mFilterText;
     private ParameterInteger mParameter;
     Editor mEditor;
 
@@ -39,18 +37,38 @@
     public void setUp(ViewGroup container, Parameter parameter, Editor editor) {
         container.removeAllViews();
         mEditor = editor;
-        Context context = container.getContext();
+        final Context context = container.getContext();
         mParameter = (ParameterInteger) parameter;
         LayoutInflater inflater =
                 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         LinearLayout lp = (LinearLayout) inflater.inflate(
                 R.layout.filtershow_seekbar, container, true);
-        LinearLayout lpBasicFilterContainer = (LinearLayout) lp.findViewById(R.id.basicFilterContainer);
         mSeekBar = (SeekBar) lp.findViewById(R.id.primarySeekBar);
-        mFilterText = (TextView)lpBasicFilterContainer.findViewById(R.id.tvFilterName);
-        mFilterValue = (TextView)lpBasicFilterContainer.findViewById(R.id.tvFilterValue);
         mSeekBar.setVisibility(View.VISIBLE);
-        mEditor.setBasicFilterUI(mFilterText, mFilterValue);
+        View saveButton = lp.findViewById(R.id.slider_save);
+        if (saveButton != null) {
+            saveButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    FilterShowActivity activity = (FilterShowActivity) context;
+                    mEditor.finalApplyCalled();
+                    activity.backToMain();
+                    activity.setActionBar();
+                }
+            });
+        }
+        View cancelButton = lp.findViewById(R.id.slider_cancel);
+        if (cancelButton != null) {
+            cancelButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    FilterShowActivity activity = (FilterShowActivity) context;
+                    activity.cancelCurrentFilter();
+                    activity.backToMain();
+                    activity.setActionBar();
+                }
+            });
+        }
         updateUI();
         mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
 
diff --git a/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java b/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java
index df0f14f..8edbcba 100644
--- a/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java
+++ b/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java
@@ -16,6 +16,7 @@
 
 package com.android.gallery3d.filtershow.crop;
 
+import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Matrix;
@@ -25,13 +26,16 @@
 import android.graphics.Region;
 import android.graphics.drawable.Drawable;
 
+import com.android.gallery3d.R;
+
 public abstract class CropDrawingUtils {
 
-    public static void drawRuleOfThird(Canvas canvas, RectF bounds) {
+    public static void drawRuleOfThird(Canvas canvas, RectF bounds, Context context) {
         Paint p = new Paint();
         p.setStyle(Paint.Style.STROKE);
-        p.setColor(Color.argb(128, 255, 255, 255));
-        p.setStrokeWidth(2);
+        p.setColor(Color.argb(75, 255, 255, 255));
+        p.setStrokeWidth(context.getResources().getDimensionPixelOffset(
+                R.dimen.crop_line_stroke));
         float stepX = bounds.width() / 3.0f;
         float stepY = bounds.height() / 3.0f;
         float x = bounds.left + stepX;
@@ -46,14 +50,42 @@
         }
     }
 
-    public static void drawCropRect(Canvas canvas, RectF bounds) {
+    public static void drawCropRect(Canvas canvas, RectF bounds, Context context) {
         Paint p = new Paint();
         p.setStyle(Paint.Style.STROKE);
         p.setColor(Color.WHITE);
-        p.setStrokeWidth(3);
+        p.setAlpha(75);
+        p.setStrokeWidth(context.getResources().getDimensionPixelOffset(
+                R.dimen.crop_rect_stroke));
         canvas.drawRect(bounds, p);
     }
 
+    public static void drawCorner(Canvas canvas, RectF bounds, Context context) {
+        int strokeWidth = context.getResources().getDimensionPixelOffset(
+                R.dimen.crop_rect_stroke);
+        Paint p = new Paint();
+        p.setStyle(Paint.Style.FILL);
+        p.setColor(Color.WHITE);
+        p.setAntiAlias(true);
+        p.setStrokeWidth(strokeWidth);
+        float cornerLength = context.getResources().getDimensionPixelOffset(
+                R.dimen.crop_corner_length);
+        float rectWidth = bounds.right - bounds.left;
+        float rectHeight = bounds.bottom - bounds.top;
+        float x = 0;
+        float y = 0;
+        for (int i = 0; i < 2; i++) {
+            y = i * rectHeight + bounds.top + strokeWidth / 2;
+            canvas.drawLine(bounds.left - strokeWidth / 2, y, cornerLength + bounds.left, y, p);
+            canvas.drawLine(bounds.right - cornerLength, y, bounds.right + strokeWidth / 2, y, p);
+        }
+        for (int j = 0; j < 2; j++) {
+            x = j * rectWidth + bounds.left;
+            canvas.drawLine(x, bounds.top, x, bounds.top + cornerLength, p);
+            canvas.drawLine(x, bounds.bottom - cornerLength, x, bounds.bottom, p);
+        }
+    }
+
     public static void drawShade(Canvas canvas, RectF bounds) {
         int w = canvas.getWidth();
         int h = canvas.getHeight();
diff --git a/src/com/android/gallery3d/filtershow/crop/CropView.java b/src/com/android/gallery3d/filtershow/crop/CropView.java
index bbb7cfd..e1f4206 100644
--- a/src/com/android/gallery3d/filtershow/crop/CropView.java
+++ b/src/com/android/gallery3d/filtershow/crop/CropView.java
@@ -356,9 +356,10 @@
             CropDrawingUtils.drawShadows(canvas, p, mScreenCropBounds, mScreenImageBounds);
 
             // Draw crop rect and markers
-            CropDrawingUtils.drawCropRect(canvas, mScreenCropBounds);
+            CropDrawingUtils.drawCropRect(canvas, mScreenCropBounds, getContext());
+            CropDrawingUtils.drawCorner(canvas, mScreenCropBounds, getContext());
             if (!mDoSpot) {
-                CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds);
+                CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds, getContext());
             } else {
                 Paint wpPaint = new Paint();
                 wpPaint.setColor(mWPMarkerColor);
@@ -370,8 +371,6 @@
                 CropDrawingUtils.drawWallpaperSelectionFrame(canvas, mScreenCropBounds,
                         mSpotX, mSpotY, wpPaint, p);
             }
-            CropDrawingUtils.drawIndicators(canvas, mCropIndicator, mIndicatorSize,
-                    mScreenCropBounds, mCropObj.isFixedAspect(), decode(mCropObj.getSelectState(), mRotation));
         }
 
     }
diff --git a/src/com/android/gallery3d/filtershow/editors/Editor.java b/src/com/android/gallery3d/filtershow/editors/Editor.java
index d4d872a..6161f19 100644
--- a/src/com/android/gallery3d/filtershow/editors/Editor.java
+++ b/src/com/android/gallery3d/filtershow/editors/Editor.java
@@ -96,6 +96,12 @@
         return true;
     }
 
+    public boolean showsActionBar() {
+        // ActionBar is not need if has seek bar in default.
+        // Subclasses should override if need.
+        return !showsSeekBar();
+    }
+
     /*public void setUpEditorUI(View actionButton, View editControl,
                               Button editTitle, Button stateButton) {
         mEditTitle = editTitle;
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorCrop.java b/src/com/android/gallery3d/filtershow/editors/EditorCrop.java
index 6b19d3c..1f8b448 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorCrop.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorCrop.java
@@ -114,7 +114,7 @@
         });
     }
 
-    private void changeCropAspect(int itemId) {
+    public void changeCropAspect(int itemId) {
         AspectInfo info = sAspects.get(itemId);
         if (info == null) {
             throw new IllegalArgumentException("Invalid resource ID: " + itemId);
@@ -156,6 +156,11 @@
     }
 
     @Override
+    public boolean showsActionBar() {
+        return false;
+    }
+
+    @Override
     public int getTextId() {
         return R.string.crop;
     }
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java b/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
index d77df71..b2c0e9a 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
@@ -97,6 +97,11 @@
     }
 
     @Override
+    public boolean showsActionBar() {
+        return false;
+    }
+
+    @Override
     public boolean showsPopupIndicator() {
         return false;
     }
diff --git a/src/com/android/gallery3d/filtershow/editors/ImageOnlyEditor.java b/src/com/android/gallery3d/filtershow/editors/ImageOnlyEditor.java
index d4e66ed..0858a01 100644
--- a/src/com/android/gallery3d/filtershow/editors/ImageOnlyEditor.java
+++ b/src/com/android/gallery3d/filtershow/editors/ImageOnlyEditor.java
@@ -37,6 +37,11 @@
         super(id);
     }
 
+    @Override
+    public boolean showsActionBar() {
+        return true;
+    }
+
     public boolean useUtilityPanel() {
         return false;
     }
diff --git a/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
index 8398c31..d7b7f57 100644
--- a/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
+++ b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
@@ -79,7 +79,7 @@
         landscapeMap.put(ParameterColor.sParameterType, ColorChooser.class);
 
         portraitMap.put(ParameterInteger.sParameterType, BasicSlider.class);
-        landscapeMap.put(ParameterInteger.sParameterType, TitledSlider.class);
+        landscapeMap.put(ParameterInteger.sParameterType, BasicSlider.class);
         portraitMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
         landscapeMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
         portraitMap.put(ParameterStyles.sParameterType, StyleChooser.class);
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index b72b5d2..d9b28ce 100644
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -388,9 +388,9 @@
         };
 
         int[] overlayId = {
-                R.drawable.filtershow_button_geometry_crop,
-                R.drawable.filtershow_button_geometry_straighten,
-                R.drawable.filtershow_button_geometry_rotate
+                R.drawable.crop_crop,
+                R.drawable.crop_straighten,
+                R.drawable.crop_rotate
         };
 
         FilterRepresentation[] geometryFilters = {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
index 2161f9a..e2de11e 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
@@ -188,6 +188,8 @@
             x = y;
             y = tmp;
         }
+        RectF outer = mCropObj.getOuterBounds();
+        mCropObj.resetBoundsTo(outer, outer);
         if (!mCropObj.setInnerAspectRatio(x, y)) {
             Log.w(TAG, "failed to set aspect ratio");
         }
@@ -267,12 +269,17 @@
         // If display matrix doesn't exist, create it and its dependencies
         if (mDisplayCropMatrix == null || mDisplayMatrix == null || mDisplayMatrixInverse == null) {
             mCropObj.unsetAspectRatio();
+            Resources res = getContext().getResources();
+            int panelHeight = res.getDimensionPixelOffset(R.dimen.category_panel_height) +
+                    res.getDimensionPixelOffset(R.dimen.category_actionbar_panel_height);
             mDisplayMatrix = GeometryMathUtils.getFullGeometryToScreenMatrix(mGeometry,
-                    bitmap.getWidth(), bitmap.getHeight(), canvas.getWidth(), canvas.getHeight());
+                    bitmap.getWidth(), bitmap.getHeight(), canvas.getWidth(),
+                    canvas.getHeight() - panelHeight);
             float straighten = mGeometry.straighten;
             mGeometry.straighten = 0;
             mDisplayCropMatrix = GeometryMathUtils.getFullGeometryToScreenMatrix(mGeometry,
-                    bitmap.getWidth(), bitmap.getHeight(), canvas.getWidth(), canvas.getHeight());
+                    bitmap.getWidth(), bitmap.getHeight(), canvas.getWidth(),
+                    canvas.getHeight() - panelHeight);
             mGeometry.straighten = straighten;
             mDisplayMatrixInverse = new Matrix();
             mDisplayMatrixInverse.reset();
@@ -314,12 +321,10 @@
                 bitmap.getHeight());
         if (mDisplayCropMatrix.mapRect(mScreenCropBounds)) {
             // Draw crop rect and markers
-            CropDrawingUtils.drawCropRect(canvas, mScreenCropBounds);
             CropDrawingUtils.drawShade(canvas, mScreenCropBounds);
-            CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds);
-            CropDrawingUtils.drawIndicators(canvas, mCropIndicator, mIndicatorSize,
-                    mScreenCropBounds, mCropObj.isFixedAspect(),
-                    decode(mCropObj.getSelectState(), mGeometry.rotation.value()));
+            CropDrawingUtils.drawCropRect(canvas, mScreenCropBounds, getContext());
+            CropDrawingUtils.drawCorner(canvas, mScreenCropBounds, getContext());
+            CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds, getContext());
         }
     }
 
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
index 829af18..cec45f1 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
@@ -249,6 +249,7 @@
             MasterImage.getImage().invalidateFiltersOnly();
             return;
         }
+        toggleComparisonButtonVisibility();
         GeometryMathUtils.initializeHolder(mDrawHolder, mLocalRep);
         mDrawHolder.straighten = mAngle;
         int imageWidth = image.getWidth();
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index c1c9d69..b2aae85 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -334,6 +334,12 @@
     public synchronized void setPreset(ImagePreset preset,
                                        FilterRepresentation change,
                                        boolean addToHistory) {
+        setPreset(preset, change, addToHistory, true);
+    }
+
+    public synchronized void setPreset(ImagePreset preset,
+                                       FilterRepresentation change,
+                                       boolean addToHistory, boolean updateCategory) {
         if (DEBUG) {
             preset.showFilters();
         }
@@ -345,10 +351,16 @@
         }
         updatePresets(true);
         resetGeometryImages(false);
-        mActivity.updateCategories();
+        if (updateCategory) {
+            mActivity.updateCategories();
+        }
     }
 
     public void onHistoryItemClick(int position) {
+        onHistoryItemClick(position, true);
+    }
+
+    public void onHistoryItemClick(int position, boolean updateCategory) {
         HistoryItem historyItem = mHistory.getItem(position);
         // We need a copy from the history
         if (historyItem == null) {
@@ -356,7 +368,7 @@
         }
         ImagePreset newPreset = new ImagePreset(historyItem.getImagePreset());
         // don't need to add it to the history
-        setPreset(newPreset, historyItem.getFilterRepresentation(), false);
+        setPreset(newPreset, historyItem.getFilterRepresentation(), false, updateCategory);
         mHistory.setCurrentPreset(position);
     }
 
