diff --git a/config/msmnile.mk b/config/msmnile.mk
index 2d08205..f39a016 100644
--- a/config/msmnile.mk
+++ b/config/msmnile.mk
@@ -32,15 +32,15 @@
 
 PRODUCT_PROPERTY_OVERRIDES += \
     persist.demo.hdmirotationlock=false \
-    ro.qualcomm.cabl=1 \
-    debug.mdpcomp.logs=0 \
-    debug.gralloc.gfx_ubwc_disable=0 \
     debug.sf.hw=0 \
     debug.egl.hw=0 \
     debug.sf.latch_unsignaled=1 \
+    debug.mdpcomp.logs=0 \
     debug.sf.enable_hwc_vds=1 \
-    sdm.debug.disable_scalar=0 \
-    sdm.debug.disable_inline_rotator=1 \
-    sdm.debug.enable_null_display=0 \
-    sdm.debug.disable_excl_rect=1 \
-    sdm.composition_simulation=0
+    ro.vendor.display.cabl=2 \
+    vendor.gralloc.disable_ubwc=0 \
+    vendor.display.disable_scaler=0 \
+    vendor.display.disable_inline_rotator=1 \
+    vendor.display.enable_null_display=0 \
+    vendor.display.disable_excl_rect=1 \
+    vendor.display.comp_mask=0
diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
index e8e1896..2e1245c 100644
--- a/gralloc/gr_adreno_info.cpp
+++ b/gralloc/gr_adreno_info.cpp
@@ -75,7 +75,7 @@
   // 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;
diff --git a/gralloc/gralloc_priv.h b/gralloc/gralloc_priv.h
index 7f084a0..b69ce2d 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/include/Android.mk b/include/Android.mk
index 1f128c1..a0bef56 100644
--- a/include/Android.mk
+++ b/include/Android.mk
@@ -9,6 +9,7 @@
 LOCAL_COPY_HEADERS_TO         := $(common_header_export_path)
 LOCAL_COPY_HEADERS            := color_metadata.h \
                                  display_color_processing.h \
+                                 display_properties.h \
                                  ../libqdutils/qd_utils.h \
                                  ../libqdutils/qdMetaData.h \
                                  ../libqdutils/display_config.h \
diff --git a/include/display_properties.h b/include/display_properties.h
new file mode 100644
index 0000000..43a28ae
--- /dev/null
+++ b/include/display_properties.h
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 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:
+*     * 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 __DISPLAY_PROPERTIES_H__
+#define __DISPLAY_PROPERTIES_H__
+
+#define DISP_PROP_PREFIX                     "vendor.display."
+#define GRALLOC_PROP_PREFIX                  "vendor.gralloc."
+#define RO_DISP_PROP_PREFIX                  "ro.vendor.display."
+#define PERSIST_DISP_PROP_PREFIX             "persist.vendor.display."
+
+#define DISPLAY_PROP(prop_name)              DISP_PROP_PREFIX prop_name
+#define GRALLOC_PROP(prop_name)              GRALLOC_PROP_PREFIX prop_name
+#define RO_DISPLAY_PROP(prop_name)           RO_DISP_PROP_PREFIX prop_name
+#define PERSIST_DISPLAY_PROP(prop_name)      PERSIST_DISP_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 ENABLE_PARTIAL_UPDATE_PROP           DISPLAY_PROP("enable_partial_update")
+#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")
+#define DISABLE_HW_RECOVERY_PROP             DISPLAY_PROP("disable_hw_recovery")
+#define DISABLE_SRC_TONEMAP_PROP             DISPLAY_PROP("disable_src_tonemap")
+#define ENABLE_NULL_DISPLAY_PROP             DISPLAY_PROP("enable_null_display")
+#define DISABLE_EXCL_RECT_PROP               DISPLAY_PROP("disable_excl_rect")
+#define ENABLE_PIPE_PRIORITY_PROP            DISPLAY_PROP("enable_pipe_priority")
+
+#define DISABLE_HDR_LUT_GEN                  DISPLAY_PROP("disable_hdr_lut_gen")
+#define ENABLE_DEFAULT_COLOR_MODE            DISPLAY_PROP("enable_default_color_mode")
+#define DISABLE_HDR                          DISPLAY_PROP("disable_hdr")
+
+#define HDR_CONFIG_PROP                      RO_DISPLAY_PROP("hdr.config")
+#define QDCM_PCC_TRANS_PROP                  DISPLAY_PROP("qdcm.pcc_for_trans")
+#define QDCM_DIAGONAL_MATRIXMODE_PROP        DISPLAY_PROP("qdcm.diagonal_matrix_mode")
+#define QDCM_DISABLE_TIMEOUT_PROP            PERSIST_DISPLAY_PROP("qdcm.disable_timeout")
+
+#endif  // __DISPLAY_PROPERTIES_H__
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 5b9dfa6..b4334b7 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
@@ -34,6 +34,7 @@
 #include <debug_handler.h>
 #include <core/sdm_types.h>
 #include <core/display_interface.h>
