diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index 589d616..cae05ea 100755
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -445,11 +445,8 @@
                     cam_stream_type_t stream_type) :
                         QCamera3Channel(cam_handle, cam_ops, cb_routine,
                                                 paddingInfo, userData),
-                        mMemory(NULL),
                         mCamera3Stream(stream),
                         mNumBufs(0),
-                        mRegisteredBuffers(0),
-                        mCamera3Buffers(NULL),
                         mStreamType(stream_type)
 {
 }
@@ -465,9 +462,7 @@
  *==========================================================================*/
 QCamera3RegularChannel::~QCamera3RegularChannel()
 {
-    if (mCamera3Buffers) {
-        delete[] mCamera3Buffers;
-    }
+    mCamera3Buffers.clear();
 }
 
 /*===========================================================================
@@ -505,11 +500,6 @@
     }
 
     mNumBufs = CAM_MAX_NUM_BUFS_PER_STREAM;
-    mCamera3Buffers = new buffer_handle_t*[mNumBufs];
-    if (mCamera3Buffers == NULL) {
-        ALOGE("%s: Failed to allocate buffer_handle_t*", __func__);
-        return -ENOMEM;
-    }
 
     if (mCamera3Stream->format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
         if (mStreamType ==  CAM_STREAM_TYPE_VIDEO) {
@@ -561,7 +551,7 @@
 {
     int32_t rc = NO_ERROR;
 
-    if (0 < mRegisteredBuffers) {
+    if (0 < mCamera3Buffers.size()) {
         rc = QCamera3Channel::start();
     }
 
@@ -583,7 +573,7 @@
     int32_t index;
     if(buffer == NULL)
         return NULL;
-    index = mMemory->getMatchBufIndex((void*)buffer);
+    index = mMemory.getMatchBufIndex((void*)buffer);
     if(index < 0) {
         ALOGE("%s: Could not find object among registered buffers",__func__);
         return NULL;
@@ -631,12 +621,7 @@
         ALOGV("%s: Request on an existing stream",__func__);
     }
 
-    if(!mMemory) {
-        ALOGE("%s: error, Gralloc Memory object not yet created for this stream",__func__);
-        return NO_MEMORY;
-    }
-
-    index = mMemory->getMatchBufIndex((void*)buffer);
+    index = mMemory.getMatchBufIndex((void*)buffer);
     if(index < 0) {
         rc = registerBuffer(buffer);
         if (NO_ERROR != rc) {
@@ -645,7 +630,7 @@
             return rc;
         }
 
-        index = mMemory->getMatchBufIndex((void*)buffer);
+        index = mMemory.getMatchBufIndex((void*)buffer);
         if (index < 0) {
             ALOGE("%s: Could not find object among registered buffers",
                     __func__);
@@ -659,7 +644,7 @@
         return rc;
     }
 
-    rc = mMemory->markFrameNumber(index, frameNumber);
+    rc = mMemory.markFrameNumber(index, frameNumber);
     return rc;
 }
 
@@ -679,7 +664,7 @@
 {
     int rc = 0;
 
-    if (mRegisteredBuffers > (mNumBufs - 1)) {
+    if (mCamera3Buffers.size() > (mNumBufs - 1)) {
         ALOGE("%s: Trying to register more buffers than initially requested",
                 __func__);
         return BAD_VALUE;
@@ -694,14 +679,7 @@
         }
     }
 
-    if(NULL == mMemory) {
-        mMemory = new QCamera3GrallocMemory();
-        if (mMemory == NULL) {
-            return NO_MEMORY;
-        }
-    }
-
-    rc = mMemory->registerBuffer(buffer);
+    rc = mMemory.registerBuffer(buffer);
     if (ALREADY_EXISTS == rc) {
         return NO_ERROR;
     } else if (NO_ERROR != rc) {
@@ -709,8 +687,7 @@
         return rc;
     }
 
-    mCamera3Buffers[mRegisteredBuffers] = buffer;
-    mRegisteredBuffers++;
+    mCamera3Buffers.add(buffer);
 
     return rc;
 }
@@ -751,7 +728,7 @@
 
     ////Use below data to issue framework callback
     resultBuffer = mCamera3Buffers[frameIndex];
-    resultFrameNumber = mMemory->getFrameNumber(frameIndex);
+    resultFrameNumber = mMemory.getFrameNumber(frameIndex);
 
     result.stream = mCamera3Stream;
     result.buffer = resultBuffer;
@@ -766,23 +743,12 @@
 
 QCamera3Memory* QCamera3RegularChannel::getStreamBufs(uint32_t /*len*/)
 {
-    if(NULL == mMemory) {
-        mMemory = new QCamera3GrallocMemory();
-        if (mMemory == NULL) {
-            return NULL;
-        }
-    }
-
-    return mMemory;
+    return &mMemory;
 }
 
 void QCamera3RegularChannel::putStreamBufs()
 {
-    if (NULL != mMemory) {
-        mMemory->unregisterBuffers();
-        delete mMemory;
-        mMemory = NULL;
-    }
+    mMemory.unregisterBuffers();
 }
 
 int QCamera3RegularChannel::kMaxBuffers = 7;
