diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index 642c717..b1e5ec6 100755
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -26,6 +26,12 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="LatinIMEDebugSettings" android:label="@string/english_ime_debug_settings">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+            </intent-filter>
+        </activity>
+
         <activity android:name="InputLanguageSelection"
                 android:label="@string/language_selection_title">
             <intent-filter>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index f9bb548..a4ebe46 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -372,4 +372,8 @@
 
     <string name="subtype_mode_keyboard">keyboard</string>
     <string name="subtype_mode_voice">voice</string>
+
+    <!-- Title for Latin keyboard debug settings activity / dialog -->
+    <string name="english_ime_debug_settings" translatable="false">Android keyboard Debug settings</string>
+    <string name="prefs_debug_mode" translatable="false">Debug Mode</string>
 </resources>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 60824b9..8a97109 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -51,14 +51,6 @@
             android:defaultValue="true"
             />
 
-    <CheckBoxPreference
-            android:key="enable_logging"
-            android:title="@string/prefs_enable_log"
-            android:summary="@string/prefs_description_log"
-            android:persistent="true"
-            android:defaultValue="false"
-            />
-
     <ListPreference
             android:key="settings_key"
             android:title="@string/prefs_settings_key"
@@ -77,14 +69,6 @@
             android:defaultValue="@string/voice_mode_main"
             />
 
-    <!-- <ListPreference
-            android:key="keyboard_layout"
-            android:title="@string/keyboard_layout"
-            android:persistent="true"
-            android:entryValues="@array/keyboard_layout_modes_values"
-            android:entries="@array/keyboard_layout_modes"
-            android:defaultValue="4"
-            />-->
 
     <PreferenceScreen
             android:title="@string/language_selection_title"
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
new file mode 100644
index 0000000..8177d3c
--- /dev/null
+++ b/java/res/xml/prefs_for_debug.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/prefs_debug_mode"
+        android:key="english_ime_debug_settings">
+
+    <CheckBoxPreference
+            android:key="enable_logging"
+            android:title="@string/prefs_enable_log"
+            android:summary="@string/prefs_description_log"
+            android:persistent="true"
+            android:defaultValue="false"
+            />
+
+    <ListPreference
+            android:key="pref_keyboard_layout_20100902"
+            android:title="@string/keyboard_layout"
+            android:persistent="true"
+            android:entryValues="@array/keyboard_layout_modes_values"
+            android:entries="@array/keyboard_layout_modes"
+            android:defaultValue="4"
+            />
+
+    <CheckBoxPreference
+            android:key="debug_mode"
+            android:title="@string/prefs_debug_mode"
+            android:persistent="true"
+            android:defaultValue="false"
+            />
+
+</PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 7b40362..43175e3 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -40,6 +40,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceManager;
 import android.speech.SpeechRecognizer;
 import android.text.ClipboardManager;
@@ -2398,7 +2399,11 @@
         launchSettings(LatinIMESettings.class);
     }
 
