diff --git a/fmapp/src/com/codeaurora/fmradio/FMRadioService.java b/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
index 3ca96e9..d0270ca 100644
--- a/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
+++ b/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
@@ -765,7 +765,6 @@
            Log.d(LOGTAG, "FMRadio: Requesting to stop FM");
            AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM,
                                     AudioSystem.DEVICE_STATE_UNAVAILABLE, "");
-           sendRecordServiceIntent(RECORD_STOP);
        }
        mPlaybackInProgress = false;
    }
@@ -1640,6 +1639,7 @@
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
 
+      sendRecordServiceIntent(RECORD_STOP);
       if (isAnalogModeEnabled()) {
               SystemProperties.set("hw.fm.isAnalog","false");
               misAnalogPathEnabled = false;
diff --git a/fmapp/src/com/codeaurora/fmradio/Settings.java b/fmapp/src/com/codeaurora/fmradio/Settings.java
index d5222c9..f29c3df 100644
--- a/fmapp/src/com/codeaurora/fmradio/Settings.java
+++ b/fmapp/src/com/codeaurora/fmradio/Settings.java
@@ -292,7 +292,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) {
                String valStr = mUserBandMinPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                max_freq = FmSharedPreferences.getUpperLimit();
                min_freq = FmSharedPreferences.getLowerLimit();
                if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
@@ -305,7 +311,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
                String valStr = mUserBandMaxPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                min_freq = FmSharedPreferences.getLowerLimit();
                max_freq = FmSharedPreferences.getUpperLimit();
                if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
diff --git a/fmapp2/res/values-zh-rCN/arrays.xml b/fmapp2/res/values-zh-rCN/arrays.xml
index d0a95a0..773dd45 100644
--- a/fmapp2/res/values-zh-rCN/arrays.xml
+++ b/fmapp2/res/values-zh-rCN/arrays.xml
@@ -160,6 +160,7 @@
     <item>土耳其</item>
     <item>英国</item>
     <item>美国</item>
+    <item>用户定义的乐队</item>
   </string-array>
 
   <string-array name="regional_band_summary">
@@ -199,5 +200,6 @@
     <item>土耳其 (87.5MHz - 108.0MHz ，步长 100 Khz)</item>
     <item>英国 (87.5MHz - 108.0MHz ，步长 100 Khz)</item>
     <item>美国 (88.1MHz - 107.9MHz ，步长 200 Khz)</item>
+    <item>用户定义的乐队</item>
   </string-array>
 </resources>
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index c33bbbd..335ce4f 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -532,6 +532,7 @@
       if (station != null) {
           mTunedStation.Copy(station);
       }
+      mStereo = FmSharedPreferences.getLastAudioMode();
       mHandler.post(mUpdateProgramService);
       mHandler.post(mUpdateRadioText);
       mHandler.post(mOnStereo);
@@ -2593,6 +2594,7 @@
          }else {
              mStereoTV.setText("");
          }
+         FmSharedPreferences.setLastAudioMode(mStereo);
       }
    };
 
@@ -2954,6 +2956,7 @@
          }
          cleanupTimeoutHandler();
          mHandler.post(mUpdateStationInfo);
+         mHandler.post(mOnStereo);
       }
 
       public void onProgramServiceChanged() {
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 5dfe72d..fb36a9c 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -762,7 +762,6 @@
            Log.d(LOGTAG, "FMRadio: Requesting to stop FM");
            AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM,
                                      AudioSystem.DEVICE_STATE_UNAVAILABLE, "");
-           sendRecordServiceIntent(RECORD_STOP);
        }
        mPlaybackInProgress = false;
    }
@@ -1637,6 +1636,7 @@
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
 
+      sendRecordServiceIntent(RECORD_STOP);
       if (isAnalogModeEnabled()) {
               SystemProperties.set("hw.fm.isAnalog","false");
               misAnalogPathEnabled = false;
@@ -2500,7 +2500,7 @@
             }
             /* Update the frequency in the StatusBar's Notification */
             startNotification();
-
+            enableStereo(FmSharedPreferences.getAudioOutputMode());
          }
          catch (RemoteException e)
          {
diff --git a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
index 53e43f7..bf8119a 100644
--- a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
+++ b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
@@ -137,7 +137,6 @@
    private static final String LAST_RECORD_DURATION = "last_record_duration";
    private static String  LAST_AF_JUMP_VALUE = "last_af_jump_value";
    private static final String AUDIO_OUTPUT_MODE = "audio_output_mode";
-
    private static Map<String, String> mNameMap = new HashMap<String, String>();
    private static List<PresetList> mListOfPlists = new ArrayList<PresetList>();
    public static Set[] tagList = new TreeSet[FmSharedPreferences.MAX_NUM_TAG_TYPES];
@@ -166,6 +165,7 @@
    private static boolean mAudioOutputMode = true;
    private static boolean mAFAutoSwitch = true;
    private static int mRecordDuration = 0;
+   private static int mLastAudioMode = -1;
 
    FmSharedPreferences(Context context){
       mContext = context.getApplicationContext();
@@ -449,6 +449,7 @@
       mTunedFrequency = sp.getInt(PREF_LAST_TUNED_FREQUENCY, DEFAULT_NO_FREQUENCY);
       mRecordDuration = sp.getInt(LAST_RECORD_DURATION, RECORD_DUR_INDEX_0_VAL);
       mAFAutoSwitch = sp.getBoolean(LAST_AF_JUMP_VALUE, true);
+      mAudioOutputMode = sp.getBoolean(AUDIO_OUTPUT_MODE, true);
 
       if(sp.getInt(FMCONFIG_COUNTRY, 0) == REGIONAL_BAND_USER_DEFINED) {
          mBandMinFreq = sp.getInt(FMCONFIG_MIN, mBandMinFreq);
@@ -556,6 +557,7 @@
       }
       ed.putInt(LAST_RECORD_DURATION, mRecordDuration);
       ed.putBoolean(LAST_AF_JUMP_VALUE, mAFAutoSwitch);
+      ed.putBoolean(AUDIO_OUTPUT_MODE, mAudioOutputMode);
       ed.commit();
    }
 
@@ -1119,6 +1121,13 @@
       return mAudioOutputMode;
    }
 
+   public static int getLastAudioMode() {
+       return mLastAudioMode;
+   }
+
+   public static void setLastAudioMode(int audiomode) {
+       mLastAudioMode = audiomode;
+   }
    public static void setRecordDuration(int durationIndex) {
 
       Log.d(LOGTAG, "setRecordDuration "+durationIndex);
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java
index c5683f1..328126a 100644
--- a/fmapp2/src/com/caf/fmradio/Settings.java
+++ b/fmapp2/src/com/caf/fmradio/Settings.java
@@ -300,7 +300,13 @@
                clearStationList();
            }else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) {
                String valStr = mUserBandMinPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                max_freq = FmSharedPreferences.getUpperLimit();
                min_freq = FmSharedPreferences.getLowerLimit();
                if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
@@ -314,7 +320,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
                String valStr = mUserBandMaxPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                min_freq = FmSharedPreferences.getLowerLimit();
                max_freq = FmSharedPreferences.getUpperLimit();
                if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
@@ -374,6 +386,7 @@
                          // Mono
                          FmSharedPreferences.setAudioOutputMode(false);
                      }
+                     mPrefs.Save();
                      FMRadio.fmAudioOutputMode();
                  }
               }
