diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
index ca77b3b..6288a2a 100644
--- a/gralloc/gr_adreno_info.cpp
+++ b/gralloc/gr_adreno_info.cpp
@@ -75,13 +75,13 @@
   // Check if the overriding property debug.gralloc.gfx_ubwc_disable
   // that disables UBWC allocations for the graphics stack is set
   char property[PROPERTY_VALUE_MAX];
-  property_get("debug.gralloc.gfx_ubwc_disable", property, "0");
+  property_get(DISABLE_UBWC_PROP, property, "0");
   if (!(strncmp(property, "1", PROPERTY_VALUE_MAX)) ||
       !(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
     gfx_ubwc_disable_ = true;
   }
 
-  if ((property_get("debug.gralloc.map_fb_memory", property, NULL) > 0) &&
+  if ((property_get(MAP_FB_MEMORY_PROP, property, NULL) > 0) &&
       (!strncmp(property, "1", PROPERTY_VALUE_MAX) ||
        (!strncasecmp(property, "true", PROPERTY_VALUE_MAX)))) {
     map_fb_ = true;
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index 70fb483..91d9011 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -42,7 +42,7 @@
   char property[PROPERTY_VALUE_MAX];
 
   // Map framebuffer memory
-  if ((property_get("debug.gralloc.map_fb_memory", property, NULL) > 0) &&
+  if ((property_get(MAP_FB_MEMORY_PROP, property, NULL) > 0) &&
       (!strncmp(property, "1", PROPERTY_VALUE_MAX) ||
        (!strncasecmp(property, "true", PROPERTY_VALUE_MAX)))) {
     map_fb_mem_ = true;
diff --git a/gralloc/gralloc_priv.h b/gralloc/gralloc_priv.h
index c6e8ca6..687029e 100644
--- a/gralloc/gralloc_priv.h
+++ b/gralloc/gralloc_priv.h
@@ -24,6 +24,13 @@
 #include <unistd.h>
 #include "gr_priv_handle.h"
 
+#define GRALLOC_PROP_PREFIX  "vendor.gralloc."
+#define GRALLOC_PROP(prop_name) GRALLOC_PROP_PREFIX prop_name
+
+#define DISABLE_UBWC_PROP                    GRALLOC_PROP("disable_ubwc")
+#define ENABLE_FB_UBWC_PROP                  GRALLOC_PROP("enable_fb_ubwc")
+#define MAP_FB_MEMORY_PROP                   GRALLOC_PROP("map_fb_memory")
+
 #define ROUND_UP_PAGESIZE(x) roundUpToPageSize(x)
 inline int roundUpToPageSize(int x) {
   return (x + (getpagesize() - 1)) & ~(getpagesize() - 1);
diff --git a/libqdutils/qd_utils.cpp b/libqdutils/qd_utils.cpp
index 25555bf..e1afd7c 100644
--- a/libqdutils/qd_utils.cpp
+++ b/libqdutils/qd_utils.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -94,7 +94,7 @@
     case HAS_UBWC:
     case HAS_WB_UBWC:  // WFD stack still uses this
         *value = 1;
-        property_get("debug.gralloc.gfx_ubwc_disable", property, "0");
+        property_get(DISABLE_UBWC_PROP, property, "0");
         if(!(strncmp(property, "1", PROPERTY_VALUE_MAX)) ||
                 !(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
             *value = 0;
diff --git a/sdm/include/utils/debug.h b/sdm/include/utils/debug.h
index d5974d9..a1e765a 100644
--- a/sdm/include/utils/debug.h
+++ b/sdm/include/utils/debug.h
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 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
@@ -54,6 +54,56 @@
 #define DTRACE_END() Debug::Get()->EndTrace()
 #define DTRACE_SCOPED() ScopeTracer <Debug> scope_tracer(__CLASS__, __FUNCTION__)
 
+#define DISP_PROP_PREFIX        "vendor.display."
+#define GRALLOC_PROP_PREFIX     "vendor.gralloc."
+#define DISPLAY_PROP(prop_name) DISP_PROP_PREFIX prop_name
+#define GRALLOC_PROP(prop_name) GRALLOC_PROP_PREFIX prop_name
+
+#define COMPOSITION_MASK_PROP                DISPLAY_PROP("comp_mask")
+#define HDMI_CONFIG_INDEX_PROP               DISPLAY_PROP("hdmi_cfg_idx")
+#define IDLE_TIME_PROP                       DISPLAY_PROP("idle_time")
+#define IDLE_TIME_INACTIVE_PROP              DISPLAY_PROP("idle_time_inactive")
+#define BOOT_ANIMATION_LAYER_COUNT_PROP      DISPLAY_PROP("boot_anim_layer_count")
+#define DISABLE_ROTATOR_DOWNSCALE_PROP       DISPLAY_PROP("disable_rotator_downscale")
+#define DISABLE_DECIMATION_PROP              DISPLAY_PROP("disable_decimation")
+#define PRIMARY_MIXER_STAGES_PROP            DISPLAY_PROP("primary_mixer_stages")
+#define EXTERNAL_MIXER_STAGES_PROP           DISPLAY_PROP("external_mixer_stages")
+#define VIRTUAL_MIXER_STAGES_PROP            DISPLAY_PROP("virtual_mixer_stages")
+#define MAX_UPSCALE_PROP                     DISPLAY_PROP("max_upscale")
+#define VIDEO_MODE_PANEL_PROP                DISPLAY_PROP("video_mode_panel")
+#define DISABLE_ROTATOR_UBWC_PROP            DISPLAY_PROP("disable_rotator_ubwc")
+#define DISABLE_ROTATOR_SPLIT_PROP           DISPLAY_PROP("disable_rotator_split")
+#define DISABLE_SCALER_PROP                  DISPLAY_PROP("disable_scaler")
+#define DISABLE_AVR_PROP                     DISPLAY_PROP("disable_avr")
+#define DISABLE_EXTERNAL_ANIMATION_PROP      DISPLAY_PROP("disable_ext_anim")
+#define DISABLE_PARTIAL_SPLIT_PROP           DISPLAY_PROP("disable_partial_split")
+#define PREFER_SOURCE_SPLIT_PROP             DISPLAY_PROP("prefer_source_split")
+#define MIXER_RESOLUTION_PROP                DISPLAY_PROP("mixer_resolution")
+#define SIMULATED_CONFIG_PROP                DISPLAY_PROP("simulated_config")
+#define MAX_EXTERNAL_LAYERS_PROP             DISPLAY_PROP("max_external_layers")
+#define PERF_HINT_WINDOW_PROP                DISPLAY_PROP("perf_hint_window")
+#define ENABLE_EXTERNAL_DOWNSCALE_PROP       DISPLAY_PROP("enable_external_downscale")
+#define EXTERNAL_ACTION_SAFE_WIDTH_PROP      DISPLAY_PROP("external_action_safe_width")
+#define EXTERNAL_ACTION_SAFE_HEIGHT_PROP     DISPLAY_PROP("external_action_safe_height")
+#define FB_WIDTH_PROP                        DISPLAY_PROP("fb_width")
+#define FB_HEIGHT_PROP                       DISPLAY_PROP("fb_height")
+#define DISABLE_METADATA_DYNAMIC_FPS_PROP    DISPLAY_PROP("disable_metadata_dynamic_fps")
+#define DISABLE_BLIT_COMPOSITION_PROP        DISPLAY_PROP("disable_blit_comp")
+#define DISABLE_SKIP_VALIDATE_PROP           DISPLAY_PROP("disable_skip_validate")
+#define HDMI_S3D_MODE_PROP                   DISPLAY_PROP("hdmi_s3d_mode")
+#define DISABLE_DESTINATION_SCALER_PROP      DISPLAY_PROP("disable_dest_scaler")
+#define DISABLE_UBWC_PROP                    GRALLOC_PROP("disable_ubwc")
+#define ENABLE_FB_UBWC_PROP                  GRALLOC_PROP("enable_fb_ubwc")
+#define MAP_FB_MEMORY_PROP                   GRALLOC_PROP("map_fb_memory")
+
+#define MAX_BLIT_FACTOR_PROP                 DISPLAY_PROP("max_blit_factor")
+#define DISABLE_SECURE_INLINE_ROTATOR_PROP   DISPLAY_PROP("disable_secure_inline_rotator")
+#define DISABLE_MULTIRECT_PROP               DISPLAY_PROP("disable_multirect")
+#define DISABLE_UBWC_FF_VOTING_PROP          DISPLAY_PROP("disable_ubwc_ff_voting")
+#define DISABLE_INLINE_ROTATOR_PROP          DISPLAY_PROP("disable_inline_rotator")
+#define DISABLE_FB_CROPPING_PROP             DISPLAY_PROP("disable_fb_cropping")
+#define PRIORITIZE_CACHE_COMPOSITION_PROP    DISPLAY_PROP("prioritize_cache_comp")
+
 namespace sdm {
 
 class Debug {
diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp
index 2076fe5..ed9a739 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 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:
@@ -54,7 +54,7 @@
 
   uint32_t active_mode_index;
   char value[64] = "0";
-  Debug::GetProperty("sdm.hdmi.s3d_mode", value);
+  Debug::GetProperty(HDMI_S3D_MODE_PROP, value);
   HWS3DMode mode = (HWS3DMode)atoi(value);
   if (mode > kS3DModeNone && mode < kS3DModeMax) {
     active_mode_index = GetBestConfig(mode);
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index 5c69ed7..b1b07b5 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_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
@@ -217,7 +217,7 @@
   // through property
   int value = 0;
   bool disable_dest_scalar = false;
-  if (Debug::Get()->GetProperty("sdm.debug.disable_dest_scalar", &value) == kErrorNone) {
+  if (Debug::Get()->GetProperty(DISABLE_DESTINATION_SCALER_PROP, &value) == kErrorNone) {
     disable_dest_scalar = (value == 1);
   }
   DynLib extension_lib;
diff --git a/sdm/libs/hwc2/cpuhint.cpp b/sdm/libs/hwc2/cpuhint.cpp
index 551fa24..ca88ead 100644
--- a/sdm/libs/hwc2/cpuhint.cpp
+++ b/sdm/libs/hwc2/cpuhint.cpp
@@ -46,7 +46,7 @@
   }
 
   int pre_enable_window = -1;
-  debug_handler->GetProperty("sdm.perf_hint_window", &pre_enable_window);
+  debug_handler->GetProperty(PERF_HINT_WINDOW_PROP, &pre_enable_window);
   if (pre_enable_window <= 0) {
     DLOGI("Invalid CPU Hint Pre-enable Window %d", pre_enable_window);
     return kErrorNotSupported;
diff --git a/sdm/libs/hwc2/hwc_debugger.cpp b/sdm/libs/hwc2/hwc_debugger.cpp
index 8b51799..94965d8 100644
--- a/sdm/libs/hwc2/hwc_debugger.cpp
+++ b/sdm/libs/hwc2/hwc_debugger.cpp
@@ -29,6 +29,7 @@
 
 #include <utils/constants.h>
 #include <cutils/properties.h>
+#include <utils/debug.h>
 
 #include "hwc_debugger.h"
 
@@ -197,7 +198,7 @@
 
 int  HWCDebugHandler::GetIdleTimeoutMs() {
   int value = IDLE_TIMEOUT_DEFAULT_MS;
-  debug_handler_.GetProperty("sdm.idle_time", &value);
+  debug_handler_.GetProperty(IDLE_TIME_PROP, &value);
 
   return value;
 }
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index a1d21d8..decbe5c 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -378,7 +378,7 @@
   client_target_ = new HWCLayer(id_, buffer_allocator_);
 
   int blit_enabled = 0;
-  HWCDebugHandler::Get()->GetProperty("persist.hwc.blit.comp", &blit_enabled);
+  HWCDebugHandler::Get()->GetProperty(DISABLE_BLIT_COMPOSITION_PROP, &blit_enabled);
   if (needs_blit_ && blit_enabled) {
     // TODO(user): Add blit engine when needed
   }
@@ -481,6 +481,8 @@
   uint32_t color_mode_count = 0;
   display_intf_->GetColorModeCount(&color_mode_count);
 
+  bool extended_range = false;
+
   // Add one layer for fb target
   // TODO(user): Add blit target layers
   for (auto hwc_layer : layer_set_) {
@@ -501,6 +503,11 @@
 #endif
     }
 
+    auto range = hwc_layer->GetLayerDataspace() & HAL_DATASPACE_RANGE_MASK;
+    if (range == HAL_DATASPACE_RANGE_EXTENDED) {
+      extended_range = true;
+    }
+
     working_primaries = WidestPrimaries(working_primaries,
                                         layer->input_buffer.color_metadata.colorPrimaries);
 
@@ -628,7 +635,7 @@
   // fall back frame composition to GPU when client target is 10bit
   // TODO(user): clarify the behaviour from Client(SF) and SDM Extn -
   // when handling 10bit FBT, as it would affect blending
-  if (Is10BitFormat(sdm_client_target->input_buffer.format)) {
+  if (Is10BitFormat(sdm_client_target->input_buffer.format) || extended_range) {
     // Must fall back to client composition
     MarkLayersForClientComposition();
   }
@@ -1700,7 +1707,7 @@
 
   // By default UBWC is enabled and below property is global enable/disable for all
   // buffers allocated through gralloc , including framebuffer targets.
-  HWCDebugHandler::Get()->GetProperty("debug.gralloc.gfx_ubwc_disable", &ubwc_disabled);
+  HWCDebugHandler::Get()->GetProperty(DISABLE_UBWC_PROP, &ubwc_disabled);
   if (!ubwc_disabled) {
     usage |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
     flags |= private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
@@ -1844,6 +1851,7 @@
     Layer *layer = hwc_layer->GetSDMLayer();
     layer->flags.skip = true;
   }
+  layer_stack_.flags.skip_present = true;
 }
 
 void HWCDisplay::ApplyScanAdjustment(hwc_rect_t *display_frame) {
diff --git a/sdm/libs/hwc2/hwc_display_external.cpp b/sdm/libs/hwc2/hwc_display_external.cpp
index 45ed891..21a9284 100644
--- a/sdm/libs/hwc2/hwc_display_external.cpp
+++ b/sdm/libs/hwc2/hwc_display_external.cpp
@@ -76,7 +76,7 @@
       external_height = primary_height;
     } else {
       int downscale_enabled = 0;
-      HWCDebugHandler::Get()->GetProperty("sdm.debug.downscale_external", &downscale_enabled);
+      HWCDebugHandler::Get()->GetProperty(ENABLE_EXTERNAL_DOWNSCALE_PROP, &downscale_enabled);
       if (downscale_enabled) {
         GetDownscaleResolution(primary_width, primary_height, &external_width, &external_height);
       }
@@ -289,8 +289,8 @@
 void HWCDisplayExternal::GetUnderScanConfig() {
   if (!display_intf_->IsUnderscanSupported()) {
     // Read user defined underscan width and height
-    HWCDebugHandler::Get()->GetProperty("sdm.external_action_safe_width", &underscan_width_);
-    HWCDebugHandler::Get()->GetProperty("sdm.external_action_safe_height", &underscan_height_);
+    HWCDebugHandler::Get()->GetProperty(EXTERNAL_ACTION_SAFE_WIDTH_PROP, &underscan_width_);
+    HWCDebugHandler::Get()->GetProperty(EXTERNAL_ACTION_SAFE_HEIGHT_PROP, &underscan_height_);
   }
 }
 
diff --git a/sdm/libs/hwc2/hwc_display_primary.cpp b/sdm/libs/hwc2/hwc_display_primary.cpp
index 6149831..b8a4c7c 100644
--- a/sdm/libs/hwc2/hwc_display_primary.cpp
+++ b/sdm/libs/hwc2/hwc_display_primary.cpp
@@ -62,8 +62,8 @@
 
   hwc_display_primary->GetMixerResolution(&primary_width, &primary_height);
   int width = 0, height = 0;
-  HWCDebugHandler::Get()->GetProperty("sdm.fb_size_width", &width);
-  HWCDebugHandler::Get()->GetProperty("sdm.fb_size_height", &height);
+  HWCDebugHandler::Get()->GetProperty(FB_WIDTH_PROP, &width);
+  HWCDebugHandler::Get()->GetProperty(FB_HEIGHT_PROP, &height);
   if (width > 0 && height > 0) {
     primary_width = UINT32(width);
     primary_height = UINT32(height);
@@ -102,7 +102,7 @@
 
   use_metadata_refresh_rate_ = true;
   int disable_metadata_dynfps = 0;
-  HWCDebugHandler::Get()->GetProperty("persist.metadata_dynfps.disable", &disable_metadata_dynfps);
+  HWCDebugHandler::Get()->GetProperty(DISABLE_METADATA_DYNAMIC_FPS_PROP, &disable_metadata_dynfps);
   if (disable_metadata_dynfps) {
     use_metadata_refresh_rate_ = false;
   }
@@ -375,7 +375,7 @@
 void HWCDisplayPrimary::SetMetaDataRefreshRateFlag(bool enable) {
   int disable_metadata_dynfps = 0;
 
-  HWCDebugHandler::Get()->GetProperty("persist.metadata_dynfps.disable", &disable_metadata_dynfps);
+  HWCDebugHandler::Get()->GetProperty(DISABLE_METADATA_DYNAMIC_FPS_PROP, &disable_metadata_dynfps);
   if (disable_metadata_dynfps) {
     return;
   }
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index 4320397..4250335 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -667,6 +667,9 @@
     case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
       format = kFormatYCbCr420P010Venus;
       break;
+    case HAL_PIXEL_FORMAT_RGBA_FP16:
+      format = kFormatInvalid;
+      break;
     default:
       DLOGW("Unsupported format type = %d", source);
       return kFormatInvalid;
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 96094f9..8881f6a 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -289,7 +289,7 @@
 
   int value = 0;
   bool disable_skip_validate = false;
-  if (Debug::Get()->GetProperty("sdm.debug.disable_skip_validate", &value) == kErrorNone) {
+  if (Debug::Get()->GetProperty(DISABLE_SKIP_VALIDATE_PROP, &value) == kErrorNone) {
     disable_skip_validate = (value == 1);
   }
   uint32_t count = 1 + (disable_skip_validate ? 0 : 1);
diff --git a/sdm/libs/utils/debug.cpp b/sdm/libs/utils/debug.cpp
index ee881ef..8bbc94b 100644
--- a/sdm/libs/utils/debug.cpp
+++ b/sdm/libs/utils/debug.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 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
@@ -42,14 +42,14 @@
 
 int Debug::GetSimulationFlag() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.composition_simulation", &value);
+  debug_.debug_handler_->GetProperty(COMPOSITION_MASK_PROP, &value);
 
   return value;
 }
 
 bool Debug::GetExternalResolution(char *value) {
   uint32_t retval = 0;
-  debug_.debug_handler_->GetProperty("hw.hdmi.resolution", value);
+  debug_.debug_handler_->GetProperty(HDMI_CONFIG_INDEX_PROP, value);
   if (value[0]) {
     retval = 1;
   }
@@ -61,8 +61,8 @@
   int active_val = IDLE_TIMEOUT_ACTIVE_MS;
   int inactive_val = IDLE_TIMEOUT_INACTIVE_MS;
 
-  debug_.debug_handler_->GetProperty("sdm.idle_time", &active_val);
-  debug_.debug_handler_->GetProperty("sdm.idle_time.inactive", &inactive_val);
+  debug_.debug_handler_->GetProperty(IDLE_TIME_PROP, &active_val);
+  debug_.debug_handler_->GetProperty(IDLE_TIME_INACTIVE_PROP, &inactive_val);
 
   *active_ms = UINT32(active_val);
   *inactive_ms = UINT32(inactive_val);
@@ -70,21 +70,21 @@
 
 int Debug::GetBootAnimLayerCount() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.boot_anim_layer_count", &value);
+  debug_.debug_handler_->GetProperty(BOOT_ANIMATION_LAYER_COUNT_PROP, &value);
 
   return value;
 }
 
 bool Debug::IsRotatorDownScaleDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.rotator_downscale", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_ROTATOR_DOWNSCALE_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsDecimationDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.disable_decimation", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_DECIMATION_PROP, &value);
 
   return (value == 1);
 }
@@ -93,13 +93,13 @@
   int value = -1;
   switch (display_type) {
   case kPrimary:
-    debug_.debug_handler_->GetProperty("sdm.primary.mixer_stages", &value);
+    debug_.debug_handler_->GetProperty(PRIMARY_MIXER_STAGES_PROP, &value);
     break;
   case kHDMI:
-    debug_.debug_handler_->GetProperty("sdm.external.mixer_stages", &value);
+    debug_.debug_handler_->GetProperty(EXTERNAL_MIXER_STAGES_PROP, &value);
     break;
   case kVirtual:
-    debug_.debug_handler_->GetProperty("sdm.virtual.mixer_stages", &value);
+    debug_.debug_handler_->GetProperty(VIRTUAL_MIXER_STAGES_PROP, &value);
     break;
   default:
     break;
@@ -110,35 +110,35 @@
 
 int Debug::GetMaxUpscale() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.max_upscale", &value);
+  debug_.debug_handler_->GetProperty(MAX_UPSCALE_PROP, &value);
 
   return value;
 }
 
 bool Debug::IsVideoModeEnabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.video_mode_panel", &value);
+  debug_.debug_handler_->GetProperty(VIDEO_MODE_PANEL_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsRotatorUbwcDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.rotator_disable_ubwc", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_ROTATOR_UBWC_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsRotatorSplitDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.disable_rotator_split", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_ROTATOR_SPLIT_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsScalarDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.disable_scalar", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_SCALER_PROP, &value);
 
   return (value == 1);
 }
@@ -147,10 +147,10 @@
   int ubwc_disabled = 0;
   int ubwc_framebuffer = 0;
 
-  debug_.debug_handler_->GetProperty("debug.gralloc.gfx_ubwc_disable", &ubwc_disabled);
+  debug_.debug_handler_->GetProperty(DISABLE_UBWC_PROP, &ubwc_disabled);
 
   if (!ubwc_disabled) {
-    debug_.debug_handler_->GetProperty("debug.gralloc.enable_fb_ubwc", &ubwc_framebuffer);
+    debug_.debug_handler_->GetProperty(ENABLE_FB_UBWC_PROP, &ubwc_framebuffer);
   }
 
   return (ubwc_framebuffer == 1);
@@ -158,28 +158,28 @@
 
 bool Debug::IsAVRDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.disable_avr", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_AVR_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsExtAnimDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sys.disable_ext_animation", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_EXTERNAL_ANIMATION_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsPartialSplitDisabled() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.disable_partial_split", &value);
+  debug_.debug_handler_->GetProperty(DISABLE_PARTIAL_SPLIT_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsSrcSplitPreferred() {
   int value = 0;
-  debug_.debug_handler_->GetProperty("sdm.debug.prefersplit", &value);
+  debug_.debug_handler_->GetProperty(PREFER_SOURCE_SPLIT_PROP, &value);
 
   return (value == 1);
 }
@@ -187,7 +187,7 @@
 DisplayError Debug::GetMixerResolution(uint32_t *width, uint32_t *height) {
   char value[64] = {};
 
-  DisplayError error = debug_.debug_handler_->GetProperty("sdm.mixer_resolution", value);
+  DisplayError error = debug_.debug_handler_->GetProperty(MIXER_RESOLUTION_PROP, value);
   if (error !=kErrorNone) {
     return error;
   }
@@ -203,7 +203,7 @@
 DisplayError Debug::GetReducedConfig(uint32_t *num_vig_pipes, uint32_t *num_dma_pipes) {
   char value[64] = {};
 
-  DisplayError error = debug_.debug_handler_->GetProperty("sdm.debug.reduced_config", value);
+  DisplayError error = debug_.debug_handler_->GetProperty(SIMULATED_CONFIG_PROP, value);
   if (error != kErrorNone) {
     return error;
   }
@@ -218,7 +218,7 @@
 
 int Debug::GetExtMaxlayers() {
   int max_external_layers = 0;
-  debug_.debug_handler_->GetProperty("sdm.max_external_layers", &max_external_layers);
+  debug_.debug_handler_->GetProperty(MAX_EXTERNAL_LAYERS_PROP, &max_external_layers);
 
   return std::max(max_external_layers, 2);
 }
