diff --git a/Tests/UnitTests/Core/Seeding/CMakeLists.txt b/Tests/UnitTests/Core/Seeding/CMakeLists.txt
index c5d4b255601ff50992c9941905df2040451375d1..db82ffe74977537ef4761b7f97828deda2efce75 100644
--- a/Tests/UnitTests/Core/Seeding/CMakeLists.txt
+++ b/Tests/UnitTests/Core/Seeding/CMakeLists.txt
@@ -1,2 +1,3 @@
 add_executable(SeedfinderTest SeedfinderTest.cpp)
+add_definitions(-Wno-implicit-fallthrough)
 target_link_libraries(SeedfinderTest PRIVATE ActsCore Boost::boost)
diff --git a/Tests/UnitTests/Core/Seeding/SeedfinderTest.cpp b/Tests/UnitTests/Core/Seeding/SeedfinderTest.cpp
index 22964c143f89c93a3f3f5860a271b377862f35eb..c3e1ca1c63156cd42bbc15c6c8044da6aa64db8f 100644
--- a/Tests/UnitTests/Core/Seeding/SeedfinderTest.cpp
+++ b/Tests/UnitTests/Core/Seeding/SeedfinderTest.cpp
@@ -66,9 +66,51 @@ std::vector<const SpacePoint*> readFile(std::string filename) {
   return readSP;
 }
 
-int main() {
-  std::vector<const SpacePoint*> spVec = readFile("sp.txt");
-  std::cout << "size of read SP: " << spVec.size() << std::endl;
+int main(int argc, char** argv) {
+
+  std::string file {"sp.txt"};
+  bool help(false);
+  bool quiet(false);
+
+  int opt;
+  while ((opt = getopt(argc, argv, "hf:q")) != -1) {
+    switch (opt) {
+    case 'f':
+      file = optarg;
+      break;
+    case 'q':
+      quiet = true;
+      break;
+    case 'h':
+      help = true;
+    default: /* '?' */
+      std::cerr << "Usage: " << argv[0]
+                << " [-hq] [-f FILENAME]\n";
+      if (help) {
+        std::cout << "      -h : this help" << std::endl;
+        std::cout << "      -f FILE : read spacepoints from FILE. Default is \""
+                  << file << "\"" << std::endl;
+        std::cout << "      -q : don't print out all found seeds" << std::endl;
+      }
+      
+      exit(EXIT_FAILURE);
+    }
+  }
+
+  std::ifstream f(file);
+  if(!f.good()) {
+    std::cerr << "input file \"" << file << "\" does not exist\n";
+    exit(EXIT_FAILURE);
+  } 
+
+  auto start_read       = std::chrono::system_clock::now();  
+  std::vector<const SpacePoint*> spVec = readFile(file);
+  auto end_read       = std::chrono::system_clock::now();
+  std::chrono::duration<double> elapsed_read = end_read - start_read;
+
+  std::cout << "read " << spVec.size() << " SP from file " << file
+            << " in " << elapsed_read.count() << "s"
+            << std::endl;
 
   Acts::SeedfinderConfig<SpacePoint> config;
   // silicon detector max
@@ -138,19 +180,21 @@ int main() {
     numSeeds += outVec.size();
   }
   std::cout << "Number of seeds generated: " << numSeeds << std::endl;
-  for (auto& regionVec : seedVector) {
-    for (size_t i = 0; i < regionVec.size(); i++) {
-      const Acts::Seed<SpacePoint>* seed = &regionVec[i];
-      const SpacePoint* sp = seed->sp()[0];
-      std::cout << " (" << sp->x() << ", " << sp->y() << ", " << sp->z()
-                << ") ";
-      sp = seed->sp()[1];
-      std::cout << sp->surface << " (" << sp->x() << ", " << sp->y() << ", "
-                << sp->z() << ") ";
-      sp = seed->sp()[2];
-      std::cout << sp->surface << " (" << sp->x() << ", " << sp->y() << ", "
-                << sp->z() << ") ";
-      std::cout << std::endl;
+  if (!quiet) {
+    for (auto& regionVec : seedVector) {
+      for (size_t i = 0; i < regionVec.size(); i++) {
+        const Acts::Seed<SpacePoint>* seed = &regionVec[i];
+        const SpacePoint* sp = seed->sp()[0];
+        std::cout << " (" << sp->x() << ", " << sp->y() << ", " << sp->z()
+                  << ") ";
+        sp = seed->sp()[1];
+        std::cout << sp->surface << " (" << sp->x() << ", " << sp->y() << ", "
+                  << sp->z() << ") ";
+        sp = seed->sp()[2];
+        std::cout << sp->surface << " (" << sp->x() << ", " << sp->y() << ", "
+                  << sp->z() << ") ";
+        std::cout << std::endl;
+      }
     }
   }
   return 0;