diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
index e52ab7a..627e7c6 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
@@ -21,6 +21,9 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
 import android.view.View;
 
 public class UserDictionaryAddWordActivity extends Activity {
@@ -30,6 +33,9 @@
     public static final String MODE_EDIT_ACTION = "com.android.settings.USER_DICTIONARY_EDIT";
     public static final String MODE_INSERT_ACTION = "com.android.settings.USER_DICTIONARY_INSERT";
 
+    private static final int CODE_WORD_ADDED = 0;
+    private static final int CODE_CANCEL = 1;
+
     private UserDictionaryAddWordContents mContents;
 
     @Override
@@ -67,12 +73,29 @@
         mContents.saveStateIntoBundle(outState);
     }
 
+    private void reportBackToCaller(final Bundle result) {
+        final Intent senderIntent = getIntent();
+        final Object listener = senderIntent.getExtras().get("listener");
+        if (!(listener instanceof Messenger)) return; // This will work if listener is null too.
+        final Messenger messenger = (Messenger)listener;
+
+        final Message m = Message.obtain();
+        m.obj = result;
+        m.what = (null != result) ? CODE_WORD_ADDED : CODE_CANCEL;
+        try {
+            messenger.send(m);
+        } catch (RemoteException e) {
+            // Couldn't report back, but there is nothing we can do to fix it
+        }
+    }
+
     public void onClickCancel(final View v) {
+        reportBackToCaller(null);
         finish();
     }
 
     public void onClickConfirm(final View v) {
-        mContents.apply(this);
+        reportBackToCaller(mContents.apply(this));
         finish();
     }
 }
diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
index e46b19c..f28b4e5 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
@@ -43,6 +43,8 @@
     public static final String EXTRA_WORD = "word";
     public static final String EXTRA_SHORTCUT = "shortcut";
     public static final String EXTRA_LOCALE = "locale";
+    public static final String EXTRA_ORIGINAL_WORD = "originalWord";
+    public static final String EXTRA_ORIGINAL_SHORTCUT = "originalShortcut";
 
     public static final int MODE_EDIT = 0;
     public static final int MODE_INSERT = 1;
@@ -82,9 +84,13 @@
 
     /* package */ void saveStateIntoBundle(final Bundle outState) {
         outState.putString(EXTRA_WORD, mWordEditText.getText().toString());
+        outState.putString(EXTRA_ORIGINAL_WORD, mOldWord);
         if (null != mShortcutEditText) {
             outState.putString(EXTRA_SHORTCUT, mShortcutEditText.getText().toString());
         }
+        if (null != mOldShortcut) {
+            outState.putString(EXTRA_ORIGINAL_SHORTCUT, mOldShortcut);
+        }
         outState.putString(EXTRA_LOCALE, mLocale);
     }
 
@@ -97,7 +103,7 @@
         // If we are in add mode, nothing was added, so we don't need to do anything.
     }
 
-    /* package */ void apply(final Context context) {
+    /* package */ Bundle apply(final Context context) {
         final ContentResolver resolver = context.getContentResolver();
         if (MODE_EDIT == mMode && !TextUtils.isEmpty(mOldWord)) {
             // Mode edit: remove the old entry.
@@ -117,13 +123,13 @@
         }
         if (TextUtils.isEmpty(newWord)) {
             // If the word is somehow empty, don't insert it.
-            return;
+            return null;
         }
         // If there is no shortcut, and the word already exists in the database, then we
         // should not insert, because either A. the word exists with no shortcut, in which
         // case the exact same thing we want to insert is already there, or B. the word
         // exists with at least one shortcut, in which case it has priority on our word.
-        if (hasWord(newWord, context)) return;
+        if (hasWord(newWord, context)) return null;
 
         // Disallow duplicates. If the same word with no shortcut is defined, remove it; if
         // the same word with the same shortcut is defined, remove it; but we don't mind if
@@ -139,6 +145,10 @@
         UserDictionary.Words.addWord(context, newWord.toString(),
                 FREQUENCY_FOR_USER_DICTIONARY_ADDS, newShortcut,
                 TextUtils.isEmpty(mLocale) ? null : Utils.createLocaleFromString(mLocale));
+
+        final Bundle returnValues = new Bundle();
+        saveStateIntoBundle(returnValues);
+        return returnValues;
     }
 
     private static final String[] HAS_WORD_PROJECTION = { UserDictionary.Words.WORD };
