diff --git a/bench.py b/bench.py
index eef861a752b3e2aeab967c37c16ebf7a2624365d..023614e35556163c3467c664ee9d24acd5368542 100755
--- a/bench.py
+++ b/bench.py
@@ -36,15 +36,17 @@ parser.add_argument("--license", help="print license info and exit", action='sto
 
 """Run tasks on exit"""
 def epilog():
-    if os.listdir(src.globalvars.resdir) == []:
-        print_warn("Remove empty resultdir")
-        os.removedirs(src.globalvars.resdir)
-    else:
-        endtime = datetime.datetime.now().isoformat()
-        endtime = endtime[:endtime.rfind(':')]
-        src.globalvars.facts["endtime"] = endtime
-        with open(os.path.join(src.globalvars.resdir, "facts.save"), "wb") as f:
-            pickle.dump(src.globalvars.facts, f)
+    # After early errors resdir may not be set
+    if src.globalvars.resdir != None:
+        if os.listdir(src.globalvars.resdir) == []:
+            print_warn("Remove empty resultdir")
+            os.removedirs(src.globalvars.resdir)
+        else:
+            endtime = datetime.datetime.now().isoformat()
+            endtime = endtime[:endtime.rfind(':')]
+            src.globalvars.facts["endtime"] = endtime
+            with open(os.path.join(src.globalvars.resdir, "facts.save"), "wb") as f:
+                pickle.dump(src.globalvars.facts, f)
 
 def main():
     args = parser.parse_args()
@@ -162,9 +164,28 @@ def main():
                 if find_cmd("malt") is not None:
                     print_status("Analysing {} ...".format(bench))
 
+
                     malt_cmd = "malt -o output:name={}/malt.{}.%3"
                     malt_cmd = malt_cmd.format(bench_res_dir, "{perm}")
-                    bench.run(runs=1, dry_run=True, cmd_prefix=malt_cmd)
+
+                    old_allocs = bench.allocators
+                    # use malt as allocator
+                    src.globalvars.allocators = {"malt": {"cmd_prefix"    : malt_cmd,
+                                                          "binary_suffix" : "",
+                                                          "LD_PRELOAD"    : ""}}
+                    try:
+                        bench.run(runs=1)
+                    except Exception:
+                        print_error(traceback.format_exc())
+                        print_error("Skipping analysis of", bench, "!")
+
+                    if "malt" in bench.results:
+                        del(bench.results["malt"])
+                    if "malt" in bench.results["stats"]
+                        del(bench.results["stats"]["malt"])
+                    # restore allocs
+                    bench.allocators = old_allocs
+
                 else:
                     print_error("malt not found. Skipping analyse.")
 
diff --git a/src/benchmark.py b/src/benchmark.py
index 4bab1460f9777244aa85113805393282f55dd506..4737799a7b107a1a20cdd9fef94bd513a9001b1a 100644
--- a/src/benchmark.py
+++ b/src/benchmark.py
@@ -168,7 +168,7 @@ class Benchmark (object):
             if is_fixed:
                 yield p
 
-    def run(self, runs=5, dry_run=False, cmd_prefix=""):
+    def run(self, runs=5):
         if runs < 1:
             return
 
@@ -238,7 +238,6 @@ class Benchmark (object):
 
                         actual_cmd = "{} {} {} {}{}".format(self.measure_cmd,
                                                             t["cmd_prefix"],
-                                                            cmd_prefix,
                                                             binary,
                                                             actual_cmd[cmd_start:])
                         # substitute again
@@ -297,10 +296,9 @@ class Benchmark (object):
                         if valid_result != None:
                             valid_result = result
 
-                    if not dry_run:
-                        if not perm in self.results[alloc_name]:
-                            self.results[alloc_name][perm] = []
-                        self.results[alloc_name][perm].append(result)
+                    if not perm in self.results[alloc_name]:
+                        self.results[alloc_name][perm] = []
+                    self.results[alloc_name][perm].append(result)
 
                 if hasattr(self, "postallocator_hook"):
                     self.postallocator_hook((alloc_name, t), run,