diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index 01e96e0..ffc28ff 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -84,7 +84,7 @@
 };
 
 struct PPHWAttributes : HWResourceInfo, HWPanelInfo, DisplayConfigVariableInfo {
-  const char *panel_name;  // TODO:  Add into HWPanelInfo to retrieve panel_name from HW.
+  const char *panel_name;  // TODO(user):  Add into HWPanelInfo to retrieve panel_name from HW.
   PPFeatureVersion version;
 
   PPHWAttributes() : panel_name("generic_panel"), version() {}
@@ -365,9 +365,9 @@
   // ColorManager installs one TFeatureInfo<T> to take the output configs computed
   // from ColorManager, containing all physical features to be programmed and also compute
   // metadata/populate into T.
-  inline DisplayError AddFeature(uint32_t feature_id, PPFeatureInfo &feature) {
+  inline DisplayError AddFeature(uint32_t feature_id, PPFeatureInfo *feature) {
     if (feature_id < kMaxNumPPFeatures)
-      feature_[feature_id] = &feature;
+      feature_[feature_id] = feature;
 
     return kErrorNone;
   }
diff --git a/sdm/libs/core/color_manager.cpp b/sdm/libs/core/color_manager.cpp
index 1828d58..b146dd6 100644
--- a/sdm/libs/core/color_manager.cpp
+++ b/sdm/libs/core/color_manager.cpp
@@ -71,14 +71,15 @@
     ::dlclose(color_lib_);
 }
 
-ColorManagerProxy::ColorManagerProxy(DisplayType type, HWInterface *intf, HWDisplayAttributes &attr,
-                                     HWPanelInfo &info)
+ColorManagerProxy::ColorManagerProxy(DisplayType type, HWInterface *intf,
+                                     const HWDisplayAttributes &attr,
+                                     const HWPanelInfo &info)
     : device_type_(type), pp_hw_attributes_(), hw_intf_(intf), color_intf_(NULL), pp_features_() {}
 
 ColorManagerProxy *ColorManagerProxy::CreateColorManagerProxy(DisplayType type,
                                                               HWInterface *hw_intf,
-                                                              HWDisplayAttributes &attribute,
-                                                              HWPanelInfo &panel_info) {
+                                                              const HWDisplayAttributes &attribute,
+                                                              const HWPanelInfo &panel_info) {
   DisplayError error = kErrorNone;
   PPFeatureVersion versions;
 
@@ -149,7 +150,7 @@
 
   DisplayError ret = kErrorNone;
   if (pp_features_.IsDirty()) {
-    ret = hw_intf_->SetPPFeatures(pp_features_);
+    ret = hw_intf_->SetPPFeatures(&pp_features_);
   }
 
   return ret;
diff --git a/sdm/libs/core/color_manager.h b/sdm/libs/core/color_manager.h
index e365254..f9266fb 100644
--- a/sdm/libs/core/color_manager.h
+++ b/sdm/libs/core/color_manager.h
@@ -55,8 +55,8 @@
    * 4. Need get panel name for hw_panel_info_.
    */
   static ColorManagerProxy *CreateColorManagerProxy(DisplayType type, HWInterface *hw_intf,
-                                                    HWDisplayAttributes &attribute,
-                                                    HWPanelInfo &panel_info);
+                                                    const HWDisplayAttributes &attribute,
+                                                    const HWPanelInfo &panel_info);
 
   /* need reverse the effect of CreateColorManagerProxy. */
   ~ColorManagerProxy();
@@ -69,8 +69,8 @@
 
  protected:
   ColorManagerProxy() {}
-  ColorManagerProxy(DisplayType type, HWInterface *intf, HWDisplayAttributes &attr,
-                    HWPanelInfo &info);
+  ColorManagerProxy(DisplayType type, HWInterface *intf, const HWDisplayAttributes &attr,
+                    const HWPanelInfo &info);
 
  private:
   static void *color_lib_;
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 5d83843..8e91e3d 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -238,11 +238,11 @@
     }
   }
 
-   // check if feature list cache is dirty and pending.
-   // If dirty, need program to hardware blocks.
+  // check if feature list cache is dirty and pending.
+  // If dirty, need program to hardware blocks.
   if (color_mgr_)
     error = color_mgr_->Commit();
