diff --git a/liboverlay/overlayWriteback.cpp b/liboverlay/overlayWriteback.cpp
index 1d58ece..f1f0eb5 100644
--- a/liboverlay/overlayWriteback.cpp
+++ b/liboverlay/overlayWriteback.cpp
@@ -84,7 +84,6 @@
         ALOGE("%s failed to init %s", __func__, Res::fbPath);
         return;
     }
-    queryOutputFormat();
     startSession();
 }
 
@@ -190,15 +189,33 @@
     return writeSync(mWbMem.getDstFd(), mWbMem.getOffset());
 }
 
-void Writeback::queryOutputFormat() {
-    struct msmfb_metadata metadata;
-    memset(&metadata, 0 , sizeof(metadata));
-    metadata.op = metadata_op_wb_format;
-    if (ioctl(mFd.getFD(), MSMFB_METADATA_GET, &metadata) < 0) {
-        ALOGE("Error retrieving MDP Writeback format");
-        return;
+bool Writeback::setOutputFormat(int mdpFormat) {
+    if(mdpFormat != mOpFmt) {
+        struct msmfb_metadata metadata;
+        memset(&metadata, 0 , sizeof(metadata));
+        metadata.op = metadata_op_wb_format;
+        metadata.data.mixer_cfg.writeback_format = mdpFormat;
+        if (ioctl(mFd.getFD(), MSMFB_METADATA_SET, &metadata) < 0) {
+            ALOGE("Error setting MDP Writeback format");
+            return false;
+        }
+        mOpFmt = mdpFormat;
     }
-    mOpFmt = metadata.data.mixer_cfg.writeback_format;
+    return true;
+}
+
+int Writeback::getOutputFormat() {
+    if(mOpFmt < 0) {
+        struct msmfb_metadata metadata;
+        memset(&metadata, 0 , sizeof(metadata));
+        metadata.op = metadata_op_wb_format;
+        if (ioctl(mFd.getFD(), MSMFB_METADATA_GET, &metadata) < 0) {
+            ALOGE("Error retrieving MDP Writeback format");
+            return -1;
+        }
+        mOpFmt =  metadata.data.mixer_cfg.writeback_format;
+    }
+    return mOpFmt;
 }
 
 //static
diff --git a/liboverlay/overlayWriteback.h b/liboverlay/overlayWriteback.h
index 6280391..8c0c52a 100644
--- a/liboverlay/overlayWriteback.h
+++ b/liboverlay/overlayWriteback.h
@@ -81,7 +81,12 @@
     bool queueBuffer(int opFd, uint32_t opOffset);
     uint32_t getOffset() const { return mWbMem.getOffset(); }
     int getDstFd() const { return mWbMem.getDstFd(); }
-    int getOutputFormat() const { return mOpFmt; }
+    /* Subject to GC if writeback isnt used for a drawing round.
+     * Get always if caching the value.
+     */
+    int getFbFd() const { return mFd.getFD(); }
+    int getOutputFormat();
+    bool setOutputFormat(int mdpFormat);
 
     static Writeback* getInstance();
     static void configBegin() { sUsed = false; }
@@ -94,7 +99,6 @@
     bool stopSession();
     //Actually block_until_write_done for the usage here.
     bool dequeueBuffer();
-    void queryOutputFormat();
     OvFD mFd;
     WritebackMem mWbMem;
     struct msmfb_data mFbData;
