diff --git a/src/com/android/gallery3d/photoeditor/EffectsBar.java b/src/com/android/gallery3d/photoeditor/EffectsBar.java
index 4075404..1510c2f 100644
--- a/src/com/android/gallery3d/photoeditor/EffectsBar.java
+++ b/src/com/android/gallery3d/photoeditor/EffectsBar.java
@@ -74,8 +74,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++) {
-            setupEffectListener((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;
+            }
+            setupEffectListener(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 6c6a893..c8e5d7d 100644
--- a/src/com/android/gallery3d/photoeditor/actions/EffectAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/EffectAction.java
@@ -149,6 +149,15 @@
     protected abstract void doEnd();
 
     /**
+     * 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 a82f330..dd7df18 100644
--- a/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/FaceTanAction.java
@@ -37,7 +37,6 @@
     @Override
     public void doBegin() {
         final FaceTanFilter filter = new FaceTanFilter();
-
         scalePicker = factory.createScalePicker(EffectToolFactory.ScalePickerType.GENERIC);
         scalePicker.setOnScaleChangeListener(new ScaleSeekBar.OnScaleChangeListener() {
 
@@ -59,4 +58,9 @@
     public void doEnd() {
         scalePicker.setOnScaleChangeListener(null);
     }
+
+    @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 90d4e0c..2cf71c0 100644
--- a/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java
+++ b/src/com/android/gallery3d/photoeditor/actions/FaceliftAction.java
@@ -37,7 +37,6 @@
     @Override
     public void doBegin() {
         final FaceliftFilter filter = new FaceliftFilter();
-
         scalePicker = factory.createScalePicker(EffectToolFactory.ScalePickerType.GENERIC);
         scalePicker.setOnScaleChangeListener(new ScaleSeekBar.OnScaleChangeListener() {
 
@@ -59,4 +58,9 @@
     public void doEnd() {
         scalePicker.setOnScaleChangeListener(null);
     }
+
+    @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);
+    }
 }
