diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 1c506c4a5047e9e75146f2b097c596aa6687cb5f..091b1b3d66de92ec17ab96e9617c94d28c3c6009 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -276,6 +276,7 @@ public class FMStats extends Activity  {
 
     private Thread mRecordUpdateHandlerThread = null;
     private Thread mRunTestThread = null;
+    private Thread mTuneCompleteThread = null;
     boolean mRecording = false;
 
 
@@ -465,12 +466,10 @@ public class FMStats extends Activity  {
                         if (lastCmdSent == CMD_STNPARAM_SINR)
                             nSINR = msg.arg1;
                     }
-                    if (mRunTestThread !=  null) {
-                        synchronized (obj) {
-                            obj.notify();
-                        }
-                    }
-                    lastCmdSent = 0;
+					synchronized (obj) {
+						obj.notify();
+					}
+					lastCmdSent = 0;
                     break;
                 case GET_STATION_DBG_PARAM:
                     status = msg.arg2;
@@ -484,12 +483,10 @@ public class FMStats extends Activity  {
                         if  (lastCmdSent == CMD_STNDBGPARAM_INFDETOUT)
                             nIntDet = msg.arg1;
                     }
-                    if (mRunTestThread !=  null) {
-                        synchronized (obj) {
-                            mRunTestThread.notify();
-                        }
-                    }
-                    break;
+					synchronized (obj) {
+						obj.notify();
+					}
+					break;
                 default:
                     Log.e(LOGTAG, "mCallbackHandler:Default");
                     break;
@@ -535,9 +532,6 @@ public class FMStats extends Activity  {
         if(mUIUpdateHandlerHandler != null) {
            mUIUpdateHandlerHandler.removeCallbacksAndMessages(null);
         }
-        if(mHandler != null) {
-           mHandler.removeCallbacksAndMessages(null);
-        }
         unRegisterBroadcastReceiver(mBandSweepDelayExprdListener);
         unRegisterBroadcastReceiver(mBandSweepDwellExprdListener);
         if(null != mFileCursor ) {
@@ -563,6 +557,28 @@ public class FMStats extends Activity  {
         }
     };
 
+     private Runnable mTuneComplete = new Runnable(){
+         public void run(){
+             if((null != mMultiUpdateThread) &&(null != mSync))
+             {
+                 synchronized(mSync){
+                     mSync.notify();
+                 }
+             }
+            if((mTestSelected == SEARCH_TEST) && (mService != null)) {
+                /* On every Tune Complete generate the result for the current
+                Frequency*/
+                Message updateUI = new Message();
+                updateUI.what = STATUS_UPDATE;
+                int freq = FmSharedPreferences.getTunedFrequency();
+                updateUI.obj = (Object)GetFMStatsForFreq(freq);
+                if (updateUI.obj == null)
+                    updateUI.what = STATUS_DONE;
+                mUIUpdateHandlerHandler.sendMessage(updateUI);
+            }
+         }
+     };
+
     private View.OnClickListener mOnRunListener = new View.OnClickListener() {
         public void onClick(View v) {
             Log.d(LOGTAG, "mTestRunning=" + mTestRunning);
@@ -2880,12 +2896,12 @@ public class FMStats extends Activity  {
     private boolean isCherokeeChip() {
         Log.d(LOGTAG, "isCherokeeChip");
 
-		String chip = SystemProperties.get("qcom.bluetooth.soc");
-		if (chip.equals("cherokee"))
-			return true;
-		else
-			return false;
-	}
+        String chip = SystemProperties.get("qcom.bluetooth.soc");
+        if (chip.equals("cherokee"))
+            return true;
+        else
+            return false;
+    }
 
     private boolean isRomeChip() {
         String chip = "";
@@ -3515,8 +3531,21 @@ public class FMStats extends Activity  {
           public void onTuneStatusChanged()
           {
              Log.d(LOGTAG, "mServiceCallbacks.onTuneStatusChanged :" + mTestRunning);
-             if (mTestRunning)
-                 mHandler.post(mTuneComplete);
+             if (mTestRunning) {
+                 if ((mTuneCompleteThread == null) || (mTuneCompleteThread.getState() == Thread.State.TERMINATED)) {
+                     mTuneCompleteThread = new Thread(mTuneComplete,
+                                                "mTuneCompleteThread");
+                 } else {
+                     Log.e(LOGTAG, "mTuneCompleteThread is already running");
+                     return;
+                 }
+                 if (mTuneCompleteThread != null) {
+                     mTuneCompleteThread.start();
+                 } else {
+                     Log.e(LOGTAG, "mTuneCompleteThread: new thread create failed");
+                     return;
+                 }
+             }
           }
 
           public void onProgramServiceChanged()
@@ -3737,30 +3766,6 @@ public class FMStats extends Activity  {
               mCallbackHandler.obtainMessage(GET_STATION_DBG_PARAM, val, status).sendToTarget();
           }
       };
-      /* Radio Vars */
-     private Handler mHandler = new Handler();
-
-     private Runnable mTuneComplete = new Runnable(){
-         public void run(){
-             if((null != mMultiUpdateThread) &&(null != mSync))
-             {
-                 synchronized(mSync){
-                     mSync.notify();
-                 }
-             }
-            if((mTestSelected == SEARCH_TEST) && (mService != null)) {
-                /* On every Tune Complete generate the result for the current
-                Frequency*/
-                Message updateUI = new Message();
-                updateUI.what = STATUS_UPDATE;
-                int freq = FmSharedPreferences.getTunedFrequency();
-                updateUI.obj = (Object)GetFMStatsForFreq(freq);
-                if (updateUI.obj == null)
-                    updateUI.what = STATUS_DONE;
-                mUIUpdateHandlerHandler.sendMessage(updateUI);
-            }
-         }
-     };
 
      private void stopCurTest() {
          if (mRunTestThread != null) {
@@ -3779,7 +3784,8 @@ public class FMStats extends Activity  {
                       mMultiUpdateThread.interrupt();
                   break;
              case SEARCH_TEST:
-                  mHandler.removeCallbacks(mTuneComplete);
+                  if (mTuneCompleteThread != null)
+                      mTuneCompleteThread.interrupt();
                   if (mService != null) {
                       try {
                            Message updateStop = new Message();