@@ -925,7 +891,7 @@
         convertToRaw16(super_frame->bufs[0]);
 
     //Make sure cache coherence because extra processing is done
-    mMemory->cleanInvalidateCache(super_frame->bufs[0]->buf_idx);
+    mMemory.cleanInvalidateCache(super_frame->bufs[0]->buf_idx);
 
     QCamera3RegularChannel::streamCbRoutine(super_frame, stream);
     return;
@@ -1055,14 +1021,14 @@
         char* jpeg_buf = (char *)p_output->buf_vaddr;
 
         // Gralloc provides a proper sized (no padding) buffer already.
-        maxJpegSize = obj->mMemory->getSize(obj->mCurrentBufIndex);
+        maxJpegSize = obj->mMemory.getSize(obj->mCurrentBufIndex);
         jpeg_eof = &jpeg_buf[maxJpegSize-sizeof(jpegHeader)];
         memcpy(jpeg_eof, &jpegHeader, sizeof(jpegHeader));
-        obj->mMemory->cleanInvalidateCache(obj->mCurrentBufIndex);
+        obj->mMemory.cleanInvalidateCache(obj->mCurrentBufIndex);
 
         ////Use below data to issue framework callback
         resultBuffer = obj->mCamera3Buffers[obj->mCurrentBufIndex];
-        resultFrameNumber = obj->mMemory->getFrameNumber(obj->mCurrentBufIndex);
+        resultFrameNumber = obj->mMemory.getFrameNumber(obj->mCurrentBufIndex);
 
         result.stream = obj->mCamera3Stream;
         result.buffer = resultBuffer;
@@ -1096,10 +1062,7 @@
                         m_postprocessor(this),
                         mCamera3Stream(stream),
                         mNumBufs(0),
-                        mCamera3Buffers(NULL),
                         mCurrentBufIndex(-1),
-                        mRegisteredBuffers(0),
-                        mMemory(NULL),
                         mYuvMemory(NULL),
                         mMetaFrame(NULL)
 {
@@ -1117,9 +1080,8 @@
     if (rc != 0) {
         ALOGE("De-init Postprocessor failed");
     }
-    if (mCamera3Buffers) {
-        delete[] mCamera3Buffers;
-    }
+
+    mCamera3Buffers.clear();
 }
 
 int32_t QCamera3PicChannel::initialize()
@@ -1159,14 +1121,7 @@
     streamDim.height = mYuvHeight;
 
     int num_buffers = 1;
-
     mNumBufs = CAM_MAX_NUM_BUFS_PER_STREAM;
-    mCamera3Buffers = new buffer_handle_t*[num_buffers];
-    if (mCamera3Buffers == NULL) {
-        ALOGE("%s: Failed to allocate buffer_handle_t*", __func__);
-        return -ENOMEM;
-    }
-
     rc = QCamera3Channel::addStream(streamType, streamFormat, streamDim,
             num_buffers);
 
@@ -1188,14 +1143,7 @@
         return NO_INIT;
     }
 
-    if(NULL == mMemory) {
-        mMemory = new QCamera3GrallocMemory();
-        if (mMemory == NULL) {
-            return NO_MEMORY;
-        }
-    }
-
-    index = mMemory->getMatchBufIndex((void*)buffer);
+    index = mMemory.getMatchBufIndex((void*)buffer);
     if(index < 0) {
         rc = registerBuffer(buffer);
         if (NO_ERROR != rc) {
@@ -1204,19 +1152,19 @@
             return rc;
         }
 
-        index = mMemory->getMatchBufIndex((void*)buffer);
+        index = mMemory.getMatchBufIndex((void*)buffer);
         if (index < 0) {
             ALOGE("%s: Could not find object among registered buffers",__func__);
             return DEAD_OBJECT;
         }
     }
