diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp
index 4ae5fd3..8a1a010 100644
--- a/QCamera2/HAL/QCamera2HWI.cpp
+++ b/QCamera2/HAL/QCamera2HWI.cpp
@@ -914,6 +914,10 @@
             streamInfo->num_of_burst = mParameters.getNumOfSnapshots();
         }
         break;
+    case CAM_STREAM_TYPE_POSTVIEW:
+        streamInfo->streaming_mode = CAM_STREAMING_MODE_BURST;
+        streamInfo->num_of_burst = mParameters.getNumOfSnapshots();
+        break;
     case CAM_STREAM_TYPE_OFFLINE_PROC:
         // right now offline process is only for WNR in ZSL case
         // use the same format and dimension for input and output
@@ -1241,8 +1245,6 @@
             (QCameraPicChannel *)m_channels[QCAMERA_CH_TYPE_ZSL];
         if (NULL != pZSLChannel) {
             pZSLChannel->cancelPicture();
-            stopChannel(QCAMERA_CH_TYPE_ZSL);
-            delChannel(QCAMERA_CH_TYPE_ZSL);
         }
     } else {
         // normal capture case
diff --git a/QCamera2/HAL/QCamera2HWI.h b/QCamera2/HAL/QCamera2HWI.h
index 0e7bfca..8a3cdda 100644
--- a/QCamera2/HAL/QCamera2HWI.h
+++ b/QCamera2/HAL/QCamera2HWI.h
@@ -230,6 +230,7 @@
     int32_t prepareHardwareForSnapshot();
     bool needProcessPreviewFrame() {return m_stateMachine.isPreviewRunning();};
     bool isNoDisplayMode() {return mParameters.isNoDisplayMode();};
+    bool isZSLMode() {return mParameters.isZSLMode();};
     uint8_t numOfSnapshotsExpected() {return mParameters.getNumOfSnapshots();};
 
     static void camEvtHandle(uint32_t camera_handle,
diff --git a/QCamera2/HAL/QCameraParameters.cpp b/QCamera2/HAL/QCameraParameters.cpp
index 5d6ccff..6e11b8c 100644
--- a/QCamera2/HAL/QCameraParameters.cpp
+++ b/QCamera2/HAL/QCameraParameters.cpp
@@ -1787,15 +1787,17 @@
         String8 fpsRangeValues = createFpsRangeString(m_pCapability->fps_ranges_tbl,
                                                       m_pCapability->fps_ranges_tbl_cnt);
         set(KEY_SUPPORTED_PREVIEW_FPS_RANGE, fpsRangeValues.string());
-        setPreviewFpsRange(int(m_pCapability->fps_ranges_tbl[0].min_fps * 1000),
-                           int(m_pCapability->fps_ranges_tbl[0].max_fps * 1000));
+        int min_fps =
+            int(m_pCapability->fps_ranges_tbl[m_pCapability->fps_ranges_tbl_cnt - 1].min_fps * 1000);
+        int max_fps =
+            int(m_pCapability->fps_ranges_tbl[m_pCapability->fps_ranges_tbl_cnt - 1].max_fps * 1000);
+        setPreviewFpsRange(min_fps, max_fps);
 
         // Set legacy preview fps
         String8 fpsValues = createFpsString(m_pCapability->fps_ranges_tbl,
                                             m_pCapability->fps_ranges_tbl_cnt);
         set(KEY_SUPPORTED_PREVIEW_FRAME_RATES, fpsValues.string());
-        CameraParameters::setPreviewFrameRate(
-           (int)(m_pCapability->fps_ranges_tbl[0].max_fps * 1000));
+        CameraParameters::setPreviewFrameRate(max_fps);
     } else {
         ALOGE("%s: supported fps ranges cnt is 0!!!", __func__);
     }
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 2993d97..5c9eee4 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -606,8 +606,21 @@
             bool needRestart = false;
             rc = m_parent->updateParameters((char*)payload, needRestart);
             if (rc == NO_ERROR) {
-                rc = m_parent->commitParameterChanges();
+                if (needRestart) {
+                    // need restart preview for parameters to take effect
+                    m_parent->unpreparePreview();
+                    // commit parameter changes to server
+                    m_parent->commitParameterChanges();
+                    // prepare preview again
+                    rc = m_parent->preparePreview();
+                    if (rc != NO_ERROR) {
+                        m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
+                    }
+                } else {
+                    rc = m_parent->commitParameterChanges();
+                }
             }
+
             result.status = rc;
             result.request_api = evt;
             result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
@@ -975,7 +988,11 @@
             rc = m_parent->takePicture();
             if (rc == NO_ERROR) {
                 // move state to picture taking state
-                m_state = QCAMERA_SM_STATE_PIC_TAKING;
+                if (m_parent->isZSLMode()) {
+                    m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
+                } else {
+                    m_state = QCAMERA_SM_STATE_PIC_TAKING;
+                }
             } else {
                 // move state to preview stopped state
                 m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
diff --git a/QCamera2/HAL/QCameraStateMachine.h b/QCamera2/HAL/QCameraStateMachine.h
index 0e7502f..107b5ae 100644
--- a/QCamera2/HAL/QCameraStateMachine.h
+++ b/QCamera2/HAL/QCameraStateMachine.h
@@ -149,7 +149,7 @@
         QCAMERA_SM_STATE_PIC_TAKING,               // taking picture (preview stopped)
         QCAMERA_SM_STATE_RECORDING,                // recording (preview running)
         QCAMERA_SM_STATE_VIDEO_PIC_TAKING,         // taking live snapshot during recording (preview running)
-        QCAMERA_SM_STATE_PREVIEW_PIC_TAKING        // taking live snapshot (recording stopped but preview running)
+        QCAMERA_SM_STATE_PREVIEW_PIC_TAKING        // taking ZSL/live snapshot (recording stopped but preview running)
     } qcamera_state_enum_t;
 
     typedef enum
