diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index bbb3678..06fc5d6 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -51,6 +51,7 @@
  */
 public class AccessibilitySettings extends SettingsPreferenceFragment implements DialogCreatable,
         Preference.OnPreferenceChangeListener {
+
     private static final String DEFAULT_SCREENREADER_MARKET_LINK =
         "market://search?q=pname:com.google.android.marvin.talkback";
 
@@ -362,7 +363,6 @@
     private void persistEnabledAccessibilityServices() {
         StringBuilder builder = new StringBuilder(256);
 
-        int firstEnabled = -1;
         for (String key : mAccessibilityServices.keySet()) {
             CheckBoxPreference preference = (CheckBoxPreference) findPreference(key);
             if (preference.isChecked()) {
@@ -399,16 +399,18 @@
             String key = accessibilityServiceInfo.getId();
 
             if (mAccessibilityServices.put(key, accessibilityServiceInfo) == null) {
-                String settingsActivityName = accessibilityServiceInfo.getSettingsActivityName();
+                SettingsCheckBoxPreference preference = null;
                 Intent settingsIntent = null;
+                String settingsActivityName = accessibilityServiceInfo.getSettingsActivityName();
+
                 if (!TextUtils.isEmpty(settingsActivityName)) {
-                    String packageName = accessibilityServiceInfo.getResolveInfo()
-                        .serviceInfo.packageName;
                     settingsIntent = new Intent(Intent.ACTION_MAIN);
-                    settingsIntent.setClassName(packageName, settingsActivityName);
+                    settingsIntent.setClassName(
+                            accessibilityServiceInfo.getResolveInfo().serviceInfo.packageName,
+                            settingsActivityName);
                 }
-                SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference(
-                        getActivity(), settingsIntent);
+
+                preference = new SettingsCheckBoxPreference(getActivity(), settingsIntent);
                 preference.setKey(key);
                 preference.setOrder(i);
                 ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo;
diff --git a/src/com/android/settings/SettingsCheckBoxPreference.java b/src/com/android/settings/SettingsCheckBoxPreference.java
index 026e4e6..70b5ac1 100644
--- a/src/com/android/settings/SettingsCheckBoxPreference.java
+++ b/src/com/android/settings/SettingsCheckBoxPreference.java
@@ -38,14 +38,15 @@
     private final Intent mSettingsIntent;
 
     /**
-     * Creates a new instance.
+     * Creates a new instance. The constructor is checking whether the
+     * settings intent is resolved to an activity and acts accordingly.
      *
      * @param context Context for accessing resources.
-     * @param settingsIntent Intent to use as settings for the item represented by
+     * @param intent Intent to use as settings for the item represented by
      *        this preference. Pass <code>null</code> if there is no associated 
      *        settings activity.
      */
-    public SettingsCheckBoxPreference(Context context, Intent settingsIntent) {
+    public SettingsCheckBoxPreference(Context context, Intent intent) {
         super(context);
 
         if (sDimAlpha == Integer.MIN_VALUE) {
@@ -54,7 +55,13 @@
             sDimAlpha = (int) (outValue.getFloat() * 255);
         }
 
-        mSettingsIntent = settingsIntent;
+        if (intent != null
+                && !context.getPackageManager().queryIntentActivities(intent, 0).isEmpty()) {
+            mSettingsIntent = intent;
+        } else {
+            mSettingsIntent = null;
+        }
+
         setWidgetLayoutResource(R.layout.preference_settings_checkbox_widget);
     }
 