-  if (error != kErrorNone) { // won't affect this execution path.
+  if (error != kErrorNone) {  // won't affect this execution path.
     DLOGW("ColorManager::Commit(...) isn't working");
   }
 
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index 1c2ed17..b49f687 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -407,7 +407,7 @@
   return kErrorNotSupported;
 }
 
-DisplayError HWHDMI::SetPPFeatures(PPFeaturesConfig &feature_list) {
+DisplayError HWHDMI::SetPPFeatures(PPFeaturesConfig *feature_list) {
   return kErrorNotSupported;
 }
 
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
index eead013..c7d5c24 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -56,7 +56,7 @@
   virtual DisplayError Commit(HWLayers *hw_layers);
   virtual DisplayError Flush();
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig &feature_list);
+  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
 
  private:
   int GetHDMIModeCount();
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index f7bff59..f4381b5 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -519,13 +519,13 @@
 }
 
 // It was entered with PPFeaturesConfig::locker_ being hold.
-DisplayError HWPrimary::SetPPFeatures(PPFeaturesConfig &feature_list) {
+DisplayError HWPrimary::SetPPFeatures(PPFeaturesConfig *feature_list) {
   STRUCT_VAR(msmfb_mdp_pp, kernel_params);
   int ret = 0;
   PPFeatureInfo *feature = NULL;
 
   while (true) {
-    ret = feature_list.RetrieveNextFeature(&feature);
+    ret = feature_list->RetrieveNextFeature(&feature);
     if (ret)
         break;
 
@@ -533,21 +533,20 @@
       DLOGV_IF(kTagDriverConfig, "feature_id = %d", feature->feature_id_);
 
       if ((feature->feature_id_ < kMaxNumPPFeatures)) {
-
         HWColorManager::SetFeature[feature->feature_id_](*feature, &kernel_params);
         if (Sys::ioctl_(device_fd_, MSMFB_MDP_PP, &kernel_params) < 0) {
           IOCTL_LOGE(MSMFB_MDP_PP, device_type_);
 
-          feature_list.Reset();
+          feature_list->Reset();
           return kErrorHardware;
         }
       }
     }
-  } // while(true)
+  }  // while(true)
 
-   // Once all features were consumed, then destroy all feature instance from feature_list,
-   // Then mark it as non-dirty of PPFeaturesConfig cache.
-  feature_list.Reset();
+  // Once all features were consumed, then destroy all feature instance from feature_list,
+  // Then mark it as non-dirty of PPFeaturesConfig cache.
+  feature_list->Reset();
 
   return kErrorNone;
 }
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
index f4f1521..001c776 100644
--- a/sdm/libs/core/fb/hw_primary.h
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -58,7 +58,7 @@
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig &feature_list);
+  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
 
  private:
   // Panel modes for the MSMFB_LPM_ENABLE ioctl
diff --git a/sdm/libs/core/fb/hw_virtual.cpp b/sdm/libs/core/fb/hw_virtual.cpp
index a9cbb2b..8a355eb 100644
--- a/sdm/libs/core/fb/hw_virtual.cpp
+++ b/sdm/libs/core/fb/hw_virtual.cpp
@@ -139,7 +139,7 @@
   return kErrorNotSupported;
 }
 
