diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index a038cd7..c42c8b6 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -41,12 +41,11 @@
 USER ${RUN_USER}
 
 # Install aospless package (produced by GloDroid/aospext)
-RUN wget -P ${USER_HOME} https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer/uploads/af611363cabab0e9557c53b844197228/aospless_drm_hwcomposer_arm64.tar.xz && \
+RUN wget -P ${USER_HOME} https://gitlab.freedesktop.org/-/project/5/uploads/d66764aa71f9f1235b92d44a652cd3c3/aospless_drm_hwcomposer_arm64.tar.xz && \
     cd ${USER_HOME} && \
     sha256sum aospless_drm_hwcomposer_arm64.tar.xz && \
-    (echo 07b70f3172acf55dafb5882fab0c6c618854e3a9ff7496fa8b1e5fd2ee68cf0a aospless_drm_hwcomposer_arm64.tar.xz | sha256sum --check) && \
-    tar xf aospless_drm_hwcomposer_arm64.tar.xz && \
-    rm -r ${USER_HOME}/aospless/src && ln -s ../drm_hwcomposer/ ${USER_HOME}/aospless/src
+    (echo 00ff288f184111dd35143c462e82fd5f8f31a1417d5eb9a11e8798695abcc141 aospless_drm_hwcomposer_arm64.tar.xz | sha256sum --check) && \
+    tar xf aospless_drm_hwcomposer_arm64.tar.xz && ln -s ../drm_hwcomposer/ ${USER_HOME}/aospless/src
 
 # Create project path
 RUN mkdir -pv ${USER_HOME}/drm_hwcomposer
diff --git a/.ci/Makefile b/.ci/Makefile
index 01584c9..325e0b5 100644
--- a/.ci/Makefile
+++ b/.ci/Makefile
@@ -43,6 +43,7 @@
     -google-readability-todo                            \
     -hicpp-vararg                                       \
     -hicpp-signed-bitwise                               \
+    -misc-const-correctness                             \
     -readability-identifier-length                      \
 
 TIDY_CHECKS_NORMAL :=                                   \
diff --git a/Android.bp b/Android.bp
index 8b09171..7d014dc 100644
--- a/Android.bp
+++ b/Android.bp
@@ -127,7 +127,6 @@
         "hwc3/ComposerResources.cpp",
         "hwc3/DrmHwcThree.cpp",
         "hwc3/Utils.cpp",
-        "hwc3/DrmHwcThree.cpp",
     ],
 }
 
@@ -182,10 +181,10 @@
     name: "android.hardware.composer.hwc3-service.drm",
 
     srcs: [
-      ":drm_hwcomposer_hwc3",
-      ":drm_hwcomposer_service",
-      ":drm_hwcomposer_common",
-      "bufferinfo/legacy/BufferInfoLibdrm.cpp",
+        ":drm_hwcomposer_hwc3",
+        ":drm_hwcomposer_service",
+        ":drm_hwcomposer_common",
+        "bufferinfo/legacy/BufferInfoLibdrm.cpp",
     ],
 
     defaults: [
@@ -193,7 +192,7 @@
     ],
 
     shared_libs: [
-        "android.hardware.graphics.composer3-V1-ndk",
+        "android.hardware.graphics.composer3-V3-ndk",
         "libbase",
         "libbinder",
         "libbinder_ndk",
diff --git a/drm/DrmHwc.cpp b/drm/DrmHwc.cpp
index 6457d79..df3eb56 100644
--- a/drm/DrmHwc.cpp
+++ b/drm/DrmHwc.cpp
@@ -193,4 +193,10 @@
   return writeback_count;
 }
 
+void DrmHwc::DeinitDisplays() {
+  for (auto &pair : Displays()) {
+    pair.second->SetPipeline(nullptr);
+  }
+}
+
 }  // namespace android
\ No newline at end of file
diff --git a/drm/DrmHwc.h b/drm/DrmHwc.h
index 36ff80d..44dc276 100644
--- a/drm/DrmHwc.h
+++ b/drm/DrmHwc.h
@@ -57,6 +57,8 @@
     deferred_hotplug_events_[displayid] = connected;
   }
 
