diff --git a/qcom/fmradio/FmReceiver.java b/qcom/fmradio/FmReceiver.java
index 5ba27c8c568482fd1feed310c71bf11f1ebe3780..7d6ab0d4954c46aa363b16c9c592d3ac12a84b18 100644
--- a/qcom/fmradio/FmReceiver.java
+++ b/qcom/fmradio/FmReceiver.java
@@ -41,6 +41,7 @@ import android.content.Intent;
 import android.net.wifi.WifiManager;
 import android.content.IntentFilter;
 import android.bluetooth.BluetoothAdapter;
+import java.lang.Object;
 
 /**
  * This class contains all interfaces and types needed to
@@ -439,6 +440,8 @@ public class FmReceiver extends FmTransceiver
            }
        }
    };
+   private volatile int mState;
+   public static Object mLockObject = new Object();
 
    /**
     * Constructor for the receiver Object
@@ -446,7 +449,7 @@ public class FmReceiver extends FmTransceiver
    public FmReceiver(){
       mControl = new FmRxControls();
       mRdsData = new FmRxRdsData (sFd);
-      mRxEvents = new FmRxEventListner();
+      mRxEvents = new FmRxEventListner(this);
    }
 
    /**
@@ -461,7 +464,7 @@ public class FmReceiver extends FmTransceiver
    public FmReceiver(String devicePath,
                      FmRxEvCallbacksAdaptor callback) throws InstantiationException {
       mControl = new FmRxControls();
-      mRxEvents = new FmRxEventListner();
+      mRxEvents = new FmRxEventListner(this);
 
       Log.e(TAG, "FmReceiver constructor");
       //registerClient(callback);
@@ -576,22 +579,32 @@ public class FmReceiver extends FmTransceiver
        * Check for FM State.
        * If FMRx already on, then return.
       */
-      int state = getFMState();
+
+      int mState = getFMState();
 
       mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
       mBtIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
 
-      if (state == FMState_Rx_Turned_On || state == FMState_Srch_InProg) {
+      if (mState == FMState_Rx_Turned_On || mState == FMState_Srch_InProg) {
+
          Log.d(TAG, "enable: FM already turned On and running");
          return status;
-      }else if (state == subPwrLevel_FMTurning_Off) {
+      }else if (mState == subPwrLevel_FMTurning_Off) {
          Log.v(TAG, "FM is in the process of turning off.Pls wait for sometime.");
-         return status;
-      }else if (state == subPwrLevel_FMRx_Starting) {
+         synchronized(mLockObject){
+                try {
+                    if (getFMState() != FMState_Turned_Off) {
+                        mLockObject.wait();
+                    }
+                } catch (InterruptedException e) {
+                    Log.e(TAG, "Error in waiting on mLockObject" + e);
+                }
+         }
+      }else if (mState == subPwrLevel_FMRx_Starting) {
          Log.v(TAG, "FM is in the process of turning On.Pls wait for sometime.");
          return status;
-      }else if ((state == FMState_Tx_Turned_On)
-                || (state == subPwrLevel_FMTx_Starting)) {
+      }else if ((mState == FMState_Tx_Turned_On)
+                || (mState == subPwrLevel_FMTx_Starting)) {
          Log.v(TAG, "FM Tx is turned on or in the process of turning on.");
          return status;
       }
diff --git a/qcom/fmradio/FmRxEventListner.java b/qcom/fmradio/FmRxEventListner.java
index 0ad7c0ccb03c1c69499cc41b1d5e3e633d0deb55..9c9bba23df06c3d963abc9285758979452cf2c46 100644
--- a/qcom/fmradio/FmRxEventListner.java
+++ b/qcom/fmradio/FmRxEventListner.java
@@ -59,8 +59,13 @@ class FmRxEventListner {
     }
 
     private Thread mThread;
+    private FmReceiver mReceiver;
     private static final String TAG = "FMRadio";
 
+    public FmRxEventListner(FmReceiver receiver) {
+        mReceiver = receiver;
+    }
+
     public void startListner (final int fd, final FmRxEvCallbacks cb) {
         /* start a thread and listen for messages */
         mThread = new Thread(){
@@ -213,11 +218,14 @@ class FmRxEventListner {
                             case 18:
                                 Log.d(TAG, "Got RADIO_DISABLED");
                                 if (FmTransceiver.getFMPowerState() == FmTransceiver.subPwrLevel_FMTurning_Off) {
-                                    FmTransceiver.release("/dev/radio0");
-                                    cb.FmRxEvDisableReceiver();
-                                    /*Set the state as FMOff */
-                                    FmTransceiver.setFMPowerState(FmTransceiver.FMState_Turned_Off);
-                                    Log.v(TAG, "RxEvtList: CURRENT-STATE : FMTurningOff ---> NEW-STATE : FMOff");
+                                    synchronized(FmReceiver.mLockObject) {
+                                        FmTransceiver.release("/dev/radio0");
+                                        cb.FmRxEvDisableReceiver();
+                                        /*Set the state as FMOff */
+                                        FmTransceiver.setFMPowerState(FmTransceiver.FMState_Turned_Off);
+                                        Log.v(TAG, "RxEvtList: CURRENT-STATE : FMTurningOff ---> NEW-STATE : FMOff");
+                                        FmReceiver.mLockObject.notify();
+                                    }
                                     Thread.currentThread().interrupt();
                                 } else {
                                     Log.d(TAG, "Unexpected RADIO_DISABLED recvd");