diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7b554bb..7307dff 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2568,6 +2568,13 @@
     card numbers.  It comes from the app
     <xliff:g id="ime_application_name">%1$s</xliff:g>.
     Use this input method?</string>
+    <!-- Warning message about security implications of enabling a spell checker, displayed as a dialog
+         message when the user selects to enable a spell checker. -->
+    <string name="spellchecker_security_warning">This spell checker may be able to collect
+    all the text you type, including personal data like passwords and credit
+    card numbers.  It comes from the app
+    <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
+    Use this spell checker?</string>
     <!-- On Language & input settings screen, heading. Inside the "Language & input settings" screen, this is the header for settings that relate to mouse and trackpad devices. [CHAR LIMIT=40] -->
     <string name="pointer_settings_category">Mouse/trackpad</string>
     <!-- On Language & input settings screen, setting summary.  Setting for mouse pointer speed. [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
index d36e33c..ea3ddf4 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
@@ -38,7 +38,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 
diff --git a/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java b/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
index 753d1f0..2a62017 100644
--- a/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
+++ b/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
@@ -44,6 +44,7 @@
     private final SpellCheckersSettings mFragment;
     private final Resources mRes;
     private final TextServicesManager mTsm;
+    private AlertDialog mDialog = null;
     private TextView mTitleText;
     private TextView mSummaryText;
     private View mPrefAll;
@@ -127,6 +128,9 @@
     }
 
     private void onSubtypeButtonClicked(View arg0) {
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.dismiss();
+        }
         final AlertDialog.Builder builder = new AlertDialog.Builder(mFragment.getActivity());
         builder.setTitle(R.string.phone_language);
         final int size = mSpellCheckerInfo.getSubtypeCount();
@@ -167,7 +171,8 @@
                 dialog.dismiss();
             }
         });
-        builder.show();
+        mDialog = builder.create();
+        mDialog.show();
     }
 
     private void onSettingsButtonClicked(View arg0) {
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index b964999..d3e5181 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -19,14 +19,16 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 
+import android.app.AlertDialog;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
 import android.util.Log;
 import android.view.textservice.SpellCheckerInfo;
-import android.view.textservice.SpellCheckerSubtype;
 import android.view.textservice.TextServicesManager;
 
 import java.util.ArrayList;
@@ -36,6 +38,7 @@
     private static final String TAG = SpellCheckersSettings.class.getSimpleName();
     private static final boolean DBG = false;
 
+    private AlertDialog mDialog = null;
     private SpellCheckerInfo mCurrentSci;
     private SpellCheckerInfo[] mEnabledScis;
     private TextServicesManager mTsm;
@@ -96,17 +99,61 @@
     }
 
     @Override
-    public boolean onPreferenceClick(Preference arg0) {
+    public boolean onPreferenceClick(Preference pref) {
+        SingleSpellCheckerPreference targetScp = null;
         for (SingleSpellCheckerPreference scp : mSpellCheckers) {
-            if (arg0.equals(scp)) {
-                mTsm.setCurrentSpellChecker(scp.getSpellCheckerInfo());
+            if (pref.equals(scp)) {
+                targetScp = scp;
             }
         }
+        if (targetScp != null) {
+            if (!isSystemApp(targetScp.getSpellCheckerInfo())) {
+                showSecurityWarnDialog(targetScp);
+            } else {
+                changeCurrentSpellChecker(targetScp);
+            }
+        }
+        return true;
+    }
+
+    private void showSecurityWarnDialog(final SingleSpellCheckerPreference scp) {
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.dismiss();
+        }
+        mDialog = (new AlertDialog.Builder(getActivity()))
+                .setTitle(android.R.string.dialog_alert_title)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setCancelable(true)
+                .setPositiveButton(android.R.string.ok,
+                        new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        changeCurrentSpellChecker(scp);
+                    }
+                })
+                .setNegativeButton(android.R.string.cancel,
+                        new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                    }
+                })
+                .create();
+        mDialog.setMessage(getResources().getString(R.string.spellchecker_security_warning,
+                scp.getSpellCheckerInfo().getServiceInfo().applicationInfo.loadLabel(
+                        getActivity().getPackageManager())));
+        mDialog.show();
+    }
+
+    private void changeCurrentSpellChecker(SingleSpellCheckerPreference scp) {
+        mTsm.setCurrentSpellChecker(scp.getSpellCheckerInfo());
         if (DBG) {
             Log.d(TAG, "Current spell check is "
                         + SpellCheckerUtils.getCurrentSpellChecker(mTsm).getId());
         }
         updateScreen();
-        return true;
+    }
+
+    private static boolean isSystemApp(SpellCheckerInfo sci) {
+        return (sci.getServiceInfo().applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
 }
diff --git a/src/com/android/settings/inputmethod/UserDictionaryList.java b/src/com/android/settings/inputmethod/UserDictionaryList.java
index 894dd8a..6b1ca7b 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryList.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryList.java
@@ -18,7 +18,6 @@
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.UserDictionarySettings;
 import com.android.settings.Utils;
 
 import android.app.Activity;
