diff --git a/web_app/__init__.py b/web_app/__init__.py
index 3673b24..820be22 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -1,3 +1,4 @@
+from urlparse import urlparse
 from flask import Flask, render_template, url_for, request, g
 from flask_bootstrap import Bootstrap
 from config import TEST_PATH
@@ -7,7 +8,7 @@
 
 import json
 import os.path
-import requests
+from web_app.keystone import KeystoneAuth
 
 app = Flask(__name__)
 Bootstrap(app)
@@ -81,8 +82,10 @@
 
 
 def collect_lab_data(tests, meta):
-    print requests.get(meta['__meta__'], cookies={"token" : '72237e94dc2b408482c29edaf3609da7'}).content
-    lab_info = json.loads(requests.get(meta['__meta__'], cookies={"token" : '72237e94dc2b408482c29edaf3609da7'}).content)
+    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 = {}
 
@@ -124,9 +127,8 @@
     tests = load_test(test_name)
     header_keys = ['build_id', 'iso_md5', 'type']
     table = [[]]
-    meta = {"__meta__" : "http://172.16.52.112:8000/api/nodes"}
-    # data = collect_lab_data(tests, meta)
-    data = {}
+    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())
 
diff --git a/web_app/keystone.py b/web_app/keystone.py
new file mode 100644
index 0000000..0d2c5f3
--- /dev/null
+++ b/web_app/keystone.py
@@ -0,0 +1,98 @@
+from functools import partial
+import json
+import urllib2
+from keystoneclient.v2_0 import Client as keystoneclient
+from keystoneclient import exceptions
+
+class Urllib2HTTP(object):
+    """
+    class for making HTTP requests
+    """
+
+    allowed_methods = ('get', 'put', 'post', 'delete', 'patch', 'head')
+
+    def __init__(self, root_url, headers=None, echo=False):
+        """
+        """
+        if root_url.endswith('/'):
+            self.root_url = root_url[:-1]
+        else:
+            self.root_url = root_url
+
+        self.headers = headers if headers is not None else {}
+        self.echo = echo
+
+    def do(self, method, path, params=None):
+        if path.startswith('/'):
+            url = self.root_url + path
+        else:
+            url = self.root_url + '/' + path
+
+        if method == 'get':
+            assert params == {} or params is None
+            data_json = None
+        else:
+            data_json = json.dumps(params)
+
+        request = urllib2.Request(url,
+                                  data=data_json,
+                                  headers=self.headers)
+        if data_json is not None:
+            request.add_header('Content-Type', 'application/json')
+
+        request.get_method = lambda: method.upper()
+        response = urllib2.urlopen(request)
+
+        print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+        # if method.lower() == "put":
+        #     import ipdb;ipdb.set_trace()
+
+        if response.code < 200 or response.code > 209:
+            raise IndexError(url)
+
+        content = response.read()
+
+        if '' == content:
+            return None
+
+        return json.loads(content)
+
+    def __getattr__(self, name):
+        if name in self.allowed_methods:
+            return partial(self.do, name)
+        raise AttributeError(name)
+
+
+class KeystoneAuth(Urllib2HTTP):
+    def __init__(self, root_url, creds, headers=None, echo=False,
+                 admin_node_ip=None):
+        super(KeystoneAuth, self).__init__(root_url, headers, echo)
+        self.keystone_url = "http://{0}:5000/v2.0".format(admin_node_ip)
+        self.keystone = keystoneclient(
+            auth_url=self.keystone_url, **creds)
+        self.refresh_token()
+
+    def refresh_token(self):
+        """Get new token from keystone and update headers"""
+        try:
+            self.keystone.authenticate()
+            self.headers['X-Auth-Token'] = self.keystone.auth_token
+        except exceptions.AuthorizationFailure:
+            print 'asdfsf'
+
+    def do(self, method, path, params=None):
+        """Do request. If gets 401 refresh token"""
+        try:
+            return super(KeystoneAuth, self).do(method, path, params)
+        except urllib2.HTTPError as e:
+            if e.code == 401:
+                self.refresh_token()
+                return super(KeystoneAuth, self).do(method, path, params)
+            else:
+                raise
+
+#
+# cred = {"username": "admin", "password": "admin", "tenant_name": "admin"}
+# keystone = KeystoneAuth(root_url='http://172.16.52.112:8000', creds=cred, admin_node_ip='172.16.52.112')
+# result = keystone.do(method='get', path="api/nodes")
+# print result
\ No newline at end of file
diff --git a/web_app/templates/test.html b/web_app/templates/test.html
index 6313b62..f938c43 100644
--- a/web_app/templates/test.html
+++ b/web_app/templates/test.html
@@ -13,7 +13,9 @@
         <table class="table" width="600">
         <div id="images">
             {% for url in urls %}
-            <img src="{{ url }}">    
+                <div>
+                    <img src="{{ url }}">
+                </div>
             {% endfor %}
         </div>
         {% for header in headers %}
