diff --git a/conjureup/controllers/clouds/gui.py b/conjureup/controllers/clouds/gui.py
index bef8da0..37898cb 100644
--- a/conjureup/controllers/clouds/gui.py
+++ b/conjureup/controllers/clouds/gui.py
@@ -5,7 +5,8 @@ from conjureup import controllers
 from conjureup.app_config import app
 from conjureup import juju
 import petname
-from . import common
+from conjureup.controllers.clouds.common import (get_controller_in_cloud,
+                                                 list_clouds)
 
 
 class CloudsController:
@@ -28,7 +29,7 @@ class CloudsController:
         cloud: Cloud to create the controller/model on.
         """
         utils.pollinate(app.session_id, 'CS')
-        existing_controller = common.get_controller_in_cloud(cloud)
+        existing_controller = get_controller_in_cloud(cloud)
 
         if existing_controller is None:
             return controllers.use('newcloud').render(cloud)
@@ -46,7 +47,7 @@ class CloudsController:
         return controllers.use('variants').render()
 
     def render(self):
-        clouds = common.list_clouds()
+        clouds = list_clouds()
         excerpt = app.config.get(
             'description',
             "Please select from a list of available clouds")
diff --git a/conjureup/controllers/clouds/tui.py b/conjureup/controllers/clouds/tui.py
index d7d7e87..cc8a7b1 100644
--- a/conjureup/controllers/clouds/tui.py
+++ b/conjureup/controllers/clouds/tui.py
@@ -2,7 +2,8 @@ from conjureup import controllers
 from conjureup import juju
 from conjureup import utils
 from conjureup.app_config import app
-from . import common
+from conjureup.controllers.clouds.common import get_controller_in_cloud
+
 import petname
 import sys
 import os
@@ -17,7 +18,7 @@ class CloudsController:
                          "/usr/share/conjure-up/run-lxd-config",
                          back)
 
-        existing_controller = common.get_controller_in_cloud(app.argv.cloud)
+        existing_controller = get_controller_in_cloud(app.argv.cloud)
         if existing_controller is None:
             return controllers.use('newcloud').render(app.argv.cloud)
 

test failure if no juju found on system
travis-ci caught this when no juju is found:

```
======================================================================
ERROR: call finish
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/build/conjure-up/conjure-up/test/test_controllers_clouds_gui.py", line 94, in test_finish
    self.controller.finish(self.cloudname)
  File "/home/travis/build/conjure-up/conjure-up/conjureup/controllers/clouds/gui.py", line 31, in finish
    existing_controller = common.get_controller_in_cloud(cloud)
  File "/home/travis/build/conjure-up/conjure-up/conjureup/controllers/clouds/common.py", line 63, in get_controller_in_cloud
    controllers = juju.get_controllers()['controllers'].items()
  File "/home/travis/build/conjure-up/conjure-up/conjureup/juju.py", line 515, in get_controllers
    "Unable to list controllers: {}".format(sh.stderr.decode('utf8')))
LookupError: Unable to list controllers: /bin/sh: 1: juju: not found


======================================================================
ERROR: call finish
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/build/conjure-up/conjure-up/test/test_controllers_clouds_tui.py", line 97, in test_finish
    self.controller.finish()
  File "/home/travis/build/conjure-up/conjure-up/conjureup/controllers/clouds/tui.py", line 20, in finish
    existing_controller = common.get_controller_in_cloud(app.argv.cloud)
  File "/home/travis/build/conjure-up/conjure-up/conjureup/controllers/clouds/common.py", line 63, in get_controller_in_cloud
    controllers = juju.get_controllers()['controllers'].items()
  File "/home/travis/build/conjure-up/conjure-up/conjureup/juju.py", line 515, in get_controllers
    "Unable to list controllers: {}".format(sh.stderr.decode('utf8')))
LookupError: Unable to list controllers: /bin/sh: 1: juju: not found
```
diff --git a/test/test_controllers_clouds_gui.py b/test/test_controllers_clouds_gui.py
index 3202389..2736bc7 100644
--- a/test/test_controllers_clouds_gui.py
+++ b/test/test_controllers_clouds_gui.py
@@ -19,8 +19,8 @@
 
 
 import unittest
-#  from unittest.mock import ANY, call, MagicMock, patch, sentinel
-from unittest.mock import patch, MagicMock
+
+from unittest.mock import call, patch, MagicMock
 
 from conjureup.controllers.clouds.gui import CloudsController
 
@@ -44,17 +44,17 @@ class CloudsGUIRenderTestCase(unittest.TestCase):
             'conjureup.controllers.clouds.gui.app')
         mock_app = self.app_patcher.start()
         mock_app.ui = MagicMock(name="app.ui")
-        self.common_patcher = patch(
-            'conjureup.controllers.clouds.gui.common')
-        self.mock_common = self.common_patcher.start()
-        self.mock_common.list_clouds.return_value = ['test1', 'test2']
+        self.list_clouds_patcher = patch(
+            'conjureup.controllers.clouds.gui.list_clouds')
+        self.mock_list_clouds = self.list_clouds_patcher.start()
+        self.mock_list_clouds.return_value = ['test1', 'test2']
 
     def tearDown(self):
         self.utils_patcher.stop()
         self.finish_patcher.stop()
         self.view_patcher.stop()
         self.app_patcher.stop()
-        self.common_patcher.start()
+        self.list_clouds_patcher.start()
 
     def test_render(self):
         "call render"
@@ -82,13 +82,32 @@ class CloudsGUIFinishTestCase(unittest.TestCase):
         self.mock_app.ui = MagicMock(name="app.ui")
 
         self.cloudname = 'testcloudname'
+        self.juju_patcher = patch(
+            'conjureup.controllers.clouds.gui.juju')
+        self.mock_juju = self.juju_patcher.start()
+
+        self.gcc_patcher = patch(
+            'conjureup.controllers.clouds.gui.get_controller_in_cloud')
+        self.mock_gcc = self.gcc_patcher.start()
 
     def tearDown(self):
         self.controllers_patcher.stop()
         self.utils_patcher.stop()
         self.render_patcher.stop()
         self.app_patcher.stop()
-
-    def test_finish(self):
-        "call finish"
-        self.controller.finish(self.cloudname)
+        self.juju_patcher.stop()
+        self.gcc_patcher.stop()
+
+    def test_finish_w_controller(self):
+        "clouds.finish with an existing controller"
+        self.mock_gcc.return_value = 'testcontroller'
+        self.controller.finish('testcloud')
+        self.mock_juju.assert_has_calls([
+            call.switch_controller('testcontroller')])
+
+    def test_finish_no_controller(self):
+        "clouds.finish without existing controller"
+        self.mock_gcc.return_value = None
+        self.controller.finish('testcloud')
+        self.mock_controllers.use.assert_has_calls([
+            call('newcloud'), call().render('testcloud')])
diff --git a/test/test_controllers_clouds_tui.py b/test/test_controllers_clouds_tui.py
index 222b244..44a4c20 100644
--- a/test/test_controllers_clouds_tui.py
+++ b/test/test_controllers_clouds_tui.py
@@ -19,8 +19,8 @@
 
 
 import unittest
-#  from unittest.mock import ANY, call, MagicMock, patch, sentinel
-from unittest.mock import patch, MagicMock
+
+from unittest.mock import call, patch, MagicMock
 
 from conjureup.controllers.clouds.tui import CloudsController
 
@@ -85,13 +85,33 @@ class CloudsTUIFinishTestCase(unittest.TestCase):
             'conjureup.controllers.clouds.tui.app')
         self.mock_app = self.app_patcher.start()
         self.mock_app.ui = MagicMock(name="app.ui")
+        self.juju_patcher = patch(
+            'conjureup.controllers.clouds.tui.juju')
+        self.mock_juju = self.juju_patcher.start()
+
+        self.gcc_patcher = patch(
+            'conjureup.controllers.clouds.tui.get_controller_in_cloud')
+        self.mock_gcc = self.gcc_patcher.start()
 
     def tearDown(self):
         self.controllers_patcher.stop()
         self.utils_patcher.stop()
         self.render_patcher.stop()
         self.app_patcher.stop()
+        self.juju_patcher.stop()
+        self.gcc_patcher.stop()
+
+    def test_finish_w_controller(self):
+        "clouds.finish with an existing controller"
+        self.mock_gcc.return_value = 'testcontroller'
+        self.controller.finish()
+        self.mock_juju.assert_has_calls([
+            call.switch_controller('testcontroller')])
 
-    def test_finish(self):
-        "call finish"
+    def test_finish_no_controller(self):
+        "clouds.finish without existing controller"
+        self.mock_gcc.return_value = None
+        self.mock_app.argv.cloud = 'testcloud'
         self.controller.finish()
+        self.mock_controllers.use.assert_has_calls([
+            call('newcloud'), call().render('testcloud')])
diff --git a/test/test_controllers_deploy_tui.py b/test/test_controllers_deploy_tui.py
index 7606d20..6c8bc6d 100644
--- a/test/test_controllers_deploy_tui.py
+++ b/test/test_controllers_deploy_tui.py
@@ -92,12 +92,22 @@ class DeployTUIFinishTestCase(unittest.TestCase):
             'conjureup.controllers.deploy.tui.app')
         self.mock_app = self.app_patcher.start()
         self.mock_app.ui = MagicMock(name="app.ui")
+        self.juju_patcher = patch(
+            'conjureup.controllers.deploy.tui.juju')
+        self.mock_juju = self.juju_patcher.start()
+        self.mock_juju.JUJU_ASYNC_QUEUE = sentinel.JUJU_ASYNC_QUEUE
+
+        self.concurrent_patcher = patch(
+            'conjureup.controllers.deploy.tui.concurrent')
+        self.mock_concurrent = self.concurrent_patcher.start()
 
     def tearDown(self):
         self.controllers_patcher.stop()
         self.utils_patcher.stop()
         self.render_patcher.stop()
         self.app_patcher.stop()
+        self.juju_patcher.stop()
+        self.concurrent_patcher.stop()
 
     def test_finish(self):
         "call finish"

pip install -e .
parse_log_pytest
requirements.txt
nose tox pytest
apt-get update apt-get install -y gcc
3.5
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
bson==0.5.10
certifi==2021.5.30
charset-normalizer==2.0.12
configobj==5.0.8
-e git+https://github.com/conjure-up/conjure-up.git@0237d91780f13541affc3de3771ac2be54bcb4b6#egg=conjure_up
distlib==0.3.9
filelock==3.4.1
idna==3.10
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
Jinja2==3.0.3
MarkupSafe==2.0.1
nose==1.3.7
oauthlib==3.2.2
packaging==21.3
petname==2.6
platformdirs==2.4.0
pluggy==1.0.0
progressbar2==3.55.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
python-utils==3.5.2
PyYAML==6.0.1
requests==2.27.1
requests-oauthlib==2.0.0
six==1.17.0
termcolor==1.1.0
toml==0.10.2
tomli==1.2.3
tox==3.28.0
typing_extensions==4.1.1
urllib3==1.26.20
urwid==2.1.2
virtualenv==20.17.1
ws4py==0.3.4
zipp==3.6.0

name: conjure-up
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - bson==0.5.10
      - charset-normalizer==2.0.12
      - configobj==5.0.8
      - distlib==0.3.9
      - filelock==3.4.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - jinja2==3.0.3
      - markupsafe==2.0.1
      - nose==1.3.7
      - oauthlib==3.2.2
      - packaging==21.3
      - petname==2.6
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - progressbar2==3.55.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - python-utils==3.5.2
      - pyyaml==6.0.1
      - requests==2.27.1
      - requests-oauthlib==2.0.0
      - six==1.17.0
      - termcolor==1.1.0
      - toml==0.10.2
      - tomli==1.2.3
      - tox==3.28.0
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - urwid==2.1.2
      - virtualenv==20.17.1
      - ws4py==0.3.4
      - zipp==3.6.0
prefix: /opt/conda/envs/conjure-up

test/test_controllers_clouds_gui.py::CloudsGUIRenderTestCase::test_render test/test_controllers_clouds_gui.py::CloudsGUIFinishTestCase::test_finish_no_controller test/test_controllers_clouds_gui.py::CloudsGUIFinishTestCase::test_finish_w_controller test/test_controllers_clouds_tui.py::CloudsTUIFinishTestCase::test_finish_no_controller test/test_controllers_clouds_tui.py::CloudsTUIFinishTestCase::test_finish_w_controller
test/test_controllers_clouds_tui.py::CloudsTUIRenderTestCase::test_render test/test_controllers_clouds_tui.py::CloudsTUIRenderTestCase::test_render_unknown test/test_controllers_deploy_tui.py::DeployTUIRenderTestCase::test_render test/test_controllers_deploy_tui.py::DeployTUIFinishTestCase::test_finish
conjureup/controllers/clouds/tui.py conjureup/controllers/clouds/gui.py
conjureup/controllers/clouds/tui.py conjureup/controllers/clouds/gui.py