diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index a095d11..9546cd3 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -1441,6 +1441,7 @@
    //any. Similarly once call is ended FM should be unmuted.
        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mCallStatus = state;
+       int granted = AudioManager.AUDIOFOCUS_REQUEST_FAILED, count = 0;
 
        if((TelephonyManager.CALL_STATE_OFFHOOK == state)||
           (TelephonyManager.CALL_STATE_RINGING == state)) {
@@ -1475,9 +1476,21 @@
               if (isAntennaAvailable() && (!isFmOn()) && mServiceInUse)
               {
                    Log.d(LOGTAG, "Resuming after call:");
+                   do {
+                       granted = audioManager.requestAudioFocus(mAudioFocusListener,
+                               AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+                       ++count;
+                       try {
+                           Thread.sleep(100);
+                       } catch (Exception ex) {
+                           Log.d( LOGTAG, "InterruptedException");
+                       }
+                   } while(granted != AudioManager.AUDIOFOCUS_REQUEST_GRANTED && count != 3);
+
                    if(true != fmOn()) {
                        return;
                    }
+
                    mResumeAfterCall = false;
                    if(mCallbacks != null) {
                       try {
diff --git a/fmapp2/src/com/caf/hc_utils/FrequencyPicker.java b/fmapp2/src/com/caf/hc_utils/FrequencyPicker.java
index 519b530..466cc0e 100644
--- a/fmapp2/src/com/caf/hc_utils/FrequencyPicker.java
+++ b/fmapp2/src/com/caf/hc_utils/FrequencyPicker.java
@@ -32,6 +32,7 @@
 import com.caf.fmradio.R;
 import android.widget.NumberPicker;
 import android.widget.NumberPicker.OnValueChangeListener;
+import android.graphics.Color;
 /**
  * A view for selecting the frequency
  *
@@ -85,6 +86,7 @@
         mMHzPicker = (NumberPicker) findViewById(R.id.mhz);
         if (mMHzPicker != null) {
            mMHzPicker.setOnLongPressUpdateInterval(100);
+           mMHzPicker.setBackgroundColor(Color.WHITE);
 
            mMHzPicker.setOnValueChangedListener(new OnValueChangeListener() {
               public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
@@ -100,6 +102,7 @@
         mKHzPicker = (NumberPicker) findViewById(R.id.khz);
         if (mKHzPicker != null) {
            mKHzPicker.setOnLongPressUpdateInterval(100);
+           mKHzPicker.setBackgroundColor(Color.WHITE);
            mKHzPicker.setOnValueChangedListener(new OnValueChangeListener() {
               public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                   mKhz = newVal;
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index 4d02987..733c0a5 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -40,7 +40,7 @@
 
 int hci_fm_get_signal_threshold();
 int hci_fm_enable_recv_req();
-int hci_fm_mute_mode_req(struct hci_fm_mute_mode_req );
+int hci_fm_mute_mode_req(struct hci_fm_mute_mode_req *);
 static int oda_agt;
 static int grp_mask;
 static int rt_plus_carrier = -1;
@@ -1207,9 +1207,9 @@
     case HCI_FM_HELIUM_AUDIO_MUTE:
         saved_val = hal->radio->mute_mode.hard_mute;
         hal->radio->mute_mode.hard_mute = val;
-        ret = hci_fm_mute_mode_req(hal->radio->mute_mode);
+        ret = hci_fm_mute_mode_req(&hal->radio->mute_mode);
         if (ret < 0) {
-            ALOGE("%s:Error while set FM hard mute %d", LOG_TAG, ret);
+            ALOGE("%s:Error while set FM hard mute :%d", LOG_TAG, ret);
             hal->radio->mute_mode.hard_mute = saved_val;
         }
         break;
@@ -1633,6 +1633,9 @@
     case HCI_FM_HELIUM_LOWER_BAND:
         val = hal->radio->recv_conf.band_low_limit;
         break;
+    case HCI_FM_HELIUM_AUDIO_MUTE:
+        val = hal->radio->mute_mode.hard_mute;
+        return val;
     case HCI_FM_HELIUM_SINR_SAMPLES:
         set_bit(ch_det_th_mask_flag, CMD_CHDET_SINR_SAMPLE);
         ret = hci_fm_get_ch_det_th();
