diff --git a/msm8084/liboverlay/mdpWrapper.h b/msm8084/liboverlay/mdpWrapper.h
index 1bfa058..8e67cfa 100644
--- a/msm8084/liboverlay/mdpWrapper.h
+++ b/msm8084/liboverlay/mdpWrapper.h
@@ -98,6 +98,9 @@
 /* MSMFB_WRITEBACK_DEQUEUE_BUFFER */
 bool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData);
 
+/* MSMFB_SECURE */
+bool setSecureBuffer(int fbFd, struct msmfb_secure_config& config);
+
 /* the following are helper functions for dumping
  * msm_mdp and friends*/
 void dump(const char* const s, const msmfb_overlay_data& ov);
@@ -281,6 +284,15 @@
     return true;
 }
 
+inline bool setSecureBuffer(int fbFd, struct msmfb_secure_config& config) {
+    if(ioctl(fbFd, MSMFB_SECURE, &config) < 0) {
+        ALOGE("Failed to call ioctl MSMFB_SECURE err=%s buf_fd=%d enable=%d",
+                strerror(errno), config.fd, config.enable);
+        return false;
+    }
+    return true;
+}
+
 /* dump funcs */
 inline void dump(const char* const s, const msmfb_overlay_data& ov) {
     ALOGE("%s msmfb_overlay_data id=%d",
diff --git a/msm8084/liboverlay/overlayMem.h b/msm8084/liboverlay/overlayMem.h
index f0a1922..e8338fb 100644
--- a/msm8084/liboverlay/overlayMem.h
+++ b/msm8084/liboverlay/overlayMem.h
@@ -38,6 +38,8 @@
 
 #include "gralloc_priv.h"
 #include "overlayUtils.h"
+#include "mdpWrapper.h"
+
 #define SIZE_1M 0x00100000
 
 namespace overlay {
@@ -78,6 +80,9 @@
     /* return number of bufs */
     uint32_t numBufs() const ;
 
+    /* Set / unset secure with MDP */
+    bool setSecure(bool enable);
+
 private:
     /* actual os fd */
     int mFd;
@@ -99,6 +104,9 @@
 
     /*Holds the aligned buffer size used for actual allocation*/
     uint32_t mBufSzAligned;
+
+    /* Flags if the buffer has been secured by MDP */
+    bool mSecured;
 };
 
 //-------------------Inlines-----------------------------------
@@ -112,6 +120,7 @@
     mAllocType = 0;
     mBufSz = 0;
     mNumBuffers = 0;
+    mSecured = false;
     mAlloc = gralloc::IAllocController::getInstance();
 }
 
@@ -157,6 +166,10 @@
     mBaseAddr = data.base;
     mAllocType = data.allocType;
 
+    if(isSecure) {
+        setSecure(true);
+    }
+
     return true;
 }
 
@@ -168,6 +181,10 @@
         return true;
     }
 
+    if(mSecured) {
+        setSecure(false);
+    }
+
     IMemAlloc* memalloc = mAlloc->getAllocator(mAllocType);
     ret = memalloc->free_buffer(mBaseAddr, mBufSzAligned * mNumBuffers, 0, mFd);
     if (ret != 0) {
@@ -184,6 +201,27 @@
     return true;
 }
 
+inline bool OvMem::setSecure(bool enable) {
+    OvFD fbFd;
+    if(!utils::openDev(fbFd, 0, Res::fbPath, O_RDWR)) {
+        ALOGE("OvMem::%s failed to init fb0", __FUNCTION__);
+        return false;
+    }
+    struct msmfb_secure_config config;
+    utils::memset0(config);
+    config.fd = mFd;
+    config.enable = enable;
+    if(!mdp_wrapper::setSecureBuffer(fbFd.getFD(), config)) {
+        ALOGE("OvMem::%s failed enable=%d", __FUNCTION__, enable);
+        fbFd.close();
+        mSecured = false;
+        return false;
+    }
+    fbFd.close();
+    mSecured = enable;
+    return true;
+}
+
 inline bool OvMem::valid() const
 {
     return (mFd != -1) && (mBaseAddr != MAP_FAILED);
