diff --git a/gralloc/QtiGralloc.cpp b/gralloc/QtiGralloc.cpp
index 912d360..e999063 100644
--- a/gralloc/QtiGralloc.cpp
+++ b/gralloc/QtiGralloc.cpp
@@ -55,20 +55,43 @@
   return Error::NONE;
 }
 
+// decode the raw graphics metadata from bytestream and store it in 'data' member of
+// GraphicsMetadata struct during mapper->set call, 'size' member is unused.
 Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out) {
   if (!in.size() || !out) {
     return Error::BAD_VALUE;
   }
-  memcpy(out, in.data(), sizeof(GraphicsMetadata));
+  memcpy(&(out->data), in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
   return Error::NONE;
 }
 
+// encode only 'data' member of GraphicsMetadata struct for retrieval of
+// graphics metadata during mapper->get call
 Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out) {
   if (!out) {
     return Error::BAD_VALUE;
   }
-  out->resize(sizeof(GraphicsMetadata));
-  memcpy(out->data(), &in, sizeof(GraphicsMetadata));
+  out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
+  memcpy(out->data(), &(in.data), GRAPHICS_METADATA_SIZE_IN_BYTES);
+  return Error::NONE;
+}
+
+// decode the raw graphics metadata from bytestream before presenting it to caller
+Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out) {
+  if (!in.size() || !out) {
+    return Error::BAD_VALUE;
+  }
+  memcpy(out, in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
+  return Error::NONE;
+}
+
+// encode the raw graphics metadata in bytestream before calling mapper->set
+Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out) {
+  if (!in || !out) {
+    return Error::BAD_VALUE;
+  }
+  out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
+  memcpy(out->data(), in, GRAPHICS_METADATA_SIZE_IN_BYTES);
   return Error::NONE;
 }
 
@@ -211,7 +234,7 @@
       err = decodeColorMetadata(bytestream, (ColorMetaData *)param);
       break;
     case QTI_GRAPHICS_METADATA:
-      err = decodeGraphicsMetadata(bytestream, (GraphicsMetadata *)param);
+      err = decodeGraphicsMetadataRaw(bytestream, param);
       break;
     case QTI_UBWC_CR_STATS_INFO:
       err = decodeUBWCStats(bytestream, (UBWCStats *)param);
@@ -289,7 +312,7 @@
       err = encodeColorMetadata(*(ColorMetaData *)param, &bytestream);
       break;
     case QTI_GRAPHICS_METADATA:
-      err = encodeGraphicsMetadata(*(GraphicsMetadata *)param, &bytestream);
+      err = encodeGraphicsMetadataRaw(param, &bytestream);
       break;
     case QTI_UBWC_CR_STATS_INFO:
       err = encodeUBWCStats((UBWCStats *)param, &bytestream);
diff --git a/gralloc/QtiGralloc.h b/gralloc/QtiGralloc.h
index 08053cc..f0392f9 100644
--- a/gralloc/QtiGralloc.h
+++ b/gralloc/QtiGralloc.h
@@ -119,6 +119,8 @@
 Error encodeColorMetadata(ColorMetaData &in, hidl_vec<uint8_t> *out);
 Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out);
 Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out);
+Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out);
+Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out);
 Error decodeUBWCStats(hidl_vec<uint8_t> &in, UBWCStats *out);
 Error encodeUBWCStats(UBWCStats *in, hidl_vec<uint8_t> *out);
 Error decodeCVPMetadata(hidl_vec<uint8_t> &in, CVPMetadata *out);
diff --git a/gralloc/QtiGrallocDefs.h b/gralloc/QtiGrallocDefs.h
index c61187e..93272dd 100644
--- a/gralloc/QtiGrallocDefs.h
+++ b/gralloc/QtiGrallocDefs.h
@@ -106,7 +106,7 @@
 #define HAL_PIXEL_FORMAT_ABGR_2101010 0x11B
 #define HAL_PIXEL_FORMAT_BGRX_1010102 0x11C
 #define HAL_PIXEL_FORMAT_XBGR_2101010 0x11D
-#define HAL_PIXEL_FORMAT_YCbCr_420_P010 0x11F
+#define HAL_PIXEL_FORMAT_YCbCr_420_P010 0x36  // HAL_PIXEL_FORMAT_YCBCR_P010
 #define HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC 0x124
 #define HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS 0x7FA30C0A
 
