diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2a69ce1..15b0198 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -7,7 +7,7 @@
 
     <original-package android:name="com.android.gallery3d" />
 
-    <uses-sdk android:minSdkVersion="14" />
+    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index f674c0b..144485d 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -142,7 +142,7 @@
                 }
             };
             mAlertDialog = new AlertDialog.Builder(this)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setTitle("No Storage")
                     .setMessage("No external storage available.")
                     .setNegativeButton(android.R.string.cancel, onClick)
diff --git a/src/com/android/gallery3d/photoeditor/EffectsBar.java b/src/com/android/gallery3d/photoeditor/EffectsBar.java
index fad0b90..88830be 100644
--- a/src/com/android/gallery3d/photoeditor/EffectsBar.java
+++ b/src/com/android/gallery3d/photoeditor/EffectsBar.java
@@ -71,8 +71,13 @@
         effectsGallery = inflater.inflate(R.layout.photoeditor_effects_gallery, this, false);
         ViewGroup scrollView = (ViewGroup) effectsGallery.findViewById(R.id.scroll_view);
         ViewGroup effects = (ViewGroup) inflater.inflate(effectsId, scrollView, false);
-        for (int i = 0; i < effects.getChildCount(); i++) {
-            setupEffect((EffectAction) effects.getChildAt(i));
+        for (int i = effects.getChildCount()-1; i >= 0; i--) {
+            EffectAction effect = (EffectAction) effects.getChildAt(i);
+            if( !effect.isPresent() ){
+                effects.removeViewAt(i);
+                continue;
+            }
+            setupEffect(effect);
         }
         scrollView.addView(effects);
         scrollView.scrollTo(0, 0);
diff --git a/src/com/android/gallery3d/photoeditor/actions/EffectAction.java b/src/com/android/gallery3d/photoeditor/actions/EffectAction.java
index 92bcee4..ce0ee63 100644
--- a/src/com/android/gallery3d/photoeditor/actions/EffectAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/EffectAction.java
@@ -144,6 +144,15 @@
     }
 
     /**
+     * Checks if the action effect is present in the system.
+     *
+     * @return boolean true if an action effect is present in the system and can be loaded
+     */
+    public boolean isPresent() {
+        return true;
+    }
+
+    /**
      * Done callback for executing top filter changes.
      */
     private class FilterChangedCallback implements OnDoneCallback {
diff --git a/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java b/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java
index 6b8f1d1..e66fc58 100644
--- a/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java
@@ -52,4 +52,9 @@
         filter.setScale(DEFAULT_SCALE);
         notifyChanged(filter);
     }
+
+    @Override
+    public boolean isPresent() {
+        return FaceTanFilter.isPresent();
+    }
 }
diff --git a/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java b/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java
index 4c1a918..6787d45 100644
--- a/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java
@@ -52,4 +52,9 @@
         filter.setScale(DEFAULT_SCALE);
         notifyChanged(filter);
     }
+
+    @Override
+    public boolean isPresent() {
+        return FaceliftFilter.isPresent();
+    }
 }
diff --git a/src/com/android/gallery3d/photoeditor/filters/FaceTanFilter.java b/src/com/android/gallery3d/photoeditor/filters/FaceTanFilter.java
index c52bb88..b7a1cf1 100644
--- a/src/com/android/gallery3d/photoeditor/filters/FaceTanFilter.java
+++ b/src/com/android/gallery3d/photoeditor/filters/FaceTanFilter.java
@@ -17,6 +17,7 @@
 package com.android.gallery3d.photoeditor.filters;
 
 import android.media.effect.Effect;
+import android.media.effect.EffectFactory;
 
 import com.android.gallery3d.photoeditor.Photo;
 
@@ -27,10 +28,22 @@
 
     public static final Creator<FaceTanFilter> CREATOR = creatorOf(FaceTanFilter.class);
 
+    private static final String EFFECT_FACE_TANNING = "com.google.android.media.effect.effects.FaceTanningEffect";
+
     @Override
     public void process(Photo src, Photo dst) {
-        Effect effect = getEffect("com.google.android.media.effect.effects.FaceTanningEffect");
+        Effect effect = getEffect(EFFECT_FACE_TANNING);
         effect.setParameter("blend", scale);
         effect.apply(src.texture(), src.width(), src.height(), dst.texture());
     }
+
+    /**
+     * Checks if the effect is present in the system.
+     *
+     * @return boolean true if an effect is present in the system and can be loaded
+     */
+    public static boolean isPresent() {
+        return EffectFactory.isEffectSupported(EFFECT_FACE_TANNING);
+    }
+
 }
diff --git a/src/com/android/gallery3d/photoeditor/filters/FaceliftFilter.java b/src/com/android/gallery3d/photoeditor/filters/FaceliftFilter.java
index c6ad84b..3e4fad2 100644
--- a/src/com/android/gallery3d/photoeditor/filters/FaceliftFilter.java
+++ b/src/com/android/gallery3d/photoeditor/filters/FaceliftFilter.java
@@ -17,6 +17,7 @@
 package com.android.gallery3d.photoeditor.filters;
 
 import android.media.effect.Effect;
+import android.media.effect.EffectFactory;
 
 import com.android.gallery3d.photoeditor.Photo;
 
@@ -27,10 +28,21 @@
 
     public static final Creator<FaceliftFilter> CREATOR = creatorOf(FaceliftFilter.class);
 
+    private static final String EFFECT_FACELIFT = "com.google.android.media.effect.effects.FaceliftEffect";
+
     @Override
     public void process(Photo src, Photo dst) {
-        Effect effect = getEffect("com.google.android.media.effect.effects.FaceliftEffect");
+        Effect effect = getEffect(EFFECT_FACELIFT);
         effect.setParameter("blend", scale);
         effect.apply(src.texture(), src.width(), src.height(), dst.texture());
     }
+
+    /**
+     * Checks if the effect is present in the system.
+     *
+     * @return boolean true if an effect is present in the system and can be loaded
+     */
+    public static boolean isPresent() {
+        return EffectFactory.isEffectSupported(EFFECT_FACELIFT);
+    }
 }
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index 3619ca0..101d592 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -393,7 +393,7 @@
                     if (!execute(manager, jc, mOperation, id)) {
                         result = EXECUTION_RESULT_FAIL;
                     }
-                    onProgressUpdate(index++, mListener);
+                    onProgressUpdate(++index, mListener);
                 }
             } catch (Throwable th) {
                 Log.e(TAG, "failed to execute operation " + mOperation
