diff --git a/wally/start_vms.py b/wally/start_vms.py
index af81463..a55fdbf 100644
--- a/wally/start_vms.py
+++ b/wally/start_vms.py
@@ -16,22 +16,21 @@
 from cinderclient.client import Client as CinderClient
 from glanceclient import Client as GlanceClient
 
-
 from .utils import Timeout
 from .node_interfaces import NodeInfo
+from .storage import IStorable
 
 
 __doc__ = """
 Module used to reliably spawn set of VM's, evenly distributed across
 compute servers in openstack cluster. Main functions:
 
-    get_OS_credentials - extract openstack credentials from different sources
-    nova_connect - connect to nova api
-    cinder_connect - connect to cinder api
-    find - find VM with given prefix in name
-    prepare_OS - prepare tenant for usage
+    get_openstack_credentials - extract openstack credentials from different sources
+    os_connect - connect to nova, cinder and glance API
+    find_vms - find VM's with given prefix in name
+    prepare_os - prepare tenant for usage
     launch_vms - reliably start set of VM in parallel with volumes and floating IP
-    clear_all - clear VM and volumes
+    clear_nodes - clear VM and volumes
 """
 
 
@@ -79,14 +78,20 @@
     return OSConnection(nova, cinder, glance)
 
 
-def find_vms(conn: OSConnection, name_prefix: str) -> Iterable[str, int]:
+def find_vms(conn: OSConnection, name_prefix: str) -> Iterable[Tuple[str, int]]:
     for srv in conn.nova.servers.list():
         if srv.name.startswith(name_prefix):
+
+            # need to exit after found server first external IP
+            # so have to rollout two cycles to avoid using exceptions
+            all_ip = []  # type: List[Any]
             for ips in srv.addresses.values():
-                for ip in ips:
-                    if ip.get("OS-EXT-IPS:type", None) == 'floating':
-                        yield ip['addr'], srv.id
-                        break
+                all_ip.extend(ips)
+
+            for ip in all_ip:
+                if ip.get("OS-EXT-IPS:type", None) == 'floating':
+                    yield ip['addr'], srv.id
+                    break
 
 
 def pause(conn: OSConnection, ids: Iterable[int], executor: ThreadPoolExecutor) -> None:
@@ -326,7 +331,7 @@
     return vol
 
 
-def wait_for_server_active(conn: OSConnection, server: Any, timeout: int = 300)-> None:
+def wait_for_server_active(conn: OSConnection, server: Any, timeout: int = 300) -> bool:
     """waiting till server became active
 
     parameters:
