diff --git a/user_channel/channel_layer.hpp b/user_channel/channel_layer.hpp
index 551b0b6..37d2b90 100644
--- a/user_channel/channel_layer.hpp
+++ b/user_channel/channel_layer.hpp
@@ -284,8 +284,8 @@
  *  @return same channel number or proper channel number for current channel
  * number (0xE).
  */
-static inline uint8_t
-    convertCurrentChannelNum(const uint8_t chNum, const uint8_t devChannel)
+static inline uint8_t convertCurrentChannelNum(const uint8_t chNum,
+                                               const uint8_t devChannel)
 {
     if (chNum == currentChNum)
     {
diff --git a/user_channel/channel_mgmt.cpp b/user_channel/channel_mgmt.cpp
index 31fdba0..0b76330 100644
--- a/user_channel/channel_mgmt.cpp
+++ b/user_channel/channel_mgmt.cpp
@@ -385,8 +385,8 @@
     return channelData[chNum].isChValid;
 }
 
-EChannelSessSupported
-    ChannelConfig::getChannelSessionSupport(const uint8_t chNum)
+EChannelSessSupported ChannelConfig::getChannelSessionSupport(
+    const uint8_t chNum)
 {
     EChannelSessSupported chSessSupport =
         (EChannelSessSupported)channelData[chNum].chInfo.sessionSupported;
@@ -711,8 +711,8 @@
     return fileStat.st_mtime;
 }
 
-EChannelAccessMode
-    ChannelConfig::convertToAccessModeIndex(const std::string& mode)
+EChannelAccessMode ChannelConfig::convertToAccessModeIndex(
+    const std::string& mode)
 {
     auto iter = std::find(accessModeList.begin(), accessModeList.end(), mode);
     if (iter == accessModeList.end())
@@ -736,8 +736,8 @@
     return accessModeList.at(value);
 }
 
-CommandPrivilege
-    ChannelConfig::convertToPrivLimitIndex(const std::string& value)
+CommandPrivilege ChannelConfig::convertToPrivLimitIndex(
+    const std::string& value)
 {
     auto iter = std::find(privList.begin(), privList.end(), value);
     if (iter == privList.end())
@@ -760,8 +760,8 @@
     return privList.at(value);
 }
 
-EChannelSessSupported
-    ChannelConfig::convertToSessionSupportIndex(const std::string& value)
+EChannelSessSupported ChannelConfig::convertToSessionSupportIndex(
+    const std::string& value)
 {
     auto iter =
         std::find(sessionSupportList.begin(), sessionSupportList.end(), value);
@@ -775,8 +775,8 @@
         std::distance(sessionSupportList.begin(), iter));
 }
 
-EChannelMediumType
-    ChannelConfig::convertToMediumTypeIndex(const std::string& value)
+EChannelMediumType ChannelConfig::convertToMediumTypeIndex(
+    const std::string& value)
 {
     std::unordered_map<std::string, EChannelMediumType>::iterator it =
         mediumTypeMap.find(value);
@@ -789,8 +789,8 @@
     return static_cast<EChannelMediumType>(it->second);
 }
 
-EChannelProtocolType
-    ChannelConfig::convertToProtocolTypeIndex(const std::string& value)
+EChannelProtocolType ChannelConfig::convertToProtocolTypeIndex(
+    const std::string& value)
 {
     std::unordered_map<std::string, EChannelProtocolType>::iterator it =
         protocolTypeMap.find(value);
diff --git a/user_channel/channel_mgmt.hpp b/user_channel/channel_mgmt.hpp
index 39aa116..43926bb 100644
--- a/user_channel/channel_mgmt.hpp
+++ b/user_channel/channel_mgmt.hpp
@@ -370,8 +370,8 @@
      *
      *  @return support session type
      */
-    EChannelSessSupported
-        convertToSessionSupportIndex(const std::string& value);
+    EChannelSessSupported convertToSessionSupportIndex(
+        const std::string& value);
 
     /** @brief function to convert medium type string to value type
      *
