diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index ea8f292..3d25f42 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -38,7 +38,7 @@
     <include
         latin:keyboardLayout="@xml/key_styles_settings" />
     <!-- Functional key styles -->
-    <!-- Base style for shift key. A single space is used for dummy label in moreKeys. -->
+    <!-- Base style for shift key. A single space is used for base label in moreKeys. -->
     <key-style
         latin:styleName="baseForShiftKeyStyle"
         latin:keyActionFlags="noKeyPreview"
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index d85438d..fbc44da 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -38,7 +38,7 @@
     <include
         latin:keyboardLayout="@xml/key_styles_settings" />
     <!-- Functional key styles -->
-    <!-- Base style for shift key. A single space is used for dummy label in moreKeys. -->
+    <!-- Base style for shift key. A single space is used for base label in moreKeys. -->
     <key-style
         latin:styleName="baseForShiftKeyStyle"
         latin:keyActionFlags="noKeyPreview"
diff --git a/java/res/xml/prefs_screen_accounts.xml b/java/res/xml/prefs_screen_accounts.xml
index 75fff52..415b0b4 100644
--- a/java/res/xml/prefs_screen_accounts.xml
+++ b/java/res/xml/prefs_screen_accounts.xml
@@ -19,7 +19,7 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     android:title="@string/settings_screen_accounts">
 
-    <!-- This preference is a dummy view of the underlying preference.
+    <!-- This preference is a fake view of the underlying preference.
          This isn't persisted and the summary/title is refreshed by the fragment
          after inspecting the underlying account preference. -->
     <Preference
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index 7d01351..94dd7a1 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -870,7 +870,7 @@
      */
     public static void updateClientInfo(final Context context, final String clientId,
             final ContentValues values) {
-        // Sanity check the content values
+        // Validity check the content values
         final String valuesClientId = values.getAsString(CLIENT_CLIENT_ID_COLUMN);
         final String valuesMetadataUri = values.getAsString(CLIENT_METADATA_URI_COLUMN);
         final String valuesMetadataAdditionalId =
diff --git a/java/src/com/android/inputmethod/event/Event.java b/java/src/com/android/inputmethod/event/Event.java
index e3b1afc..58d878f 100644
--- a/java/src/com/android/inputmethod/event/Event.java
+++ b/java/src/com/android/inputmethod/event/Event.java
@@ -123,7 +123,7 @@
         mSuggestedWordInfo = suggestedWordInfo;
         mFlags = flags;
         mNextEvent = next;
-        // Sanity checks
+        // Validity checks
         // mSuggestedWordInfo is non-null if and only if the type is SUGGESTION_PICKED
         if (EVENT_TYPE_SUGGESTION_PICKED == mEventType) {
             if (null == mSuggestedWordInfo) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 27e538c..faa2107 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -100,7 +100,7 @@
     private static final float MAX_LABEL_RATIO = 0.90f;
 
     // Main keyboard
-    // TODO: Consider having a dummy keyboard object to make this @Nonnull
+    // TODO: Consider having a base keyboard object to make this @Nonnull
     @Nullable
     private Keyboard mKeyboard;
     @Nonnull
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index b50c0a8..7dfb532 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -60,7 +60,7 @@
         if (text != null) {
             return text;
         }
-        // Sanity check.
+        // Validity check.
         if (index >= 0 && index < TEXTS_DEFAULT.length) {
             return TEXTS_DEFAULT[index];
         }
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 6001637..c13f0e2 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -196,8 +196,8 @@
     }
 
     // ## HACK ## we prevent usage of a dictionary before version 18. The reason for this is, since
-    // those do not include whitelist entries, the new code with an old version of the dictionary
-    // would lose whitelist functionality.
+    // those do not include allowlist entries, the new code with an old version of the dictionary
+    // would lose allowlist functionality.
     private static boolean hackCanUseDictionaryFile(final File file) {
         if (!SHOULD_USE_DICT_VERSION) {
             return true;
@@ -211,7 +211,7 @@
                 // No version in the options : the format is unexpected
                 return false;
             }
-            // Version 18 is the first one to include the whitelist
+            // Version 18 is the first one to include the allowlist. 
             // Obviously this is a big ## HACK ##
             return Integer.parseInt(version) >= 18;
         } catch (java.io.FileNotFoundException e) {
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index 37effee..86c7810 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -66,7 +66,7 @@
                 || InputTypeUtils.isVisiblePasswordInputType(inputType);
         if (inputClass != InputType.TYPE_CLASS_TEXT) {
             // If we are not looking at a TYPE_CLASS_TEXT field, the following strange
-            // cases may arise, so we do a couple sanity checks for them. If it's a
+            // cases may arise, so we do a couple validity checks for them. If it's a
             // TYPE_CLASS_TEXT field, these special cases cannot happen, by construction
             // of the flags.
             if (null == editorInfo) {
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
index cc58922..9520426 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
@@ -174,35 +174,35 @@
         }
     }
 
-    // Dummy no language QWERTY subtype. See {@link R.xml.method}.
-    private static final int SUBTYPE_ID_OF_DUMMY_NO_LANGUAGE_SUBTYPE = 0xdde0bfd3;
-    private static final String EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE =
+    // Placeholer for no language QWERTY subtype. See {@link R.xml.method}.
+    private static final int SUBTYPE_ID_OF_PLACEHOLDER_NO_LANGUAGE_SUBTYPE = 0xdde0bfd3;
+    private static final String EXTRA_VALUE_OF_PLACEHOLDER_NO_LANGUAGE_SUBTYPE =
             "KeyboardLayoutSet=" + SubtypeLocaleUtils.QWERTY
             + "," + Constants.Subtype.ExtraValue.ASCII_CAPABLE
             + "," + Constants.Subtype.ExtraValue.ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE
             + "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE;
     @Nonnull
-    private static final RichInputMethodSubtype DUMMY_NO_LANGUAGE_SUBTYPE =
+    private static final RichInputMethodSubtype PLACEHOLDER_NO_LANGUAGE_SUBTYPE =
             new RichInputMethodSubtype(InputMethodSubtypeCompatUtils.newInputMethodSubtype(
                     R.string.subtype_no_language_qwerty, R.drawable.ic_ime_switcher_dark,
                     SubtypeLocaleUtils.NO_LANGUAGE, KEYBOARD_MODE,
-                    EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE,
+                    EXTRA_VALUE_OF_PLACEHOLDER_NO_LANGUAGE_SUBTYPE,
                     false /* isAuxiliary */, false /* overridesImplicitlyEnabledSubtype */,
-                    SUBTYPE_ID_OF_DUMMY_NO_LANGUAGE_SUBTYPE));
+                    SUBTYPE_ID_OF_PLACEHOLDER_NO_LANGUAGE_SUBTYPE));
     // Caveat: We probably should remove this when we add an Emoji subtype in {@link R.xml.method}.
     // Dummy Emoji subtype. See {@link R.xml.method}.
