diff --git a/nodes/discover.py b/nodes/discover.py
index a59f365..6c02fe6 100644
--- a/nodes/discover.py
+++ b/nodes/discover.py
@@ -1,15 +1,15 @@
 import logging
+import urlparse
+
 import ceph
 import openstack
-
 from utils import parse_creds
 from scripts import connector
-import urlparse
 
 logger = logging.getLogger("io-perf-tool")
 
 
-def discover(discover, clusters_info):
+def discover(ctx, discover, clusters_info):
     nodes_to_run = []
     for cluster in discover:
         if cluster == "openstack":
@@ -36,15 +36,17 @@
                                                           cluster_info)
             nodes_to_run.extend(os_nodes)
 
-        elif cluster == "fuel" or cluster == "fuel+openstack":
+        elif cluster == "fuel":
             cluster_info = clusters_info['fuel']
             cluster_name = cluster_info['openstack_env']
             url = cluster_info['url']
             creds = cluster_info['creds']
             ssh_creds = cluster_info['ssh_creds']
+
             # if user:password format us used
             if not ssh_creds.startswith("ssh://"):
                 ip_port = urlparse.urlparse(url).netloc
+
                 if ':' in ip_port:
                     ip = ip_port.split(":")[0]
                 else:
@@ -52,24 +54,13 @@
 
                 ssh_creds = "ssh://{0}@{1}".format(ssh_creds, ip)
 
-            env = cluster_info['openstack_env']
-            nodes, _, openrc_dict = connector.discover_fuel_nodes(url, creds, cluster_name)
+            dfunc = connector.discover_fuel_nodes
+            nodes, clean_data, openrc_dict = dfunc(url, creds, cluster_name)
 
-            if 'openstack' not in clusters_info:
-                clusters_info['openstack'] = {}
-
-                for key in openrc_dict:
-                        if key == 'OS_AUTH_URL':
-                            url = urlparse.urlparse(openrc_dict[key])
-                            clusters_info['openstack'][key] = \
-                                url.scheme + '://' + \
-                                cluster_info['ext_ip'] \
-                                + ':' +\
-                                str(url.port) +\
-                                url.path
-                        else:
-                            clusters_info['openstack'][key] = \
-                                openrc_dict[key]
+            ctx.fuel_openstack_creds = {'name': openrc_dict['username'],
+                                        'passwd': openrc_dict['password'],
+                                        'tenant': openrc_dict['tenant_name'],
+                                        'auth_url': openrc_dict['os_auth_url']}
 
             nodes_to_run.extend(nodes)
 
diff --git a/nodes/fuel.py b/nodes/fuel.py
index 9b1312e..82e7542 100644
--- a/nodes/fuel.py
+++ b/nodes/fuel.py
@@ -1,34 +1,37 @@
-import logging
+# import logging
 
 
-from node import Node
-import fuel_rest_api
+# import fuel_rest_api
+# from node import Node
 
 
-logger = logging.getLogger("io-perf-tool")
+# logger = logging.getLogger("io-perf-tool")
 
 
-def discover_fuel_nodes(root_url, credentials, cluster_name):
-    """Discover Fuel nodes"""
-    assert credentials.count(':') >= 2
-    user, passwd_tenant = credentials.split(":", 1)
-    passwd, tenant = passwd_tenant.rsplit(":", 1)
-    creds = dict(
-        username=user,
-        password=passwd,
-        tenant_name=tenant,
-    )
+# def discover_fuel_nodes(root_url, credentials, cluster_name):
+#     """Discover Fuel nodes"""
+#     assert credentials.count(':') >= 2
+#     user, passwd_tenant = credentials.split(":", 1)
+#     passwd, tenant = passwd_tenant.rsplit(":", 1)
+#     creds = dict(
+#         username=user,
+#         password=passwd,
+#         tenant_name=tenant,
+#     )
 
-    connection = fuel_rest_api.KeystoneAuth(root_url, creds)
-    fi = fuel_rest_api.FuelInfo(connection)
+#     connection = fuel_rest_api.KeystoneAuth(root_url, creds)
+#     fi = fuel_rest_api.FuelInfo(connection)
 
-    clusters_id = fuel_rest_api.get_cluster_id(connection, cluster_name)
+#     logger.debug("wtf")
+#     clusters_id = fuel_rest_api.get_cluster_id(connection, cluster_name)
+#     logger.debug("wtf2")
 
-    nodes = []
+#     nodes = []
 
-    for node in fi.nodes:
-        if node.cluster == clusters_id:
-            nodes.append(node)
-    res = [Node(n.ip, n.get_roles()) for n in nodes]
-    logger.debug("Found %s fuel nodes for env %r" % (len(res), cluster_name))
-    return res
+#     for node in fi.nodes:
+#         if node.cluster == clusters_id:
+#             nodes.append(node)
+
+#     res = [Node(n.ip, n.get_roles()) for n in nodes]
+#     logger.debug("Found %s fuel nodes for env %r" % (len(res), cluster_name))
+#     return res
