diff --git a/camera/QCameraHWI_Parm.cpp b/camera/QCameraHWI_Parm.cpp
index 82c2943..70dedf6 100755
--- a/camera/QCameraHWI_Parm.cpp
+++ b/camera/QCameraHWI_Parm.cpp
@@ -2564,6 +2564,11 @@
     for (size_t i = 0; i <  mPreviewSizeCount; ++i) {
         if (width ==  mPreviewSizes[i].width
            && height ==  mPreviewSizes[i].height) {
+            int old_width, old_height;
+            mParameters.getPreviewSize(&old_width,&old_height);
+            if(width != old_width || height != old_height) {
+                mRestartPreview = true;
+            }
             mParameters.setPreviewSize(width, height);
             ALOGE("setPreviewSize:  width: %d   heigh: %d", width, height);
             mPreviewWidth = width;
diff --git a/camera/QCameraHWI_Preview.cpp b/camera/QCameraHWI_Preview.cpp
index b83f2eb..c1e027f 100644
--- a/camera/QCameraHWI_Preview.cpp
+++ b/camera/QCameraHWI_Preview.cpp
@@ -250,12 +250,18 @@
     ALOGI(" %s : E ", __FUNCTION__);
 
     mHalCamCtrl->mPreviewMemoryLock.lock();
-	for (int cnt = 0; cnt < mHalCamCtrl->mPreviewMemory.buffer_count; cnt++) {
+    for (int cnt = 0; cnt < mHalCamCtrl->mPreviewMemory.buffer_count; cnt++) {
         if (cnt < mHalCamCtrl->mPreviewMemory.buffer_count) {
             if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_PREVIEW, cnt, mCameraId,
                                                           CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
                 ALOGE("%s: sending data Msg Failed", __func__);
             }
+            if(mHalCamCtrl->isZSLMode()) {
+                if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, cnt, mCameraId,
+                                                          CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
+                    ALOGE("%s: Send socket msg to Unmap Failed", __func__);
+                }
+            }
         }
 
         mHalCamCtrl->mPreviewMemory.camera_memory[cnt]->release(mHalCamCtrl->mPreviewMemory.camera_memory[cnt]);
@@ -371,6 +377,12 @@
                        cnt, mCameraId, CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
               ALOGE("%s: sending data Msg Failed", __func__);
           }
+          if(mHalCamCtrl->isZSLMode()) {
+              if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, cnt, mCameraId,
+                                                            CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
+                  ALOGE("%s: Send socket msg to Unmap Failed", __func__);
+              }
+          }
       }
   }
   mHalCamCtrl->releaseHeapMem(&mHalCamCtrl->mNoDispPreviewMemory);
@@ -603,6 +615,18 @@
       goto error;
     }
 
+    if(mHalCamCtrl->isZSLMode()) {
+         ret = mHalCamCtrl->sendMappingBuf(
+                        MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL,
+                        i,
+                        mDisplayStreamBuf.frame[i].fd,
+                        mHalCamCtrl->mPreviewMemory.private_buffer_handle[i]->size,
+                        mCameraId, CAM_SOCK_MSG_TYPE_FD_MAPPING);
+        if (NO_ERROR != ret) {
+          ALOGE("%s: Send socket msg to map Failed", __func__);
+          goto error;
+        }
+    }
     mDisplayBuf.preview.buf.mp[i].frame = mDisplayStreamBuf.frame[i];
     mDisplayBuf.preview.buf.mp[i].frame_offset = mHalCamCtrl->mPreviewMemory.addr_offset[i];
     mDisplayBuf.preview.buf.mp[i].num_planes = num_planes;
@@ -732,6 +756,16 @@
       ALOGE("%s: sending mapping data Msg Failed", __func__);
     }
 
+    if(mHalCamCtrl->isZSLMode()) {
+        if (NO_ERROR != mHalCamCtrl->sendMappingBuf(
+                    MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL,
+                    i,
+                    mDisplayStreamBuf.frame[i].fd,
+                    mHalCamCtrl->mNoDispPreviewMemory.size,
+                    mCameraId, CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
+            ALOGE("%s: sending mapping data Msg Failed", __func__);
+        }
+    }
     mDisplayBuf.preview.buf.mp[i].frame = mDisplayStreamBuf.frame[i];
     mDisplayBuf.preview.buf.mp[i].frame_offset = mDisplayStreamBuf.frame[i].y_off;
     mDisplayBuf.preview.buf.mp[i].num_planes = num_planes;
diff --git a/camera/QCameraHWI_Still.cpp b/camera/QCameraHWI_Still.cpp
index eaa78e2..cb283ae 100755
--- a/camera/QCameraHWI_Still.cpp
+++ b/camera/QCameraHWI_Still.cpp
@@ -396,14 +396,9 @@
     mHalCamCtrl->getPictureSize(&mPictureWidth, &mPictureHeight);
     ALOGD("%s: Picture size received: %d x %d", __func__,
          mPictureWidth, mPictureHeight);
-    /*Current VFE software design requires picture size >= display size for ZSL*/
-    if (isZSLMode()){
-      mPostviewWidth = dim->display_width;
-      mPostviewHeight = dim->display_height;
-    } else {
-      mPostviewWidth = mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
-      mPostviewHeight =  mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
-    }
+
+    mPostviewWidth = mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+    mPostviewHeight =  mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
     /*If application requested thumbnail size to be (0,0)
        then configure second outout to a default size.
        Jpeg encoder will drop thumbnail as reflected in encodeParams.
@@ -426,7 +421,7 @@
     /* picture size currently set do not match with the one wanted
        by user.*/
     if (!matching) {
-        if (mPictureWidth < mPostviewWidth || mPictureHeight < mPostviewHeight) {
+        if (!isZSLMode() && (mPictureWidth < mPostviewWidth || mPictureHeight < mPostviewHeight)) {
             //Changes to Handle VFE limitation.
             mActualPictureWidth = mPictureWidth;
             mActualPictureHeight = mPictureHeight;
@@ -964,10 +959,6 @@
                  CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
              ALOGE("%s: sending unmapping data Msg Failed", __func__);
              }
-             if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, i, mCameraId,
-                 CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
-                 ALOGE("%s: sending unmapping data Msg Failed", __func__);
-             }
          }
     }
 
@@ -1272,11 +1263,6 @@
              CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
              ALOGE("%s: sending mapping data Msg Failed", __func__);
         }
-        if (NO_ERROR != mHalCamCtrl->sendMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, i,
-            mPostviewStreamBuf.frame[i].fd, mHalCamCtrl->mThumbnailMemory.size, mCameraId,
-            CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
-            ALOGE("%s: sending mapping data Msg Failed", __func__);
-        }
     }
 
 end:
@@ -1693,7 +1679,7 @@
         /*Thumbnail image*/
         crop.in1_w=mCrop.snapshot.thumbnail_crop.width; //dimension.thumbnail_width;
         crop.in1_h=mCrop.snapshot.thumbnail_crop.height; // dimension.thumbnail_height;
-        if(isLiveSnapshot() || isFullSizeLiveshot()) {
+        if(isLiveSnapshot() || isFullSizeLiveshot() || isZSLMode()) {
             crop.out1_w= mHalCamCtrl->thumbnailWidth;
             crop.out1_h=  mHalCamCtrl->thumbnailHeight;
             ALOGD("Thumbnail width= %d  height= %d for livesnapshot", crop.out1_w, crop.out1_h);
