diff --git a/camera/QCameraHWI.cpp b/camera/QCameraHWI.cpp
index 56bd29b..4668b5a 100755
--- a/camera/QCameraHWI.cpp
+++ b/camera/QCameraHWI.cpp
@@ -1005,6 +1005,15 @@
 
     ALOGV("%s: mPreviewState =%d", __func__, mPreviewState);
     Mutex::Autolock lock(mLock);
+
+    if(mPauseFramedispatch){
+        //In ZSL case after snapshot we need to restart
+        //if stop preview not issued.
+        stopPreviewInternal();
+        mPreviewState = QCAMERA_HAL_PREVIEW_STOPPED;
+        mPauseFramedispatch = false;
+    }
+
     switch(mPreviewState) {
     case QCAMERA_HAL_PREVIEW_STOPPED:
     case QCAMERA_HAL_TAKE_PICTURE:
@@ -1043,8 +1052,8 @@
     cam_ctrl_dimension_t dim;
     mm_camera_dimension_t maxDim;
     bool initPreview = false;
-    mPauseFramedispatch = false;
 
+    mPauseFramedispatch = false;
     if (mPreviewState == QCAMERA_HAL_PREVIEW_STARTED) { //isPreviewRunning()){
         ALOGE("%s:Preview already started  mCameraState = %d!", __func__, mCameraState);
         ALOGV("%s: X", __func__);
@@ -1246,6 +1255,7 @@
     }
     mStreamDisplay->stop();
 
+    mPauseFramedispatch = false;
     mCameraState = CAMERA_STATE_PREVIEW_STOP_CMD_SENT;
     ALOGV("stopPreviewInternal: X");
 }
@@ -1255,6 +1265,9 @@
     ALOGV("previewEnabled: E");
     Mutex::Autolock lock(mLock);
     ALOGI("%s: mCameraState = %d", __func__, mCameraState);
