diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e036876..e9988bf 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1299,8 +1299,7 @@
         mUserDictionary.addWordToUserDictionary(wordToEdit);
     }
 
-    // TODO[IL]: Rework the route through which this is called.
-    public void onSettingsKeyPressed() {
+    public void displaySettingsDialog() {
         if (isShowingOptionDialog()) return;
         showSubtypeSelectorAndSettings();
     }
@@ -2375,7 +2374,7 @@
         final CharSequence[] items = new CharSequence[] {
                 // TODO: Should use new string "Select active input modes".
                 getString(R.string.language_selection_title),
-                getString(ApplicationUtils.getAcitivityTitleResId(this, SettingsActivity.class)),
+                getString(ApplicationUtils.getActivityTitleResId(this, SettingsActivity.class)),
         };
         final DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
             @Override
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 54d7898..5a70d64 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -999,7 +999,7 @@
      * Handle a press on the settings key.
      */
     private void onSettingsKeyPressed() {
-        mLatinIME.onSettingsKeyPressed();
+        mLatinIME.displaySettingsDialog();
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index d7a3e95..e1182e4 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -98,7 +98,7 @@
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (preferenceScreen != null) {
             preferenceScreen.setTitle(
-                    ApplicationUtils.getAcitivityTitleResId(getActivity(), SettingsActivity.class));
+                    ApplicationUtils.getActivityTitleResId(getActivity(), SettingsActivity.class));
         }
 
         final Resources res = getResources();
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
index 999ca77..186dafd 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
@@ -39,7 +39,7 @@
         addPreferencesFromResource(R.xml.spell_checker_settings);
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (preferenceScreen != null) {
-            preferenceScreen.setTitle(ApplicationUtils.getAcitivityTitleResId(
+            preferenceScreen.setTitle(ApplicationUtils.getActivityTitleResId(
                     getActivity(), SpellCheckerSettingsActivity.class));
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/utils/ApplicationUtils.java b/java/src/com/android/inputmethod/latin/utils/ApplicationUtils.java
index e521ec8..7a4150d 100644
--- a/java/src/com/android/inputmethod/latin/utils/ApplicationUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ApplicationUtils.java
@@ -31,7 +31,7 @@
         // This utility class is not publicly instantiable.
     }
 
-    public static int getAcitivityTitleResId(final Context context,
+    public static int getActivityTitleResId(final Context context,
             final Class<? extends Activity> cls) {
         final ComponentName cn = new ComponentName(context, cls);
         try {