+#include <display_properties.h>
 
 namespace sdm {
 
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 7a0f3cd..56bb750 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -139,7 +139,7 @@
     DisplayBase::SetMaxMixerStages(max_mixer_stages);
   }
 
-  Debug::GetProperty("sdm.disable_hdr_lut_gen", &disable_hdr_lut_gen_);
+  Debug::GetProperty(DISABLE_HDR_LUT_GEN, &disable_hdr_lut_gen_);
   // TODO(user): Temporary changes, to be removed when DRM driver supports
   // Partial update with Destination scaler enabled.
   SetPUonDestScaler();
diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp
index c72bc1e..3165f73 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -55,7 +55,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_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index d2aa668..7703bda 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -233,7 +233,7 @@
   RegisterIdlePowerCollapse(true);
 
   int value = 0;
-  if (Debug::Get()->GetProperty("sdm.debug.disable_hw_recovery", &value) == kErrorNone) {
+  if (Debug::Get()->GetProperty(DISABLE_HW_RECOVERY_PROP, &value) == kErrorNone) {
     disable_hw_recovery_ = (value == 1);
   }
   DLOGI("disable_hw_recovery set to %d", disable_hw_recovery_);
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index 9cefc8b..2ba7e92 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -208,7 +208,7 @@
   // through property
   int value = 0;
   bool disable_dest_scalar = false;
-  if (Debug::GetProperty("sdm.debug.disable_dest_scalar", &value) == kErrorNone) {
+  if (Debug::GetProperty(DISABLE_DESTINATION_SCALER_PROP, &value) == kErrorNone) {
     disable_dest_scalar = (value == 1);
   }
   DynLib extension_lib;
@@ -333,7 +333,7 @@
   uint32_t dma_pipe_count = 0;
   uint32_t virtual_pipe_count = 0;
   int disable_src_tonemap = 0;
-  Debug::Get()->GetProperty("sdm.disable_src_tonemap", &disable_src_tonemap);
+  Debug::Get()->GetProperty(DISABLE_SRC_TONEMAP_PROP, &disable_src_tonemap);
 
   for (auto &pipe_obj : planes) {
     if (max_vig_pipes && max_dma_pipes) {
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 39416c5..82f0e47 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 <display_properties.h>
 
 #include "hwc_debugger.h"
 
@@ -211,7 +212,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 186bb28..77a93f8 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -351,7 +351,7 @@
 int HWCDisplay::Init() {
   DisplayError error = kErrorNone;
 
-  HWCDebugHandler::Get()->GetProperty("sdm.debug.enable_null_display", &null_display_mode_);
+  HWCDebugHandler::Get()->GetProperty(ENABLE_NULL_DISPLAY_PROP, &null_display_mode_);
 
   if (null_display_mode_) {
     DisplayNull *disp_null = new DisplayNull();
@@ -369,7 +369,7 @@
   }
 
   validated_ = false;
-  HWCDebugHandler::Get()->GetProperty("sys.hwc_disable_hdr", &disable_hdr_handling_);
+  HWCDebugHandler::Get()->GetProperty(DISABLE_HDR, &disable_hdr_handling_);
   if (disable_hdr_handling_) {
     DLOGI("HDR Handling disabled");
   }
@@ -383,7 +383,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
   }
@@ -1535,7 +1535,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 8e253de..998bedb 100644
--- a/sdm/libs/hwc2/hwc_display_external.cpp
+++ b/sdm/libs/hwc2/hwc_display_external.cpp
@@ -77,7 +77,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);
       }
@@ -267,8 +267,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 8b98958..c68081a 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;
   }
@@ -113,7 +113,7 @@
   }
   color_mode_ = new HWCColorMode(display_intf_);
   color_mode_->Init();