diff --git a/gralloc/QtiGrallocMetadata.h b/gralloc/QtiGrallocMetadata.h
index 00b0503..b8e779b 100644
--- a/gralloc/QtiGrallocMetadata.h
+++ b/gralloc/QtiGrallocMetadata.h
@@ -64,9 +64,10 @@
 
 // GRAPHICS_METADATA
 #define GRAPHICS_METADATA_SIZE 4096
+#define GRAPHICS_METADATA_SIZE_IN_BYTES (GRAPHICS_METADATA_SIZE * sizeof(uint32_t))
 typedef struct GraphicsMetadata {
-  uint32_t size;
-  uint32_t data[GRAPHICS_METADATA_SIZE];
+  uint32_t size;  //unused in Gralloc4, in Gralloc3 it was never returned on Get()
+  uint32_t data[GRAPHICS_METADATA_SIZE]; //Clients must set only raw data with Gralloc4
 } GraphicsMetadata;
 
 // UBWC_CR_STATS_INFO
diff --git a/include/composer_extn_intf.h b/include/composer_extn_intf.h
index a6a4fba..9bc3f0d 100644
--- a/include/composer_extn_intf.h
+++ b/include/composer_extn_intf.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -32,6 +32,7 @@
 
 #include <dlfcn.h>
 #include "frame_scheduler_intf.h"
+#include "display_extn_intf.h"
 
 #define COMPOSER_EXTN_REV_MAJOR (1)
 #define COMPOSER_EXTN_REV_MINOR (0)
@@ -44,6 +45,8 @@
  public:
   virtual int CreateFrameScheduler(FrameSchedulerIntf **intf) = 0;
   virtual void DestroyFrameScheduler(FrameSchedulerIntf *intf) = 0;
+  virtual int CreateDisplayExtn(DisplayExtnIntf **intf) = 0;
+  virtual void DestroyDisplayExtn(DisplayExtnIntf *intf) = 0;
  protected:
   virtual ~ComposerExtnIntf() { }
 };
diff --git a/include/display_extn_intf.h b/include/display_extn_intf.h
new file mode 100644
index 0000000..84cd508
--- /dev/null
+++ b/include/display_extn_intf.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DISP_EXTN_INTF_H__
+#define __DISP_EXTN_INTF_H__
+
+namespace composer {
+
+class DisplayExtnIntf {
+ public:
+  virtual int SetContentFps(uint32_t fps) = 0;
+ protected:
+  virtual ~DisplayExtnIntf() { }
+};
+
+}  // namespace composer
+
+#endif  // __DISP_EXTN_INTF_H__
diff --git a/services/config/config_defs.h b/services/config/config_defs.h
index 77eea44..7b4838a 100644
--- a/services/config/config_defs.h
+++ b/services/config/config_defs.h
@@ -265,14 +265,14 @@
   virtual int IsHDRSupported(uint32_t disp_id, bool *supported) DEFAULT_RET
   virtual int IsWCGSupported(uint32_t disp_id, bool *supported) DEFAULT_RET
   virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id) DEFAULT_RET
-  virtual int GetDebugProperty(const std::string prop_name, std::string value) DEFAULT_RET
+  virtual int GetDebugProperty(const std::string prop_name, std::string *value) DEFAULT_RET
   virtual int GetActiveBuiltinDisplayAttributes(Attributes *attr) DEFAULT_RET
   virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum,
                                           float max_lum) DEFAULT_RET
   virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin) DEFAULT_RET
   virtual int IsAsyncVDSCreationSupported(bool *supported) DEFAULT_RET
   virtual int CreateVirtualDisplay(uint32_t width, uint32_t height, int format) DEFAULT_RET
-  virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) DEFAULT_RET
+  virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks) DEFAULT_RET
   virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk) DEFAULT_RET
   virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk) DEFAULT_RET
   virtual int SetCWBOutputBuffer(uint32_t disp_id, const Rect rect, bool post_processed,
@@ -282,6 +282,10 @@
   virtual int IsRotatorSupportedFormat(int hal_format, bool ubwc, bool *supported) DEFAULT_RET
   virtual int ControlQsyncCallback(bool enable) DEFAULT_RET
 
+  // deprecated APIs
+  virtual int GetDebugProperty(const std::string prop_name, std::string value) DEFAULT_RET
+  virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) DEFAULT_RET
+
  protected:
   virtual ~ConfigInterface() { }
 };
diff --git a/services/config/src/client_impl.cpp b/services/config/src/client_impl.cpp
index b3dd3e8..c11fa3c 100644
--- a/services/config/src/client_impl.cpp
+++ b/services/config/src/client_impl.cpp
@@ -538,11 +538,13 @@
   return error;
 }
 
