diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..1eae1b0
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,40 @@
+cc_defaults {
+    name: "display_defaults",
+    cflags: [
+        "-Wno-missing-field-initializers",
+        "-Wconversion",
+        "-Wall",
+        "-Werror",
+        "-std=c++14",
+    ],
+    shared_libs: [
+        "liblog",
+        "libcutils",
+        "libutils",
+    ],
+    header_libs: ["display_headers"],
+    clang: true,
+}
+
+cc_library_headers {
+    name: "display_headers",
+    vendor_available: true,
+    export_include_dirs: [
+        "include",
+        "libcopybit",
+        "libdrmutils",
+        "libqdutils",
+        "libqservice",
+        "gpu_tonemapper",
+        "sdm/include",
+        "gralloc",
+        "libdebug",
+    ],
+    header_libs: ["libhardware_headers"],
+    export_header_lib_headers: ["libhardware_headers"],
+}
+
+subdirs = [
+    "libqservice",
+    "libqdutils",
+]
diff --git a/Android.mk b/Android.mk
index bf7dd6a..891f72c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,6 +1,6 @@
 ifneq ($(TARGET_DISABLE_DISPLAY),true)
 sdm-libs := sdm/libs
-display-hals := include libdebug libqservice libqdutils $(sdm-libs)/utils $(sdm-libs)/core
+display-hals := include $(sdm-libs)/utils $(sdm-libs)/core libdebug
 
 ifneq ($(TARGET_IS_HEADLESS), true)
     display-hals += libcopybit liblight libmemtrack hdmi_cec \
diff --git a/gpu_tonemapper/Android.mk b/gpu_tonemapper/Android.mk
index 89bad79..6c6ccd1 100644
--- a/gpu_tonemapper/Android.mk
+++ b/gpu_tonemapper/Android.mk
@@ -13,7 +13,7 @@
 LOCAL_MODULE_TAGS         := optional
 LOCAL_C_INCLUDES          := $(TARGET_OUT_HEADERS)/qcom/display/
 LOCAL_C_INCLUDES          += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
-LOCAL_SHARED_LIBRARIES    := libEGL libGLESv2 libui libutils liblog
+LOCAL_SHARED_LIBRARIES    := libEGL libGLESv2 libGLESv3 libui libutils liblog
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) $(kernel_deps)
 
 LOCAL_CFLAGS              := $(version_flag) -Wno-missing-field-initializers -Wall \
diff --git a/gralloc/Android.mk b/gralloc/Android.mk
index 31ff81d..0e648fe 100644
--- a/gralloc/Android.mk
+++ b/gralloc/Android.mk
@@ -12,7 +12,8 @@
 LOCAL_HEADER_LIBRARIES        := display_headers
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libsync libgrallocutils \
                                  libgralloccore \
-                                 android.hardware.graphics.mapper@2.0
+                                 android.hardware.graphics.mapper@2.0 \
+                                 android.hardware.graphics.mapper@2.1
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wall -Werror
 LOCAL_CLANG                   := true
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) $(kernel_deps)
@@ -29,7 +30,8 @@
 LOCAL_C_INCLUDES              := $(common_includes) $(kernel_includes)
 LOCAL_HEADER_LIBRARIES        := display_headers
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libdl  \
-                                  android.hardware.graphics.mapper@2.0
+                                  android.hardware.graphics.mapper@2.0 \
+                                  android.hardware.graphics.mapper@2.1
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_SRC_FILES               := gr_utils.cpp gr_adreno_info.cpp
@@ -47,7 +49,7 @@
 
 LOCAL_HEADER_LIBRARIES        := display_headers
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libdl libgrallocutils libion \
-                                  android.hardware.graphics.mapper@2.0
+                                  android.hardware.graphics.mapper@2.1
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) $(kernel_deps)
 LOCAL_SRC_FILES               := gr_allocator.cpp gr_buf_mgr.cpp gr_ion_alloc.cpp
@@ -78,7 +80,8 @@
                                   libgrallocutils \
                                   libgralloccore \
                                   libsync \
-                                  android.hardware.graphics.mapper@2.0
+                                  android.hardware.graphics.mapper@2.0 \
+                                  android.hardware.graphics.mapper@2.1
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_SRC_FILES               := QtiMapper.cpp
@@ -96,6 +99,7 @@
                                  libqdMetaData \
                                  libgrallocutils \
                                  libgralloccore \
