diff --git a/nodes/node.py b/nodes/node.py
index d7cae40..138d123 100644
--- a/nodes/node.py
+++ b/nodes/node.py
@@ -1,41 +1,16 @@
 class Node(object):
 
-    def __init__(self, ip, roles, username=None,
-                 password=None, key_path=None, port=None):
+    def __init__(self, conn_url, roles):
         self.roles = roles
-        self.ip = ip
-        self.username = username
-        self.password = password
-        self.port = port
-        self.key_path = key_path
+        self.conn_url = conn_url
         self.connection = None
 
     def __str__(self):
-        return "<Node: url={0!r} roles={1} >".format(self.ip,
-                                                     ", ".join(self.roles))
+        templ = "<Node: url={conn_url!r} roles={roles}" + \
+                " connected={is_connected}>"
+        return templ.format(conn_url=self.conn_url,
+                            roles=", ".join(self.roles),
+                            is_connected=self.connection is not None)
 
     def __repr__(self):
         return str(self)
-
-    def set_conn_attr(self, name, value):
-        setattr(self, name, value)
-
-    @property
-    def connection_url(self):
-        connection = []
-
-        if self.username:
-            connection.append(self.username)
-            if self.password:
-                connection.extend([":", self.password, "@"])
-            connection.append("@")
-
-        connection.append(self.ip)
-        if self.port:
-            connection.extend([":", self.port])
-            if self.key_path:
-                connection.extend([":", self.key_path])
-        else:
-            if self.key_path:
-                connection.extend([":", ":", self.key_path])
-        return "".join(connection)
