diff --git a/fmapp2/res/values/customize.xml b/fmapp2/res/values/customize.xml
index f24c67c..f4dcdbc 100644
--- a/fmapp2/res/values/customize.xml
+++ b/fmapp2/res/values/customize.xml
@@ -50,4 +50,19 @@
     -->
     <bool name="def_only_stereo_enabled">false</bool>
 
+    <!-- enabled the name format of recordings files or not, default value is false -->
+    <bool name="def_save_name_format_enabled">false</bool>
+
+    <!-- the prefix of recordings files name, file name like this "FM-yyyy-MM-dd-HH-mm-ss.3gpp" -->
+    <string name="def_save_name_prefix" translatable="false">FM</string>
+
+    <!-- the suffix of recordings files, default value is ".3gpp" -->
+    <string name="def_save_name_suffix" translatable="false">.3gpp</string>
+
+    <!-- the name format of recordings files -->
+    <string name="def_save_name_format" translatable="false">yyyy-MM-dd-HH-mm-ss</string>
+
+    <!-- the save path of recordings files -->
+    <string name="def_fmRecord_savePath" translatable="false"></string>
+
 </resources>
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 20b1133..909a14c 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -1679,7 +1679,6 @@
 
    private void disableRadio() {
       boolean bStatus = false;
-      boolean bSpeakerPhoneOn = isSpeakerEnabled();
 
       cancelSearch();
       endSleepTimer();
@@ -1698,11 +1697,6 @@
             }
 
             enableRadioOnOffUI();
-            // restore default wired headset on FM power off
-            if (bSpeakerPhoneOn) {
-               mService.enableSpeaker(false);
-               mSpeakerButton.setImageResource(R.drawable.btn_earphone);
-            }
          }catch (RemoteException e) {
             e.printStackTrace();
          }
@@ -3197,6 +3191,16 @@
           Log.d(LOGTAG, "mServiceCallbacks.onA2DPConnectionstateChanged :");
           A2DPConnectionState(state);
       }
+      public void onFmAudioPathStarted() {
+          Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStarted:");
+          mSpeakerButton.setClickable(true);
+          mMuteButton.setClickable(true);
+      }
+      public void onFmAudioPathStopped() {
+          Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStopped:");
+          mSpeakerButton.setClickable(false);
+          mMuteButton.setClickable(false);
+      }
    };
 
     private void registerFMSettingListner() {
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 188a068..a4fce5d 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -967,7 +967,8 @@
                     if (isFmOn() && getResources()
                             .getBoolean(R.bool.def_headset_next_enabled)) {
                         try {
-                            mCallbacks.onSeekNextStation();
+                            if ((mServiceInUse) && (mCallbacks != null))
+                                mCallbacks.onSeekNextStation();
                         }catch (RemoteException e) {
                         }
                     }
@@ -1012,7 +1013,7 @@
         }
    };
 
