diff --git a/src/com/android/fmradio/FmService.java b/src/com/android/fmradio/FmService.java
index 7f2ef78..35efe56 100644
--- a/src/com/android/fmradio/FmService.java
+++ b/src/com/android/fmradio/FmService.java
@@ -1927,6 +1927,10 @@
      * @return true, success; false, fail;
      */
     public boolean requestAudioFocus() {
+        if (FmUtils.getIsSpeakerModeOnFocusLost(mContext)) {
+            setForceUse(true);
+            FmUtils.setIsSpeakerModeOnFocusLost(mContext, false);
+        }
         if (mIsAudioFocusHeld) {
             return true;
         }
@@ -2034,6 +2038,7 @@
                     }
                 }
                 handlePowerDown();
+                forceToHeadsetMode();
                 break;
 
             case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
@@ -2055,9 +2060,14 @@
                     }
                 }
                 handlePowerDown();
+                forceToHeadsetMode();
                 break;
 
             case AudioManager.AUDIOFOCUS_GAIN:
+                if (FmUtils.getIsSpeakerModeOnFocusLost(mContext)) {
+                    setForceUse(true);
+                    FmUtils.setIsSpeakerModeOnFocusLost(mContext, false);
+                }
                 if ((mPowerStatus != POWER_UP) && mPausedByTransientLossOfFocus) {
                     final int bundleSize = 1;
                     mFmServiceHandler.removeMessages(FmListener.MSGID_POWERUP_FINISHED);
@@ -2078,6 +2088,14 @@
         }
     }
 
+    private void forceToHeadsetMode() {
+        if (mIsSpeakerUsed && isHeadSetIn()) {
+            AudioSystem.setForceUse(FOR_PROPRIETARY, AudioSystem.FORCE_NONE);
+            // save user's option to shared preferences.
+            FmUtils.setIsSpeakerModeOnFocusLost(mContext, true);
+        }
+    }
+
     /**
      * FM Radio listener record
      */
diff --git a/src/com/android/fmradio/FmUtils.java b/src/com/android/fmradio/FmUtils.java
index 608ced7..b6219fd 100644
--- a/src/com/android/fmradio/FmUtils.java
+++ b/src/com/android/fmradio/FmUtils.java
@@ -61,6 +61,7 @@
     private static final String FM_LOCATION_LATITUDE = "fm_location_latitude";
     private static final String FM_LOCATION_LONGITUDE = "fm_location_longitude";
     private static final String FM_IS_FIRST_TIME_PLAY = "fm_is_first_time_play";
+    private static final String FM_IS_SPEAKER_MODE = "fm_is_speaker_mode";
     private static final String FM_IS_FIRST_ENTER_STATION_LIST = "fm_is_first_enter_station_list";
     // StorageManager For FM record
     private static StorageManager sStorageManager = null;
@@ -298,4 +299,27 @@
         iconLayout.destroyDrawingCache();
         return largeIcon;
     }
+
+    /**
+     * Get whether speaker mode is in use when audio focus lost.
+     * @param context the Context
+     * @return true for speaker mode, false for non speaker mode
+     */
+    public static boolean getIsSpeakerModeOnFocusLost(Context context) {
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+        return prefs.getBoolean(FM_IS_SPEAKER_MODE, false);
+    }
+
+    /**
+     * Set whether speaker mode is in use.
+     * @param context the Context
+     * @param isSpeaker speaker state
+     */
+    public static void setIsSpeakerModeOnFocusLost(Context context, boolean isSpeaker) {
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+        SharedPreferences.Editor editor = prefs.edit();
+        editor.putBoolean(FM_IS_SPEAKER_MODE, isSpeaker);
+        editor.commit();
+    }
 }
