diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 34b3d236b20a03984445ac6ebebb265e702c98e7..43fd2efaffdd308dcf83803df2065c0e4055a8dc 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -1413,6 +1413,11 @@ public class FMRadio extends Activity
        return(dlgBuilder.create());
     }
    private void RestoreDefaults() {
+      try {
+          mService.restoreDefaults();
+      } catch (RemoteException e) {
+          e.printStackTrace();
+      }
       FmSharedPreferences.SetDefaults();
       mPrefs.Save();
    }
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 86f2b6366d2529806723d925023639dc5587e391..6554c90dd3f4ce6d8834cc2d8d719f622fee996f 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -157,6 +157,7 @@ public class FMRadioService extends Service
    //Track FM playback for reenter App usecases
    private boolean mPlaybackInProgress = false;
    private boolean mStoppedOnFocusLoss = false;
+   private boolean mStoppedOnFactoryReset = false;
    private File mSampleFile = null;
    long mSampleStart = 0;
    // Messages handled in FM Service
@@ -673,8 +674,6 @@ public class FMRadioService extends Service
                 }
             };
             AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-            mA2dpConnected = am.isBluetoothA2dpOn();
-            mA2dpDisconnected = !mA2dpConnected;
             IntentFilter iFilter = new IntentFilter();
             iFilter.addAction(Intent.ACTION_HEADSET_PLUG);
             iFilter.addAction(mA2dpDeviceState.getActionSinkStateChangedString());
@@ -1046,23 +1045,14 @@ public class FMRadioService extends Service
 
        mStoppedOnFocusLoss = false;
 
-       if (!mA2dpDeviceState.isDeviceAvailable()) {
-           Log.d(LOGTAG, "FMRadio: Requesting to start FM");
-           //reason for resending the Speaker option is we are sending
-           //ACTION_FM=1 to AudioManager, the previous state of Speaker we set
-           //need not be retained by the Audio Manager.
-           if (isSpeakerEnabled()) {
-               mSpeakerPhoneOn = true;
-               Log.d(LOGTAG, "Audio source set it as speaker");
+       if (mStoppedOnFactoryReset) {
+           mStoppedOnFactoryReset = false;
+           mSpeakerPhoneOn = false;
+       // In FM stop, the audio route is set to default audio device
+       } else if (mSpeakerPhoneOn) {
+               String temp = mA2dpConnected ? "A2DP HS" : "Speaker";
+               Log.d(LOGTAG, "Route audio to " + temp);
                AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_SPEAKER);
-           } else {
-               Log.d(LOGTAG, "Audio source set it as headset");
-               AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_NONE);
-           }
-       } else {
-               Log.d(LOGTAG, "A2DP is connected, set audio source to A2DP HS");
-               AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_SPEAKER);
-               mSpeakerPhoneOn = true;
        }
 
        mPlaybackInProgress = true;
@@ -1829,6 +1819,7 @@ public class FMRadioService extends Service
 
       public void enableSpeaker(boolean speakerOn)
       {
+
           mService.get().enableSpeaker(speakerOn);
       }
 
@@ -2045,12 +2036,10 @@ public class FMRadioService extends Service
       {
            return (mService.get().isSleepTimerActive());
       }
-
       public boolean isSSRInProgress()
       {
          return(mService.get().isSSRInProgress());
       }
-
       public boolean isA2DPConnected()
       {
          return(mService.get().isA2DPConnected());
@@ -2060,6 +2049,11 @@ public class FMRadioService extends Service
       {
          return(mService.get().getExtenCountryCode());
       }
+
+      public void restoreDefaults()
+      {
+         mService.get().restoreDefaults();
+      }
    }
    private final IBinder mBinder = new ServiceStub(this);
 
@@ -2197,6 +2191,18 @@ public class FMRadioService extends Service
       return(bStatus);
    }
 
+   private void resetAudioRoute() {
+       if (isSpeakerEnabled() == true) {
+           if (mA2dpConnected == true) {
+               Log.d(LOGTAG, "A2DP connected, de-select BT");
+               AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_NO_BT_A2DP);
+           } else {
+               Log.d(LOGTAG, "A2DP is not connected, force none");
+               AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_NONE);
+           }
+       }
+   }
+
   /*
    * Turn OFF FM Operations: This disables all the current FM operations             .
    */
@@ -2224,8 +2230,8 @@ public class FMRadioService extends Service
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
       // reset FM audio settings
-      if (isSpeakerEnabled() == true)
-          enableSpeaker(false);
+      resetAudioRoute();
+
       if (isMuted() == true)
           unMute();
 
@@ -3736,11 +3742,12 @@ public class FMRadioService extends Service
            mA2dpProfile = (BluetoothA2dp) proxy;
            mA2dpDeviceList = mA2dpProfile.getConnectedDevices();
 
-           if (mA2dpDeviceList == null)
+           if (mA2dpDeviceList.isEmpty())
                mA2dpConnected = false;
            else
                mA2dpConnected = true;
            mA2dpDisconnected = !mA2dpConnected;
+           mSpeakerPhoneOn = mA2dpConnected;
            Log.d(LOGTAG, "A2DP Status: " + mA2dpConnected);
        }
 
@@ -3758,4 +3765,8 @@ public class FMRadioService extends Service
            Log.d(LOGTAG, "Failed to get A2DP profile proxy");
        }
    }
+
+   private void restoreDefaults () {
+        mStoppedOnFactoryReset = true;
+   }
 }
diff --git a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
index 50706af6df829d1d99a664f6b69cef51a3a38bfe..07d210eb55a1446fe8d3e691a66a4c960f361e5a 100644
--- a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
+++ b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
@@ -79,5 +79,6 @@ interface IFMRadioService
     boolean getIntfDetLowTh();
     boolean getIntfDetHighTh();
     boolean getRxRepeatCount();
+    void restoreDefaults();
 }