diff --git a/extensions/openpower-pels/tools/peltool.cpp b/extensions/openpower-pels/tools/peltool.cpp
index 10646de..5c040ca 100644
--- a/extensions/openpower-pels/tools/peltool.cpp
+++ b/extensions/openpower-pels/tools/peltool.cpp
@@ -35,21 +35,6 @@
 namespace message = openpower::pels::message;
 namespace pv = openpower::pels::pel_values;
 
-std::string ltrim(const std::string& s)
-{
-    return std::regex_replace(s, std::regex("^\\s+"), std::string(""));
-}
-
-std::string rtrim(const std::string& s)
-{
-    return std::regex_replace(s, std::regex("\\s+$"), std::string(""));
-}
-
-std::string trim(const std::string& s)
-{
-    return ltrim(rtrim(s));
-}
-
 /**
  * @brief helper function to get PEL commit timestamp from file name
  * @retrun BCDTime - PEL commit timestamp
@@ -180,7 +165,7 @@
  * @param[in] std::string Name of file with raw PEL
  * @return std::vector<uint8_t> char vector read from raw PEL file.
  */
-std::vector<uint8_t> getFileData(std::string name)
+std::vector<uint8_t> getFileData(const std::string& name)
 {
     std::ifstream file(name, std::ifstream::in);
     if (file.good())
@@ -196,6 +181,21 @@
     }
 }
 
+/**
+ * @brief helper function to trim trailing whitespaces
+ * @return std::string - trimmed string
+ * @param[in] std::string - string to trim
+ */
+const char* ws = " \t\n\r\f\v";
+std::string trim(std::string s, const char* t = ws)
+{
+    if (s.find_last_not_of(t) != std::string::npos)
+    {
+        s.erase(s.find_last_not_of(t) + 1);
+    }
+    return s;
+}
+
 template <typename T>
 std::string genPELJSON(T itr, bool hidden)
 {
@@ -213,10 +213,8 @@
     try
     {
         std::vector<uint8_t> data = getFileData(fileName);
-
         if (!data.empty())
         {
-
             PEL pel{data};
             std::bitset<16> actionFlags{pel.userHeader().actionFlags()};
             if (pel.valid() && (hidden || !actionFlags.test(hiddenFlagBit)))
@@ -310,7 +308,6 @@
                          fileNameToTimestamp((*it).path().filename()));
         }
     }
-    std::string val;
     auto buildJSON = [&listStr, &hidden](const auto& i) {
         listStr += genPELJSON(i, hidden);
     };
@@ -349,7 +346,7 @@
     app.add_option("-f,--file", fileName,
                    "Display a PEL using its Raw PEL file");
     app.add_option("-i, --id", idPEL, "Display a PEL based on its ID");
-    app.add_flag("-l", listPEL, "List PELS");
+    app.add_flag("-l", listPEL, "List PELs");
     app.add_flag("-r", listPELDescOrd, "Reverse order of output");
     app.add_flag("-s", listPELShowHidden, "Show hidden PELs");
     CLI11_PARSE(app, argc, argv);
