diff --git a/report_templates/report_hdd.html b/report_templates/report_hdd.html
index 5eba9c7..6121727 100644
--- a/report_templates/report_hdd.html
+++ b/report_templates/report_hdd.html
@@ -8,45 +8,70 @@
 
 <body>
 <div class="page-header text-center">
-  <h2>Performance Report</h2>
+    <h2>Performance Report</h2>
 </div>
-<div class="container">
-    <div class="row">
-        <table style="width: auto;" class="table table-bordered table-striped">
-            <tr>
-                <td>Test</td>
-                <td>Iops/BW</td>
-                <td>Test</td>
-                <td>Iops/BW</td>
-            </tr>
-            <tr>
-                <td>Rand read 4k direct max IOPS</td>
-                <td><div align="right">{direct_iops_r_max} IOPS</div></td>
-                <td>Rand write 4k sync IOPS 10ms lat</td>
-                <td><div align="right">{rws4k_10ms} IOPS</div></td>
-            </tr>
-            <tr>
-                <td>Rand write 4k direct max IOPS</td>
-                <td><div align="right">{direct_iops_w_max} IOPS</div></td>
-                <td>Rand write 4k sync IOPS 30ms lat</td>
-                <td><div align="right">{rws4k_30ms} IOPS</div></td>
-            </tr>
-            <tr>
-                <td>Direct sequential read</td>
-                <td><div align="right">{bw_read_max} MiBps</div></td>
-                <td>Rand write 4k sync IOPS 100ms lat</td>
-                <td><div align="right">{rws4k_100ms} IOPS</div></td>
-            </tr>
-            <tr>
-                <td>Direct sequential write</td>
-                <td><div align="right">{bw_write_max} MiBps</div></td>
-                <td></td><td></td>
-            </tr>
-        </table>
+<div class="container-fluid text-center">
+    <div class="row" style="margin-bottom: 40px">
+        <div class="col-md-12">
+            <center>
+            <table style="width: auto;"
+                   class="table table-bordered table-striped">
+                <tr>
+                    <td>Test</td>
+                    <td>Iops/BW</td>
+                    <td>Test</td>
+                    <td>Iops/BW</td>
+                </tr>
+                <tr>
+                    <td>Rand read 4k direct max IOPS</td>
+                    <td>
+                        <div align="right">{direct_iops_r_max} IOPS</div>
+                    </td>
+                    <td>Rand write 4k sync IOPS 10ms lat</td>
+                    <td>
+                        <div align="right">{rws4k_10ms} IOPS</div>
+                    </td>
+                </tr>
+                <tr>
+                    <td>Rand write 4k direct max IOPS</td>
+                    <td>
+                        <div align="right">{direct_iops_w_max} IOPS</div>
+                    </td>
+                    <td>Rand write 4k sync IOPS 30ms lat</td>
+                    <td>
+                        <div align="right">{rws4k_30ms} IOPS</div>
+                    </td>
+                </tr>
+                <tr>
+                    <td>Direct sequential read</td>
+                    <td>
+                        <div align="right">{bw_read_max} MiBps</div>
+                    </td>
+                    <td>Rand write 4k sync IOPS 100ms lat</td>
+                    <td>
+                        <div align="right">{rws4k_100ms} IOPS</div>
+                    </td>
+                </tr>
+                <tr>
+                    <td>Direct sequential write</td>
+                    <td>
+                        <div align="right">{bw_write_max} MiBps</div>
+                    </td>
+                    <td></td>
+                    <td></td>
+                </tr>
+            </table>
+                </center>
+        </div>
     </div>
-    <img src="charts/rand_read_4k.png" />
-    <img src="charts/rand_write_4k.png" />
-
+    <div class="row">
+        <div class="col-md-6">
+            <img src="charts/rand_read_4k.png"/>
+        </div>
+        <div class="col-md-6">
+            <img src="charts/rand_write_4k.png"/>
+        </div>
+    </div>
     <!--div class="row">
         <table style="width: auto;" class="table table-bordered table-striped">
             <tr>
diff --git a/wally/charts.py b/wally/charts.py
index 12d735f..828438c 100644
--- a/wally/charts.py
+++ b/wally/charts.py
@@ -67,16 +67,26 @@
         [l[0] for l in lines]
 
     bar.dataset(dataset, series=len(bars_data))
-    bar.axes.type('xyy')
-    bar.axes.label(2, None, label_x)
+
+    axes_type = ""
 
     if scale_x:
         bar.axes.label(0, *scale_x)
+        axes_type += "x"
+    if label_x:
+        bar.axes.style(len(axes_type), '000000', '13')
+        bar.axes.label(len(axes_type), label_x)
+        axes_type += "x"
 
     max_value = (max([max(l) for l in dataset[:2]]))
-    bar.axes.range(1, 0, max_value)
-    bar.axes.style(1, 'N*s*')
-    bar.axes.style(2, '000000', '13')
+    bar.axes.range(len(axes_type), 0, max_value)
+    bar.axes.style(len(axes_type), 'N*s*')
+    axes_type += "y"
+
+    if label_y:
+        bar.axes.style(len(axes_type), '000000', '13')
+        bar.axes.label(len(axes_type), None, label_y)
+        axes_type += "y"
 
     bar.scale(*[0, max_value] * 3)
 
@@ -87,8 +97,6 @@
     bar.color(*COLORS)
     bar.size(width, height)
 
-    axes_type = "xyy"
-
     scale = [0, max_value] * len(bars_dev_top + bars_dev_bottom + bars_data)
     if lines:
         line_n = 0
diff --git a/wally/report.py b/wally/report.py
index e435a6a..209fa31 100644
--- a/wally/report.py
+++ b/wally/report.py
@@ -102,6 +102,8 @@
 
     for name in info.__dict__:
         if not name.startswith('__'):
+            if info.__dict__[name] == "-":
+                continue
             info.__dict__[name] = round_3_digit(info.__dict__[name])
 
     report = templ.format(lab_info=lab_description, **info.__dict__)
@@ -140,7 +142,8 @@
     latv = [lat / 1000 for lat in latv]
     ch = charts.render_vertical_bar(title, legend, [bar_data], [bar_dev_top],
                                     [bar_dev_bottom], file_name=fname,
-                                    scale_x=concurence,
+                                    scale_x=concurence, label_x="clients",
+                                    label_y="iops",
                                     lines=[
                                         (latv, "msec", "rr", "lat"),
                                         (iops_or_bw_per_vm, None, None,
