diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 7dc9a36..d6b7486 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -59,7 +59,7 @@
             android:persistent="true"
             android:entryValues="@array/keyboard_layout_modes_values"
             android:entries="@array/keyboard_layout_modes"
-            android:defaultValue="2"
+            android:defaultValue="3"
             />
 
     <PreferenceScreen
diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 3cfd814..5a271f2 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -46,6 +46,13 @@
     public static final int KEYBOARDMODE_IM = R.id.mode_im;
     public static final int KEYBOARDMODE_WEB = R.id.mode_webentry;
 
+    public static final String DEFAULT_LAYOUT_ID = "3";
+    public static final String PREF_KEYBOARD_LAYOUT = "keyboard_layout";
+    private static final int[] LAYOUTS = new int [] {
+        R.layout.input, R.layout.input2, R.layout.input3, R.layout.input4, R.layout.input5,
+        R.layout.input6
+    };
+
     private static final int SYMBOLS_MODE_STATE_NONE = 0;
     private static final int SYMBOLS_MODE_STATE_BEGIN = 1;
     private static final int SYMBOLS_MODE_STATE_SYMBOL = 2;
@@ -57,12 +64,6 @@
         KEYBOARDMODE_EMAIL,
         KEYBOARDMODE_IM,
         KEYBOARDMODE_WEB};
-    private static final String PREF_KEYBOARD_LAYOUT = "keyboard_layout";
-    private static final int[] LAYOUTS = new int [] {
-        R.layout.input, R.layout.input2, R.layout.input3, R.layout.input4, R.layout.input5,
-        R.layout.input6
-    };
-    private static final String DEFAULT_LAYOUT_ID = "0";
 
     Context mContext;
     LatinIME mInputMethodService;
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index c03e7d0..7169324 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -32,7 +32,7 @@
     // DEFAULT_LOG_ENABLED should be false when released to public.
     private static final boolean DEFAULT_LOG_ENABLED = true;
 
-    private static final long MINIMUMSENDINTERVAL = 60 * DateUtils.SECOND_IN_MILLIS; // 60 sec
+    private static final long MINIMUMSENDINTERVAL = 300 * DateUtils.SECOND_IN_MILLIS; // 300 sec
     private static final long MINIMUMCOUNTINTERVAL = 20 * DateUtils.SECOND_IN_MILLIS; // 20 sec
     private static final char SEPARATER = ';';
     private static final int ID_CLICKSUGGESTION = 0;
@@ -42,6 +42,7 @@
     private static final int ID_DELETE_COUNT = 4;
     private static final int ID_WORD_COUNT = 5;
     private static final int ID_ACTUAL_CHAR_COUNT = 6;
+    private static final int ID_THEME_ID = 7;
 
     private static final String PREF_ENABLE_LOG = "enable_log";
 
@@ -60,6 +61,7 @@
     private long mLastTimeSend;
     private long mLastTimeCountEntry;
 
+    private String mThemeId;
     private int mDeleteCount;
     private int mInputCount;
     private int mWordCount;
@@ -103,6 +105,8 @@
         mPrivacyLogBuffer = new ArrayList<LogEntry>();
         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
         sLogEnabled = prefs.getBoolean(PREF_ENABLE_LOG, DEFAULT_LOG_ENABLED);
+        mThemeId = prefs.getString(KeyboardSwitcher.PREF_KEYBOARD_LAYOUT,
+                KeyboardSwitcher.DEFAULT_LAYOUT_ID);
         prefs.registerOnSharedPreferenceChangeListener(this);
     }
 
@@ -140,9 +144,8 @@
     }
 
     private void addCountEntry(long time) {
-        mLogBuffer.add(
-                new LogEntry (time, ID_DELETE_COUNT,
-                        new String[] {String.valueOf(mDeleteCount)}));
+        mLogBuffer.add(new LogEntry (time, ID_DELETE_COUNT,
+                new String[] {String.valueOf(mDeleteCount)}));
         mLogBuffer.add(new LogEntry (time, ID_INPUT_COUNT,
                 new String[] {String.valueOf(mInputCount)}));
         mLogBuffer.add(new LogEntry (time, ID_WORD_COUNT,
@@ -155,6 +158,11 @@
         mActualCharCount = 0;
     }
 
+    private void addThemeIdEntry(long time) {
+        mLogBuffer.add(new LogEntry (time, ID_THEME_ID,
+                new String[] {mThemeId}));
+    }
+
     private void flushPrivacyLogSafely() {
         long now = System.currentTimeMillis();
         Collections.sort(mPrivacyLogBuffer);
@@ -176,6 +184,7 @@
                 if (mLastTimeActive - mLastTimeCountEntry > MINIMUMCOUNTINTERVAL
                         || (mDeleteCount == 0 && mInputCount == 0)) {
                     addCountEntry(mLastTimeActive);
+                    addThemeIdEntry(mLastTimeActive);
                 }
                 mDeleteCount += (Integer)data;
                 break;
@@ -183,6 +192,7 @@
                 if (mLastTimeActive - mLastTimeCountEntry > MINIMUMCOUNTINTERVAL
                         || (mDeleteCount == 0 && mInputCount == 0)) {
                     addCountEntry(mLastTimeActive);
+                    addThemeIdEntry(mLastTimeActive);
                 }
                 mInputCount += (Integer)data;
                 break;
@@ -223,14 +233,16 @@
 
     private void commitInternal() {
         flushPrivacyLogSafely();
-        addCountEntry(System.currentTimeMillis());
+        long now = System.currentTimeMillis();
+        addCountEntry(now);
+        addThemeIdEntry(now);
         String s = LogSerializer.createStringFromEntries(mLogBuffer);
         if (DBG) {
             Log.d(TAG, "Commit log: " + s);
         }
         mDropBox.addText(TAG, s);
         reset();
-        mLastTimeSend = System.currentTimeMillis();
+        mLastTimeSend = now;
     }
 
     private synchronized void sendLogToDropBox(int tag, Object s) {
@@ -260,6 +272,9 @@
             } else {
                 sLogEnabled = false;
             }
+        } else if (KeyboardSwitcher.PREF_KEYBOARD_LAYOUT.equals(key)) {
+            mThemeId = sharedPreferences.getString(KeyboardSwitcher.PREF_KEYBOARD_LAYOUT,
+                    KeyboardSwitcher.DEFAULT_LAYOUT_ID);
         }
     }
 