-    private static final int SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE = 0xd78b2ed0;
-    private static final String EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE =
+    private static final int SUBTYPE_ID_OF_PLACEHOLDER_EMOJI_SUBTYPE = 0xd78b2ed0;
+    private static final String EXTRA_VALUE_OF_PLACEHOLDER_EMOJI_SUBTYPE =
             "KeyboardLayoutSet=" + SubtypeLocaleUtils.EMOJI
             + "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE;
     @Nonnull
-    private static final RichInputMethodSubtype DUMMY_EMOJI_SUBTYPE = new RichInputMethodSubtype(
+    private static final RichInputMethodSubtype PLACEHOLDER_EMOJI_SUBTYPE = new RichInputMethodSubtype(
             InputMethodSubtypeCompatUtils.newInputMethodSubtype(
                     R.string.subtype_emoji, R.drawable.ic_ime_switcher_dark,
                     SubtypeLocaleUtils.NO_LANGUAGE, KEYBOARD_MODE,
-                    EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE,
+                    EXTRA_VALUE_OF_PLACEHOLDER_EMOJI_SUBTYPE,
                     false /* isAuxiliary */, false /* overridesImplicitlyEnabledSubtype */,
-                    SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE));
+                    SUBTYPE_ID_OF_PLACEHOLDER_EMOJI_SUBTYPE));
     private static RichInputMethodSubtype sNoLanguageSubtype;
     private static RichInputMethodSubtype sEmojiSubtype;
 
@@ -223,8 +223,8 @@
         }
         Log.w(TAG, "Can't find any language with QWERTY subtype");
         Log.w(TAG, "No input method subtype found; returning dummy subtype: "
-                + DUMMY_NO_LANGUAGE_SUBTYPE);
-        return DUMMY_NO_LANGUAGE_SUBTYPE;
+                + PLACEHOLDER_NO_LANGUAGE_SUBTYPE);
+        return PLACEHOLDER_NO_LANGUAGE_SUBTYPE;
     }
 
     @Nonnull