-DisplayError HWVirtual::SetPPFeatures(PPFeaturesConfig &feature_list) {
+DisplayError HWVirtual::SetPPFeatures(PPFeaturesConfig *feature_list) {
   return kErrorNotSupported;
 }
 
diff --git a/sdm/libs/core/fb/hw_virtual.h b/sdm/libs/core/fb/hw_virtual.h
index 0d8afef..e7593e6 100644
--- a/sdm/libs/core/fb/hw_virtual.h
+++ b/sdm/libs/core/fb/hw_virtual.h
@@ -52,7 +52,7 @@
   virtual DisplayError Commit(HWLayers *hw_layers);
   virtual DisplayError Flush();
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig &feature_list);
+  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
index ac42f8e..7ecac49 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -81,7 +81,7 @@
   virtual DisplayError Commit(HWLayers *hw_layers) = 0;
   virtual DisplayError Flush() = 0;
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers) = 0;
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig &feature_list) = 0;
+  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list) = 0;
 
  protected:
   virtual ~HWInterface() { }
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index 701448b..e3c0012 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -71,10 +71,10 @@
 }
 
 void HWCColorManager::MarshallStructIntoParcel(const PPDisplayAPIPayload &data,
-                                               android::Parcel &out_parcel) {
-  out_parcel.writeInt32(data.size);
+                                               android::Parcel *out_parcel) {
+  out_parcel->writeInt32(data.size);
   if (data.payload)
-    out_parcel.write(data.payload, data.size);
+    out_parcel->write(data.payload, data.size);
 }
 
 HWCColorManager *HWCColorManager::CreateColorManager() {
diff --git a/sdm/libs/hwc/hwc_color_manager.h b/sdm/libs/hwc/hwc_color_manager.h
index 4c684b2..6c1b510 100644
--- a/sdm/libs/hwc/hwc_color_manager.h
+++ b/sdm/libs/hwc/hwc_color_manager.h
@@ -110,7 +110,7 @@
   static int CreatePayloadFromParcel(const android::Parcel &in, uint32_t *disp_id,
                                      PPDisplayAPIPayload *sink);
   static void MarshallStructIntoParcel(const PPDisplayAPIPayload &data,
-                                       android::Parcel &out_parcel);
+                                       android::Parcel *out_parcel);
 
   ~HWCColorManager();
   void DestroyColorManager();
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index c366f4c..6352a4a 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -1216,8 +1216,9 @@
   return kErrorNone;
 }
 
-int HWCDisplay::ColorSVCRequestRoute(PPDisplayAPIPayload &in_payload,
-                               PPDisplayAPIPayload *out_payload, PPPendingParams *pending_action) {
+int HWCDisplay::ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+                                     PPDisplayAPIPayload *out_payload,
+                                     PPPendingParams *pending_action) {
   int ret = 0;
 
   if (display_intf_)
diff --git a/sdm/libs/hwc/hwc_display.h b/sdm/libs/hwc/hwc_display.h
index 7f6bc7c..2930cab 100644
--- a/sdm/libs/hwc/hwc_display.h
+++ b/sdm/libs/hwc/hwc_display.h
@@ -57,7 +57,8 @@
   virtual int Perform(uint32_t operation, ...);
   virtual ~HWCDisplay() { }
 
-  int ColorSVCRequestRoute(PPDisplayAPIPayload &in_payload, PPDisplayAPIPayload *out_payload,
+  int ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+                           PPDisplayAPIPayload *out_payload,
                            PPPendingParams *pending_action);
 
  protected:
diff --git a/sdm/libs/hwc/hwc_display_primary.cpp b/sdm/libs/hwc/hwc_display_primary.cpp
index d6af70f..200affe 100644
--- a/sdm/libs/hwc/hwc_display_primary.cpp
+++ b/sdm/libs/hwc/hwc_display_primary.cpp
@@ -30,7 +30,6 @@
 #include <cutils/properties.h>
 #include <utils/constants.h>
 #include <stdarg.h>
-#include <cutils/properties.h>
 #include "hwc_display_primary.h"
 #include "hwc_debugger.h"
 
@@ -91,7 +90,7 @@
 
   // Applying default mode after bootanimation is finished
   property_get("init.svc.bootanim", value, "running");
-  if (!strncmp(value,"stopped",strlen("stopped"))) {
+  if (!strncmp(value, "stopped", strlen("stopped"))) {
     boot_animation_completed_ = true;
 
     // one-shot action check if bootanimation completed then apply default display mode.
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 885a732..c746936 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -745,7 +745,7 @@
 
   // for display API getter case, marshall returned params into out_parcel.
   out->writeInt32(ret);
-  HWCColorManager::MarshallStructIntoParcel(resp_payload, *out);
+  HWCColorManager::MarshallStructIntoParcel(resp_payload, out);
   req_payload.DestroyPayload();
   resp_payload.DestroyPayload();
 