-    protected void launchSettings(Class<LatinIMESettings> settingsClass) {
+    public void launchDebugSettings() {
+        launchSettings(LatinIMEDebugSettings.class);
+    }
+
+    protected void launchSettings (Class<? extends PreferenceActivity> settingsClass) {
         handleClose();
         Intent intent = new Intent();
         intent.setClass(LatinIME.this, settingsClass);
diff --git a/java/src/com/android/inputmethod/latin/LatinIMEDebugSettings.java b/java/src/com/android/inputmethod/latin/LatinIMEDebugSettings.java
new file mode 100644
index 0000000..cba1a0a
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/LatinIMEDebugSettings.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.PreferenceActivity;
+import android.util.Log;
+
+public class LatinIMEDebugSettings extends PreferenceActivity
+        implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+    private static final String TAG = "LatinIMEDebugSettings";
+    private static final String DEBUG_MODE_KEY = "debug_mode";
+
+    private CheckBoxPreference mDebugMode;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        addPreferencesFromResource(R.xml.prefs_for_debug);
+        SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+        prefs.registerOnSharedPreferenceChangeListener(this);
+
+        mDebugMode = (CheckBoxPreference) findPreference(DEBUG_MODE_KEY);
+        updateDebugMode();
+    }
+
+    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+        if (key.equals(DEBUG_MODE_KEY)) {
+            if (mDebugMode != null) {
+                mDebugMode.setChecked(prefs.getBoolean(DEBUG_MODE_KEY, false));
+                updateDebugMode();
+            }
+        }
+    }
+
+    private void updateDebugMode() {
+        if (mDebugMode == null) {
+            return;
+        }
+        boolean isDebugMode = mDebugMode.isChecked();
+        String version = "";
+        try {
+            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
+            version = "Version " + info.versionName;
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Could not find version info.");
+        }
+        if (!isDebugMode) {
+            mDebugMode.setTitle(version);
+            mDebugMode.setSummary("");
+        } else {
+            mDebugMode.setTitle(getResources().getString(R.string.prefs_debug_mode));
+            mDebugMode.setSummary(version);
+        }
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/LatinIMESettings.java b/java/src/com/android/inputmethod/latin/LatinIMESettings.java
index f9534d2..ffff33d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIMESettings.java
+++ b/java/src/com/android/inputmethod/latin/LatinIMESettings.java
@@ -24,8 +24,6 @@
 import android.app.backup.BackupManager;
 import android.content.DialogInterface;
 import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
@@ -45,7 +43,6 @@
     private static final String QUICK_FIXES_KEY = "quick_fixes";
     private static final String PREDICTION_SETTINGS_KEY = "prediction_settings";
     private static final String VOICE_SETTINGS_KEY = "voice_mode";
-    private static final String DEBUG_MODE_KEY = "debug_mode";
     /* package */ static final String PREF_SETTINGS_KEY = "settings_key";
 
     private static final String TAG = "LatinIMESettings";
@@ -54,7 +51,6 @@
     private static final int VOICE_INPUT_CONFIRM_DIALOG = 0;
 
     private CheckBoxPreference mQuickFixes;
-    private CheckBoxPreference mDebugMode;
     private ListPreference mVoicePreference;
     private ListPreference mSettingsKeyPreference;
     private boolean mVoiceOn;
@@ -77,9 +73,6 @@
         mVoiceModeOff = getString(R.string.voice_mode_off);
         mVoiceOn = !(prefs.getString(VOICE_SETTINGS_KEY, mVoiceModeOff).equals(mVoiceModeOff));
         mLogger = VoiceInputLogger.getLogger(this);
-
-        mDebugMode = (CheckBoxPreference) findPreference(DEBUG_MODE_KEY);
-        updateDebugMode();
     }
 
     @Override
@@ -114,11 +107,6 @@
                     .equals(mVoiceModeOff)) {
                 showVoiceConfirmation();
             }
-        } else if (key.equals(DEBUG_MODE_KEY)) {
-            if (mDebugMode != null) {
-                mDebugMode.setChecked(prefs.getBoolean(DEBUG_MODE_KEY, false));
-                updateDebugMode();
-            }
         }
         mVoiceOn = !(prefs.getString(VOICE_SETTINGS_KEY, mVoiceModeOff).equals(mVoiceModeOff));
         updateVoiceModeSummary();
@@ -131,29 +119,6 @@
                 [mSettingsKeyPreference.findIndexOfValue(mSettingsKeyPreference.getValue())]);
     }
 
-    private void updateDebugMode() {
-        if (mDebugMode == null) {
-            return;
-        }
-        boolean isDebugMode = mDebugMode.isChecked();
-        String version = "";
-        try {
-            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
-            version = "Version " + info.versionName;
-        } catch (NameNotFoundException e) {
-            Log.e(TAG, "Could not find version info.");
-        }
-        if (!isDebugMode) {
-            mDebugMode.setEnabled(false);
-            mDebugMode.setTitle(version);
-            mDebugMode.setSummary("");
-        } else {
-            mDebugMode.setEnabled(true);
-            mDebugMode.setSummary(version);
-            mDebugMode.setSummary("");
-        }
-    }
-
     private void showVoiceConfirmation() {
         mOkClicked = false;
         showDialog(VOICE_INPUT_CONFIRM_DIALOG);
