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);
