diff --git a/source/adios2/toolkit/transportman/TransportMan.cpp b/source/adios2/toolkit/transportman/TransportMan.cpp
index ce5b5ded7dbbaf6a6ef5491e6c42a7070c8b8716..7e1a8cae16b69fcb166dd5819e79798cdeecb2bd 100644
--- a/source/adios2/toolkit/transportman/TransportMan.cpp
+++ b/source/adios2/toolkit/transportman/TransportMan.cpp
@@ -93,8 +93,9 @@ std::vector<std::string> TransportMan::GetFilesBaseNames(
                 throw std::invalid_argument(
                     "ERROR: two IO AddTransport of the same type can't "
                     "have the same name : " +
-                    name + ", use Name=value parameter, in "
-                           "call to Open");
+                    name +
+                    ", use Name=value parameter, in "
+                    "call to Open");
             }
         }
         itType->second.insert(name);
@@ -154,7 +155,7 @@ void TransportMan::WriteFiles(const char *buffer, const size_t size,
     }
 }
 
-size_t TransportMan::GetFileSize(const size_t transportIndex)
+size_t TransportMan::GetFileSize(const size_t transportIndex) const
 {
     auto itTransport = m_Transports.find(transportIndex);
     CheckFile(itTransport, ", in call to GetFileSize with index " +
diff --git a/source/adios2/toolkit/transportman/TransportMan.h b/source/adios2/toolkit/transportman/TransportMan.h
index 022271ab656043fe6b9a8f70a39d623497fb6388..a305236a7191576159dc55904bd9edf26ef54173 100644
--- a/source/adios2/toolkit/transportman/TransportMan.h
+++ b/source/adios2/toolkit/transportman/TransportMan.h
@@ -101,7 +101,7 @@ public:
     void WriteFiles(const char *buffer, const size_t size,
                     const int transportIndex = -1);
 
-    size_t GetFileSize(const size_t transportIndex = 0);
+    size_t GetFileSize(const size_t transportIndex = 0) const;
 
     /**
      * Read contents from a single file and assign it to buffer
diff --git a/source/utils/bpls2/BPLS2.cpp b/source/utils/bpls2/BPLS2.cpp
index b18b0212c3e3694d3d16ed717fd68d4a7bba5226..1151fdacd3936b891090e957c7dbfd53f1d62f91 100644
--- a/source/utils/bpls2/BPLS2.cpp
+++ b/source/utils/bpls2/BPLS2.cpp
@@ -10,6 +10,7 @@
 
 #include "BPLS2.h"
 
+#include <iomanip>
 #include <iostream>
 
 #include "adios2/ADIOSMPICommOnly.h"
@@ -97,8 +98,8 @@ void BPLS2::ProcessParameters() const
             std::cout << "\n";
             std::cout << "Found --help , -h option, discarding others\n";
             std::cout << "Rerun without --help , -h option\n";
+            throw std::invalid_argument("");
         }
-        return;
     }
 
     if (m_FileName.empty())
@@ -118,8 +119,9 @@ void BPLS2::PrintUsage() const noexcept
     std::cout << "-l , --long        Print variables and attributes metadata\n";
     std::cout << "                   information, no overhead\n";
     std::cout << "-a , --attributes  List attributes metadata\n";
-
-    std::cout << "Example: bpls2 -lav bpfile\n";
+    std::cout << "-v , --verbose     Added file information\n";
+    std::cout << "\n";
+    std::cout << "Example: bpls2 -lav bpfile" << std::endl;
 }
 
 void BPLS2::PrintExamples() const noexcept {}
@@ -183,34 +185,75 @@ void BPLS2::SetParameters(const std::string argument, const bool isLong)
 
 void BPLS2::ProcessTransport() const
 {
-    ADIOS adios(true);
-    IO &io = adios.DeclareIO("bpls2");
-    BPFileReader bpFileReader(io, m_FileName, Mode::Read, io.m_MPIComm);
-    const auto variablesMap = io.GetAvailableVariables();
-    // const auto attributesMap = io.GetAvailableAttributes();
+    auto lf_PrintVerboseHeader = [](const BPFileReader &bpFileReader,
+                                    const size_t variablesSize,
+                                    const size_t attributesSize) {
 
-    if (m_Parameters.count("verbose") == 1)
-    {
         const auto &metadataSet = bpFileReader.m_BP3Deserializer.m_MetadataSet;
         std::cout << "File info:\n";
-        std::cout << "    groups:     " << metadataSet.DataPGCount << "\n";
-        std::cout << "    variables:  " << variablesMap.size() << "\n";
-        std::cout << "    attributes: TODO\n";
-        std::cout << "    meshes:     TODO\n";
-        std::cout << "    time steps: " << metadataSet.TimeStep << "\n";
-        std::cout << "    file size:  "
+        std::cout << "  groups:     " << metadataSet.DataPGCount << "\n";
+        std::cout << "  variables:  " << variablesSize << "\n";
+        std::cout << "  attributes: " << attributesSize << "\n";
+        std::cout << "  meshes:     TODO\n";
+        std::cout << "  steps:      " << metadataSet.TimeStep << "\n";
+        std::cout << "  file size:  "
                   << bpFileReader.m_FileManager.GetFileSize(0) << " bytes\n";
 
         const auto &minifooter = bpFileReader.m_BP3Deserializer.m_Minifooter;
-        std::cout << "    bp version: " << std::to_string(minifooter.Version)
+        std::cout << "  bp version: " << std::to_string(minifooter.Version)
                   << "\n";
         std::string endianness("Little Endian");
         if (!minifooter.IsLittleEndian)
         {
             endianness = "Big Endian";
         }
-        std::cout << "    Endianness: " << endianness << "\n";
+        std::cout << "  endianness: " << endianness << "\n";
+        std::cout << "  statistics: Min / Max / Avg / Std_dev\n" << std::endl;
+    };
+
+    auto lf_PrintVariables =
+        [&](const std::map<std::string, std::string> &variablesMap) {
+
+            // get maximum sizes
+            size_t maxTypeSize = 0;
+            size_t maxNameSize = 0;
+            for (const auto &variablePair : variablesMap)
+            {
+                const size_t nameSize = variablePair.first.size();
+                if (nameSize > maxNameSize)
+                {
+                    maxNameSize = nameSize;
+                }
+
+                const size_t typeSize = variablePair.second.size();
+                if (typeSize > maxTypeSize)
+                {
+                    maxTypeSize = typeSize;
+                }
+            }
+
+            for (const auto &variablePair : variablesMap)
+            {
+                std::cout << "  ";
+                std::cout << std::left << std::setw(maxTypeSize)
+                          << variablePair.second << "  ";
+                std::cout << std::left << std::setw(maxNameSize)
+                          << variablePair.first << std::endl;
+            }
+        };
+
+    ADIOS adios(true);
+    IO &io = adios.DeclareIO("bpls2");
+    BPFileReader bpFileReader(io, m_FileName, Mode::Read, io.m_MPIComm);
+    const auto variablesMap = io.GetAvailableVariables();
+    // const auto attributesMap = io.GetAvailableAttributes();
+
+    if (m_Parameters.count("verbose") == 1)
+    {
+        lf_PrintVerboseHeader(bpFileReader, variablesMap.size(), 0);
     }
+
+    lf_PrintVariables(variablesMap);
 }
 
 } // end namespace utils
diff --git a/source/utils/bpls2/main.cpp b/source/utils/bpls2/main.cpp
index f1315b81cf648bbadfe4efb960050a20f4229b66..383080ad0e23f6b2f6f7069c43ec5fbddc126579 100644
--- a/source/utils/bpls2/main.cpp
+++ b/source/utils/bpls2/main.cpp
@@ -25,7 +25,6 @@ int main(int argc, char *argv[])
     }
     catch (std::exception &e)
     {
-        std::cout << "bpls2 Caught an Exception\n";
         std::cout << e.what() << "\n";
     }