@@ -244,7 +244,7 @@
         }
         Log.w(TAG, "Can't find emoji subtype");
         Log.w(TAG, "No input method subtype found; returning dummy subtype: "
-                + DUMMY_EMOJI_SUBTYPE);
-        return DUMMY_EMOJI_SUBTYPE;
+                + PLACEHOLDER_EMOJI_SUBTYPE);
+        return PLACEHOLDER_EMOJI_SUBTYPE;
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/about/AboutPreferences.java b/java/src/com/android/inputmethod/latin/about/AboutPreferences.java
index f60b189..ec7e6de 100644
--- a/java/src/com/android/inputmethod/latin/about/AboutPreferences.java
+++ b/java/src/com/android/inputmethod/latin/about/AboutPreferences.java
@@ -19,7 +19,7 @@
 import android.app.Fragment;
 
 /**
- * Dummy class of AboutPreferences. Never use this.
+ * Placeholer class of AboutPreferences. Never use this.
  */
 public final class AboutPreferences extends Fragment {
     private AboutPreferences() {
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 1dd5850..a7804a1 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -805,7 +805,7 @@
         if (SpaceState.PHANTOM == inputTransaction.mSpaceState
                 && !settingsValues.isWordConnector(codePoint)) {
             if (isComposingWord) {
-                // Sanity check
+                // Validity check
                 throw new RuntimeException("Should not be composing here");
             }
             insertAutomaticSpaceIfOptionsAndTextAllow(settingsValues);
@@ -1370,7 +1370,7 @@
      * @return whether it's fine to apply the transformation after this code point.
      */
     private static boolean canBeFollowedByDoubleSpacePeriod(final int codePoint) {
-        // TODO: This should probably be a blacklist rather than a whitelist.
+        // TODO: This should probably be a denylist rather than a allowlist.
         // TODO: This should probably be language-dependant...
         return Character.isLetterOrDigit(codePoint)
                 || codePoint == Constants.CODE_SINGLE_QUOTE
diff --git a/java/src/com/android/inputmethod/latin/settings/CustomInputStylePreference.java b/java/src/com/android/inputmethod/latin/settings/CustomInputStylePreference.java
index 21ea8f8..44a98c1 100644
--- a/java/src/com/android/inputmethod/latin/settings/CustomInputStylePreference.java
+++ b/java/src/com/android/inputmethod/latin/settings/CustomInputStylePreference.java
@@ -330,7 +330,7 @@
                     R.array.predefined_layouts);
             // TODO: Should filter out already existing combinations of locale and layout.
             for (final String layout : predefinedKeyboardLayoutSet) {
-                // This is a dummy subtype with NO_LANGUAGE, only for display.
+                // This is a placeholder for a subtype with NO_LANGUAGE, only for display.
                 final InputMethodSubtype subtype =
                         AdditionalSubtypeUtils.createDummyAdditionalSubtype(
                                 SubtypeLocaleUtils.NO_LANGUAGE, layout);
diff --git a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
index 0dbc7c8..47f6549 100644
--- a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
@@ -194,10 +194,10 @@
         // English is a special case in that "American typography" rules, which are the most common
         // in English, state that a sentence terminator immediately following a quotation mark
         // should be swapped with it and de-duplicated (included in the quotation mark),
-        // e.g. <<Did he say, "let's go home?">>
+        // e.g. <<Did they say, "let's go home?">>
         // No other language has such a rule as far as I know, instead putting inside the quotation
         // mark as the exact thing quoted and handling the surrounding punctuation independently,
-        // e.g. <<Did he say, "let's go home"?>>
+        // e.g. <<Did they say, "let's go home"?>>
         if (spacingAndPunctuations.mUsesAmericanTypography) {
             for (; j > 0; j--) {
                 // Here we look to go over any closing punctuation. This is because in dominant
diff --git a/java/src/com/android/inputmethod/latin/utils/RecapitalizeStatus.java b/java/src/com/android/inputmethod/latin/utils/RecapitalizeStatus.java
index a381649..737e332 100644
--- a/java/src/com/android/inputmethod/latin/utils/RecapitalizeStatus.java
+++ b/java/src/com/android/inputmethod/latin/utils/RecapitalizeStatus.java
@@ -81,7 +81,7 @@
     private static final int[] EMPTY_STORTED_SEPARATORS = {};
 
     public RecapitalizeStatus() {
-        // By default, initialize with dummy values that won't match any real recapitalize.
+        // By default, initialize with fake values that won't match any real recapitalize.
         start(-1, -1, "", Locale.getDefault(), EMPTY_STORTED_SEPARATORS);
         stop();
     }