+                                 android.hardware.graphics.mapper@2.1 \
                                  android.hardware.graphics.allocator@2.0
 LOCAL_CFLAGS                  := -DLOG_TAG=\"qdgralloc\" $(common_flags)
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
diff --git a/gralloc/QtiMapper.cpp b/gralloc/QtiMapper.cpp
index 8de28f5..490cf94 100644
--- a/gralloc/QtiMapper.cpp
+++ b/gralloc/QtiMapper.cpp
@@ -50,7 +50,7 @@
   ALOGD_IF(DEBUG, "Created QtiMapper instance");
 }
 
-bool QtiMapper::ValidDescriptor(const IMapper::BufferDescriptorInfo &bd) {
+bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_2_1 &bd) {
   if (bd.width == 0 || bd.height == 0 || (static_cast<int32_t>(bd.format) <= 0) ||
       bd.layerCount != 1) {
     return false;
@@ -59,9 +59,8 @@
   return true;
 }
 
-// Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
-Return<void> QtiMapper::createDescriptor(const IMapper::BufferDescriptorInfo &descriptor_info,
-                                         createDescriptor_cb hidl_cb) {
+Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info,
+                                  IMapperBufferDescriptor *descriptor) {
   ALOGD_IF(DEBUG,
            "BufferDescriptorInfo: wxh: %dx%d usage: 0x%" PRIu64 " format: %d layer_count: %d",
            descriptor_info.width, descriptor_info.height, descriptor_info.usage,
@@ -69,10 +68,26 @@
 
   if (ValidDescriptor(descriptor_info)) {
     auto vec = gralloc::BufferDescriptor::Encode(descriptor_info);
-    hidl_cb(Error::NONE, vec);
+    *descriptor = vec;
+    return Error::NONE;
   } else {
-    hidl_cb(Error::BAD_VALUE, hidl_vec<uint32_t>());
+    return Error::BAD_VALUE;
   }
+}
+
+// Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
+Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info,
+                                         createDescriptor_cb hidl_cb) {
+  IMapperBufferDescriptor descriptor;
+  auto info_2_1 = BufferDescriptorInfo_2_1 {
+      descriptor_info.width,
+      descriptor_info.height,
+      descriptor_info.layerCount,
+      static_cast<PixelFormat>(descriptor_info.format),
+      descriptor_info.usage,
+  };
+  auto err = CreateDescriptor(info_2_1, &descriptor);
+  hidl_cb(err, descriptor);
   return Void();
 }
 
@@ -207,12 +222,54 @@
   return Void();
 }
 
