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 978c3bc..688ff1b 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
   }
@@ -1675,7 +1675,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;
diff --git a/sdm/libs/hwc2/hwc_display_external.cpp b/sdm/libs/hwc2/hwc_display_external.cpp
index 8e00cfd..6b84bc7 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);
       }
@@ -281,8 +281,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 531f209..e878cbf 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;
   }
@@ -374,7 +374,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_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index aed9334..a752de2 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -288,7 +288,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);
 }
