diff --git a/fm_hci/fm_hci.cpp b/fm_hci/fm_hci.cpp
index 0b442f1..105535a 100644
--- a/fm_hci/fm_hci.cpp
+++ b/fm_hci/fm_hci.cpp
@@ -99,12 +99,10 @@
 
     ALOGI("%s: putting lock before enqueue ", __func__);
     hci.rx_cond_mtx.lock();
-    ALOGI("%s: pushing event to que before notify", __func__);
     hci.rx_event_queue.push(hdr);
-    ALOGI("%s:before notify to waiting thred", __func__);
-    hci.rx_cond.notify_all();
-    ALOGI("%s:after notify to waiting thred", __func__);
     hci.rx_cond_mtx.unlock();
+    ALOGI("%s:notify to waiting thred", __func__);
+    hci.rx_cond.notify_all();
     ALOGI("%s: FM-Event ENQUEUED SUCCESSFULLY", __func__);
 
     return FM_HC_STATUS_SUCCESS;
@@ -138,22 +136,39 @@
         evt_buf = hci.rx_event_queue.front();
         hci.rx_event_queue.pop();
 
-        hci.credit_mtx.lock();
         if (evt_buf->evt_code == FM_CMD_COMPLETE) {
-            ALOGI("%s: %d Credits got from the SOC", __func__, evt_buf->params[0]);
-            hci.command_credits += evt_buf->params[0];
-            hci.cmd_credits_cond.notify_all();
+            ALOGI("%s: FM_CMD_COMPLETE: current_credits %d, %d Credits got from the SOC", __func__, hci.command_credits, evt_buf->params[0]);
+            if (hci.command_credits == 0) {
+                hci.command_credits += evt_buf->params[0];
+                ALOGI(" dequeue_fm_rx_event: wait for tx_cond_lock ");
+                hci.tx_cond_mtx.lock();
+                ALOGI(" dequeue_fm_rx_event: Notifying tx_cond_lock ");
+                hci.tx_cond.notify_all();
+                ALOGI(" dequeue_fm_rx_event: UNLOCKING tx_cond_lock ");
+                hci.tx_cond_mtx.unlock();
+            } else {
+                hci.command_credits += evt_buf->params[0];
+            }
+
         } else if (evt_buf->evt_code == FM_CMD_STATUS) {
-            ALOGI("%s: %d Credits got from the SOC", __func__, evt_buf->params[1]);
-            hci.command_credits += evt_buf->params[1];
-            hci.cmd_credits_cond.notify_all();
+            ALOGI("%s: FM_CMD_STATUS: current_credits %d, %d Credits got from the SOC", __func__, hci.command_credits, evt_buf->params[1]);
+            if (hci.command_credits == 0) {
+                hci.command_credits += evt_buf->params[1];
+                ALOGI(" dequeue_fm_rx_event: wait for tx_cond_lock ");
+                hci.tx_cond_mtx.lock();
+                ALOGI(" dequeue_fm_rx_event: Notifying tx_cond_lock ");
+                hci.tx_cond.notify_all();
+                ALOGI(" dequeue_fm_rx_event: UNLOCKING tx_cond_lock ");
+                hci.tx_cond_mtx.unlock();
+            } else {
+                hci.command_credits += evt_buf->params[1];
+            }
         } else if (evt_buf->evt_code == FM_HW_ERR_EVENT) {
             ALOGI("%s: FM H/w Err Event Recvd. Event Code: 0x%x", __func__, evt_buf->evt_code);
         } else {
             ALOGE("%s: Not CS/CC Event: Recvd. Event Code: 0x%x", __func__, evt_buf->evt_code);
         }
 