+Return<Error> QtiMapper::validateBufferSize(void* buffer,
+                                            const BufferDescriptorInfo_2_1& descriptor_info,
+                                            uint32_t /*stride*/) {
+  auto err = Error::BAD_BUFFER;
+  auto hnd = static_cast<private_handle_t *>(buffer);
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+    if (buf_mgr_->IsBufferImported(hnd) != Error::NONE) {
+      return Error::BAD_BUFFER;
+    }
+    auto info = gralloc::BufferInfo(descriptor_info.width, descriptor_info.height,
+                                    static_cast<uint32_t>(descriptor_info.format),
+                                    static_cast<uint64_t>(descriptor_info.usage));
+    info.layer_count = descriptor_info.layerCount;
+    err = buf_mgr_->ValidateBufferSize(hnd, info);
+  }
+  return err;
+}
+
+Return<void> QtiMapper::getTransportSize(void *buffer,
+                                         IMapper_2_1::getTransportSize_cb hidl_cb) {
+  auto err = Error::BAD_BUFFER;
+  auto hnd = static_cast<private_handle_t *>(buffer);
+  uint32_t num_fds = 0, num_ints = 0;
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+    num_fds = 2;
+    // TODO(user): reduce to transported values;
+    num_ints = static_cast<uint32_t >(hnd->numInts);
+    err = Error::NONE;
+  }
+  ALOGD_IF(DEBUG, "GetTransportSize: num fds: %d num ints: %d err:%d", num_fds, num_ints, err);
+  hidl_cb(err, num_fds, num_ints);
+  return Void();
+}
+
+Return<void> QtiMapper::createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptor_info,
+                                             IMapper_2_1::createDescriptor_2_1_cb hidl_cb) {
+  IMapperBufferDescriptor descriptor;
+  auto err = CreateDescriptor(descriptor_info, &descriptor);
+  hidl_cb(err, descriptor);
+  return Void();
+}
+
 #ifdef ENABLE_QTI_MAPPER_EXTENSION
 Return<void> QtiMapper::getMapSecureBufferFlag(void *buffer, getMapSecureBufferFlag_cb hidl_cb) {
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
   int *map_secure_buffer = 0;
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     if (getMetaData(hnd, GET_MAP_SECURE_BUFFER, map_secure_buffer) != 0) {
       *map_secure_buffer = 0;
     } else {
@@ -227,7 +284,7 @@
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
   int *interlaced_flag = nullptr;
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     if (getMetaData(hnd, GET_PP_PARAM_INTERLACED, interlaced_flag) != 0) {
       *interlaced_flag = 0;
     } else {
@@ -243,7 +300,7 @@
   auto hnd = static_cast<private_handle_t *>(buffer);
   int stride = 0;
   int height = 0;
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     stride = hnd->width;
     height = hnd->height;
     gralloc::GetCustomDimensions(hnd, &stride, &height);
@@ -257,7 +314,7 @@
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
   void *rgb_data = nullptr;
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     if (gralloc::GetRgbDataAddress(hnd, &rgb_data) == 0) {
       err = Error::NONE;
     }
@@ -281,7 +338,7 @@
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
   int color_space = 0;
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     gralloc::GetColorSpaceFromMetadata(hnd, &color_space);
     err = Error::NONE;
   }
@@ -295,7 +352,7 @@
   hidl_vec<YCbCrLayout> layout;
   layout.resize(2);
   android_ycbcr yuv_plane_info[2];
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     if (gralloc::GetYUVPlaneInfo(hnd, yuv_plane_info) == 0) {
       err = Error::NONE;
       for (int i=0; i < 2; i++) {
@@ -315,7 +372,7 @@
 Return<Error> QtiMapper::setSingleBufferMode(void *buffer, bool enable) {
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
-  if (buffer != nullptr && private_handle_t::validate(hnd) != 0) {
+  if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
     if (setMetaData(hnd, SET_SINGLE_BUFFER_MODE, &enable) != 0) {
       err = Error::UNSUPPORTED;
     } else {
@@ -330,10 +387,10 @@
 
 // When we are in passthrough mode, this method is used
 // by hidl to obtain the SP HAL object
-IMapper *HIDL_FETCH_IMapper(const char * /* name */) {
+IMapper_2_1 *HIDL_FETCH_IMapper(const char * /* name */) {
   ALOGD_IF(DEBUG, "Fetching IMapper from QtiMapper");
   auto mapper = new QtiMapper();
-  return static_cast<IMapper *>(mapper);
+  return static_cast<IMapper_2_1 *>(mapper);
 }
 
 }  // namespace implementation
diff --git a/gralloc/QtiMapper.h b/gralloc/QtiMapper.h
index 218f074..e39ce8b 100644
--- a/gralloc/QtiMapper.h
+++ b/gralloc/QtiMapper.h
@@ -44,9 +44,10 @@
 
 using ::android::hardware::Return;
 using ::android::hardware::Void;
-using ::android::hardware::graphics::mapper::V2_0::Error;
 using ::android::hardware::graphics::mapper::V2_0::IMapper;
+using ::android::hardware::graphics::mapper::V2_0::Error;
 using ::android::hardware::graphics::mapper::V2_0::YCbCrLayout;
+using ::android::hardware::graphics::common::V1_1::PixelFormat;
 using ::android::hardware::hidl_array;
 using ::android::hardware::hidl_handle;
 using ::android::hardware::hidl_memory;
@@ -57,11 +58,18 @@
 using ::android::sp;
 using gralloc::BufferManager;
 
-class QtiMapper : public IMapper {
+using IMapper_2_1 = android::hardware::graphics::mapper::V2_1::IMapper;
+using BufferDescriptorInfo_2_0 =
+android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo;
+using BufferDescriptorInfo_2_1 =
+android::hardware::graphics::mapper::V2_1::IMapper::BufferDescriptorInfo;
+using IMapperBufferDescriptor = android::hardware::graphics::mapper::V2_0::BufferDescriptor;
+
+class QtiMapper : public IMapper_2_1 {
  public:
   QtiMapper();
   // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
-  Return<void> createDescriptor(const IMapper::BufferDescriptorInfo &descriptor_info,
+  Return<void> createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info,
                                 createDescriptor_cb hidl_cb) override;
   Return<void> importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) override;
   Return<Error> freeBuffer(void *buffer) override;
@@ -71,6 +79,13 @@
                          const hidl_handle &acquire_fence, lockYCbCr_cb hidl_cb) override;
   Return<void> unlock(void *buffer, unlock_cb hidl_cb) override;
 
+  // Methods from ::android::hardware::graphics::mapper::V2_1::IMapper follow.
+  Return<Error> validateBufferSize(void* buffer,
+                                   const BufferDescriptorInfo_2_1& descriptorInfo,
+                                   uint32_t stride) override;
+  Return<void> getTransportSize(void* buffer, IMapper_2_1::getTransportSize_cb hidl_cb) override;
+  Return<void> createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptorInfo,
+                                    createDescriptor_2_1_cb _hidl_cb) override;
 #ifdef ENABLE_QTI_MAPPER_EXTENSION
   Return<void> getMapSecureBufferFlag(void *buffer, getMapSecureBufferFlag_cb _hidl_cb) override;
   Return<void> getInterlacedFlag(void *buffer, getInterlacedFlag_cb _hidl_cb) override;
@@ -86,13 +101,15 @@
 
  private:
   BufferManager *buf_mgr_ = nullptr;
+  Error CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info,
+                         IMapperBufferDescriptor * descriptor);
   bool ValidDescriptor(const IMapper::BufferDescriptorInfo &bd);
   bool GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd);
   void WaitFenceFd(int fence_fd);
   Error LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence);
 };
 
-extern "C" IMapper *HIDL_FETCH_IMapper(const char *name);
+extern "C" IMapper_2_1 *HIDL_FETCH_IMapper(const char *name);
 }  // namespace implementation
 }  // namespace V1_0
 }  // namespace mapper
diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
index 62b6d84..e8e1896 100644
--- a/gralloc/gr_adreno_info.cpp
+++ b/gralloc/gr_adreno_info.cpp
@@ -80,12 +80,6 @@
       !(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
     gfx_ubwc_disable_ = true;
   }
-
-  if ((property_get("debug.gralloc.map_fb_memory", property, NULL) > 0) &&
-      (!strncmp(property, "1", PROPERTY_VALUE_MAX) ||
-       (!strncasecmp(property, "true", PROPERTY_VALUE_MAX)))) {
-    map_fb_ = true;
-  }
 }
 
 AdrenoMemInfo::~AdrenoMemInfo() {
@@ -99,12 +93,6 @@
   *aligned_w = (unsigned int)ALIGN(width, 32);
   *aligned_h = (unsigned int)ALIGN(height, 32);
 
-  // Don't add any additional padding if debug.gralloc.map_fb_memory
-  // is enabled
-  if (map_fb_) {
-    return;
-  }
-
   int bpp = 4;
   switch (format) {
     case HAL_PIXEL_FORMAT_RGB_888:
diff --git a/gralloc/gr_adreno_info.h b/gralloc/gr_adreno_info.h
index a454d15..b85e7c1 100644
--- a/gralloc/gr_adreno_info.h
+++ b/gralloc/gr_adreno_info.h
@@ -143,7 +143,6 @@
   unsigned int (*LINK_adreno_get_gpu_pixel_alignment)() = NULL;
 
   bool gfx_ubwc_disable_ = false;
-  bool map_fb_ = false;
   void *libadreno_utils_ = NULL;
 
   static AdrenoMemInfo *s_instance;
diff --git a/gralloc/gr_buf_descriptor.h b/gralloc/gr_buf_descriptor.h
index 932db33..2d426da 100644
--- a/gralloc/gr_buf_descriptor.h
+++ b/gralloc/gr_buf_descriptor.h
@@ -30,12 +30,12 @@
 #ifndef __GR_BUF_DESCRIPTOR_H__
 #define __GR_BUF_DESCRIPTOR_H__
 
-#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+#include <android/hardware/graphics/mapper/2.1/IMapper.h>
 #include <atomic>
 
 namespace gralloc {
 using android::hardware::graphics::mapper::V2_0::Error;
-using android::hardware::graphics::mapper::V2_0::IMapper;
+using android::hardware::graphics::mapper::V2_1::IMapper;
 using android::hardware::hidl_vec;
 
 const uint32_t kBufferDescriptorSize = 7;
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index 42ac8ed..5e1973e 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -38,15 +38,6 @@
 }
 
 BufferManager::BufferManager() : next_id_(0) {
-  char property[PROPERTY_VALUE_MAX];
-
-  // Map framebuffer memory
-  if ((property_get("debug.gralloc.map_fb_memory", property, NULL) > 0) &&
-      (!strncmp(property, "1", PROPERTY_VALUE_MAX) ||
-       (!strncasecmp(property, "true", PROPERTY_VALUE_MAX)))) {
-    map_fb_mem_ = true;
-  }
-
   handles_map_.clear();
   allocator_ = new Allocator();
   allocator_->Init();
@@ -92,6 +83,17 @@
   return Error::NONE;
 }
 
+Error BufferManager::ValidateBufferSize(private_handle_t const *hnd, BufferInfo info) {
+  unsigned int size, alignedw, alignedh;
+  info.format = allocator_->GetImplDefinedFormat(info.usage, info.format);
+  GetBufferSizeAndDimensions(info, &size, &alignedw, &alignedh);
+  auto ion_fd_size = static_cast<unsigned int>(lseek(hnd->fd, 0, SEEK_END));
+  if (size != ion_fd_size) {
+    return Error::BAD_VALUE;
+  }
+  return Error::NONE;
+}
+
 void BufferManager::RegisterHandleLocked(const private_handle_t *hnd, int ion_handle,
                                          int ion_handle_meta) {
   auto buffer = std::make_shared<Buffer>(hnd, ion_handle, ion_handle_meta);
@@ -111,9 +113,13 @@
           hnd->id);
     return Error::BAD_BUFFER;
   }
-  // Set base pointers to NULL since the data here was received over binder
+  // Initialize members that aren't transported
+  hnd->size = static_cast<unsigned int>(lseek(hnd->fd, 0, SEEK_END));
+  hnd->offset = 0;
+  hnd->offset_metadata = 0;
   hnd->base = 0;
   hnd->base_metadata = 0;
+  hnd->gpuaddr = 0;
   RegisterHandleLocked(hnd, ion_handle, ion_handle_meta);
   return Error::NONE;
 }