-    rc = mMemory->markFrameNumber(index, frameNumber);
+    rc = mMemory.markFrameNumber(index, frameNumber);
 
     //Start the postprocessor for jpeg encoding. Pass mMemory as destination buffer
     mCurrentBufIndex = index;
 
     // Start postprocessor
-    m_postprocessor.start(mMemory, this, metadata);
+    m_postprocessor.start(&mMemory, this, metadata);
 
     // Queue jpeg settings
     rc = queueJpegSetting(index, metadata);
@@ -1301,7 +1249,7 @@
 {
     int rc = 0;
 
-    if (mRegisteredBuffers > (mNumBufs - 1)) {
+    if (mCamera3Buffers.size() > (mNumBufs - 1)) {
         ALOGE("%s: Trying to register more buffers than initially requested",
                 __func__);
         return BAD_VALUE;
@@ -1316,14 +1264,7 @@
         }
     }
 
-    if(NULL == mMemory) {
-        mMemory = new QCamera3GrallocMemory();
-        if (mMemory == NULL) {
-            return NO_MEMORY;
-        }
-    }
-
-    rc = mMemory->registerBuffer(buffer);
+    rc = mMemory.registerBuffer(buffer);
     if (ALREADY_EXISTS == rc) {
         return NO_ERROR;
     } else if (NO_ERROR != rc) {
@@ -1331,8 +1272,7 @@
         return rc;
     }
 
-    mCamera3Buffers[mRegisteredBuffers] = buffer;
-    mRegisteredBuffers++;
+    mCamera3Buffers.add(buffer);
 
     return rc;
 }
@@ -1391,18 +1331,6 @@
 {
     int rc = 0;
 
-    if (mNumBufs == 0 || mCamera3Buffers == NULL) {
-        ALOGE("%s: buffers not registered yet", __func__);
-        return NULL;
-    }
-
-    if(NULL == mMemory) {
-        mMemory = new QCamera3GrallocMemory();
-        if (mMemory == NULL) {
-            return NULL;
-        }
-    }
-
     mYuvMemory = new QCamera3HeapMemory();
     if (!mYuvMemory) {
         ALOGE("%s: unable to create metadata memory", __func__);
@@ -1422,11 +1350,7 @@
 
 void QCamera3PicChannel::putStreamBufs()
 {
-    if (NULL != mMemory) {
-        mMemory->unregisterBuffers();
-        delete mMemory;
-        mMemory = NULL;
-    }
+    mMemory.unregisterBuffers();
 
     mYuvMemory->deallocate();
     delete mYuvMemory;
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.h b/camera/QCamera2/HAL3/QCamera3Channel.h
index 6ae6be9..a7da610 100755
--- a/camera/QCamera2/HAL3/QCamera3Channel.h
+++ b/camera/QCamera2/HAL3/QCamera3Channel.h
@@ -35,6 +35,7 @@
 #include "QCamera3Mem.h"
 #include "QCamera3PostProc.h"
 #include "QCamera3HALHeader.h"
+#include "utils/Vector.h"
 
 extern "C" {
 #include <mm_camera_interface.h>
@@ -144,12 +145,11 @@
 public:
     static int kMaxBuffers;
 protected:
-    QCamera3GrallocMemory *mMemory;
+    QCamera3GrallocMemory mMemory;
 private:
     camera3_stream_t *mCamera3Stream;
     uint32_t mNumBufs;
-    uint32_t mRegisteredBuffers;
-    buffer_handle_t **mCamera3Buffers;
+    Vector<buffer_handle_t *> mCamera3Buffers;
 
     cam_stream_type_t mStreamType; // Stream type
 };
@@ -290,13 +290,12 @@
 private:
     camera3_stream_t *mCamera3Stream;
     uint32_t mNumBufs;
-    buffer_handle_t **mCamera3Buffers;
+    Vector<buffer_handle_t *> mCamera3Buffers;
     int32_t mCurrentBufIndex;
     bool m_bWNROn;
     uint32_t mYuvWidth, mYuvHeight;
-    uint32_t mRegisteredBuffers;
 
-    QCamera3GrallocMemory *mMemory;
+    QCamera3GrallocMemory mMemory;
     QCamera3HeapMemory *mYuvMemory;
     QCamera3Channel *m_pMetaChannel;
     mm_camera_super_buf_t *mMetaFrame;
