diff --git a/libqdutils/qdMetaData.cpp b/libqdutils/qdMetaData.cpp
index 79daa14..72edfdf 100644
--- a/libqdutils/qdMetaData.cpp
+++ b/libqdutils/qdMetaData.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016, 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
@@ -67,7 +67,7 @@
             data->bufferDim = *((BufferDim_t *)param);
             break;
         case UPDATE_REFRESH_RATE:
-            data->refreshrate = *((uint32_t *)param);
+            data->refreshrate = *((float *)param);
             break;
         case UPDATE_COLOR_SPACE:
             data->colorSpace = *((ColorSpace_t *)param);
@@ -96,3 +96,106 @@
                                                                         errno);
     return 0;
 }
+
+int getMetaData(private_handle_t *handle, DispFetchParamType paramType,
+                                                    void *param) {
+    if (!handle) {
+        ALOGE("%s: Private handle is null!", __func__);
+        return -1;
+    }
+    if (handle->fd_metadata == -1) {
+        ALOGE("%s: Bad fd for extra data!", __func__);
+        return -1;
+    }
+    if (!param) {
+        ALOGE("%s: input param is null!", __func__);
+        return -1;
+    }
+    unsigned long size = ROUND_UP_PAGESIZE(sizeof(MetaData_t));
+    void *base = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED,
+        handle->fd_metadata, 0);
+    if (base == reinterpret_cast<void*>(MAP_FAILED)) {
+        ALOGE("%s: mmap() failed: error is %s!", __func__, strerror(errno));
+        return -1;
+    }
+
+    MetaData_t *data = reinterpret_cast <MetaData_t *>(base);
+    data->operation |= paramType;
+    switch (paramType) {
+        case GET_PP_PARAM_INTERLACED:
+            *((int32_t *)param) = data->interlaced;
+            break;
+        case GET_BUFFER_GEOMETRY:
+            *((BufferDim_t *)param) = data->bufferDim;
+            break;
+        case GET_REFRESH_RATE:
+            *((float *)param) = data->refreshrate;
+            break;
+        case GET_COLOR_SPACE:
+            *((ColorSpace_t *)param) = data->colorSpace;
+            break;
+        case GET_MAP_SECURE_BUFFER:
+            *((int32_t *)param) = data->mapSecureBuffer;
+            break;
+        case GET_S3D_FORMAT:
+            *((uint32_t *)param) = data->s3dFormat;
+            break;
+        case GET_LINEAR_FORMAT:
+            *((uint32_t *)param) = data->linearFormat;
+            break;
+        case GET_IGC:
+            *((IGC_t *)param) = data->igc;
+            break;
+        case GET_SINGLE_BUFFER_MODE:
+            *((uint32_t *)param) = data->isSingleBufferMode ;
+            break;
+        default:
+            ALOGE("Unknown paramType %d", paramType);
+            break;
+    }
+    if(munmap(base, size))
+        ALOGE("%s: failed to unmap ptr %p, err %d", __func__, (void*)base,
+                                                                        errno);
+    return 0;
+}
+
+int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst) {
+    if (!src || !dst) {
+        ALOGE("%s: Private handle is null!", __func__);
+        return -1;
+    }
+    if (src->fd_metadata == -1) {
+        ALOGE("%s: Bad fd for src extra data!", __func__);
+        return -1;
+    }
+    if (dst->fd_metadata == -1) {
+        ALOGE("%s: Bad fd for dst extra data!", __func__);
+        return -1;
+    }
+
+    unsigned long size = ROUND_UP_PAGESIZE(sizeof(MetaData_t));
+
+    void *base_src = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED,
+        src->fd_metadata, 0);
+    if (base_src == reinterpret_cast<void*>(MAP_FAILED)) {
+        ALOGE("%s: src mmap() failed: error is %s!", __func__, strerror(errno));
+        return -1;
+    }
+
+    void *base_dst = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED,
+        dst->fd_metadata, 0);
+    if (base_dst == reinterpret_cast<void*>(MAP_FAILED)) {
+        ALOGE("%s: dst mmap() failed: error is %s!", __func__, strerror(errno));
+        return -1;
+    }
+
+    memcpy(base_dst, base_src, size);
+
+    if(munmap(base_src, size))
+        ALOGE("%s: failed to unmap src ptr %p, err %d", __func__, (void*)base_src,
+                                                                        errno);
+    if(munmap(base_dst, size))
+        ALOGE("%s: failed to unmap src ptr %p, err %d", __func__, (void*)base_dst,
+                                                                        errno);
+    return 0;
+}
diff --git a/libqdutils/qdMetaData.h b/libqdutils/qdMetaData.h
index a1d9350..fd4f444 100644
--- a/libqdutils/qdMetaData.h
+++ b/libqdutils/qdMetaData.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016, 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
@@ -61,7 +61,7 @@
     int32_t operation;
     int32_t interlaced;
     struct BufferDim_t bufferDim;
-    uint32_t refreshrate;
+    float refreshrate;
     enum ColorSpace_t colorSpace;
     enum IGC_t igc;
      /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from
@@ -99,10 +99,26 @@
     SET_SINGLE_BUFFER_MODE = 0x4000,
 };
 
+enum DispFetchParamType {
+    GET_PP_PARAM_INTERLACED = 0x0004,
+    GET_BUFFER_GEOMETRY = 0x0080,
+    GET_REFRESH_RATE = 0x0100,
+    GET_COLOR_SPACE = 0x0200,
+    GET_MAP_SECURE_BUFFER = 0x400,
+    GET_S3D_FORMAT = 0x800,
+    GET_LINEAR_FORMAT = 0x1000,
+    GET_IGC = 0x2000,
+    GET_SINGLE_BUFFER_MODE = 0x4000,
+};
+
 struct private_handle_t;
 int setMetaData(struct private_handle_t *handle, enum DispParamType paramType,
         void *param);
 
+int getMetaData(struct private_handle_t *handle, enum DispFetchParamType paramType,
+        void *param);
+
+int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst);
 #ifdef __cplusplus
 }
 #endif
