diff --git a/web_app/__init__.py b/web_app/__init__.py
index eaf9680..ac0bc15 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -1,81 +1,17 @@
 # <koder>: order imports in usual way
 import json
+from logging import getLogger, INFO
 
-from urlparse import urlparse
 from flask import render_template, url_for, make_response, request
 from report import build_vertical_bar, build_lines_chart
-from logging import getLogger, INFO
 from web_app import app
-from web_app.keystone import KeystoneAuth
-from persistance.storage_api import builds_list, prepare_build_data, get_data_for_table, add_data, get_builds_data
+from persistance.storage_api import builds_list, prepare_build_data, get_data_for_table, add_data, get_builds_data, \
+    get_build_info, get_build_detailed_info
 from web_app.app import app
 import os.path
 from werkzeug.routing import Rule
 
 
-def total_lab_info(data):
-    # <koder>: give 'd' meaningful name
-    d = {}
-    d['nodes_count'] = len(data['nodes'])
-    d['total_memory'] = 0
-    d['total_disk'] = 0
-    d['processor_count'] = 0
-
-    for node in data['nodes']:
-        d['total_memory'] += node['memory']['total']
-        d['processor_count'] += len(node['processors'])
-
-        for disk in node['disks']:
-            d['total_disk'] += disk['size']
-
-    to_gb = lambda x: x / (1024 ** 3)
-    d['total_memory'] = format(to_gb(d['total_memory']), ',d')
-    d['total_disk'] = format(to_gb(d['total_disk']), ',d')
-    return d
-
-
-def collect_lab_data(meta):
-    u = urlparse(meta['__meta__'])
-    cred = {"username": "admin", "password": "admin", "tenant_name": "admin"}
-    keystone = KeystoneAuth(root_url=meta['__meta__'], creds=cred, admin_node_ip=u.hostname)
-    lab_info = keystone.do(method='get', path="")
-    nodes = []
-    result = {}
-
-    for node in lab_info:
-        # <koder>: give p,i,d,... vars meaningful names
-        d = {}
-        d['name'] = node['name']
-        p = []
-        i = []
-        disks = []
-        devices = []
-
-        for processor in node['meta']['cpu']['spec']:
-             p.append(processor)
-
-        for iface in node['meta']['interfaces']:
-            i.append(iface)
-
-        m = node['meta']['memory'].copy()
-
-        for disk in node['meta']['disks']:
-            disks.append(disk)
-
-        d['memory'] = m
-        d['disks'] = disks
-        d['devices'] = devices
-        d['interfaces'] = i
-        d['processors'] = p
-
-        nodes.append(d)
-
-    result['nodes'] = nodes
-    result['name'] = 'Perf-1 Env'
-
-    return result
-
-
 def merge_builds(b1, b2):
     d = {}
 
@@ -119,10 +55,8 @@
 
 @app.endpoint('render_test')
 def render_test(test_name):
-    meta = {"__meta__": "http://172.16.52.112:8000/api/nodes"}
-    data = collect_lab_data(meta)
-    lab_meta = total_lab_info(data)
     results = prepare_build_data(test_name)
+    lab_meta = get_build_detailed_info(test_name)
 
     bars = build_vertical_bar(results)
     lines = build_lines_chart(results)
@@ -138,12 +72,10 @@
 @app.endpoint('render_table')
 def render_table(test_name):
     builds = get_data_for_table(test_name)
+    data = get_build_info(test_name)
 
     header_keys = ['build_id', 'iso_md5', 'type', 'date']
     table = [[]]
-    meta = {"__meta__": "http://172.16.52.112:8000/api/nodes"}
-    data = collect_lab_data(meta)
-
     if len(builds) > 0:
         sorted_keys = sorted(builds[0].keys())
 
