diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index ab78098..6f0c3a6 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -100,6 +100,8 @@
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.os.IBinder.DeathRecipient;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
 
 
 /**
@@ -126,6 +128,8 @@
    private BroadcastReceiver mRecordTimeoutListener = null;
    private BroadcastReceiver mDelayedServiceStopListener = null;
    private BroadcastReceiver mAudioBecomeNoisyListener = null;
+   private SharedPreferences mPref = null;
+   private Editor mEditor = null;
    private boolean mOverA2DP = false;
    private BroadcastReceiver mFmMediaButtonListener;
    private BroadcastReceiver mAirplaneModeChanged;
@@ -229,9 +233,9 @@
    private static final int FM_OFF_FROM_APPLICATION = 1;
    private static final int FM_OFF_FROM_ANTENNA = 2;
    private static final int RADIO_TIMEOUT = 1500;
+   private static final int FW_TIMEOUT = 200;
    private static final int DISABLE_SLIMBUS_DATA_PORT = 0;
    private static final int ENABLE_SLIMBUS_DATA_PORT = 1;
-   private static final int ENABLE_SLIMBUS_CLOCK_DATA = 2;
 
    private static Object mNotchFilterLock = new Object();
 
@@ -246,6 +250,8 @@
       super.onCreate();
 
       mFmA2dpDisabled = SystemProperties.getBoolean("vendor.fm.a2dp.conc.disabled",false);
+      mPref = getApplicationContext().getSharedPreferences("SlimbusPref", MODE_PRIVATE);
+      mEditor = mPref.edit();
       mPrefs = new FmSharedPreferences(this);
       mCallbacks = null;
       TelephonyManager tmgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
@@ -943,7 +949,7 @@
       if (isFmOn()) {
           setLowPowerMode(false);
           startFM();
-          if (mReceiver.isCherokeeChip())
+          if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
               mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
       }
    }
@@ -1665,12 +1671,13 @@
                           Log.v(LOGTAG, "Focus Loss/TLoss - Disabling speaker");
                           AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_NONE);
                       }
-                      if (mReceiver != null)
+                      if (mReceiver != null && (mReceiver.isCherokeeChip()))
                           mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
                       if (true == mPlaybackInProgress) {
                           stopFM();
                       }
-                      if (mReceiver != null)
+
+                      if ((mReceiver != null) && mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
                           mReceiver.EnableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
                       mStoppedOnFocusLoss = true;
                       break;
@@ -1687,7 +1694,8 @@
                       }
 
                       //intentional fall through.
-                      mReceiver.EnableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+                      if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
+                          mReceiver.EnableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
 
                       if (true == isFmRecordingOn())
                           stopRecording();
@@ -1711,8 +1719,8 @@
 
                       if(false == mPlaybackInProgress)
                           startFM();
-
-                      mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+                      if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
+                          mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
                       mSession.setActive(true);
                       break;
                   default:
@@ -2253,6 +2261,28 @@
        return status;
    }
 
+   private boolean waitForFWEvent() {
+       boolean status = false;
+
+       synchronized (mEventWaitLock) {
+           Log.d(LOGTAG, "waiting for FW event");
+           try {
+               if (mEventReceived == false)
+                   mEventWaitLock.wait(FW_TIMEOUT);
+               if (mEventReceived == true) {
+                   status = true;
+               }
+           } catch (IllegalMonitorStateException e) {
+               Log.e(LOGTAG, "Exception caught while waiting for event");
+               e.printStackTrace();
+           } catch (InterruptedException ex) {
+               Log.e(LOGTAG, "Exception caught while waiting for event");
+               ex.printStackTrace();
+           }
+       }
+       return status;
+   }
+
    private boolean fmTurnOnSequence () {
        boolean bStatus = false;
        // This sets up the FM radio device
@@ -2268,6 +2298,9 @@
        mEventReceived = false;
        bStatus = mReceiver.enable(FmSharedPreferences.getFMConfiguration(), this);
 
+       if (mReceiver.isCherokeeChip()) {
+           bStatus = waitForEvent();
+       }
        if (isSpeakerEnabled()) {
            setAudioPath(false);
        } else {
@@ -2331,6 +2364,16 @@
          return bStatus;
    }
 
+   private boolean checkForFwResponse(){
+       Log.d(LOGTAG, "checkForFwResponse");
+       boolean bStatus = false;
+       // Send command to enable FM core
+       mEventReceived = false;
+       mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+       bStatus = waitForFWEvent();
+       return bStatus;
+   }
+
   /*
    * Turn ON FM: Powers up FM hardware, and initializes the FM module
    *                                                                                 .
@@ -2338,17 +2381,6 @@
    */
    private boolean fmTurnOnSequenceCherokee () {
        boolean bStatus = false;
-
-       // Send command to power up SB slave block
-       mEventReceived = false;
-       mReceiver.EnableSlimbus(ENABLE_SLIMBUS_CLOCK_DATA);
-       bStatus = waitForEvent();
-
-       // Send command to enable FM core
-       mEventReceived = false;
-       mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
-       bStatus = waitForEvent();
-
        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        if ((audioManager != null) & (false == mPlaybackInProgress)) {
            Log.d(LOGTAG, "mAudioManager.setFmRadioOn = true \n" );
@@ -2456,10 +2488,21 @@
          else
          {
            if (mReceiver.isCherokeeChip()) {
-               bStatus = fmTurnOnSequenceCherokee();
-           } else {
+               if ((mPref.getBoolean("SLIMBUS_SEQ", true)) ) {
+                   bStatus = checkForFwResponse();
+                   if (bStatus) {
+                       bStatus = fmTurnOnSequenceCherokee();
+                   } else {
+                       mEditor.putBoolean("SLIMBUS_SEQ", false);
+                       mEditor.commit();
+                       bStatus = fmTurnOnSequence();
+                   }
+               } else {
+                   bStatus = fmTurnOnSequence();
+               }
+         } else {
                bStatus = fmTurnOnSequence();
-           }
+         }
            /* reset SSR flag */
            mIsSSRInProgressFromActivity = false;
          }
@@ -4092,7 +4135,7 @@
 
    private void requestFocus() {
        Log.d(LOGTAG, "++requestFocus");
-       if (mReceiver.isCherokeeChip()) {
+       if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
            requestFocusImplCherokee();
        } else {
            requestFocusImpl();
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index 7d04cb4..2fd849a 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -57,6 +57,7 @@
 static uint32_t station_param_mask_flag;
 static uint32_t station_dbg_param_mask_flag;
 uint64_t flag;
+static int slimbus_flag = 0;
 struct fm_hal_t *hal = NULL;
 
 #define LOG_TAG "radio_helium"
@@ -79,6 +80,8 @@
         return;
     }
     rsp = (struct hci_fm_conf_rsp *)ev_rsp;
+    if (!slimbus_flag)
+        hal->jni_cb->thread_evt_cb(0);
     radio_hci_req_complete(rsp->status);
     hal->jni_cb->enabled_cb();
     if (rsp->status == FM_HC_STATUS_SUCCESS)
@@ -412,7 +415,8 @@
 
 static void hci_cc_enable_slimbus_rsp(char *ev_buff)
 {
-    ALOGV("%s status %d", __func__, ev_buff[0]);
+    ALOGD("%s status %d", __func__, ev_buff[0]);
+    slimbus_flag = 1;
     hal->jni_cb->thread_evt_cb(0);
     hal->jni_cb->enable_slimbus_cb(ev_buff[0]);
 }
diff --git a/jni/android_hardware_fm.cpp b/jni/android_hardware_fm.cpp
index 06d03ce..7895e4c 100644
--- a/jni/android_hardware_fm.cpp
+++ b/jni/android_hardware_fm.cpp
@@ -87,6 +87,7 @@
 char *FM_LIBRARY_NAME = "fm_helium.so";
 char *FM_LIBRARY_SYMBOL_NAME = "FM_HELIUM_LIB_INTERFACE";
 void *lib_handle;
+static int slimbus_flag = 0;
 
 typedef void (*enb_result_cb)();
 typedef void (*tune_rsp_cb)(int Freq);
@@ -167,10 +168,19 @@
 void fm_enabled_cb() {
     ALOGD("Entered %s", __func__);
 
-    if (!checkCallbackThread())
-        return;
+    if (slimbus_flag) {
+        if (!checkCallbackThread())
+            return;
 
-    mCallbackEnv->CallVoidMethod(mCallbacksObj, method_enableCallback);
+        mCallbackEnv->CallVoidMethod(mCallbacksObj, method_enableCallback);
+    } else {
+        if (mCallbackEnv != NULL) {
+            ALOGE("javaObjectRef creating");
+            jobject javaObjectRef =  mCallbackEnv->NewObject(javaClassRef, method_enableCallback);
+            mCallbacksObj = javaObjectRef;
+            ALOGE("javaObjectRef = %p mCallbackobject =%p \n",javaObjectRef,mCallbacksObj);
+        }
+    }
     ALOGD("exit  %s", __func__);
 }
 
@@ -541,6 +551,7 @@
         return;
 
     mCallbackEnv->CallVoidMethod(mCallbacksObj, method_enableSlimbusCallback, status);
+    slimbus_flag = 1;
     ALOGV("--fm_enable_slimbus_cb");
 }
 
