diff --git a/chart/charts.py b/chart/charts.py
index 7c49abd..1263a64 100644
--- a/chart/charts.py
+++ b/chart/charts.py
@@ -58,11 +58,13 @@
     bar = VerticalBarGroup([], encoding='text')
     bar.title(title)
 
-    dataset = bars_data + bars_dev_top + bars_dev_bottom + [lines[0][0]]
+    dataset = bars_data + bars_dev_top + bars_dev_bottom + \
+              [l[0] for l in lines]
 
     bar.dataset(dataset, series=len(bars_data))
     bar.axes.type('xyy')
     bar.axes.label(2, None, label_x)
+    
     if scale_x:
         bar.axes.label(0, *scale_x)
 
@@ -71,6 +73,7 @@
     bar.axes.style(1, 'N*s*')
     bar.axes.style(2, '000000', '13')
 
+
     bar.scale(*[0, max_value] * 3)
 
     bar.bar('r', '.1', '1')
@@ -89,8 +92,9 @@
             bar.marker('D', COLORS[len(bars_data) + line_n],
                        (len(bars_data + bars_dev_top + bars_dev_bottom))
                        + line_n, 0, 3)
-            max_val_l = max(data)
+            # max_val_l = max(data)
             if axe:
+                max_val_l = max(data)
                 bar.axes.type(axes_type + axe)
                 bar.axes.range(len(axes_type), 0, max_val_l)
                 bar.axes.style(len(axes_type), 'N*s*')
@@ -98,8 +102,11 @@
                 bar.axes.style(len(axes_type) + 1, '000000', '13')
                 axes_type += axe
                 line_n += 1
+                scale += [0, max_val_l]
+            else:
+                scale += [0, max_value]
             legend.append(leg)
-            scale += [0, max_val_l]
+            # scale += [0, max_val_l]
 
     bar.legend(*legend)
     bar.scale(*scale)
diff --git a/report.py b/report.py
index b2cc1a2..c451010 100644
--- a/report.py
+++ b/report.py
@@ -162,6 +162,10 @@
     bar_data, bar_dev = iops_or_bw, iops_or_bw_dev
     legend = [legend]
 
+    iops_or_bw_per_vm = []
+    for i in range(len(concurence)):
+        iops_or_bw_per_vm.append(iops_or_bw[i] / concurence[i])
+
     bar_dev_bottom = []
     bar_dev_top = []
     for i in range(len(bar_data)):
@@ -172,7 +176,11 @@
     ch = charts.render_vertical_bar(title, legend, [bar_data], [bar_dev_top],
                                     [bar_dev_bottom],
                                     scale_x=concurence,
-                                    lines=[(latv, "msec", "rr", "lat")])
+                                    lines=[
+                                        (latv, "msec", "rr", "lat"),
+                                        (iops_or_bw_per_vm, None, None,
+                                            "bw_per_vm")
+                                    ])
     return str(ch)
 
 
@@ -196,6 +204,7 @@
             # ('hdd_test_rrs4k', ('concurence', 'lat', 'iops')),
             ('hdd_test_rrd4k', ('concurence', 'lat', 'iops')),
             ('hdd_test_swd1m', ('concurence', 'lat', 'bw')),
+            ('hdd_test_srd1m', ('concurence', 'lat', 'bw')),
         ]
 
         for name_filter, fields in name_filters:
