diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index d9eb78c..a424ebf 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -276,25 +276,25 @@
                          .c_str());
 
     chassisPowerState = server::Chassis::currentPowerState(value);
-    pOHTimer.setEnabled(chassisPowerState == PowerState::On);
+    pohTimer.setEnabled(chassisPowerState == PowerState::On);
     return chassisPowerState;
 }
 
-uint32_t Chassis::pOHCounter(uint32_t value)
+uint32_t Chassis::pohCounter(uint32_t value)
 {
-    if (value != pOHCounter())
+    if (value != pohCounter())
     {
-        ChassisInherit::pOHCounter(value);
+        ChassisInherit::pohCounter(value);
         serializePOH();
     }
-    return pOHCounter();
+    return pohCounter();
 }
 
-void Chassis::pOHCallback()
+void Chassis::pohCallback()
 {
     if (ChassisInherit::currentPowerState() == PowerState::On)
     {
-        pOHCounter(pOHCounter() + 1);
+        pohCounter(pohCounter() + 1);
     }
 }
 
@@ -304,11 +304,11 @@
     if (!deserializePOH(POH_COUNTER_PERSIST_PATH, counter))
     {
         // set to default value
-        pOHCounter(0);
+        pohCounter(0);
     }
     else
     {
-        pOHCounter(counter);
+        pohCounter(counter);
     }
 }
 
@@ -316,11 +316,11 @@
 {
     std::ofstream os(path.c_str(), std::ios::binary);
     cereal::JSONOutputArchive oarchive(os);
-    oarchive(pOHCounter());
+    oarchive(pohCounter());
     return path;
 }
 
-bool Chassis::deserializePOH(const fs::path& path, uint32_t& pOHCounter)
+bool Chassis::deserializePOH(const fs::path& path, uint32_t& pohCounter)
 {
     try
     {
@@ -328,7 +328,7 @@
         {
             std::ifstream is(path.c_str(), std::ios::in | std::ios::binary);
             cereal::JSONInputArchive iarchive(is);
-            iarchive(pOHCounter);
+            iarchive(pohCounter);
             return true;
         }
         return false;
diff --git a/chassis_state_manager.hpp b/chassis_state_manager.hpp
index 601e2a6..9b13af4 100644
--- a/chassis_state_manager.hpp
+++ b/chassis_state_manager.hpp
@@ -15,6 +15,10 @@
 #include <experimental/filesystem>
 #include <functional>
 
+#ifndef SDBUSPP_NEW_CAMELCASE
+#define pohCounter pOHCounter
+#endif
+
 namespace phosphor
 {
 namespace state
@@ -54,8 +58,8 @@
                 sdbusRule::interface("org.freedesktop.systemd1.Manager"),
             std::bind(std::mem_fn(&Chassis::sysStateChange), this,
                       std::placeholders::_1)),
-        pOHTimer(sdeventplus::Event::get_default(),
-                 std::bind(&Chassis::pOHCallback, this), std::chrono::hours{1},
+        pohTimer(sdeventplus::Event::get_default(),
+                 std::bind(&Chassis::pohCallback, this), std::chrono::hours{1},
                  std::chrono::minutes{1})
     {
         subscribeToSystemdSignals();
@@ -77,7 +81,7 @@
     PowerState currentPowerState(PowerState value) override;
 
     /** @brief Get value of POHCounter */
-    using ChassisInherit::pOHCounter;
+    using ChassisInherit::pohCounter;
 
     /** @brief Increment POHCounter if Chassis Power state is ON */
     void startPOHCounter();
@@ -133,10 +137,10 @@
     sdbusplus::bus::match_t systemdSignals;
 
     /** @brief Used to Set value of POHCounter */
-    uint32_t pOHCounter(uint32_t value) override;
+    uint32_t pohCounter(uint32_t value) override;
 
     /** @brief Used by the timer to update the POHCounter */
-    void pOHCallback();
+    void pohCallback();
 
     /** @brief Used to restore POHCounter value from persisted file */
     void restorePOHCounter();
@@ -191,7 +195,7 @@
     void restoreChassisStateChangeTime();
 
     /** @brief Timer used for tracking power on hours */
-    sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> pOHTimer;
+    sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> pohTimer;
 };
 
 } // namespace manager