+    if (mPauseFramedispatch) {
+        return false;
+    }
     switch(mPreviewState) {
     case QCAMERA_HAL_PREVIEW_STOPPED:
     case QCAMERA_HAL_TAKE_PICTURE:
@@ -1630,7 +1643,6 @@
         mStreamSnap->setFullSizeLiveshot(false);
         if (isZSLMode()) {
             if (mStreamSnap != NULL) {
-                mPauseFramedispatch = true;
                 pausePreviewForZSL();
                 ret = mStreamSnap->takePictureZSL();
                 if (ret != MM_CAMERA_OK) {
diff --git a/camera/QCameraHWI_Preview.cpp b/camera/QCameraHWI_Preview.cpp
index 2f1197f..f53069d 100755
--- a/camera/QCameraHWI_Preview.cpp
+++ b/camera/QCameraHWI_Preview.cpp
@@ -874,6 +874,13 @@
     /*Call buf done*/
     return BAD_VALUE;
   }
+
+  if(mHalCamCtrl->mPauseFramedispatch) {
+      if(MM_CAMERA_OK != cam_evt_buf_done(mCameraId, frame)) {
+            ALOGE("BUF DONE FAILED for the recylce buffer");
+      }
+      return NO_ERROR;
+  }
   mHalCamCtrl->mCallbackLock.lock();
   camera_data_timestamp_callback rcb = mHalCamCtrl->mDataCbTimestamp;
   void *rdata = mHalCamCtrl->mCallbackCookie;
@@ -898,13 +905,13 @@
   ALOGI("Enqueue buf handle %p\n",
   mHalCamCtrl->mPreviewMemory.buffer_handle[frame->def.idx]);
   ALOGV("%s: camera call genlock_unlock", __FUNCTION__);
-  if(!mHalCamCtrl->mPauseFramedispatch) {
+
     if (BUFFER_LOCKED == mHalCamCtrl->mPreviewMemory.local_flag[frame->def.idx]) {
       ALOGI("%s: genlock_unlock_buffer hdl =%p", __FUNCTION__, (*mHalCamCtrl->mPreviewMemory.buffer_handle[frame->def.idx]));
         if (GENLOCK_FAILURE == genlock_unlock_buffer((native_handle_t*)
-	            (*mHalCamCtrl->mPreviewMemory.buffer_handle[frame->def.idx]))) {
+                (*mHalCamCtrl->mPreviewMemory.buffer_handle[frame->def.idx]))) {
             ALOGE("%s: genlock_unlock_buffer failed", __FUNCTION__);
-	        //mHalCamCtrl->mPreviewMemoryLock.unlock();
+            //mHalCamCtrl->mPreviewMemoryLock.unlock();
             //return -EINVAL;
         } else {
             mHalCamCtrl->mPreviewMemory.local_flag[frame->def.idx] = BUFFER_UNLOCKED;
@@ -998,11 +1005,7 @@
      }
   } else
       ALOGV("%s: error in dequeue_buffer, enqueue_buffer idx = %d, no free buffer now", __func__, frame->def.idx);
-  } else {
-      if(MM_CAMERA_OK != cam_evt_buf_done(mCameraId, frame)) {
-            ALOGE("BUF DONE FAILED for the recylce buffer");
-      }
-  }
+
   /* Save the last displayed frame. We'll be using it to fill the gap between
      when preview stops and postview start during snapshot.*/
   mLastQueuedFrame = &(mDisplayStreamBuf.frame[frame->def.idx]);
diff --git a/camera/QCameraHWI_Still.cpp b/camera/QCameraHWI_Still.cpp
index d0e1b59..3da606f 100755
--- a/camera/QCameraHWI_Still.cpp
+++ b/camera/QCameraHWI_Still.cpp
@@ -1952,13 +1952,11 @@
           frame. We'll need to query.*/
         memset(&crop, 0, sizeof(common_crop_t));
 
-        /*maftab*/
-        #if 0
-        crop.in1_w=mCrop.snapshot.thumbnail_crop.width;
-        crop.in1_h=mCrop.snapshot.thumbnail_crop.height;
-        crop.out1_w=mThumbnailWidth;
-        crop.out1_h=mThumbnailHeight;
-        #endif
+        if(isZSLMode()){
+            //Changes to stop sending Preview Frames when Snapshot issued
+            //in ZSL case.
+            mHalCamCtrl->mPauseFramedispatch = true;
+        }
 
         ALOGI("%s: Call notifyShutter 2nd time", __func__);
         /* The recvd_frame structre we receive from lower library is a local
diff --git a/camera/mm-camera-interface/mm_camera_notify.c b/camera/mm-camera-interface/mm_camera_notify.c
index aa46289..c76f572 100644
--- a/camera/mm-camera-interface/mm_camera_notify.c
+++ b/camera/mm-camera-interface/mm_camera_notify.c
@@ -430,12 +430,6 @@
     }
     pthread_mutex_unlock(&my_obj->ch[MM_CAMERA_CH_PREVIEW].mutex);
 
-    for( i=0;i<cnt;i++) {
-        if(buf_cb[i].cb != NULL && my_obj->poll_threads[MM_CAMERA_CH_PREVIEW].data.used == 1) {
-            buf_cb[i].cb(&data[i],buf_cb[i].user_data);
-        }
-    }
-
     if(my_obj->op_mode == MM_CAMERA_OP_MODE_ZSL) {
         /* Reset match to 0. */
         stream->frame.frame[idx].match = 0;
@@ -444,6 +438,12 @@
           &my_obj->ch[MM_CAMERA_CH_PREVIEW].preview.stream.frame.frame[idx],
           stream);
     }
+
+    for( i=0;i<cnt;i++) {
+        if(buf_cb[i].cb != NULL && my_obj->poll_threads[MM_CAMERA_CH_PREVIEW].data.used == 1) {
+            buf_cb[i].cb(&data[i],buf_cb[i].user_data);
+        }
+    }
 }
 
 static void mm_camera_snapshot_send_liveshot_notify(mm_camera_obj_t * my_obj)
