diff --git a/src/main.cpp b/src/main.cpp
index 68e082619a81c1a70c12f4a133e27eaf6dafcffa..69c9ec388503ef93294a153f5a87e76bdccc8cb6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,10 +1,7 @@
 #include <iostream>
 #include <PastisUtils.hpp>
-#include <RevisionInfo.hpp>
+
 #include <rang.hpp>
-#include <FPEManager.hpp>
-#include <SignalManager.hpp>
-#include <ConsoleManager.hpp>
 
 #include <Connectivity.hpp>
 
@@ -25,72 +22,12 @@
 
 #include <GmshReader.hpp>
 
-#include <CLI/CLI.hpp>
 #include <limits>
 #include <map>
 
 int main(int argc, char *argv[])
 {
-  long unsigned number = 10;
-  std::string filename;
-  {
-    CLI::App app{"Pastis help"};
-
-    app.add_option("-n,--number", number, "Number of cells");//->required();
-
-    app.add_option("filename,-f,--filename", filename, "gmsh file");//->required();
-
-    int threads=-1;
-    app.add_option("--threads", threads, "Number of Kokkos threads")->check(CLI::Range(1,std::numeric_limits<decltype(threads)>::max()));
-
-    std::string colorize="auto";
-    app.add_set("--colorize", colorize, {"auto", "yes", "no"}, "Colorize console output", true);
-
-    bool disable_fpe = false;
-    app.add_flag("--no-fpe", disable_fpe, "Do not trap floating point exceptions");
-    bool disable_signals = false;
-    app.add_flag("--no-signal", disable_signals, "Do not catches signals");
-
-    std::string pause_on_error="auto";
-    app.add_set("--pause-on-error", pause_on_error, {"auto", "yes", "no"}, "Pause for debugging on unexpected error", true);
-
-    std::atexit([](){std::cout << rang::style::reset;});
-    try {
-      app.parse(argc, argv);
-    } catch (const CLI::ParseError &e) {
-      return app.exit(e);
-    }
-
-    ConsoleManager::init(colorize);
-    FPEManager::init(not disable_fpe);
-    SignalManager::setPauseForDebug(pause_on_error);
-    SignalManager::init(not disable_signals);
-  }
-
-  std::cout << "Code version: "
-            << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n';
-
-  std::cout << "-------------------- "
-            << rang::fg::green
-            << "git info"
-            << rang::fg::reset
-            <<" -------------------------"
-            << '\n';
-  std::cout << "tag:  " << rang::fg::reset
-            << rang::style::bold << RevisionInfo::gitTag() << rang::style::reset << '\n';
-  std::cout << "HEAD: " << rang::style::bold << RevisionInfo::gitHead() << rang::style::reset << '\n';
-  std::cout << "hash: " << rang::style::bold << RevisionInfo::gitHash() << rang::style::reset << "  (";
-
-  if (RevisionInfo::gitIsClean()) {
-    std::cout << rang::fgB::green << "clean" << rang::fg::reset;
-  } else {
-    std::cout << rang::fgB::red << "dirty" << rang::fg::reset;
-  }
-  std::cout << ")\n";
-  std::cout << "-------------------------------------------------------\n";
-
-  initialize(argc, argv);
-  Kokkos::DefaultExecutionSpace::print_configuration(std::cout);
+  std::string filename = initialize(argc, argv);
 
   std::map<std::string, double> method_cost_map;
 
diff --git a/src/utils/PastisUtils.cpp b/src/utils/PastisUtils.cpp
index c86974b81440953f2785ecca564df54def7e0716..4149fabe36f0d0ee86c18600e866d30529ad6fbd 100644
--- a/src/utils/PastisUtils.cpp
+++ b/src/utils/PastisUtils.cpp
@@ -1,9 +1,89 @@
 #include <PastisUtils.hpp>
 #include <Kokkos_Core.hpp>
 
-void initialize(int& argc, char* argv[])
+#include <RevisionInfo.hpp>
+#include <rang.hpp>
+
+#include <FPEManager.hpp>
+#include <SignalManager.hpp>
+#include <ConsoleManager.hpp>
+
+#include <CLI/CLI.hpp>
+
+std::string initialize(int& argc, char* argv[])
 {
+  long unsigned number = 10;
+  std::string filename;
+
+  std::cout << "Pastis version: "
+            << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n';
+
+  std::cout << "-------------------- "
+            << rang::fg::green
+            << "git info"
+            << rang::fg::reset
+            <<" -------------------------"
+            << '\n';
+  std::cout << "tag:  " << rang::fg::reset
+            << rang::style::bold << RevisionInfo::gitTag() << rang::style::reset << '\n';
+  std::cout << "HEAD: " << rang::style::bold << RevisionInfo::gitHead() << rang::style::reset << '\n';
+  std::cout << "hash: " << rang::style::bold << RevisionInfo::gitHash() << rang::style::reset << "  (";
+
+  if (RevisionInfo::gitIsClean()) {
+    std::cout << rang::fgB::green << "clean" << rang::fg::reset;
+  } else {
+    std::cout << rang::fgB::red << "dirty" << rang::fg::reset;
+  }
+  std::cout << ")\n";
+  std::cout << "-------------------------------------------------------\n";
+  {
+    CLI::App app{"Pastis help"};
+
+    app.add_option("-n,--number", number, "Number of cells");//->required();
+
+    app.add_option("filename,-f,--filename", filename, "gmsh file");//->required();
+
+    int threads=-1;
+    app.add_option("--threads", threads, "Number of Kokkos threads")->check(CLI::Range(1,std::numeric_limits<decltype(threads)>::max()));
+
+    std::string colorize="auto";
+    app.add_set("--colorize", colorize, {"auto", "yes", "no"}, "Colorize console output", true);
+
+    bool disable_fpe = false;
+    app.add_flag("--no-fpe", disable_fpe, "Do not trap floating point exceptions");
+    bool disable_signals = false;
+    app.add_flag("--no-signal", disable_signals, "Do not catches signals");
+
+    std::string pause_on_error="auto";
+    app.add_set("--pause-on-error", pause_on_error, {"auto", "yes", "no"}, "Pause for debugging on unexpected error", true);
+
+    std::atexit([](){std::cout << rang::style::reset;});
+    try {
+      app.parse(argc, argv);
+    } catch (const CLI::ParseError &e) {
+      std::exit(app.exit(e));
+    }
+
+    ConsoleManager::init(colorize);
+    FPEManager::init(not disable_fpe);
+    SignalManager::setPauseForDebug(pause_on_error);
+    SignalManager::init(not disable_signals);
+  }
+
   Kokkos::initialize(argc,argv);
+  std::cout << "-------------------- "
+            << rang::fg::green
+            << "exec info"
+            << rang::fg::reset
+            <<" ------------------------"
+            << '\n';
+
+  std::cout << rang::style::bold;
+  Kokkos::DefaultExecutionSpace::print_configuration(std::cout);
+  std::cout << rang::style::reset;
+  std::cout << "-------------------------------------------------------\n";
+
+  return filename;
 }
 
 void finalize()
diff --git a/src/utils/PastisUtils.hpp b/src/utils/PastisUtils.hpp
index 939b76f0b9e3c3ee5516a8a7a1e9f6dece4577d5..d0a68cfdb91af7acbb5393cc00fdc0c2611a4848 100644
--- a/src/utils/PastisUtils.hpp
+++ b/src/utils/PastisUtils.hpp
@@ -26,7 +26,7 @@ void parallel_reduce(const size_t& size,
   Kokkos::parallel_reduce(label, size, array, value);
 }
 
-void initialize(int& argc, char* argv[]);
+std::string initialize(int& argc, char* argv[]);
 
 void finalize();