diff --git a/fmapp2/AndroidManifest.xml b/fmapp2/AndroidManifest.xml
index b82b333..9de2a62 100644
--- a/fmapp2/AndroidManifest.xml
+++ b/fmapp2/AndroidManifest.xml
@@ -50,6 +50,7 @@
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
     <uses-permission android:name="android.permission.CAPTURE_AUDIO_HOTWORD" />
+    <uses-permission android:name="android.permission.MANAGE_USERS"/>
     <application
         android:icon="@drawable/ic_launcher_fmradio"
         android:label="@string/app_name"
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index bcbc2ce..98bad9e 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -832,9 +832,11 @@
       /* Application/UI is attached, so get out of lower power mode */
       if (isFmOn()) {
           setLowPowerMode(false);
-          startFM();
-          enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
-        }
+          if(false == mPlaybackInProgress) {
+              startFM();
+              enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+          }
+      }
    }
 
    @Override
@@ -1157,6 +1159,13 @@
 
        stopRecording();
 
+       if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
+            Log.e(LOGTAG, "startRecording, no external storage available");
+            return false;
+       }
+
+        if (!updateAndShowStorageHint())
+            return false;
         long maxFileSize = mStorageSpace - LOW_STORAGE_THRESHOLD;
         if(FmSharedPreferences.getRecordDuration() !=
             FmSharedPreferences.RECORD_DUR_INDEX_3_VAL) {
@@ -1172,7 +1181,7 @@
 
         }
 
-        mStoragePath = getApplicationContext().getFilesDir();;
+        mStoragePath = Environment.getExternalStorageDirectory();
         Log.d(LOGTAG, "mStoragePath " + mStoragePath);
         if (null == mStoragePath) {
             Log.e(LOGTAG, "External Storage Directory is null");
@@ -1183,10 +1192,10 @@
         File sampleDir = null;
         if (!"".equals(getResources().getString(R.string.def_fmRecord_savePath))) {
             String fmRecordSavePath = getResources().getString(R.string.def_fmRecord_savePath);
-            sampleDir = new File(getApplicationContext().getFilesDir().getPath().toString()
+            sampleDir = new File(Environment.getExternalStorageDirectory().toString()
                     + fmRecordSavePath);
         } else {
-            sampleDir = new File(getApplicationContext().getFilesDir().getAbsolutePath()
+            sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                     + "/FMRecording");
         }
 
@@ -1264,6 +1273,7 @@
                      if (mFmRecordingOn) {
                          stopRecording();
                      }
+                     updateAndShowStorageHint();
                  }
              }
         });
@@ -1296,6 +1306,7 @@
        String state = Environment.getExternalStorageState(mStoragePath);
        Log.d(LOGTAG, "storage state is " + state);
 
+       if (Environment.MEDIA_MOUNTED.equals(state)) {
           try {
                this.addToMediaDB(mSampleFile);
                Toast.makeText(this,getString(R.string.save_record_file,
@@ -1304,6 +1315,10 @@
           } catch(Exception e) {
                e.printStackTrace();
           }
+       } else {
+           Log.e(LOGTAG, "SD card must have removed during recording. ");
+           Toast.makeText(this, "Recording aborted", Toast.LENGTH_SHORT).show();
+       }
        try {
            if((mServiceInUse) && (mCallbacks != null) ) {
                mCallbacks.onRecordingStopped();
@@ -3831,8 +3846,10 @@
            // adding code for audio focus gain.
            AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            audioManager.requestAudioFocus(mGainFocusReq);
-           startFM();
-           enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+           if(false == mPlaybackInProgress) {
+               startFM();
+               enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+           }
            mStoppedOnFocusLoss = false;
        }
    }