-int ClientImpl::GetDebugProperty(const std::string prop_name, std::string value) {
+int ClientImpl::GetDebugProperty(const std::string prop_name, std::string *value) {
   ByteStream input_params;
-  uint8_t *data_input = reinterpret_cast<uint8_t*>(const_cast<char*>(prop_name.data()));
+  std::string prop(prop_name);
+  prop += '\0';
+  uint8_t *data_input = reinterpret_cast<uint8_t*>(const_cast<char*>(prop.data()));
   input_params.setToExternal(reinterpret_cast<uint8_t*>(data_input),
-                             prop_name.size() * sizeof(char));
+                             prop.size() * sizeof(char));
   ByteStream output_params;
   int error = 0;
   auto hidl_cb = [&error, &output_params] (int32_t err, ByteStream params, HandleStream handles) {
@@ -554,9 +556,9 @@
 
   const uint8_t *data = output_params.data();
   const char *name = reinterpret_cast<const char *>(data);
-  std::string output(name);
   if (!error) {
-    value = output;
+    std::string output(name);
+    *value = output;
   }
 
   return error;
@@ -645,7 +647,7 @@
   return error;
 }
 
-int ClientImpl::GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) {
+int ClientImpl::GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks) {
   ByteStream input_params;
   input_params.setToExternal(reinterpret_cast<uint8_t*>(&disp_id), sizeof(uint32_t));
   ByteStream output_params;
@@ -662,7 +664,7 @@
     const uint64_t *bit_clks_data = reinterpret_cast<const uint64_t *>(data);
     int num_bit_clks = static_cast<int>(output_params.size() / sizeof(uint64_t));
     for (int i = 0; i < num_bit_clks; i++) {
-      bit_clks.push_back(bit_clks_data[i]);
+      bit_clks->push_back(bit_clks_data[i]);
     }
   }
 
diff --git a/services/config/src/client_impl.h b/services/config/src/client_impl.h
index f90a4e0..085fc22 100644
--- a/services/config/src/client_impl.h
+++ b/services/config/src/client_impl.h
@@ -84,13 +84,13 @@
   virtual int IsHDRSupported(uint32_t disp_id, bool *supported);
   virtual int IsWCGSupported(uint32_t disp_id, bool *supported);
   virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id);
-  virtual int GetDebugProperty(const std::string prop_name, std::string value);
+  virtual int GetDebugProperty(const std::string prop_name, std::string *value);
   virtual int GetActiveBuiltinDisplayAttributes(Attributes *attr);
   virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum, float max_lum);
   virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin);
   virtual int IsAsyncVDSCreationSupported(bool *supported);
   virtual int CreateVirtualDisplay(uint32_t width, uint32_t height, int format);
-  virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks);
+  virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks);
   virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk);
   virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk);
   virtual int SetCWBOutputBuffer(uint32_t disp_id, const Rect rect, bool post_processed,
diff --git a/services/config/src/device_impl.cpp b/services/config/src/device_impl.cpp
index c02de23..7c36729 100644
--- a/services/config/src/device_impl.cpp
+++ b/services/config/src/device_impl.cpp
@@ -501,9 +501,10 @@
   const uint8_t *data = input_params.data();
   const char *name = reinterpret_cast<const char *>(data);
   std::string prop_name(name);
-  int32_t error = intf_->GetDebugProperty(prop_name, value);
+  int32_t error = intf_->GetDebugProperty(prop_name, &value);
+  value += '\0';
   uint8_t *data_output = reinterpret_cast<uint8_t*>(value.data());
-  output_params.setToExternal(reinterpret_cast<uint8_t*>(&data_output),
+  output_params.setToExternal(reinterpret_cast<uint8_t*>(data_output),
                               value.size() * sizeof(char));
 
   _hidl_cb(error, output_params, {});
@@ -578,7 +579,7 @@
 
   const uint8_t *data = input_params.data();
   disp_id = reinterpret_cast<const uint32_t*>(data);
-  int32_t error = intf_->GetSupportedDSIBitClks(*disp_id, bit_clks);
+  int32_t error = intf_->GetSupportedDSIBitClks(*disp_id, &bit_clks);
 
   bit_clks_data = reinterpret_cast<uint64_t *>(malloc(sizeof(uint64_t) * bit_clks.size()));
   for (int i = 0; i < bit_clks.size(); i++) {
