diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 6588571..76904eb 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -1449,33 +1449,31 @@
        resolver.insert(uri, values);
    }
 
-   Runnable resumeAfterCall = new Runnable() {
-        public void run() {
-            if (getCallState() != TelephonyManager.CALL_STATE_IDLE)
-                return;
+    private void resumeAfterCall() {
+        if (getCallState() != TelephonyManager.CALL_STATE_IDLE)
+            return;
 
-            // start playing again
-            if (!mResumeAfterCall)
-                return;
+        // start playing again
+        if (!mResumeAfterCall)
+            return;
 
-            // resume playback only if FM Radio was playing
-            // when the call was answered
-            if (isAntennaAvailable() && (!isFmOn()) && mServiceInUse) {
-                Log.d(LOGTAG, "Resuming after call:");
-                if(!fmOn()) {
-                    return;
-                }
-                mResumeAfterCall = false;
-                if (mCallbacks != null) {
-                    try {
-                        mCallbacks.onEnabled();
-                    } catch (RemoteException e) {
-                        e.printStackTrace();
-                    }
+        // resume playback only if FM Radio was playing
+        // when the call was answered
+        if (isAntennaAvailable() && (!isFmOn()) && mServiceInUse) {
+            Log.d(LOGTAG, "Resuming after call:");
+            if(!fmOn()) {
+                return;
+            }
+            mResumeAfterCall = false;
+            if (mCallbacks != null) {
+                try {
+                    mCallbacks.onEnabled();
+                } catch (RemoteException e) {
+                    e.printStackTrace();
                 }
             }
         }
-    };
+    }
 
    private void fmActionOnCallState( int state ) {
    //if Call Status is non IDLE we need to Mute FM as well stop recording if
@@ -1507,6 +1505,8 @@
                mCallStatus = bTempCall;
                mMuted = bTempMute;
            }
+       } else if (TelephonyManager.CALL_STATE_IDLE == state) {
+           resumeAfterCall();
        }
    }
 
@@ -1625,11 +1625,7 @@
                       mStoppedOnFocusLoss = false;
                       if (mResumeAfterCall) {
                           Log.v(LOGTAG, "resumeAfterCall");
-                          if (getCallState() != TelephonyManager.CALL_STATE_IDLE) {
-                              mHandler.postDelayed(resumeAfterCall, 100);
-                              return;
-                          }
-                          mHandler.post(resumeAfterCall);
+                          resumeAfterCall();
                           break;
                       }
                       if(false == mPlaybackInProgress)
