diff --git a/source/adios2/engine/bp/BPFileReader.h b/source/adios2/engine/bp/BPFileReader.h
index 4c123500ec1c589382a6a4065897d5e76a6630c1..9a2427de15c267276d9383fd557ccc7fe7f9ea9d 100644
--- a/source/adios2/engine/bp/BPFileReader.h
+++ b/source/adios2/engine/bp/BPFileReader.h
@@ -19,9 +19,16 @@
 namespace adios2
 {
 
+namespace utils
+{
+class BPLS2;
+}
+
 class BPFileReader : public Engine
 {
 
+    friend class utils::BPLS2;
+
 public:
     /**
      * Unique constructor
diff --git a/source/utils/bpls2/BPLS2.cpp b/source/utils/bpls2/BPLS2.cpp
index 00e87201acfcd9e72760dfe8f76cf4ccd57da5b6..b18b0212c3e3694d3d16ed717fd68d4a7bba5226 100644
--- a/source/utils/bpls2/BPLS2.cpp
+++ b/source/utils/bpls2/BPLS2.cpp
@@ -12,6 +12,11 @@
 
 #include <iostream>
 
+#include "adios2/ADIOSMPICommOnly.h"
+#include "adios2/core/ADIOS.h"
+#include "adios2/core/IO.h"
+#include "adios2/engine/bp/BPFileReader.h"
+
 namespace adios2
 {
 namespace utils
@@ -31,6 +36,7 @@ void BPLS2::Run()
 {
     ParseArguments();
     ProcessParameters();
+    ProcessTransport();
 }
 
 // PRIVATE
@@ -175,5 +181,37 @@ 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();
+
+    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:  "
+                  << bpFileReader.m_FileManager.GetFileSize(0) << " bytes\n";
+
+        const auto &minifooter = bpFileReader.m_BP3Deserializer.m_Minifooter;
+        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";
+    }
+}
+
 } // end namespace utils
 } // end namespace adios2
diff --git a/source/utils/bpls2/BPLS2.h b/source/utils/bpls2/BPLS2.h
index 37b2e67a2aa6ba3422dfff7f2e9402904439c697..f925437977db6097b2a4d8db7758d3a4356db456 100644
--- a/source/utils/bpls2/BPLS2.h
+++ b/source/utils/bpls2/BPLS2.h
@@ -38,6 +38,8 @@ private:
     void PrintUsage() const noexcept final;
     void PrintExamples() const noexcept final;
     void SetParameters(const std::string argument, const bool isLong) final;
+
+    void ProcessTransport() const;
 };
 
 } // end namespace utils
diff --git a/source/utils/bpls2/main.cpp b/source/utils/bpls2/main.cpp
index c9fe8694b8cf396b85a130e0c677c1e95a615bb7..f1315b81cf648bbadfe4efb960050a20f4229b66 100644
--- a/source/utils/bpls2/main.cpp
+++ b/source/utils/bpls2/main.cpp
@@ -11,10 +11,13 @@
 #include <iostream>
 #include <stdexcept>
 
+#include "adios2/ADIOSMPI.h"
 #include "utils/bpls2/BPLS2.h"
 
 int main(int argc, char *argv[])
 {
+    MPI_Init(&argc, &argv);
+
     try
     {
         adios2::utils::BPLS2 bpls2(argc, argv);
@@ -25,4 +28,6 @@ int main(int argc, char *argv[])
         std::cout << "bpls2 Caught an Exception\n";
         std::cout << e.what() << "\n";
     }
+
+    MPI_Finalize();
 }