diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py
index 9bc5d40..8348f87 100644
--- a/n2vc/k8s_juju_conn.py
+++ b/n2vc/k8s_juju_conn.py
@@ -218,15 +218,15 @@
             await self.login(cluster_uuid)
 
         # We're creating a new cluster
-        #print("Getting model {}".format(self.get_namespace(cluster_uuid), cluster_uuid=cluster_uuid))
-        #model = await self.get_model(
-        #    self.get_namespace(cluster_uuid),
-        #    cluster_uuid=cluster_uuid
-        #)
+        print("Getting model {}".format(self.get_namespace(cluster_uuid), cluster_uuid=cluster_uuid))
+        model = await self.get_model(
+            self.get_namespace(cluster_uuid),
+            cluster_uuid=cluster_uuid
+        )
 
-        ## Disconnect from the model
-        #if model and model.is_connected():
-        #    await model.disconnect()
+        # Disconnect from the model
+        if model and model.is_connected():
+            await model.disconnect()
 
         return cluster_uuid, True
 
@@ -279,21 +279,20 @@
 
                 # Disconnect from the controller
                 print("[reset] Disconnecting controller")
-                await self.logout()
+                await self.controller.disconnect()
 
                 # Destroy the controller (via CLI)
                 print("[reset] Destroying controller")
                 await self.destroy_controller(cluster_uuid)
 
                 print("[reset] Removing k8s cloud")
-                k8s_cloud = "k8s-{}".format(cluster_uuid)
+                namespace = self.get_namespace(cluster_uuid)
+                k8s_cloud = "{}-k8s".format(namespace)
                 await self.remove_cloud(k8s_cloud)
 
         except Exception as ex:
             print("Caught exception during reset: {}".format(ex))
 
-        return True
-
     """Deployment"""
 
     async def install(
@@ -333,10 +332,11 @@
             kdu_instance = db_dict["filter"]["_id"]
 
         self.log.debug("Checking for model named {}".format(kdu_instance))
-
-        # Create the new model
-        self.log.debug("Adding model: {}".format(kdu_instance))
-        model = await self.add_model(kdu_instance, cluster_uuid=cluster_uuid)
+        model = await self.get_model(kdu_instance, cluster_uuid=cluster_uuid)
+        if not model:
+            # Create the new model
+            self.log.debug("Adding model: {}".format(kdu_instance))
+            model = await self.add_model(kdu_instance, cluster_uuid=cluster_uuid)
 
         if model:
             # TODO: Instantiation parameters
@@ -525,17 +525,8 @@
 
         :return: Returns True if successful, or raises an exception
         """
-        if not self.authenticated:
-            self.log.debug("[uninstall] Connecting to controller")
-            await self.login(cluster_uuid)
-
-        self.log.debug("[uninstall] Destroying model")
-
         await self.controller.destroy_models(kdu_instance)
 
-        self.log.debug("[uninstall] Model destroyed and disconnecting")
-        await self.logout()
-
         return True
 
     """Introspection"""
@@ -701,16 +692,10 @@
             await self.login(cluster_uuid)
 
         self.log.debug("Adding model '{}' to cluster_uuid '{}'".format(model_name, cluster_uuid))
-        try:
-            model = await self.controller.add_model(
-                model_name,
-                config={'authorized-keys': self.juju_public_key}
-            )
-        except Exception as ex:
-            self.log.debug(ex)
-            self.log.debug("Caught exception: {}".format(ex))
-            pass
-
+        model = await self.controller.add_model(
+            model_name,
+            config={'authorized-keys': self.juju_public_key}
+        )
         return model
 
     async def bootstrap(