-  HWCDebugHandler::Get()->GetProperty("vendor.display.enable_default_color_mode",
+  HWCDebugHandler::Get()->GetProperty(ENABLE_DEFAULT_COLOR_MODE,
                                       &default_mode_status_);
 
   return status;
@@ -362,7 +362,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 ca04d40..eab73d4 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -161,7 +161,7 @@
 
   StartServices();
 
-  HWCDebugHandler::Get()->GetProperty("sdm.debug.enable_null_display", &null_display_mode_);
+  HWCDebugHandler::Get()->GetProperty(ENABLE_NULL_DISPLAY_PROP, &null_display_mode_);
   DisplayError error = kErrorNone;
 
   HWDisplayInterfaceInfo hw_disp_info = {};
@@ -300,7 +300,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/hwc2/hwc_tonemapper.cpp b/sdm/libs/hwc2/hwc_tonemapper.cpp
index 2ae1afc..22896f9 100644
--- a/sdm/libs/hwc2/hwc_tonemapper.cpp
+++ b/sdm/libs/hwc2/hwc_tonemapper.cpp
@@ -333,7 +333,7 @@
 
 DisplayError HWCToneMapper::AcquireToneMapSession(Layer *layer, uint32_t *session_index,
                                                   PrimariesTransfer blend_cs) {
-  // When the property sdm.disable_hdr_lut_gen is set, the lutEntries and gridEntries in
+  // When the property vendor.display.disable_hdr_lut_gen is set, the lutEntries and gridEntries in
   // the Lut3d will be NULL, clients needs to allocate the memory and set correct 3D Lut
   // for Tonemapping.
   if (!layer->lut_3d.lutEntries || !layer->lut_3d.dim) {
diff --git a/sdm/libs/utils/debug.cpp b/sdm/libs/utils/debug.cpp
index 62a6cad..05d5c7b 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
@@ -37,14 +37,14 @@
 
 int Debug::GetSimulationFlag() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.composition_simulation", &value);
+  DebugHandler::Get()->GetProperty(COMPOSITION_MASK_PROP, &value);
 
   return value;
 }
 
 bool Debug::GetExternalResolution(char *value) {
   uint32_t retval = 0;
-  DebugHandler::Get()->GetProperty("hw.hdmi.resolution", value);
+  DebugHandler::Get()->GetProperty(HDMI_CONFIG_INDEX_PROP, value);
   if (value[0]) {
     retval = 1;
   }
@@ -56,8 +56,8 @@
   int active_val = IDLE_TIMEOUT_ACTIVE_MS;
   int inactive_val = IDLE_TIMEOUT_INACTIVE_MS;
 
-  DebugHandler::Get()->GetProperty("sdm.idle_time", &active_val);
-  DebugHandler::Get()->GetProperty("sdm.idle_time.inactive", &inactive_val);
+  DebugHandler::Get()->GetProperty(IDLE_TIME_PROP, &active_val);
+  DebugHandler::Get()->GetProperty(IDLE_TIME_INACTIVE_PROP, &inactive_val);
 
   *active_ms = UINT32(active_val);
   *inactive_ms = UINT32(inactive_val);
@@ -65,21 +65,21 @@
 
 int Debug::GetBootAnimLayerCount() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.boot_anim_layer_count", &value);
+  DebugHandler::Get()->GetProperty(BOOT_ANIMATION_LAYER_COUNT_PROP, &value);
 
   return value;
 }
 
 bool Debug::IsRotatorDownScaleDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.rotator_downscale", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_DOWNSCALE_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsDecimationDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.disable_decimation", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_DECIMATION_PROP, &value);
 
   return (value == 1);
 }
