diff --git a/java/res/layout/recognition_status.xml b/java/res/layout/recognition_status.xml
index b2c9f4a..81fae2a 100644
--- a/java/res/layout/recognition_status.xml
+++ b/java/res/layout/recognition_status.xml
@@ -70,6 +70,22 @@
                     android:layout_centerInParent="true"
                     android:visibility="gone"/>
         </RelativeLayout>
+        <!--
+        The text is set by the code. We specify a random text (voice_error), so the
+        text view does not have a zero height. This is necessary to keep the slash
+        mic and the recording mic is the same position
+        -->
+        <TextView
+                android:id="@+id/language"
+                android:text="@string/voice_error"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:singleLine="true"
+                android:textSize="14sp"
+                android:layout_marginBottom="3dip"
+                android:layout_gravity="center"
+                android:textColor="#ffffff"
+                android:visibility="invisible"/>
         <Button
                 android:id="@+id/button"
                 android:layout_width="match_parent"
diff --git a/java/src/com/android/inputmethod/voice/RecognitionView.java b/java/src/com/android/inputmethod/voice/RecognitionView.java
index 98db936..95a79f4 100644
--- a/java/src/com/android/inputmethod/voice/RecognitionView.java
+++ b/java/src/com/android/inputmethod/voice/RecognitionView.java
@@ -16,6 +16,9 @@
 
 package com.android.inputmethod.voice;
 
+import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.SubtypeSwitcher;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -35,13 +38,11 @@
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
-import com.android.inputmethod.latin.R;
-
 import java.io.ByteArrayOutputStream;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.ShortBuffer;
-import java.util.List;
+import java.util.Locale;
 
 /**
  * The user interface for the "Speak now" and "working" states.
@@ -60,6 +61,7 @@
     private ImageView mImage;
     private View mProgress;
     private SoundIndicator mSoundIndicator;
+    private TextView mLanguage;
     private Button mButton;
 
     private Drawable mInitializing;
@@ -105,6 +107,7 @@
         mButton = (Button) mView.findViewById(R.id.button);
         mButton.setOnClickListener(clickListener);
         mText = (TextView) mView.findViewById(R.id.text);
+        mLanguage = (TextView) mView.findViewById(R.id.language);
 
         mContext = context;
     }
@@ -184,9 +187,14 @@
     
     private void prepareDialog(CharSequence text, Drawable image,
             CharSequence btnTxt) {
+
+        /*
+         * The mic of INIT and of LISTENING has to be displayed in the same position. To accomplish
+         * that, some text visibility are not set as GONE but as INVISIBLE.
+         */
         switch (mState) {
             case INIT:
-                mText.setVisibility(View.GONE);
+                mText.setVisibility(View.INVISIBLE);
 
                 mProgress.setVisibility(View.GONE);
 
@@ -196,6 +204,8 @@
                 mSoundIndicator.setVisibility(View.GONE);
                 mSoundIndicator.stop();
 
+                mLanguage.setVisibility(View.INVISIBLE);
+
                 mPopupLayout.setBackgroundDrawable(mListeningBorder);
                 break;
             case LISTENING:
@@ -209,6 +219,11 @@
                 mSoundIndicator.setVisibility(View.VISIBLE);
                 mSoundIndicator.start();
 
+                Locale locale = SubtypeSwitcher.getInstance().getInputLocale();
+
+                mLanguage.setVisibility(View.VISIBLE);
+                mLanguage.setText(SubtypeSwitcher.getFullDisplayName(locale, true));
+
                 mPopupLayout.setBackgroundDrawable(mListeningBorder);
                 break;
             case WORKING:
@@ -223,6 +238,8 @@
                 mSoundIndicator.setVisibility(View.GONE);
                 mSoundIndicator.stop();
 
+                mLanguage.setVisibility(View.GONE);
+
                 mPopupLayout.setBackgroundDrawable(mWorkingBorder);
                 break;
             case READY:
@@ -237,6 +254,8 @@
                 mSoundIndicator.setVisibility(View.GONE);
                 mSoundIndicator.stop();
 
+                mLanguage.setVisibility(View.GONE);
+
                 mPopupLayout.setBackgroundDrawable(mErrorBorder);
                 break;
              default:
