diff --git a/layers/pingpong/reactive/pingpong.py b/layers/pingpong/reactive/pingpong.py
index 21b31ea..05debf4 100644
--- a/layers/pingpong/reactive/pingpong.py
+++ b/layers/pingpong/reactive/pingpong.py
@@ -49,22 +49,6 @@
     return port
 
 
-def run(cmd):
-    """ Run a command on the local machine. """
-    if isinstance(cmd, str):
-        cmd = cmd.split() if ' ' in cmd else [cmd]
-    p = Popen(cmd,
-              stdout=PIPE,
-              stderr=PIPE)
-    stdout, stderr = p.communicate()
-    retcode = p.poll()
-    if retcode > 0:
-        raise CalledProcessError(returncode=retcode,
-                                 cmd=cmd,
-                                 output=stderr.decode("utf-8").strip())
-    return (stdout.decode('utf-8').strip(), stderr.decode('utf-8').strip())
-
-
 @when('pingpong.configured')
 @when('actions.start')
 def start():
@@ -149,7 +133,7 @@
             data,
         )
 
-        result, err = run(cmd)
+        result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -167,7 +151,7 @@
             rate = action_get('rate')
             cmd = format_curl('POST', '/rate', '{{"rate" : {}}}'.format(rate))
 
-            result, err = run(cmd)
+            result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         err = "{}".format(e)
         action_fail('command failed: {}, errors: {}'.format(err, e.output))
@@ -185,7 +169,7 @@
         if is_ping():
             cmd = format_curl('GET', '/rate')
 
-            result, err = run(cmd)
+            result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -201,7 +185,7 @@
     try:
         cmd = format_curl('GET', '/state')
 
-        result, err = run(cmd)
+        result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -217,7 +201,7 @@
     try:
         cmd = format_curl('GET', '/stats')
 
-        result, err = run(cmd)
+        result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -233,7 +217,7 @@
     try:
         cmd = format_curl('POST', '/adminstatus/state', '{"enable" : true}')
 
-        result, err = run(cmd)
+        result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -249,7 +233,7 @@
     try:
         cmd = format_curl('POST', '/adminstatus/state', '{"enable" : false}')
 
-        result, err = run(cmd)
+        result, err = charms.sshproxy._run(cmd)
     except Exception as e:
         action_fail('command failed: {}, errors: {}'.format(e, e.output))
     else:
@@ -268,7 +252,7 @@
         return None
 
     # Get our service info
-    host = cfg['ssh-hostname']
+    host = '127.0.0.1'
     port = get_port()
     mode = cfg['mode']
 
