diff --git a/common.mk b/common.mk
index c003fde..c1b13ec 100644
--- a/common.mk
+++ b/common.mk
@@ -5,7 +5,7 @@
     then echo DISPLAY_CONFIG_1_1; fi)
 
 #Common C flags
-common_flags := -DDEBUG_CALC_FPS -Wno-missing-field-initializers
+common_flags := -Wno-missing-field-initializers
 common_flags += -Wconversion -Wall -Werror -std=c++14
 common_flags += -DUSE_GRALLOC1
 ifeq ($(TARGET_IS_HEADLESS), true)
diff --git a/libgralloc1/gr_buf_mgr.cpp b/libgralloc1/gr_buf_mgr.cpp
index c5d91d9..189f19e 100644
--- a/libgralloc1/gr_buf_mgr.cpp
+++ b/libgralloc1/gr_buf_mgr.cpp
@@ -829,33 +829,6 @@
   return GRALLOC1_ERROR_NONE;
 }
 
-static bool IsYuvFormat(const private_handle_t *hnd) {
-  switch (hnd->format) {
-    case HAL_PIXEL_FORMAT_YCbCr_420_SP:
-    case HAL_PIXEL_FORMAT_YCbCr_422_SP:
-    case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
-    case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:   // Same as YCbCr_420_SP_VENUS
-    case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
-    case HAL_PIXEL_FORMAT_YCrCb_420_SP:
-    case HAL_PIXEL_FORMAT_YCrCb_422_SP:
-    case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
-    case HAL_PIXEL_FORMAT_NV21_ZSL:
-    case HAL_PIXEL_FORMAT_RAW16:
-    case HAL_PIXEL_FORMAT_Y16:
-    case HAL_PIXEL_FORMAT_RAW12:
-    case HAL_PIXEL_FORMAT_RAW10:
-    case HAL_PIXEL_FORMAT_YV12:
-    case HAL_PIXEL_FORMAT_Y8:
-    case HAL_PIXEL_FORMAT_YCbCr_420_P010:
-    case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
-    case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
-    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
-      return true;
-    default:
-      return false;
-  }
-}
-
 gralloc1_error_t BufferManager::GetNumFlexPlanes(const private_handle_t *hnd,
                                                  uint32_t *out_num_planes) {
   if (!IsYuvFormat(hnd)) {
diff --git a/libgralloc1/gr_utils.cpp b/libgralloc1/gr_utils.cpp
index 6af5df6..480ad98 100644
--- a/libgralloc1/gr_utils.cpp
+++ b/libgralloc1/gr_utils.cpp
@@ -42,6 +42,34 @@
 
 namespace gralloc1 {
 
+bool IsYuvFormat(const private_handle_t *hnd) {
+  switch (hnd->format) {
+    case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+    case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+    case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+    case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:   // Same as YCbCr_420_SP_VENUS
+    case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+    case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+    case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+    case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+    case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+    case HAL_PIXEL_FORMAT_NV21_ZSL:
+    case HAL_PIXEL_FORMAT_RAW16:
+    case HAL_PIXEL_FORMAT_Y16:
+    case HAL_PIXEL_FORMAT_RAW12:
+    case HAL_PIXEL_FORMAT_RAW10:
+    case HAL_PIXEL_FORMAT_YV12:
+    case HAL_PIXEL_FORMAT_Y8:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+    case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+      return true;
+    default:
+      return false;
+  }
+}
+
 bool IsUncompressedRGBFormat(int format) {
   switch (format) {
     case HAL_PIXEL_FORMAT_RGBA_8888:
diff --git a/libgralloc1/gr_utils.h b/libgralloc1/gr_utils.h
index 4b2f136..7fcb6c2 100644
--- a/libgralloc1/gr_utils.h
+++ b/libgralloc1/gr_utils.h
@@ -60,6 +60,7 @@
   return (Type1)((x + (Type1)align - 1) & ~((Type1)align - 1));
 }
 
+bool IsYuvFormat(const private_handle_t *hnd);
 bool IsCompressedRGBFormat(int format);
 bool IsUncompressedRGBFormat(int format);
 uint32_t GetBppForUncompressedRGB(int format);
diff --git a/libqdutils/Android.mk b/libqdutils/Android.mk
index 5dac581..820ed87 100644
--- a/libqdutils/Android.mk
+++ b/libqdutils/Android.mk
@@ -13,8 +13,7 @@
 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               := profiler.cpp \
-                                 qd_utils.cpp \
+LOCAL_SRC_FILES               := qd_utils.cpp \
                                  display_config.cpp
 include $(BUILD_SHARED_LIBRARY)
 
diff --git a/libqdutils/profiler.cpp b/libqdutils/profiler.cpp
deleted file mode 100644
index 810b019..0000000
--- a/libqdutils/profiler.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 2011-2012, 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.
- */
-
-#define LOG_NDDEBUG 0
-#define __STDC_FORMAT_MACROS 1
-#include <inttypes.h>
-
-#include "profiler.h"
-
-#ifdef DEBUG_CALC_FPS
-
-
-ANDROID_SINGLETON_STATIC_INSTANCE(qdutils::CalcFps) ;
-
-namespace qdutils {
-
-CalcFps::CalcFps() {
-    debug_fps_level = 0;
-    Init();
-}
-
-CalcFps::~CalcFps() {
-}
-
-void CalcFps::Init() {
-    char prop[PROPERTY_VALUE_MAX];
-    property_get("debug.gr.calcfps", prop, "0");
-    debug_fps_level = atoi(prop);
-    if (debug_fps_level > MAX_DEBUG_FPS_LEVEL) {
-        ALOGW("out of range value for debug.gr.calcfps, using 0");
-        debug_fps_level = 0;
-    }
-
-    ALOGD("DEBUG_CALC_FPS: %d", debug_fps_level);
-    populate_debug_fps_metadata();
-}
-
-void CalcFps::Fps() {
-    if (debug_fps_level > 0)
-        calc_fps(ns2us(systemTime()));
-}
-
-void CalcFps::populate_debug_fps_metadata(void)
-{
-    char prop[PROPERTY_VALUE_MAX];
-
-    /*defaults calculation of fps to based on number of frames*/
-    property_get("debug.gr.calcfps.type", prop, "0");
-    debug_fps_metadata.type = (debug_fps_metadata_t::DfmType) atoi(prop);
-
-    /*defaults to 1000ms*/
-    property_get("debug.gr.calcfps.timeperiod", prop, "1000");
-    debug_fps_metadata.time_period = atoi(prop);
-
-    property_get("debug.gr.calcfps.period", prop, "10");
-    debug_fps_metadata.period = atoi(prop);
-
-    if (debug_fps_metadata.period > MAX_FPS_CALC_PERIOD_IN_FRAMES) {
-        debug_fps_metadata.period = MAX_FPS_CALC_PERIOD_IN_FRAMES;
-    }
-
-    /* default ignorethresh_us: 500 milli seconds */
-    property_get("debug.gr.calcfps.ignorethresh_us", prop, "500000");
-    debug_fps_metadata.ignorethresh_us = atoi(prop);
-
-    debug_fps_metadata.framearrival_steps =
-        (unsigned int)(debug_fps_metadata.ignorethresh_us / 16666);
-
-    if (debug_fps_metadata.framearrival_steps > MAX_FRAMEARRIVAL_STEPS) {
-        debug_fps_metadata.framearrival_steps = MAX_FRAMEARRIVAL_STEPS;
-        debug_fps_metadata.ignorethresh_us =
-            debug_fps_metadata.framearrival_steps * 16666;
-    }
-
-    /* 2ms margin of error for the gettimeofday */
-    debug_fps_metadata.margin_us = 2000;
-
-    for (unsigned int i = 0; i < MAX_FRAMEARRIVAL_STEPS; i++)
-        debug_fps_metadata.accum_framearrivals[i] = 0;
-
-    debug_fps_metadata.curr_frame = 0;
-
-    ALOGD("period: %u", debug_fps_metadata.period);
-    ALOGD("ignorethresh_us: %" PRId64, debug_fps_metadata.ignorethresh_us);
-}
-
-void CalcFps::print_fps(float fps)
-{
-    if (debug_fps_metadata_t::DFM_FRAMES == debug_fps_metadata.type)
-        ALOGD("FPS for last %d frames: %3.2f", debug_fps_metadata.period, fps);
-    else
-        ALOGD("FPS for last (%f ms, %d frames): %3.2f",
-              debug_fps_metadata.time_elapsed,
-              debug_fps_metadata.curr_frame, fps);
-
-    debug_fps_metadata.curr_frame = 0;
-    debug_fps_metadata.time_elapsed = 0.0;
-
-    if (debug_fps_level > 1) {
-        ALOGD("Frame Arrival Distribution:");
-        for (unsigned int i = 0;
-             i < ((debug_fps_metadata.framearrival_steps / 6) + 1);
-             i++) {
-            ALOGD("%" PRId64" %" PRId64" %" PRId64" %" PRId64" %" PRId64" %" PRId64,
-                  debug_fps_metadata.accum_framearrivals[i*6],
-                  debug_fps_metadata.accum_framearrivals[i*6+1],
-                  debug_fps_metadata.accum_framearrivals[i*6+2],
-                  debug_fps_metadata.accum_framearrivals[i*6+3],
-                  debug_fps_metadata.accum_framearrivals[i*6+4],
-                  debug_fps_metadata.accum_framearrivals[i*6+5]);
-        }
-
-        /* We are done with displaying, now clear the stats */
-        for (unsigned int i = 0;
-             i < debug_fps_metadata.framearrival_steps;
-             i++)
-            debug_fps_metadata.accum_framearrivals[i] = 0;
-    }
-    return;
-}
-
-void CalcFps::calc_fps(nsecs_t currtime_us)
-{
-    static nsecs_t oldtime_us = 0;
-
-    nsecs_t diff = currtime_us - oldtime_us;
-
-    oldtime_us = currtime_us;
-
-    if (debug_fps_metadata_t::DFM_FRAMES == debug_fps_metadata.type &&
-        diff > debug_fps_metadata.ignorethresh_us) {
-        return;
-    }
-
-    if (debug_fps_metadata.curr_frame < MAX_FPS_CALC_PERIOD_IN_FRAMES) {
-        debug_fps_metadata.framearrivals[debug_fps_metadata.curr_frame] = diff;
-    }
-
-    debug_fps_metadata.curr_frame++;
-
-    if (debug_fps_level > 1) {
-        unsigned int currstep =
-            (unsigned int)(diff + debug_fps_metadata.margin_us) / 16666;
-
-        if (currstep < debug_fps_metadata.framearrival_steps) {
-            debug_fps_metadata.accum_framearrivals[currstep-1]++;
-        }
-    }
-
-    if (debug_fps_metadata_t::DFM_FRAMES == debug_fps_metadata.type) {
-        if (debug_fps_metadata.curr_frame == debug_fps_metadata.period) {
-            /* time to calculate and display FPS */
-            nsecs_t sum = 0;
-            for (unsigned int i = 0; i < debug_fps_metadata.period; i++)
-                sum += debug_fps_metadata.framearrivals[i];
-            print_fps(float(float(debug_fps_metadata.period * 1000000) /
-                                                              (float)sum));
-        }
-    }
-    else if (debug_fps_metadata_t::DFM_TIME == debug_fps_metadata.type) {
-        debug_fps_metadata.time_elapsed += (float)((float)diff/1000.0);
-        if (debug_fps_metadata.time_elapsed >= debug_fps_metadata.time_period) {
-            float fps = float(1000.0 * debug_fps_metadata.curr_frame/
-                                            debug_fps_metadata.time_elapsed);
-            print_fps(fps);
-        }
-    }
-    return;
-}
-};//namespace qomutils
-#endif
diff --git a/libqdutils/profiler.h b/libqdutils/profiler.h
deleted file mode 100644
index 5f270b0..0000000
--- a/libqdutils/profiler.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2011-2012, 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 INCLUDE_PROFILER
-#define INCLUDE_PROFILER
-
-#include <stdio.h>
-#include <utils/Singleton.h>
-#include <cutils/properties.h>
-#include <cutils/log.h>
-
-#ifndef DEBUG_CALC_FPS
-#define CALC_FPS() ((void)0)
-#define CALC_INIT() ((void)0)
-#else
-#define CALC_FPS() qdutils::CalcFps::getInstance().Fps()
-#define CALC_INIT() qdutils::CalcFps::getInstance().Init()
-using namespace android;
-namespace qdutils {
-class CalcFps : public Singleton<CalcFps> {
-    public:
-    CalcFps();
-    ~CalcFps();
-
-    void Init();
-    void Fps();
-
-    private:
-    static const unsigned int MAX_FPS_CALC_PERIOD_IN_FRAMES = 128;
-    static const unsigned int MAX_FRAMEARRIVAL_STEPS = 50;
-    static const unsigned int MAX_DEBUG_FPS_LEVEL = 2;
-
-    struct debug_fps_metadata_t {
-        /*fps calculation based on time or number of frames*/
-        enum DfmType {
-            DFM_FRAMES = 0,
-            DFM_TIME   = 1,
-        };
-
-        DfmType type;
-
-        /* indicates how much time do we wait till we calculate FPS */
-        unsigned long time_period;
-
-        /*indicates how much time elapsed since we report fps*/
-        float time_elapsed;
-
-        /* indicates how many frames do we wait till we calculate FPS */
-        unsigned int period;
-        /* current frame, will go upto period, and then reset */
-        unsigned int curr_frame;
-        /* frame will arrive at a multiple of 16666 us at the display.
-           This indicates how many steps to consider for our calculations.
-           For example, if framearrival_steps = 10, then the frame that arrived
-           after 166660 us or more will be ignored.
-           */
-        unsigned int framearrival_steps;
-        /* ignorethresh_us = framearrival_steps * 16666 */
-        nsecs_t      ignorethresh_us;
-        /* used to calculate the actual frame arrival step, the times might not be
-           accurate
-           */
-        unsigned int margin_us;
-
-        /* actual data storage */
-        nsecs_t      framearrivals[MAX_FPS_CALC_PERIOD_IN_FRAMES];
-        nsecs_t      accum_framearrivals[MAX_FRAMEARRIVAL_STEPS];
-    };
-
-    private:
-    void populate_debug_fps_metadata(void);
-    void print_fps(float fps);
-    void calc_fps(nsecs_t currtime_us);
-
-    private:
-    debug_fps_metadata_t debug_fps_metadata;
-    unsigned int debug_fps_level;
-};
-};//namespace qdutils
-#endif
-
-#endif // INCLUDE_PROFILER
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
index d2d4b0b..5d311d9 100644
--- a/sdm/include/private/hw_info_types.h
+++ b/sdm/include/private/hw_info_types.h
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2015-2018, 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:
@@ -485,6 +485,7 @@
   uint32_t z_order = 0;
   uint8_t flags = 0;
   bool valid = false;
+  bool is_virtual = 0;
 
   void Reset() { *this = HWPipeInfo(); }
 };
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
index c2beb7a..48bf02b 100644
--- a/sdm/libs/core/drm/hw_device_drm.cpp
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -241,7 +241,7 @@
   delete [] hashmap_;
 }
 
-void HWDeviceDRM::Registry::RegisterCurrent(HWLayers *hw_layers) {
+void HWDeviceDRM::Registry::Register(HWLayers *hw_layers) {
   HWLayersInfo &hw_layer_info = hw_layers->info;
   uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
 
@@ -292,7 +292,11 @@
   return;
 }
 
-void HWDeviceDRM::Registry::UnregisterNext() {
+void HWDeviceDRM::Registry::Next() {
+  current_index_ = (current_index_ + 1) % rmfb_delay_;
+}
+
+void HWDeviceDRM::Registry::Unregister() {
   DRMMaster *master = nullptr;
   DRMMaster::GetInstance(&master);
 
@@ -301,7 +305,6 @@
     return;
   }
 
-  current_index_ = (current_index_ + 1) % rmfb_delay_;
   auto &curr_map = hashmap_[current_index_];
   for (auto &pair : curr_map) {
     uint32_t fb_id = pair.second;
@@ -316,7 +319,8 @@
 
 void HWDeviceDRM::Registry::Clear() {
   for (int i = 0; i < rmfb_delay_; i++) {
-    UnregisterNext();
+    Unregister();
+    Next();
   }
   current_index_ = 0;
 }
@@ -987,24 +991,26 @@
 DisplayError HWDeviceDRM::Validate(HWLayers *hw_layers) {
   DTRACE_SCOPED();
 
-  registry_.RegisterCurrent(hw_layers);
+  DisplayError err = kErrorNone;
+  registry_.Register(hw_layers);
   SetupAtomic(hw_layers, true /* validate */);
 
   int ret = drm_atomic_intf_->Validate();
   if (ret) {
     DLOGE("failed with error %d for %s", ret, device_name_);
     vrefresh_ = 0;
-    return kErrorHardware;
+    err = kErrorHardware;
   }
 
-  return kErrorNone;
+  registry_.Unregister();
+  return err;
 }
 
 DisplayError HWDeviceDRM::Commit(HWLayers *hw_layers) {
   DTRACE_SCOPED();
 
   DisplayError err = kErrorNone;
-  registry_.RegisterCurrent(hw_layers);
+  registry_.Register(hw_layers);
 
   if (default_mode_) {
     err = DefaultCommit(hw_layers);
@@ -1012,7 +1018,8 @@
     err = AtomicCommit(hw_layers);
   }
 
-  registry_.UnregisterNext();
+  registry_.Next();
+  registry_.Unregister();
 
   return err;
 }
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index 5b7576a..edb5d58 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -137,11 +137,14 @@
    public:
     explicit Registry(BufferAllocator *buffer_allocator);
     ~Registry();
-    // Call on each validate and commit to register layer buffers
-    void RegisterCurrent(HWLayers *hw_layers);
-    // Call at the end of draw cycle to clear the next slot for business
-    void UnregisterNext();
-    // Call on display disconnect to release all gem handles and fb_ids
+    // Called on each Validate and Commit to register layer buffers fds to the slot pointed to by
+    // current_index_
+    void Register(HWLayers *hw_layers);
+    // Clears the slot pointed to by current_index_
+    void Unregister();
+    // Moves current_index_ to the next position
+    void Next();
+    // Called on display disconnect to release all gem handles and fb_ids
     void Clear();
     // Maps given fd to FB ID
     void MapBufferToFbId(LayerBuffer* buffer);
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index 7a3d385..86a3f54 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2017-2018, 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
@@ -182,7 +182,6 @@
 
   static_cast<const HWDeviceDRM *>(hw_intf)->GetDRMDisplayToken(&token_);
   is_primary_ = static_cast<const HWDeviceDRM *>(hw_intf)->IsPrimaryDisplay();
-  vsync_enabled_ = is_primary_;
 
   DLOGI("Setup event handler for display %d, CRTC %d, Connector %d",
         display_type, token_.crtc_id, token_.conn_id);
@@ -198,6 +197,11 @@
     return kErrorResources;
   }
 
+  if (is_primary_) {
+    RegisterVSync();
+    vsync_registered_ = true;
+  }
+
   RegisterPanelDead(true);
   RegisterIdleNotify(true);
   RegisterIdlePowerCollapse(true);
@@ -220,15 +224,17 @@
 
 DisplayError HWEventsDRM::SetEventState(HWEvent event, bool enable, void *arg) {
   switch (event) {
-    case HWEvent::VSYNC:
+    case HWEvent::VSYNC: {
+      std::lock_guard<std::mutex> lock(vsync_mutex_);
       if (!is_primary_) {
         break;
       }
       vsync_enabled_ = enable;
-      if (enable) {
-        WakeUpEventThread();
+      if (vsync_enabled_ && !vsync_registered_) {
+        RegisterVSync();
+        vsync_registered_ = true;
       }
-      break;
+    } break;
     default:
       DLOGE("Event not supported");
       return kErrorNotSupported;
@@ -295,11 +301,6 @@
   setpriority(PRIO_PROCESS, 0, kThreadPriorityUrgent);
 
   while (!exit_threads_) {
-    if (vsync_enabled_ && RegisterVSync() != kErrorNone) {
-      pthread_exit(0);
-      return nullptr;
-    }
-
     int error = Sys::poll_(poll_fds_.data(), UINT32(poll_fds_.size()), -1);
     if (error <= 0) {
       DLOGW("poll failed. error = %s", strerror(errno));
@@ -469,6 +470,13 @@
   if (error != 0) {
     DLOGE("drmHandleEvent failed: %i", error);
   }
+
+  std::lock_guard<std::mutex> lock(vsync_mutex_);
+  vsync_registered_ = false;
+  if (vsync_enabled_) {
+    RegisterVSync();
+    vsync_registered_ = true;
+  }
 }
 
 void HWEventsDRM::HandlePanelDead(char *data) {
diff --git a/sdm/libs/core/drm/hw_events_drm.h b/sdm/libs/core/drm/hw_events_drm.h
index c54ac6f..fafe606 100644
--- a/sdm/libs/core/drm/hw_events_drm.h
+++ b/sdm/libs/core/drm/hw_events_drm.h
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2017-2018, 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
@@ -33,6 +33,7 @@
 #include <drm_interface.h>
 #include <sys/poll.h>
 #include <map>
+#include <mutex>
 #include <string>
 #include <utility>
 #include <vector>
@@ -94,6 +95,8 @@
   bool exit_threads_ = false;
   uint32_t vsync_index_ = 0;
   bool vsync_enabled_ = false;
+  bool vsync_registered_ = false;
+  std::mutex vsync_mutex_;  // To protect vsync_enabled_ and vsync_registered_
   uint32_t idle_notify_index_ = 0;
   sde_drm::DRMDisplayToken token_ = {};
   bool is_primary_ = false;
diff --git a/sdm/libs/core/drm/hw_virtual_drm.cpp b/sdm/libs/core/drm/hw_virtual_drm.cpp
index 28d81bb..6f7b12b 100644
--- a/sdm/libs/core/drm/hw_virtual_drm.cpp
+++ b/sdm/libs/core/drm/hw_virtual_drm.cpp
@@ -137,7 +137,7 @@
   LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
   DisplayError err = kErrorNone;
 
-  registry_.RegisterCurrent(hw_layers);
+  registry_.Register(hw_layers);
   registry_.MapBufferToFbId(output_buffer);
   uint32_t fb_id = registry_.GetFbId(output_buffer->planes[0].fd);
 
@@ -149,7 +149,9 @@
   if (err != kErrorNone) {
     DLOGE("Atomic commit failed for crtc_id %d conn_id %d", token_.crtc_id, token_.conn_id);
   }
-  registry_.UnregisterNext();
+
+  registry_.Next();
+  registry_.Unregister();
 
   return(err);
 }
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index 51384f9..0bcffc6 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -195,7 +195,9 @@
   if (!buffer) {
     if (client_requested_ == HWC2::Composition::Device ||
         client_requested_ == HWC2::Composition::Cursor) {
-      DLOGE("Invalid buffer handle: %p on layer: %d", buffer, id_);
+      DLOGE("Invalid buffer handle: %p on layer: %d client requested comp type %d", buffer, id_,
+            client_requested_);
+      ::close(acquire_fence);
       return HWC2::Error::BadParameter;
     } else {
       return HWC2::Error::None;
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 2a84c0d..fdb8358 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -30,7 +30,6 @@
 #include <display_config.h>
 #include <utils/debug.h>
 #include <sync/sync.h>
-#include <profiler.h>
 #include <qd_utils.h>
 #include <utils/utils.h>
 #include <algorithm>
@@ -544,9 +543,6 @@
     // TODO(user): Handle virtual display/HDMI concurrency
     if (hwc_session->hwc_display_[display]) {
       status = hwc_session->hwc_display_[display]->Present(out_retire_fence);
-      // This is only indicative of how many times SurfaceFlinger posts
-      // frames to the display.
-      CALC_FPS();
     }
   }
 
diff --git a/sdm/libs/hwc2/hwc_session_services.cpp b/sdm/libs/hwc2/hwc_session_services.cpp
index 4cef884..6984711 100644
--- a/sdm/libs/hwc2/hwc_session_services.cpp
+++ b/sdm/libs/hwc2/hwc_session_services.cpp
@@ -30,7 +30,6 @@
 #include <core/buffer_allocator.h>
 #include <utils/debug.h>
 #include <sync/sync.h>
-#include <profiler.h>
 
 #include "hwc_buffer_sync_handler.h"
 #include "hwc_session.h"
@@ -42,8 +41,8 @@
 using ::android::hardware::Void;
 
 void HWCSession::StartServices() {
-  status_t status = IDisplayConfig::registerAsService();
-  if (status != OK) {
+  android::status_t status = IDisplayConfig::registerAsService();
+  if (status != android::OK) {
     ALOGW("%s::%s: Could not register IDisplayConfig as service (%d).",
           __CLASS__, __FUNCTION__, status);
   } else {