@@ -140,6 +146,15 @@
   return Error::NONE;
 }
 
+Error BufferManager::IsBufferImported(const private_handle_t *hnd) {
+  std::lock_guard<std::mutex> lock(buffer_lock_);
+  auto buf = GetBufferFromHandleLocked(hnd);
+  if (buf != nullptr) {
+    return Error::NONE;
+  }
+  return Error::BAD_BUFFER;
+}
+
 Error BufferManager::RetainBuffer(private_handle_t const *hnd) {
   ALOGD_IF(DEBUG, "Retain buffer handle:%p id: %" PRIu64, hnd, hnd->id);
   auto err = Error::NONE;
diff --git a/gralloc/gr_buf_mgr.h b/gralloc/gr_buf_mgr.h
index 414ec38..9fcca1b 100644
--- a/gralloc/gr_buf_mgr.h
+++ b/gralloc/gr_buf_mgr.h
@@ -27,6 +27,7 @@
 #include <utility>
 
 #include "gr_allocator.h"
+#include "gr_utils.h"
 #include "gr_buf_descriptor.h"
 #include "gralloc_priv.h"
 
@@ -45,6 +46,8 @@
   Error LockBuffer(const private_handle_t *hnd, uint64_t usage);
   Error UnlockBuffer(const private_handle_t *hnd);
   Error Dump(std::ostringstream *os);
+  Error ValidateBufferSize(private_handle_t const *hnd, BufferInfo info);
+  Error IsBufferImported(const private_handle_t *hnd);
   static BufferManager *GetInstance();
 
  private:
@@ -84,8 +87,6 @@
 
   // Get the wrapper Buffer object from the handle, returns nullptr if handle is not found
   std::shared_ptr<Buffer> GetBufferFromHandleLocked(const private_handle_t *hnd);
-
-  bool map_fb_mem_ = false;
   Allocator *allocator_ = NULL;
   std::mutex buffer_lock_;
   std::unordered_map<const private_handle_t *, std::shared_ptr<Buffer>> handles_map_ = {};
diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h
index fe4fcf8..783453f 100644
--- a/gralloc/gr_utils.h
+++ b/gralloc/gr_utils.h
@@ -30,7 +30,7 @@
 #ifndef __GR_UTILS_H__
 #define __GR_UTILS_H__
 
-#include <android/hardware/graphics/common/1.0/types.h>
+#include <android/hardware/graphics/common/1.1/types.h>
 #include "gralloc_priv.h"
 
 #define SZ_2M 0x200000
@@ -49,7 +49,7 @@
 #define INT(exp) static_cast<int>(exp)
 #define UINT(exp) static_cast<unsigned int>(exp)
 
-using android::hardware::graphics::common::V1_0::BufferUsage;
+using android::hardware::graphics::common::V1_1::BufferUsage;
 
 namespace gralloc {
 struct BufferInfo {
diff --git a/gralloc/service.cpp b/gralloc/service.cpp
index b19cc88..5832386 100644
--- a/gralloc/service.cpp
+++ b/gralloc/service.cpp
@@ -26,7 +26,6 @@
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-#include <binder/ProcessState.h>
 #include <hidl/LegacySupport.h>
 #include "QtiAllocator.h"
 
diff --git a/include/Android.mk b/include/Android.mk
index 27161c9..1f128c1 100644
--- a/include/Android.mk
+++ b/include/Android.mk
@@ -2,26 +2,19 @@
 include $(LOCAL_PATH)/../common.mk
 include $(CLEAR_VARS)
 
+# Legacy header copy. This is deprecated.
+# Modules using these headers should shift to using
+# LOCAL_HEADER_LIBRARIES := display_headers
 LOCAL_VENDOR_MODULE           := true
 LOCAL_COPY_HEADERS_TO         := $(common_header_export_path)
-LOCAL_COPY_HEADERS            := color_metadata.h
-LOCAL_COPY_HEADERS            += display_color_processing.h
+LOCAL_COPY_HEADERS            := color_metadata.h \
+                                 display_color_processing.h \
+                                 ../libqdutils/qd_utils.h \
+                                 ../libqdutils/qdMetaData.h \
+                                 ../libqdutils/display_config.h \
+                                 ../libqservice/QServiceUtils.h \
+                                 ../libqservice/IQService.h \
+                                 ../libqservice/IQHDMIClient.h \
+                                 ../libqservice/IQClient.h
 
 include $(BUILD_COPY_HEADERS)
-
-include $(CLEAR_VARS)
-#TODO move all exported headers to this directory
-LOCAL_MODULE                  := display_headers
-LOCAL_VENDOR_MODULE           := true
-LOCAL_EXPORT_C_INCLUDE_DIRS   := $(LOCAL_PATH) \
-                                 $(display_top)/libcopybit \
-                                 $(display_top)/libdrmutils \
-                                 $(display_top)/libqdutils \
-                                 $(display_top)/libqservice \
-                                 $(display_top)/gpu_tonemapper \
-                                 $(display_top)/sdm/include \
-                                 $(display_top)/gralloc \
-                                 $(display_top)/libgralloc1 \
-                                 $(display_top)/libdebug
-
-include $(BUILD_HEADER_LIBRARY)
diff --git a/liblight/Android.mk b/liblight/Android.mk
index 197a1a4..cf53b2c 100644
--- a/liblight/Android.mk
+++ b/liblight/Android.mk
@@ -23,6 +23,7 @@
 LOCAL_SRC_FILES := lights.c lights_prv.cpp
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SHARED_LIBRARIES := liblog libcutils libsdm-disp-vndapis
+LOCAL_HEADER_LIBRARIES := libhardware_headers
 LOCAL_CFLAGS := -DLOG_TAG=\"qdlights\"
 ifeq ($(LLVM_SA), true)
     LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
diff --git a/libmemtrack/Android.mk b/libmemtrack/Android.mk
index d4014bb..10fd40a 100644
--- a/libmemtrack/Android.mk
+++ b/libmemtrack/Android.mk
@@ -24,6 +24,7 @@
 LOCAL_CFLAGS := -Wconversion -Wall -Werror -Wno-sign-conversion
 LOCAL_CLANG  := true
 LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_HEADER_LIBRARIES := libhardware_headers
 LOCAL_SRC_FILES := memtrack_msm.c kgsl.c
 LOCAL_MODULE := memtrack.$(TARGET_BOARD_PLATFORM)
 include $(BUILD_SHARED_LIBRARY)
diff --git a/libqdutils/Android.bp b/libqdutils/Android.bp
new file mode 100644
index 0000000..54ce795
--- /dev/null
+++ b/libqdutils/Android.bp
@@ -0,0 +1,49 @@
+cc_library_shared {
+    name: "libqdutils",
+    vendor: true,
+    defaults: ["display_defaults"],
+    header_libs: [
+        "libhardware_headers",
+        "libutils_headers",
+    ],
+    shared_libs: [
+        "libbinder",
+        "libqservice",
+    ],
+    cflags: [
+        "-DLOG_TAG=\"qdutils\"",
+        "-Wno-sign-conversion",
+    ],
+    srcs: [
+        "qd_utils.cpp",
+        "display_config.cpp",
+    ],
+}
+
+cc_library_shared {
+    name: "libqdMetaData",
+    vendor: true,
+    defaults: ["display_defaults"],
+    cflags: [
+        "-Wno-sign-conversion",
+        "-DLOG_TAG=\"qdmetadata\"",
+    ],
+    srcs: [
+        "qdMetaData.cpp",
+        "qd_utils.cpp",
+    ],
+}
+
+// Remove after WFD moves to use libqdMetaData directly
+cc_library_shared {
+    name: "libqdMetaData.system",
+    defaults: ["display_defaults"],
+    cflags: [
+        "-Wno-sign-conversion",
+        "-DLOG_TAG=\"qdmetadata\"",
+    ],
+    srcs: [
+        "qdMetaData.cpp",
+        "qd_utils.cpp",
+    ],
+}
diff --git a/libqdutils/Android.mk b/libqdutils/Android.mk
deleted file mode 100644
index 820ed87..0000000
--- a/libqdutils/Android.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(LOCAL_PATH)/../common.mk
-include $(CLEAR_VARS)
-
-LOCAL_MODULE                  := libqdutils
-LOCAL_VENDOR_MODULE           := true
-LOCAL_MODULE_TAGS             := optional
-LOCAL_SHARED_LIBRARIES        := $(common_libs) libbinder libqservice
-LOCAL_C_INCLUDES              := $(common_includes) $(kernel_includes)
-LOCAL_HEADER_LIBRARIES        := display_headers
-LOCAL_HEADER_LIBRARIES        += libhardware_headers
-LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdutils\" -Wno-sign-conversion
-LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
-LOCAL_COPY_HEADERS_TO         := $(common_header_export_path)
-LOCAL_COPY_HEADERS            := display_config.h qd_utils.h
-LOCAL_SRC_FILES               := qd_utils.cpp \
-                                 display_config.cpp
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_COPY_HEADERS_TO           := $(common_header_export_path)
-LOCAL_COPY_HEADERS              := qdMetaData.h qd_utils.h
-LOCAL_SHARED_LIBRARIES          := liblog libcutils
-LOCAL_C_INCLUDES                := $(common_includes)
-LOCAL_HEADER_LIBRARIES          := display_headers
-LOCAL_ADDITIONAL_DEPENDENCIES   := $(common_deps)
-LOCAL_SRC_FILES                 := qdMetaData.cpp qd_utils.cpp
-LOCAL_CFLAGS                    := $(common_flags) -Wno-sign-conversion
-LOCAL_CFLAGS                    += -DLOG_TAG=\"DisplayMetaData\"
-
-LOCAL_MODULE_TAGS               := optional
-LOCAL_MODULE                    := libqdMetaData
-LOCAL_VENDOR_MODULE             := true
-include $(BUILD_SHARED_LIBRARY)
-
-
-include $(CLEAR_VARS)
-
-LOCAL_SHARED_LIBRARIES          := liblog libcutils
-LOCAL_C_INCLUDES                := $(common_includes)
-LOCAL_HEADER_LIBRARIES          := display_headers
-LOCAL_ADDITIONAL_DEPENDENCIES   := $(common_deps)
-LOCAL_SRC_FILES                 := qdMetaData.cpp qd_utils.cpp
-LOCAL_CFLAGS                    := $(common_flags) -Wno-sign-conversion
-LOCAL_CFLAGS                    += -DLOG_TAG=\"DisplayMetaData\"
-
-LOCAL_MODULE_TAGS               := optional
-LOCAL_MODULE                    := libqdMetaData.system
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/libqservice/Android.bp b/libqservice/Android.bp
new file mode 100644
index 0000000..fe69d39
--- /dev/null
+++ b/libqservice/Android.bp
@@ -0,0 +1,16 @@
+cc_library_shared {
+    name: "libqservice",
+    vendor: true,
+    defaults: ["display_defaults"],
+    shared_libs: ["libbinder"],
+    cflags: [
+        "-DLOG_TAG=\"qdqservice\"",
+        "-Wno-sign-conversion",
+    ],
+    srcs: [
+        "QService.cpp",
+        "IQService.cpp",
+        "IQClient.cpp",
+        "IQHDMIClient.cpp",
+    ],
+}
diff --git a/libqservice/Android.mk b/libqservice/Android.mk
deleted file mode 100644
index 9cfdf97..0000000
--- a/libqservice/Android.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(LOCAL_PATH)/../common.mk
-include $(CLEAR_VARS)
-
-LOCAL_MODULE                  := libqservice
-LOCAL_VENDOR_MODULE           := true
-LOCAL_MODULE_TAGS             := optional
-LOCAL_C_INCLUDES              := $(common_includes) $(kernel_includes)
-LOCAL_SHARED_LIBRARIES        := $(common_libs) libbinder
-LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdqservice\" -Wno-sign-conversion
-LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
-LOCAL_SRC_FILES               := QService.cpp \
-                                 IQService.cpp \
-                                 IQClient.cpp \
-                                 IQHDMIClient.cpp
-LOCAL_COPY_HEADERS_TO         := $(common_header_export_path)
-LOCAL_COPY_HEADERS            := IQService.h \
-                                 IQClient.h \
-                                 QService.h \
-                                 QServiceUtils.h \
-                                 IQHDMIClient.h
-
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/libqservice/IQService.cpp b/libqservice/IQService.cpp
index 2d0cbfb..d45a141 100644
--- a/libqservice/IQService.cpp
+++ b/libqservice/IQService.cpp
@@ -25,8 +25,8 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/IPCThreadState.h>
+#include <cutils/android_filesystem_config.h>
 #include <utils/Errors.h>
-#include <private/android_filesystem_config.h>
 #include <IQService.h>
 
 #define QSERVICE_DEBUG 0
diff --git a/sdm/libs/core/color_manager.cpp b/sdm/libs/core/color_manager.cpp
index 4c33a25..694aada 100644
--- a/sdm/libs/core/color_manager.cpp
+++ b/sdm/libs/core/color_manager.cpp
@@ -127,7 +127,7 @@
       DLOGW("Fail to get DSPP feature versions");
     } else {
       hw_attr.Set(hw_res_info_, panel_info, attribute, versions);
-      DLOGW("PAV2 version is versions = %d, version = %d ",
+      DLOGI("PAV2 version is versions = %d, version = %d ",
             hw_attr.version.version[kGlobalColorFeaturePaV2],
             versions.version[kGlobalColorFeaturePaV2]);
     }
diff --git a/sdm/libs/hwc2/Android.mk b/sdm/libs/hwc2/Android.mk
index 26e4bae..e9511f7 100644
--- a/sdm/libs/hwc2/Android.mk
+++ b/sdm/libs/hwc2/Android.mk
@@ -21,7 +21,9 @@
                                  libutils libcutils libsync libqdutils libqdMetaData \
                                  libdisplaydebug libsdmutils libc++ liblog libgrallocutils libui \
                                  libgpu_tonemapper libhidlbase libhidltransport \
-                                 vendor.display.config@1.0 android.hardware.graphics.mapper@2.0 \
+                                 vendor.display.config@1.0 \
+                                 android.hardware.graphics.mapper@2.0 \
+                                 android.hardware.graphics.mapper@2.1 \
                                  android.hardware.graphics.allocator@2.0
 
 ifeq ($(display_config_version), DISPLAY_CONFIG_1_1)
diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.h b/sdm/libs/hwc2/hwc_buffer_allocator.h
index d6f251f..cec5614 100644
--- a/sdm/libs/hwc2/hwc_buffer_allocator.h
+++ b/sdm/libs/hwc2/hwc_buffer_allocator.h
@@ -33,7 +33,7 @@
 #include <sys/mman.h>
 
 #include <android/hardware/graphics/allocator/2.0/IAllocator.h>
-#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+#include <android/hardware/graphics/mapper/2.1/IMapper.h>
 #include "gralloc_priv.h"
 
 using android::hardware::graphics::allocator::V2_0::IAllocator;
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index efc44a2..aca16bc 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -347,7 +347,7 @@
     disp_null->Init();
     use_metadata_refresh_rate_ = false;
     display_intf_ = disp_null;
-    ALOGI("Enabling null display mode for display type %d", type_);
+    DLOGI("Enabling null display mode for display type %d", type_);
   } else {
     error = core_intf_->CreateDisplay(type_, this, &display_intf_);
     if (error != kErrorNone) {
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index bdc84aa..ea14ddb 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -155,7 +155,7 @@
     iqservice->connect(android::sp<qClient::IQClient>(this));
     qservice_ = reinterpret_cast<qService::QService *>(iqservice.get());
   } else {
-    ALOGE("%s::%s: Failed to acquire %s", __CLASS__, __FUNCTION__, qservice_name);
+    DLOGE("Failed to acquire %s", qservice_name);
     return -EINVAL;
   }
 
@@ -246,7 +246,7 @@
 
     DisplayError error = CoreInterface::DestroyCore();
     if (error != kErrorNone) {
-      ALOGE("Display core de-initialization failed. Error = %d", error);
+      DLOGE("Display core de-initialization failed. Error = %d", error);
     }
   }
 
@@ -255,7 +255,7 @@
 
 int HWCSession::Open(const hw_module_t *module, const char *name, hw_device_t **device) {
   if (!module || !name || !device) {
-    ALOGE("%s::%s: Invalid parameters.", __CLASS__, __FUNCTION__);
+    DLOGE("Invalid parameters.");
     return -EINVAL;
   }
 
diff --git a/sdm/libs/hwc2/hwc_session_services.cpp b/sdm/libs/hwc2/hwc_session_services.cpp
index f91b8f1..dee76f5 100644
--- a/sdm/libs/hwc2/hwc_session_services.cpp
+++ b/sdm/libs/hwc2/hwc_session_services.cpp
@@ -43,10 +43,9 @@
 void HWCSession::StartServices() {
   android::status_t status = IDisplayConfig::registerAsService();
   if (status != android::OK) {
-    ALOGW("%s::%s: Could not register IDisplayConfig as service (%d).",
-          __CLASS__, __FUNCTION__, status);
+    DLOGW("Could not register IDisplayConfig as service (%d).", status);
   } else {
-    ALOGI("%s::%s: IDisplayConfig service registration completed.", __CLASS__, __FUNCTION__);
+    DLOGI("IDisplayConfig service registration completed.");
   }
 }
 
