diff --git a/sdm/include/core/buffer_sync_handler.h b/sdm/include/core/buffer_sync_handler.h
index 29a58a2..fe9a978 100644
--- a/sdm/include/core/buffer_sync_handler.h
+++ b/sdm/include/core/buffer_sync_handler.h
@@ -76,6 +76,27 @@
 
   virtual DisplayError SyncMerge(int fd1, int fd2, int *merged_fd) = 0;
 
+  /*! @brief Method to close sync fd
+
+    @details This method closes a sync fd.
+
+    @param[in] fd
+
+    @return \link None \endlink
+ */
+
+  virtual void SyncClose(int fd) = 0;
+
+  /*! @brief Method to detect if sync fd is signaled
+
+    @details This method detects if sync fd is signaled
+
+    @param[in] fd
+
+    @return \link Tue if fd has been signaled \endlink
+ */
+  virtual bool IsSyncSignaled(int fd) = 0;
+
  protected:
   virtual ~BufferSyncHandler() { }
 };
diff --git a/sdm/include/private/extension_interface.h b/sdm/include/private/extension_interface.h
index 8425db5..5a45e2d 100644
--- a/sdm/include/private/extension_interface.h
+++ b/sdm/include/private/extension_interface.h
@@ -61,7 +61,8 @@
   virtual DisplayError DestroyStrategyExtn(StrategyInterface *interface) = 0;
 
   virtual DisplayError CreateResourceExtn(const HWResourceInfo &hw_resource_info,
-                                          ResourceInterface **interface) = 0;
+                                          ResourceInterface **interface,
+                                          BufferSyncHandler *buffer_sync_handler) = 0;
   virtual DisplayError DestroyResourceExtn(ResourceInterface *interface) = 0;
 
   virtual DisplayError CreateRotator(BufferAllocator *buffer_allocator,
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
index fdfc582..40022e3 100644
--- a/sdm/include/private/hw_info_types.h
+++ b/sdm/include/private/hw_info_types.h
@@ -303,6 +303,9 @@
 
   uint32_t count;           // Total number of layers which need to be set on hardware.
 
+  bool need_sync_handle;
+  int sync_handle;
+
   LayerRect left_partial_update;
                             // Left ROI.
 
@@ -310,7 +313,7 @@
                             // Right ROI.
 
 
-  HWLayersInfo() : stack(NULL), count(0) { }
+  HWLayersInfo() : stack(NULL), count(0), need_sync_handle(false), sync_handle(-1) { }
 };
 
 struct HWLayers {
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
index d20f0b6..bb60542 100644
--- a/sdm/libs/core/comp_manager.cpp
+++ b/sdm/libs/core/comp_manager.cpp
@@ -39,13 +39,14 @@
 }
 
 DisplayError CompManager::Init(const HWResourceInfo &hw_res_info,
-                               ExtensionInterface *extension_intf) {
+                               ExtensionInterface *extension_intf,
+                               BufferSyncHandler *buffer_sync_handler) {
   SCOPE_LOCK(locker_);
 
   DisplayError error = kErrorNone;
 
   if (extension_intf) {
-    error = extension_intf->CreateResourceExtn(hw_res_info, &resource_intf_);
+    error = extension_intf->CreateResourceExtn(hw_res_info, &resource_intf_, buffer_sync_handler);
   } else {
     resource_intf_ = &resource_default_;
     error = resource_default_.Init(hw_res_info);
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
index 61e0581..502c08b 100644
--- a/sdm/libs/core/comp_manager.h
+++ b/sdm/libs/core/comp_manager.h
@@ -39,7 +39,8 @@
 class CompManager : public DumpImpl {
  public:
   CompManager();
-  DisplayError Init(const HWResourceInfo &hw_res_info_, ExtensionInterface *extension_intf);
+  DisplayError Init(const HWResourceInfo &hw_res_info_, ExtensionInterface *extension_intf,
+                  BufferSyncHandler *buffer_sync_handler);
   DisplayError Deinit();
   DisplayError RegisterDisplay(DisplayType type, const HWDisplayAttributes &attributes,
                                const HWPanelInfo &hw_panel_info, Handle *res_mgr_hnd);
diff --git a/sdm/libs/core/core_impl.cpp b/sdm/libs/core/core_impl.cpp
index 7d5e7b3..65abbe2 100644
--- a/sdm/libs/core/core_impl.cpp
+++ b/sdm/libs/core/core_impl.cpp
@@ -90,7 +90,7 @@
     goto CleanupOnError;
   }
 
-  error = comp_mgr_.Init(*hw_resource_, extension_intf_);
+  error = comp_mgr_.Init(*hw_resource_, extension_intf_, buffer_sync_handler_);
   if (error != kErrorNone) {
     goto CleanupOnError;
   }
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 9b6f19e..0535a44 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -419,6 +419,11 @@
 
     input_buffer->release_fence_fd = dup(mdp_commit.release_fence);
   }
+
+  if (hw_layer_info.need_sync_handle) {
+    hw_layer_info.sync_handle = dup(mdp_commit.release_fence);
+  }
+
   DLOGI_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
            device_name_);
   DLOGI_IF(kTagDriverConfig, "retire_fence_fd %d", stack->retire_fence_fd);
diff --git a/sdm/libs/hwc/hwc_buffer_sync_handler.cpp b/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
index 9bc4ec9..949745e 100644
--- a/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
+++ b/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
@@ -67,5 +67,17 @@
   return error;
 }
 
+void HWCBufferSyncHandler::SyncClose(int fd) {
+  close(fd);
+}
+
+bool HWCBufferSyncHandler::IsSyncSignaled(int fd) {
+  if (sync_wait(fd, 0) < 0) {
+    return false;
+  } else {
+    return true;
+  }
+}
+
 }  // namespace sdm
 
diff --git a/sdm/libs/hwc/hwc_buffer_sync_handler.h b/sdm/libs/hwc/hwc_buffer_sync_handler.h
index da94650..c5f2370 100644
--- a/sdm/libs/hwc/hwc_buffer_sync_handler.h
+++ b/sdm/libs/hwc/hwc_buffer_sync_handler.h
@@ -44,6 +44,8 @@
 
   virtual DisplayError SyncWait(int fd);
   virtual DisplayError SyncMerge(int fd1, int fd2, int *merged_fd);
+  virtual void SyncClose(int fd);
+  virtual bool IsSyncSignaled(int fd);
 };
 
 }  // namespace sdm
