diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 4729585..01f3ba6 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1389,7 +1389,7 @@
             if (mKeyboardSwitcher.getInputView().isShifted()
                     && mKeyboardSwitcher.isAlphabetMode()
                     && mComposing.length() == 0) {
-                mWord.setCapitalized(true);
+                mWord.setFirstCharCapitalized(true);
             }
             mComposing.append((char) primaryCode);
             mWord.add(primaryCode, keyCodes);
@@ -2020,7 +2020,7 @@
                     touching.word.charAt(i)
                 });
             }
-            foundWord.setCapitalized(Character.isUpperCase(touching.word.charAt(0)));
+            foundWord.setFirstCharCapitalized(Character.isUpperCase(touching.word.charAt(0)));
         }
         // Found a match, show suggestions
         if (foundWord != null || alternatives != null) {
@@ -2177,7 +2177,7 @@
     }
 
     public boolean preferCapitalization() {
-        return mWord.isCapitalized();
+        return mWord.isFirstCharCapitalized();
     }
 
     private void toggleLanguage(boolean reset, boolean next) {
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 92bbe43..3b89894 100755
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -96,7 +96,10 @@
     private boolean mHaveCorrection;
     private CharSequence mOriginalWord;
     private String mLowerOriginalWord;
-    private boolean mCapitalize;
+
+    // TODO: Remove these member variables by passing more context to addWord() callback method
+    private boolean mIsFirstCharCapitalized;
+    private boolean mIsAllUpperCase;
 
     private int mCorrectionMode = CORRECTION_BASIC;
 
@@ -219,7 +222,8 @@
             boolean includeTypedWordIfValid, CharSequence prevWordForBigram) {
         LatinImeLogger.onStartSuggestion(prevWordForBigram);
         mHaveCorrection = false;
-        mCapitalize = wordComposer.isCapitalized();
+        mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
+        mIsAllUpperCase = wordComposer.isAllUpperCase();
         collectGarbage(mSuggestions, mPrefMaxSuggestions);
         Arrays.fill(mPriorities, 0);
         Arrays.fill(mNextLettersFrequencies, 0);
@@ -453,7 +457,9 @@
         StringBuilder sb = poolSize > 0 ? (StringBuilder) mStringPool.remove(poolSize - 1) 
                 : new StringBuilder(getApproxMaxWordLength());
         sb.setLength(0);
-        if (mCapitalize) {
+        if (mIsAllUpperCase) {
+            sb.append(new String(word, offset, length).toUpperCase());
+        } else if (mIsFirstCharCapitalized) {
             sb.append(Character.toUpperCase(word[offset]));
             if (length > 1) {
                 sb.append(word, offset + 1, length - 1);
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index fe4c685..2e415b7 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -39,9 +39,9 @@
     private boolean mAutoCapitalized;
     
     /**
-     * Whether the user chose to capitalize the word.
+     * Whether the user chose to capitalize the first char of the word.
      */
-    private boolean mIsCapitalized;
+    private boolean mIsFirstCharCapitalized;
 
     public WordComposer() {
         mCodes = new ArrayList<int[]>(12);
@@ -54,7 +54,7 @@
         mTypedWord = new StringBuilder(copy.mTypedWord);
         mCapsCount = copy.mCapsCount;
         mAutoCapitalized = copy.mAutoCapitalized;
-        mIsCapitalized = copy.mIsCapitalized;
+        mIsFirstCharCapitalized = copy.mIsFirstCharCapitalized;
     }
 
     /**
@@ -62,7 +62,7 @@
      */
     public void reset() {
         mCodes.clear();
-        mIsCapitalized = false;
+        mIsFirstCharCapitalized = false;
         mPreferredWord = null;
         mTypedWord.setLength(0);
         mCapsCount = 0;
@@ -138,18 +138,26 @@
         return mTypedWord;
     }
 
-    public void setCapitalized(boolean capitalized) {
-        mIsCapitalized = capitalized;
+    public void setFirstCharCapitalized(boolean capitalized) {
+        mIsFirstCharCapitalized = capitalized;
     }
     
     /**
      * Whether or not the user typed a capital letter as the first letter in the word
      * @return capitalization preference
      */
-    public boolean isCapitalized() {
-        return mIsCapitalized;
+    public boolean isFirstCharCapitalized() {
+        return mIsFirstCharCapitalized;
     }
-    
+
+    /**
+     * Whether or not all of the user typed chars are upper case
+     * @return true if all user typed chars are upper case, false otherwise
+     */
+    public boolean isAllUpperCase() {
+        return (mCapsCount > 0) && (mCapsCount == size());
+    }
+
     /**
      * Stores the user's selected word, before it is actually committed to the text field.
      * @param preferred
