diff --git a/benchmarks/BUILD.gn b/benchmarks/BUILD.gn
index 01c729f..7b61a32 100644
--- a/benchmarks/BUILD.gn
+++ b/benchmarks/BUILD.gn
@@ -17,6 +17,7 @@
   deps = [
     ":spec_utils",
     "//third_party/benchmark",
+    "//third_party/gflags",
     "//third_party/glog",
   ]
 }
diff --git a/benchmarks/main.cc b/benchmarks/main.cc
index e6714f1..eef73ef 100644
--- a/benchmarks/main.cc
+++ b/benchmarks/main.cc
@@ -4,12 +4,13 @@
 
 #include <benchmark/benchmark.h>
 #include <fstream>
+#include <gflags/gflags.h>
+#include <glog/logging.h>
 #include <libgen.h>
 #include <spec_fixture.h>
 #include <spec_utils.h>
 #include <sys/stat.h>
 #include <unistd.h>
-#include <glog/logging.h>
 
 namespace {
 
@@ -260,6 +261,7 @@
 int main(int argc, char* argv[]) {
   ::benchmark::Initialize(&argc, argv);
   google::InitGoogleLogging(argv[0]);
+  gflags::ParseCommandLineFlags(&argc, &argv, true);
   char* cwd;
   CHECK_NOTNULL((cwd = get_current_dir_name()));
   executableDir = std::string(cwd) + "/" + dirname(argv[0]);
diff --git a/benchmarks/spec_fixture.cc b/benchmarks/spec_fixture.cc
index ffb9c02..c047fb3 100644
--- a/benchmarks/spec_fixture.cc
+++ b/benchmarks/spec_fixture.cc
@@ -50,8 +50,8 @@
   run_dir_name = tmpDir + "/" + benchmark_name;
 
   DLOG(INFO) << "Changing dir to: " << executableDir.c_str();
-  CHECK_EQ(chdir(executableDir.c_str()), 0) << "Not able to change dir to "
-                                            << executableDir;
+  CHECK_EQ(chdir(executableDir.c_str()), 0)
+      << "Not able to change dir to " << executableDir;
   CHECK_EQ(mkdir(run_dir_name.c_str(), 0700), 0)
       << "Not able to create dir: " << run_dir_name
       << ", Error: " << strerror(errno);
@@ -69,9 +69,9 @@
 }
 
 void SpecFixture::TearDown(benchmark::State& st) {
-  CHECK_EQ(DeleteDir(run_dir_name), 0) << "Error Deleting directory "
-                                       << run_dir_name
-                                       << ", Error: " << strerror(errno);
+  CHECK_EQ(DeleteDir(run_dir_name), 0)
+      << "Error Deleting directory " << run_dir_name
+      << ", Error: " << strerror(errno);
 }
 
 int SpecFixture::RunSpec(const char* args[],
@@ -129,7 +129,7 @@
   delete[] argv;
   if (status != 0) {
     // Dump output
-    LOG(ERROR) << "Error while running benchmark";
+    LOG(ERROR) << "Error while running benchmark: " << benchmark_name;
     ssize_t len;
     do {
       len = read(out_p[0], buffer, page_size);
@@ -162,45 +162,26 @@
   launchpad_t* lp = NULL;
   mx_handle_t job_to_child = MX_HANDLE_INVALID;
   mx_handle_t job = mxio_get_startup_handle(MX_HND_INFO(MX_HND_TYPE_JOB, 0));
-  if (job != MX_HANDLE_INVALID)
+  if (job != MX_HANDLE_INVALID) {
     mx_handle_duplicate(job, MX_RIGHT_SAME_RIGHTS, &job_to_child);
-  mx_status_t status = launchpad_create(job_to_child, filename, &lp);
-  if (status != NO_ERROR)
-    return status;
-  ScopedGuard guard([&]() { launchpad_destroy(lp); });
-  status = launchpad_elf_load(lp, launchpad_vmo_from_file(filename));
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_load_vdso(lp, MX_HANDLE_INVALID);
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_add_vdso_vmo(lp);
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_arguments(lp, argc, argv);
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_environ(lp, (const char**)environ);
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_clone_mxio_root(lp);
-  if (status != NO_ERROR)
-    return status;
-  status = launchpad_clone_mxio_cwd(lp);
-  if (status != NO_ERROR)
-    return status;
+  }
+  launchpad_create(job_to_child, filename, &lp);
+  launchpad_load_from_file(lp, filename);
+  launchpad_set_args(lp, argc, argv);
+  launchpad_set_environ(lp, (const char**)environ);
+  launchpad_clone_mxio_root(lp);
+  launchpad_clone_mxio_cwd(lp);
   launchpad_clone_fd(lp, STDIN_FILENO, STDIN_FILENO);
   launchpad_clone_fd(lp, STDOUT_FILENO, STDOUT_FILENO);
   launchpad_clone_fd(lp, STDERR_FILENO, STDERR_FILENO);
-  if (status == NO_ERROR && input != -1) {
-    status = launchpad_transfer_fd(lp, input, STDIN_FILENO);
+  if(input != -1) {
+    launchpad_transfer_fd(lp, input, STDIN_FILENO);
   }
+  const char* errmsg;
+  mx_status_t status = launchpad_go(lp, process, &errmsg);
   if (status == NO_ERROR) {
-    mx_handle_t result = launchpad_start(lp);
-    if (result > 0)
-      *process = result;
-    else
-      status = result;
+    LOG(ERROR) << "Failed to launch: " << filename << ", error: " << errmsg
+               << ": " << status;
   }
   return status;
 }
@@ -224,8 +205,7 @@
   });
   mx_status_t status = launch(args[0], args_length, args, input, &handle);
   if (status != NO_ERROR) {
-    LOG(ERROR) << "Failed to launch " << args[0] << ":" << status;
-    return handle;
+    return status;
   }
   status =
       mx_handle_wait_one(handle, MX_PROCESS_SIGNALED, MX_TIME_INFINITE, NULL);