-   private void startFM(){
+   private void startFM() {
        Log.d(LOGTAG, "In startFM");
        if(true == mAppShutdown) { // not to send intent to AudioManager in Shutdown
            return;
@@ -1065,12 +1066,24 @@
        }
        mPlaybackInProgress = true;
        configureAudioDataPath(true);
+       try {
+           if ((mServiceInUse) && (mCallbacks != null))
+               mCallbacks.onFmAudioPathStarted();
+       } catch(RemoteException e) {
+           e.printStackTrace();
+       }
    }
 
-   private void stopFM(){
+   private void stopFM() {
        Log.d(LOGTAG, "In stopFM");
        configureAudioDataPath(false);
        mPlaybackInProgress = false;
+       try {
+           if ((mServiceInUse) && (mCallbacks != null))
+               mCallbacks.onFmAudioPathStopped();
+       } catch(RemoteException e) {
+           e.printStackTrace();
+       }
    }
 
    private void resetFM(){
@@ -1094,6 +1107,32 @@
        return status;
    }
 
+    private File createTempFile(String prefix, String suffix, File directory)
+            throws IOException {
+        // Force a prefix null check first
+        if (prefix.length() < 3) {
+            throw new IllegalArgumentException("prefix must be at least 3 characters");
+        }
+        if (suffix == null) {
+            suffix = ".tmp";
+        }
+        File tmpDirFile = directory;
+        if (tmpDirFile == null) {
+            String tmpDir = System.getProperty("java.io.tmpdir", ".");
+            tmpDirFile = new File(tmpDir);
+        }
+
+        String nameFormat = getResources().getString(R.string.def_save_name_format);
+        SimpleDateFormat df = new SimpleDateFormat(nameFormat);
+        String currentTime = df.format(System.currentTimeMillis());
+
+        File result;
+        do {
+            result = new File(tmpDirFile, prefix + currentTime + suffix);
+        } while (!result.createNewFile());
+        return result;
+   }
+
    public boolean startRecording() {
       int mRecordDuration = -1;
 
@@ -1137,12 +1176,27 @@
         }
 
         mSampleFile = null;
-        File sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/FMRecording");
+        File sampleDir = null;
+        if (!"".equals(getResources().getString(R.string.def_fmRecord_savePath))) {
+            String fmRecordSavePath = getResources().getString(R.string.def_fmRecord_savePath);
+            sampleDir = new File(Environment.getExternalStorageDirectory().toString()
+                    + fmRecordSavePath);
+        } else {
+            sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+                    + "/FMRecording");
+        }
+
         if(!(sampleDir.mkdirs() || sampleDir.isDirectory()))
             return false;
         try {
-            mSampleFile = File
-                    .createTempFile("FMRecording", ".3gpp", sampleDir);
+            if (getResources().getBoolean(R.bool.def_save_name_format_enabled)) {
+                String suffix = getResources().getString(R.string.def_save_name_suffix);
+                suffix = "".equals(suffix) ? ".3gpp" : suffix;
+                String prefix = getResources().getString(R.string.def_save_name_prefix) + '-';
+                mSampleFile = createTempFile(prefix, suffix, sampleDir);
+            } else {
+                mSampleFile = File.createTempFile("FMRecording", ".3gpp", sampleDir);
+            }
         } catch (IOException e) {
             Log.e(LOGTAG, "Not able to access SD Card");
             Toast.makeText(this, "Not able to access SD Card", Toast.LENGTH_SHORT).show();
@@ -2127,6 +2181,7 @@
    * Turn OFF FM Operations: This disables all the current FM operations             .
    */
    private void fmOperationsOff() {
+      // stop recording
       if (isFmRecordingOn())
       {
           stopRecording();
@@ -2137,14 +2192,19 @@
                return;
           }
       }
+      // disable audio path
       AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
       if(audioManager != null)
       {
          Log.d(LOGTAG, "audioManager.setFmRadioOn = false \n" );
          stopFM();
-         //audioManager.setParameters("FMRadioOn=false");
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
+      // reset FM audio settings
+      if (isSpeakerEnabled() == true)
+          enableSpeaker(false);
+      if (isMuted() == true)
+          unMute();
 
       if (isAnalogModeEnabled()) {
               SystemProperties.set("hw.fm.isAnalog","false");
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 961f04b..c035475 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -2719,6 +2719,12 @@
           public void onA2DPConnectionstateChanged(boolean state){
              Log.d(LOGTAG, "mServiceCallbacks.onA2DPConnectionstateChanged :");
           }
+          public void onFmAudioPathStarted() {
+             Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStarted:");
+          }
+          public void onFmAudioPathStopped() {
+             Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStopped:");
+          }
       };
       /* Radio Vars */
      private Handler mHandler = new Handler();
diff --git a/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl b/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
index e6fded7..24aaa70 100644
--- a/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
+++ b/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
@@ -48,4 +48,6 @@
   void onRecordingStarted();
   void onSeekNextStation();
   void onA2DPConnectionstateChanged(boolean state);
+  void onFmAudioPathStarted();
+  void onFmAudioPathStopped();
 }
diff --git a/libfm_jni/LibfmJni.cpp b/libfm_jni/LibfmJni.cpp
index d1a0942..52ad029 100644
--- a/libfm_jni/LibfmJni.cpp
+++ b/libfm_jni/LibfmJni.cpp
@@ -114,32 +114,18 @@
 
 jfloat Seek(JNIEnv *env, jobject thiz, jfloat freq, jboolean isUp)
 {
-    int ret = 0;
-    int tmp_freq;
-    int ret_freq;
-    float val;
+    int ret = JNI_FALSE;
+    float val = freq;
 
-    tmp_freq = (int)(freq * FREQ_MULT); //Eg, 87.55 * 100 --> 87550
-    if (pFMRadio)
+    if (pFMRadio) {
         ret = pFMRadio->Set_mute(true);
-    else
-        ret = JNI_FALSE;
-    if (ret) {
-        ALOGE("%s, error, [ret=%d]\n", __func__, ret);
-    }
-    ALOGD("%s, [mute] [ret=%d]\n", __func__, ret);
-    if (pFMRadio)
+        ALOGD("%s, [mute] [ret=%d]\n", __func__, ret);
         ret = pFMRadio->Seek((int)isUp);
-    else
-        ret = JNI_FALSE;
-    if (ret < 0) {
-        ret_freq = tmp_freq; //seek error, so use original freq
+        ALOGD("%s, [freq=%f] [ret=%d]\n", __func__, freq, ret);
+        if (ret > 0)
+            val = (float)ret/FREQ_MULT;   //Eg, 8755 / 100 --> 87.55
     }
 
-    ALOGD("%s, [freq=%d] [ret=%d]\n", __func__, ret_freq, ret);
-
-    val = (float)ret/FREQ_MULT;   //Eg, 8755 / 100 --> 87.55
-
     return val;
 }
 
