diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 0c0373b3b70bd6e8e18f29c6ae51f49d4c390e5d..9a7c35d4c98a131660f1ca57207657d0d255eb1d 100755
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -333,6 +333,12 @@ public class CandidateView extends View {
         mShowingAddToDictionary = true;
     }
 
+    public boolean dismissAddToDictionaryHint() {
+        if (!mShowingAddToDictionary) return false;
+        clear();
+        return true;
+    }
+
     public void scrollPrev() {
         int i = 0;
         final int count = mSuggestions.size();
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 299b6a650aaa6c37143de4cae0bed3d734faffd4..dc49fa58d486b715d49427749ea8631b7d602d08 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -913,6 +913,9 @@ public class LatinIME extends InputMethodService
 
     public boolean addWordToDictionary(String word) {
         mUserDictionary.addWord(word, 128);
+        // Suggestion strip should be updated after the operation of adding word to the
+        // user dictionary
+        postUpdateSuggestions();
         return true;
     }
 
@@ -1058,9 +1061,20 @@ public class LatinIME extends InputMethodService
         } else if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
             ic.deleteSurroundingText(mEnteredText.length(), 0);
         } else if (deleteChar) {
-            sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
-            if (mDeleteCount > DELETE_ACCELERATE_AT) {
+            if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+                // Go back to the suggestion mode if the user canceled the
+                // "Tap again to save".
+                // NOTE: In gerenal, we don't revert the word when backspacing
+                // from a manual suggestion pick.  We deliberately chose a
+                // different behavior only in the case of picking the first
+                // suggestion (typed word).  It's intentional to have made this
+                // inconsistent with backspacing after selecting other suggestions.
+                revertLastWord(deleteChar);
+            } else {
                 sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
+                if (mDeleteCount > DELETE_ACCELERATE_AT) {
+                    sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
+                }
             }
         }
         mJustRevertedSeparator = null;
@@ -1136,6 +1150,11 @@ public class LatinIME extends InputMethodService
             mVoiceInput.incrementTextModificationInsertPunctuationCount(1);
         }
 
+        // Should dismiss the "Tap again to save" message when handling separator
+        if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+            postUpdateSuggestions();
+        }
+
         boolean pickedDefault = false;
         // Handle separator
         InputConnection ic = getCurrentInputConnection();