@@ -88,13 +88,13 @@
   int value = -1;
   switch (display_type) {
   case kPrimary:
-    DebugHandler::Get()->GetProperty("sdm.primary.mixer_stages", &value);
+    DebugHandler::Get()->GetProperty(PRIMARY_MIXER_STAGES_PROP, &value);
     break;
   case kHDMI:
-    DebugHandler::Get()->GetProperty("sdm.external.mixer_stages", &value);
+    DebugHandler::Get()->GetProperty(EXTERNAL_MIXER_STAGES_PROP, &value);
     break;
   case kVirtual:
-    DebugHandler::Get()->GetProperty("sdm.virtual.mixer_stages", &value);
+    DebugHandler::Get()->GetProperty(VIRTUAL_MIXER_STAGES_PROP, &value);
     break;
   default:
     break;
@@ -105,35 +105,35 @@
 
 int Debug::GetMaxUpscale() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.max_upscale", &value);
+  DebugHandler::Get()->GetProperty(MAX_UPSCALE_PROP, &value);
 
   return value;
 }
 
 bool Debug::IsVideoModeEnabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.video_mode_panel", &value);
+  DebugHandler::Get()->GetProperty(VIDEO_MODE_PANEL_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsRotatorUbwcDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.rotator_disable_ubwc", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_UBWC_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsRotatorSplitDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.disable_rotator_split", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_SPLIT_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsScalarDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.disable_scalar", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_SCALER_PROP, &value);
 
   return (value == 1);
 }
@@ -142,10 +142,10 @@
   int ubwc_disabled = 0;
   int ubwc_framebuffer = 0;
 
-  DebugHandler::Get()->GetProperty("debug.gralloc.gfx_ubwc_disable", &ubwc_disabled);
+  DebugHandler::Get()->GetProperty(DISABLE_UBWC_PROP, &ubwc_disabled);
 
   if (!ubwc_disabled) {
-    DebugHandler::Get()->GetProperty("debug.gralloc.enable_fb_ubwc", &ubwc_framebuffer);
+    DebugHandler::Get()->GetProperty(ENABLE_FB_UBWC_PROP, &ubwc_framebuffer);
   }
 
   return (ubwc_framebuffer == 1);
@@ -153,28 +153,28 @@
 
 bool Debug::IsAVRDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.disable_avr", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_AVR_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsExtAnimDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sys.disable_ext_animation", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_EXTERNAL_ANIMATION_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsPartialSplitDisabled() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.disable_partial_split", &value);
+  DebugHandler::Get()->GetProperty(DISABLE_PARTIAL_SPLIT_PROP, &value);
 
   return (value == 1);
 }
 
 bool Debug::IsSrcSplitPreferred() {
   int value = 0;
-  DebugHandler::Get()->GetProperty("sdm.debug.prefersplit", &value);
+  DebugHandler::Get()->GetProperty(PREFER_SOURCE_SPLIT_PROP, &value);
 
   return (value == 1);
 }
@@ -182,7 +182,7 @@
 DisplayError Debug::GetMixerResolution(uint32_t *width, uint32_t *height) {
   char value[64] = {};
 
-  int error = DebugHandler::Get()->GetProperty("sdm.mixer_resolution", value);
+  int error = DebugHandler::Get()->GetProperty(MIXER_RESOLUTION_PROP, value);
   if (error != 0) {
     return kErrorUndefined;
   }
@@ -198,7 +198,7 @@
 DisplayError Debug::GetReducedConfig(uint32_t *num_vig_pipes, uint32_t *num_dma_pipes) {
   char value[64] = {};
 
-  int error = DebugHandler::Get()->GetProperty("sdm.debug.reduced_config", value);
+  int error = DebugHandler::Get()->GetProperty(SIMULATED_CONFIG_PROP, value);
   if (error != 0) {
     return kErrorUndefined;
   }
@@ -213,7 +213,7 @@
 
 int Debug::GetExtMaxlayers() {
   int max_external_layers = 0;
-  DebugHandler::Get()->GetProperty("sdm.max_external_layers", &max_external_layers);
+  DebugHandler::Get()->GetProperty(MAX_EXTERNAL_LAYERS_PROP, &max_external_layers);
 
   return std::max(max_external_layers, 2);
 }