+  void DeinitDisplays();
+
   // PipelineToFrontendBindingInterface
   bool BindDisplay(std::shared_ptr<DrmDisplayPipeline> pipeline) override;
   bool UnbindDisplay(std::shared_ptr<DrmDisplayPipeline> pipeline) override;
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index e8bd945..36333d2 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -133,6 +133,8 @@
   }
 
   if (vsync_worker_) {
+    // TODO: There should be a mechanism to wait for this worker to complete,
+    // otherwise there is a race condition while destructing the HwcDisplay.
     vsync_worker_->StopThread();
     vsync_worker_ = {};
   }
@@ -345,8 +347,8 @@
   return HWC2::Error::None;
 }
 
-HWC2::Error HwcDisplay::GetDisplayConfigs(uint32_t *num_configs,
-                                          hwc2_config_t *configs) {
+HWC2::Error HwcDisplay::LegacyGetDisplayConfigs(uint32_t *num_configs,
+                                                hwc2_config_t *configs) {
   uint32_t idx = 0;
   for (auto &hwc_config : configs_.hwc_configs) {
     if (hwc_config.second.disabled) {
diff --git a/hwc2_device/HwcDisplay.h b/hwc2_device/HwcDisplay.h
index 9fe555d..87d2da7 100644
--- a/hwc2_device/HwcDisplay.h
+++ b/hwc2_device/HwcDisplay.h
@@ -54,6 +54,10 @@
 
   std::string Dump();
 
+  const HwcDisplayConfigs &GetDisplayConfigs() const {
+    return configs_;
+  }
+
   // HWC Hooks
   HWC2::Error AcceptDisplayChanges();
   HWC2::Error CreateLayer(hwc2_layer_t *layer);
@@ -66,7 +70,8 @@
   HWC2::Error GetColorModes(uint32_t *num_modes, int32_t *modes);
   HWC2::Error GetDisplayAttribute(hwc2_config_t config, int32_t attribute,
                                   int32_t *value);
-  HWC2::Error GetDisplayConfigs(uint32_t *num_configs, hwc2_config_t *configs);
+  HWC2::Error LegacyGetDisplayConfigs(uint32_t *num_configs,
+                                      hwc2_config_t *configs);
   HWC2::Error GetDisplayName(uint32_t *size, char *name);
   HWC2::Error GetDisplayRequests(int32_t *display_requests,
                                  uint32_t *num_elements, hwc2_layer_t *layers,
diff --git a/hwc2_device/hwc2_device.cpp b/hwc2_device/hwc2_device.cpp
index bd2ada5..28b6963 100644
--- a/hwc2_device/hwc2_device.cpp
+++ b/hwc2_device/hwc2_device.cpp
@@ -177,8 +177,8 @@
                       int32_t *>);
     case HWC2::FunctionDescriptor::GetDisplayConfigs:
       return ToHook<HWC2_PFN_GET_DISPLAY_CONFIGS>(
-          DisplayHook<decltype(&HwcDisplay::GetDisplayConfigs),
-                      &HwcDisplay::GetDisplayConfigs, uint32_t *,
+          DisplayHook<decltype(&HwcDisplay::LegacyGetDisplayConfigs),
+                      &HwcDisplay::LegacyGetDisplayConfigs, uint32_t *,
                       hwc2_config_t *>);
     case HWC2::FunctionDescriptor::GetDisplayName:
       return ToHook<HWC2_PFN_GET_DISPLAY_NAME>(
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index e60d9e8..f353abb 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -42,11 +42,13 @@
 #include "cutils/native_handle.h"
 #include "hardware/hwcomposer_defs.h"
 #include "hwc2_device/HwcDisplay.h"
+#include "hwc2_device/HwcDisplayConfigs.h"
 #include "hwc2_device/HwcLayer.h"
 #include "hwc3/DrmHwcThree.h"
 #include "hwc3/Utils.h"
 
 using ::android::HwcDisplay;
+using ::android::HwcDisplayConfigs;
 
 #include "utils/log.h"
 
@@ -79,6 +81,20 @@
 
 ComposerClient::~ComposerClient() {
   DEBUG_FUNC();
+  {
+    // First Deinit the displays to start shutting down the Display's dependent
+    // threads such as VSyncWorker.
+    const std::unique_lock lock(hwc_->GetResMan().GetMainLock());
+    hwc_->DeinitDisplays();
+  }
+  // Sleep to wait for threads to complete and exit.
+  const int time_for_threads_to_exit_us = 200000;
+  usleep(time_for_threads_to_exit_us);
+  {
+    // Hold the lock while destructing the hwc_ and the objects that it owns.
+    const std::unique_lock lock(hwc_->GetResMan().GetMainLock());
+    hwc_.reset();
+  }
   LOG(DEBUG) << "removed composer client";
 }
 
@@ -508,14 +524,14 @@
 
   uint32_t num_configs = 0;
   hwc3::Error error = Hwc2toHwc3Error(
-      display->GetDisplayConfigs(&num_configs, nullptr));
+      display->LegacyGetDisplayConfigs(&num_configs, nullptr));
   if (error != hwc3::Error::kNone) {
     return ToBinderStatus(error);
   }
 
   std::vector<hwc2_config_t> out_configs(num_configs);
   error = Hwc2toHwc3Error(
-      display->GetDisplayConfigs(&num_configs, out_configs.data()));
+      display->LegacyGetDisplayConfigs(&num_configs, out_configs.data()));
   if (error != hwc3::Error::kNone) {
     return ToBinderStatus(error);
   }
@@ -917,6 +933,71 @@
   return ToBinderStatus(hwc3::Error::kUnsupported);
 }
 
+ndk::ScopedAStatus ComposerClient::getOverlaySupport(
+    OverlayProperties* /*out_overlay_properties*/) {
+  return ToBinderStatus(hwc3::Error::kUnsupported);
+}
+
+ndk::ScopedAStatus ComposerClient::getHdrConversionCapabilities(
+    std::vector<common::HdrConversionCapability>* /*out_capabilities*/) {
+  return ToBinderStatus(hwc3::Error::kUnsupported);
+}
+
+ndk::ScopedAStatus ComposerClient::setHdrConversionStrategy(
+    const common::HdrConversionStrategy& /*conversion_strategy*/,
+    common::Hdr* /*out_hdr*/) {
+  return ToBinderStatus(hwc3::Error::kUnsupported);
+}
+
+ndk::ScopedAStatus ComposerClient::setRefreshRateChangedCallbackDebugEnabled(
+    int64_t /*display*/, bool /*enabled*/) {
+  return ToBinderStatus(hwc3::Error::kUnsupported);
+}
+
+ndk::ScopedAStatus ComposerClient::getDisplayConfigurations(
+    int64_t display_id, int32_t /*max_frame_interval_ns*/,
+    std::vector<DisplayConfiguration>* configurations) {
+  DEBUG_FUNC();
+  const std::unique_lock lock(hwc_->GetResMan().GetMainLock());
+  HwcDisplay* display = GetDisplay(display_id);
+  if (display == nullptr) {
+    return ToBinderStatus(hwc3::Error::kBadDisplay);
+  }
+
+  const HwcDisplayConfigs& configs = display->GetDisplayConfigs();
+  for (const auto& [id, config] : configs.hwc_configs) {
+    static const int kNanosecondsPerSecond = 1E9;
+    configurations->emplace_back(
+        DisplayConfiguration{.configId = static_cast<int32_t>(config.id),
+                             .width = config.mode.GetRawMode().hdisplay,
+                             .height = config.mode.GetRawMode().vdisplay,
+                             .configGroup = static_cast<int32_t>(
+                                 config.group_id),
+                             .vsyncPeriod = static_cast<int>(kNanosecondsPerSecond * double(
+                                 1 / config.mode.GetVRefresh()))});
+
+    if (configs.mm_width != 0) {
+      // ideally this should be vdisplay/mm_heigth, however mm_height
+      // comes from edid parsing and is highly unreliable. Viewing the
+      // rarity of anisotropic displays, falling back to a single value
+      // for dpi yield more correct output.
+      static const float kMmPerInch = 25.4;
+      float dpi = float(config.mode.GetRawMode().hdisplay) * kMmPerInch /
+                  float(configs.mm_width);
+      configurations->back().dpi = {.x = dpi, .y = dpi};
+    }
+
+    // TODO: Populate vrrConfig.
+  }
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus ComposerClient::notifyExpectedPresent(
+    int64_t /*display*/, const ClockMonotonicTimestamp& /*expected_present_time*/,
+    int32_t /*frame_interval_ns*/) {
+  return ToBinderStatus(hwc3::Error::kUnsupported);
+}
+
 std::string ComposerClient::Dump() {
   uint32_t size = 0;
   hwc_->Dump(&size, nullptr);
diff --git a/hwc3/ComposerClient.h b/hwc3/ComposerClient.h
index 616f8aa..f6362ad 100644
--- a/hwc3/ComposerClient.h
+++ b/hwc3/ComposerClient.h
@@ -136,6 +136,21 @@
   ndk::ScopedAStatus setVsyncEnabled(int64_t display, bool enabled) override;
   ndk::ScopedAStatus setIdleTimerEnabled(int64_t display,
                                          int32_t timeout) override;
+  ndk::ScopedAStatus getOverlaySupport(
+      OverlayProperties* out_overlay_properties) override;
+  ndk::ScopedAStatus getHdrConversionCapabilities(
+      std::vector<common::HdrConversionCapability>* out_capabilities) override;
+  ndk::ScopedAStatus setHdrConversionStrategy(
+      const common::HdrConversionStrategy& conversion_strategy,
+      common::Hdr* out_hdr) override;
+  ndk::ScopedAStatus setRefreshRateChangedCallbackDebugEnabled(
+      int64_t display, bool enabled) override;
+  ndk::ScopedAStatus getDisplayConfigurations(
+      int64_t display, int32_t max_frame_interval_ns,
+      std::vector<DisplayConfiguration>* configurations) override;
+  ndk::ScopedAStatus notifyExpectedPresent(
+      int64_t display, const ClockMonotonicTimestamp& expected_present_time,
+      int32_t frame_interval_ns) override;
 
  protected:
   ::ndk::SpAIBinder createBinder() override;
diff --git a/hwc3/DrmHwcThree.cpp b/hwc3/DrmHwcThree.cpp
index 0adecf4..d758865 100644
--- a/hwc3/DrmHwcThree.cpp
+++ b/hwc3/DrmHwcThree.cpp
@@ -20,6 +20,7 @@
 
 #include "Utils.h"
 #include "aidl/android/hardware/graphics/common/Dataspace.h"
+#include "aidl/android/hardware/graphics/common/DisplayHotplugEvent.h"
 
 namespace aidl::android::hardware::graphics::composer3::impl {
 
@@ -61,7 +62,8 @@
 void DrmHwcThree::SendHotplugEventToClient(hwc2_display_t display_id,
                                            bool connected) {
   HandleDisplayHotplugEvent(static_cast<uint64_t>(display_id), connected);
-  composer_callback_->onHotplug(static_cast<int64_t>(display_id), connected);
+  common::DisplayHotplugEvent event = connected ? common::DisplayHotplugEvent::CONNECTED : common::DisplayHotplugEvent::DISCONNECTED;
+  composer_callback_->onHotplugEvent(static_cast<int64_t>(display_id), event);
 }
 
 void DrmHwcThree::CleanDisplayResources(uint64_t display_id) {
diff --git a/hwc3/hwc3-drm.xml b/hwc3/hwc3-drm.xml
index 05a7c09..911f7f8 100644
--- a/hwc3/hwc3-drm.xml
+++ b/hwc3/hwc3-drm.xml
@@ -1,7 +1,7 @@
 <manifest version="1.0" type="device">
     <hal format="aidl">
         <name>android.hardware.graphics.composer3</name>
-        <version>1</version>
+        <version>3</version>
         <interface>
             <name>IComposer</name>
             <instance>default</instance>
