diff --git a/wally/report.py b/wally/report.py
index 5198d13..aa7a4b0 100644
--- a/wally/report.py
+++ b/wally/report.py
@@ -43,7 +43,7 @@
                                     lines=[
                                         (latv, "msec", "rr", "lat"),
                                         (iops_or_bw_per_vm, None, None,
-                                            "IOPS per vm")
+                                            "IOPS per thread")
                                     ])
     return str(ch)
 
@@ -150,14 +150,14 @@
 report_funcs = []
 
 
-def report(names):
+def report(name, required_fields):
     def closure(func):
-        report_funcs.append((names.split(","), func))
+        report_funcs.append((required_fields.split(","), name, func))
         return func
     return closure
 
 
-@report('hdd_test_rrd4k,hdd_test_rws4k')
+@report('HDD', 'hdd_test_rrd4k,hdd_test_rws4k')
 def make_hdd_report(processed_results, path, lab_info):
     make_plots(processed_results, path)
     di = get_disk_info(processed_results)
@@ -182,18 +182,26 @@
 
     try:
         processed_results = process_disk_info(results)
+        res_fields = sorted(processed_results.keys())
 
-        for fields, func in report_funcs:
+        for fields, name, func in report_funcs:
             for field in fields:
-                if field not in processed_results:
+                pos = bisect.bisect_left(res_fields, field)
+
+                if pos == len(res_fields):
+                    continue
+
+                if not res_fields[pos + 1].startswith(field):
                     break
             else:
-                func(processed_results, path, lab_info)
+                hpath = path.format(name)
+                func(processed_results, hpath, lab_info)
+                logger.debug(name + " report generated into " + hpath)
                 break
         else:
             logger.warning("No report generator found for this load")
 
     except Exception as exc:
+        import traceback
+        traceback.print_exc()
         logger.error("Failed to generate html report:" + str(exc))
-    else:
-        logger.info("Html report were stored in " + path)