-        hci.credit_mtx.unlock();
         if (hci.cb && hci.cb->process_event) {
             ALOGI("%s: processing the event", __func__);
             hci.cb->process_event(NULL, (uint8_t *)evt_buf);
@@ -180,18 +195,23 @@
 *******************************************************************************/
 static int enqueue_fm_tx_cmd(struct fm_command_header_t *hdr)
 {
-    ALOGI("%s:  opcode 0x%x len:%d tx_processing %d", __func__,  hdr->opcode, hdr->len, hci.is_tx_processing);
+    ALOGI("%s:  opcode 0x%x len:%d ", __func__,  hdr->opcode, hdr->len);
 
     hci.tx_queue_mtx.lock();
     hci.tx_cmd_queue.push(hdr);
     hci.tx_queue_mtx.unlock();
 
-    if (hci.is_tx_processing == false) {
-        ALOGI("%s:  notifying tx_processing %d", __func__,hci.is_tx_processing);
+    ALOGI("%s:  notifying credits %d", __func__, hci.command_credits);
+    if (hci.command_credits > 0) {
+        ALOGI(" enqueue_fm_tx_cmd: wait for tx_cond_lock ");
+        hci.tx_cond_mtx.lock();
+        ALOGI(" enqueue_fm_tx_cmd: Notifying tx_cond_lock ");
         hci.tx_cond.notify_all();
+        ALOGI(" enqueue_fm_tx_cmd: UNLOCK tx_cond_lock ");
+        hci.tx_cond_mtx.unlock();
     }
 
-    ALOGI("%s: FM-CMD ENQUEUED SUCCESSFULLY", __func__);
+    ALOGI("%s: FM-CMD ENQUEUED SUCCESSFULLY  credits %d", __func__, hci.command_credits);
 
     return FM_HC_STATUS_SUCCESS;
 }
@@ -215,17 +235,18 @@
 
     ALOGI("%s", __func__);
 
-    while (1) {
+    while (1) 
+    {
+       ALOGI(" dequeue_fm_tx_cmd:  command credits %d ", hci.command_credits);
+       if (hci.command_credits == 0) {
+          return;
+       }
         hci.tx_queue_mtx.lock();
-        ALOGI("%s inside while(1) %d", __func__,hci.tx_cmd_queue.empty());
+        ALOGI("%s is_que_empty %d", __func__,hci.tx_cmd_queue.empty());
         if(hci.tx_cmd_queue.empty()){
             ALOGI(" %s No more FM CMDs are available in the Queue",__func__);
-            hci.is_tx_processing = false;
             hci.tx_queue_mtx.unlock();
             return;
-        } else {
-            ALOGI("%s tx_processing", __func__);
-            hci.is_tx_processing = true;
         }
 
         hdr = hci.tx_cmd_queue.front();
@@ -233,19 +254,12 @@
         hci.tx_queue_mtx.unlock();
         ALOGI("%s: packet popped %d credits", __func__,hci.command_credits);
 
-        Lock lk(hci.credit_mtx);
-        while (hci.command_credits == 0) {
-            ALOGI("%s: waiting for credits", __func__);
-            hci.cmd_credits_cond.wait(lk);
-            ALOGI("%s: %d Credits Remaining", __func__, hci.command_credits);
-            if (hci.command_credits) {
-                 break;
-            }
-        }
+
         hci.command_credits--;
         hci_transmit(hdr);
         ALOGI("%s: packet transmitted %d credits", __func__,hci.command_credits);
     }
+    ALOGI(" %s outside while(1), credits %d ", __func__, hci.command_credits);
 }
 
 
@@ -266,19 +280,11 @@
     ALOGI("%s: ##### starting hci_tx_thread Worker thread!!! #####", __func__);
     hci.is_tx_thread_running = true;
 
+    Lock lk(hci.tx_cond_mtx);
     while (hci.state != FM_RADIO_DISABLING && hci.state != FM_RADIO_DISABLED) {
         //wait  for tx cmd
-        ALOGV("%s: acquiring lock %d credits!!!" , __func__,hci.command_credits);
-        Lock lk(hci.tx_cond_mtx);
-        if(hci.tx_cmd_queue.empty())
-        {
-          ALOGI("%s: before wait %d credits!!!" , __func__,hci.command_credits);
-          hci.tx_cond.wait(lk);
-        }
-        else
-        {
-          ALOGI("%s:queue is not empty dont wait" , __func__);
-        }
+        ALOGI("%s: before wait %d credits!!!" , __func__,hci.command_credits);
+        hci.tx_cond.wait(lk);
         ALOGV("%s: after wait dequeueing the tx cmd!!!" , __func__);
         dequeue_fm_tx_cmd();
     }
@@ -361,9 +367,7 @@
     int ret;
 
     ALOGI("%s:stop_tx_thread ++", __func__);
-    if (hci.is_tx_processing == false) {
-        hci.tx_cond.notify_all();
-    }
+    hci.tx_cond.notify_all();
 
     hci.tx_thread_.join();
     ALOGI("%s:stop_tx_thread --", __func__);
@@ -634,7 +638,6 @@
 
     hci.cb = hci_hal->cb;
     hci.command_credits = 1;
-    hci.is_tx_processing = false;
     hci.is_tx_thread_running = false;
     hci.is_rx_thread_running = false;
     hci.state = FM_RADIO_DISABLED;
diff --git a/fm_hci/fm_hci.h b/fm_hci/fm_hci.h
index 73e1290..8470519 100644
--- a/fm_hci/fm_hci.h
+++ b/fm_hci/fm_hci.h
@@ -42,9 +42,6 @@
         std::condition_variable on_cond;
         std::mutex on_mtx;
 
-        bool is_tx_processing;
-        bool is_rx_processing;
-
         bool is_tx_thread_running;
         bool is_rx_thread_running;
 
@@ -56,7 +53,6 @@
 
         std::mutex tx_queue_mtx;
 
-        std::mutex credit_mtx;
         std::condition_variable cmd_credits_cond;
 
         std::queue<struct fm_command_header_t *> tx_cmd_queue;
