diff --git a/test_results/test.json b/test_results/test.json
deleted file mode 100644
index 89908a3..0000000
--- a/test_results/test.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
-    {
-        "build_id": "abcd",
-        "read_async_16kb": "106",
-        "read_async_32kb": "128",
-        "read_async_4kb": "101",
-        "iso_md5": "abcd",
-        "date": "01.01.2015 11:00:00",
-        "read_sync_32kb": "68",
-        "type": "GA",
-        "read_sync_16kb": "56",
-        "read_sync_4kb": "42"
-    },
-    {
-        "build_id": "abcd",
-        "read_async_16kb": "106",
-        "read_sync_4kb": "42",
-        "read_async_32kb": "128",
-        "iso_md5": "abcd",
-        "date": "01.01.2015 11:00:00",
-        "read_sync_32kb": "68",
-        "type": "GA",
-        "read_sync_16kb": "56",
-        "read_async_4kb": "101"
-    },
-    {
-        "build_id": "abcd",
-        "read_async_32kb": "128",
-        "read_async_16kb": "106",
-        "read_async_4kb": "101",
-        "iso_md5": "abcd",
-        "date": "01.01.2015 11:00:00",
-        "read_sync_32kb": "68",
-        "type": "GA",
-        "read_sync_16kb": "56",
-        "read_sync_4kb": "42"
-    }
-]
\ No newline at end of file
diff --git a/web_app/__init__.py b/web_app/__init__.py
index 820be22..fb03f3e 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -3,7 +3,7 @@
 from flask_bootstrap import Bootstrap
 from config import TEST_PATH
 from report import build_vertical_bar, build_lines_chart
-from storage_api import create_storage
+from storage_api import create_storage, Measurement
 from logging import getLogger, INFO
 
 import json
@@ -24,6 +24,22 @@
     return result
 
 
+def collect_builds():
+    builds = []
+    build_set = set()
+    tests = collect_tests()
+
+    for t in tests:
+        test = load_test(t)
+
+        for build in test:
+            if build["type"] not in build_set:
+                build_set.add(build["type"])
+                builds.append(build)
+
+    return builds
+
+
 def load_test(test_name):
     test_name += '.json'
 
@@ -41,22 +57,41 @@
 @app.route("/", methods=['GET', 'POST'])
 def index():
     data = []
-    for test in collect_tests():
+
+    for build in collect_builds():
         d = {}
-        d["name"] = test
-        d["url"] = url_for("render_test", test_name=test)
+        d["name"] = build['type']
+        d["url"] = url_for("render_test", test_name=build['type'])
         data.append(d)
 
     return render_template("index.html", tests=data)
 
 
+def create_measurement(build):
+    m = Measurement()
+    m.build = build.pop("build_id")
+    m.build_type = build.pop("type")
+    m.md5 = build.pop("iso_md5")
+    m.results = {k: v for k, v in build.items()}
+
+    return m
+
+
 @app.route("/tests/<test_name>", methods=['GET'])
 def render_test(test_name):
-    tests = load_test(test_name)
+    tests = [] #load_test(test_name)
     header_keys = ['build_id', 'iso_md5', 'type']
     table = [[]]
-    storage = create_storage('file://' + TEST_PATH + '/' + test_name + '.json')
-    results = storage.recent_builds()
+    builds_to_compare = ['GA', 'master', test_name]
+    builds = collect_builds()
+    results = {}
+
+    for build in builds:
+        if build['type'] in builds_to_compare:
+            type = build['type']
+            m = create_measurement(build)
+            results[type] = m
+
     bars = build_vertical_bar(results)
     lines = build_lines_chart(results)
     urls = bars + lines
@@ -124,19 +159,21 @@
 
 @app.route("/tests/table/<test_name>/")
 def render_table(test_name):
-    tests = load_test(test_name)
+    builds = collect_builds()
+    builds = filter(lambda x: x["type"] in ['GA', 'master', test_name], builds)
     header_keys = ['build_id', 'iso_md5', 'type']
     table = [[]]
     meta = {"__meta__": "http://172.16.52.112:8000/api/nodes"}
-    data = collect_lab_data(tests, meta)
-    if len(tests) > 0:
-        sorted_keys = sorted(tests[0].keys())
+    data = collect_lab_data(builds, meta)
+
+    if len(builds) > 0:
+        sorted_keys = sorted(builds[0].keys())
 
         for key in sorted_keys:
             if key not in header_keys:
                 header_keys.append(key)
 
-        for test in tests:
+        for test in builds:
             row = []
 
             for header in header_keys:
diff --git a/web_app/templates/lab_main.html b/web_app/templates/lab_main.html
new file mode 100644
index 0000000..57c7a13
--- /dev/null
+++ b/web_app/templates/lab_main.html
@@ -0,0 +1,20 @@
+<div>
+    <table align="center">
+        <tr>
+            <td>Openstack Release :</td>
+            <td>Juno on Ubuntu 12.04.4</td>
+        </tr>
+        <tr>
+            <td>Relese Fuel:</td>
+            <td>6.1</td>
+        </tr>
+        <tr>
+            <td>Operation system</td>
+            <td>Ubuntu</td>
+        </tr>
+        <tr>
+            <td>Ceph version</td>
+            <td> 1.0</td>
+        </tr>
+    </table>
+</div>
\ No newline at end of file
diff --git a/web_app/templates/test.html b/web_app/templates/test.html
index f938c43..c54f9dc 100644
--- a/web_app/templates/test.html
+++ b/web_app/templates/test.html
@@ -9,15 +9,27 @@
 <body>
     {% block body %}
     <h1 align="center">Perf-1 Env</h1>
+    {% include 'lab_main.html'%}
+    <br>
     <div class="table-responsive">
-        <table class="table" width="600">
         <div id="images">
-            {% for url in urls %}
-                <div>
-                    <img src="{{ url }}">
-                </div>
-            {% endfor %}
+            <table cellspacing="20">
+                {% for url in urls %}
+                    {% if loop.index is divisibleby 2 %}
+                        <tr>
+                            <td>
+                                <img src="{{ url }}">
+                            </td>
+                    {% else %}
+                            <td>
+                                <img src="{{ url }}">
+                            </td>
+                        </tr>
+                    {% endif %}
+                {% endfor %}
+            </table>
         </div>
+        <table class="table" width="600">
         {% for header in headers %}
         <th>
             <h2>{{ header }}</h2>
