diff --git a/src/com/android/inputmethod/latin/LanguageSwitcher.java b/src/com/android/inputmethod/latin/LanguageSwitcher.java
index 9717353..3fa882e 100644
--- a/src/com/android/inputmethod/latin/LanguageSwitcher.java
+++ b/src/com/android/inputmethod/latin/LanguageSwitcher.java
@@ -108,6 +108,13 @@
 
         return mSelectedLanguageArray[mCurrentIndex];
     }
+    
+    /**
+     * Returns the list of enabled language codes.
+     */
+    public String[] getEnabledLanguages() {
+        return mSelectedLanguageArray;
+    }
 
     /**
      * Returns the currently selected input locale, or the display locale if no specific
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java
index 9924561..ef761a0 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/src/com/android/inputmethod/latin/LatinIME.java
@@ -1202,7 +1202,10 @@
         setSuggestions(null, false, false, true);
 
         FieldContext context = new FieldContext(
-            getCurrentInputConnection(), getCurrentInputEditorInfo());
+            getCurrentInputConnection(),
+            getCurrentInputEditorInfo(),
+            mLanguageSwitcher.getInputLanguage(),
+            mLanguageSwitcher.getEnabledLanguages());
         mVoiceInput.startListening(context, swipe);
         switchToRecognitionStatusView();
     }
@@ -1576,7 +1579,11 @@
     }
 
     private FieldContext makeFieldContext() {
-        return new FieldContext(getCurrentInputConnection(), getCurrentInputEditorInfo());
+        return new FieldContext(
+                getCurrentInputConnection(),
+                getCurrentInputEditorInfo(),
+                mLanguageSwitcher.getInputLanguage(),
+                mLanguageSwitcher.getEnabledLanguages());
     }
 
     private boolean fieldCanDoVoice(FieldContext fieldContext) {
diff --git a/src/com/android/inputmethod/voice/FieldContext.java b/src/com/android/inputmethod/voice/FieldContext.java
index 0578af7..5fbacfb 100644
--- a/src/com/android/inputmethod/voice/FieldContext.java
+++ b/src/com/android/inputmethod/voice/FieldContext.java
@@ -28,6 +28,8 @@
  * to the speech recognizer as context information.
  */
 public class FieldContext {
+    private static final boolean DBG = false;
+    
     static final String LABEL = "label";
     static final String HINT = "hint";
     static final String PACKAGE_NAME = "packageName";
@@ -36,14 +38,18 @@
     static final String SINGLE_LINE = "singleLine";
     static final String INPUT_TYPE = "inputType";
     static final String IME_OPTIONS = "imeOptions";
+    static final String SELECTED_LANGUAGE = "selectedLanguage";
+    static final String ENABLED_LANGUAGES = "enabledLanguages";
 
     Bundle mFieldInfo;
 
-    public FieldContext(InputConnection conn, EditorInfo info) {
-        this.mFieldInfo = new Bundle();
+    public FieldContext(InputConnection conn, EditorInfo info,
+            String selectedLanguage, String[] enabledLanguages) {
+        mFieldInfo = new Bundle();
         addEditorInfoToBundle(info, mFieldInfo);
         addInputConnectionToBundle(conn, mFieldInfo);
-        Log.i("FieldContext", "Bundle = " + mFieldInfo.toString());
+        addLanguageInfoToBundle(selectedLanguage, enabledLanguages, mFieldInfo);
+        if (DBG) Log.i("FieldContext", "Bundle = " + mFieldInfo.toString());
     }
 
     private static String safeToString(Object o) {
@@ -58,7 +64,6 @@
             return;
         }
 
-
         bundle.putString(LABEL, safeToString(info.label));
         bundle.putString(HINT, safeToString(info.hintText));
         bundle.putString(PACKAGE_NAME, safeToString(info.packageName));
@@ -80,6 +85,12 @@
         }
         bundle.putBoolean(SINGLE_LINE, (et.flags & et.FLAG_SINGLE_LINE) > 0);
     }
+    
+    private static void addLanguageInfoToBundle(
+            String selectedLanguage, String[] enabledLanguages, Bundle bundle) {
+        bundle.putString(SELECTED_LANGUAGE, selectedLanguage);
+        bundle.putStringArray(ENABLED_LANGUAGES, enabledLanguages);
+    }
 
     public Bundle getBundle() {
         return mFieldInfo;
