diff --git a/_modules/helm.py b/_modules/helm.py
index 76f2bb1..80632d1 100644
--- a/_modules/helm.py
+++ b/_modules/helm.py
@@ -15,53 +15,71 @@
     return msg
 
 
-def _helm_cmd(*args):
+def _helm_cmd(*args, **tiller_kwargs):
+    if tiller_kwargs['tiller_host']:
+        tiller_args = ('--host', tiller_kwargs['tiller_host'])
+    else:
+        tiller_args = ('--tiller-namespace', tiller_kwargs['tiller_namespace'])
     return {
-        'cmd': ('helm',) + args,
+        'cmd': ('helm',) + tiller_args + args,
         'env': {'HELM_HOME': HELM_HOME},
     }
 
 
-def release_exists(name, namespace='default'):
-    cmd = _helm_cmd('list', '--short', '--all', '--namespace', namespace, name)
+def release_exists(name, namespace='default',
+                   tiller_namespace='kube-system', tiller_host=None):
+    cmd = _helm_cmd('list', '--short', '--all', '--namespace', namespace, name,
+                    tiller_namespace=tiller_namespace, tiller_host=tiller_host)
     return __salt__['cmd.run_stdout'](**cmd) == name
 
 
 def release_create(name, chart_name, namespace='default',
-                   version=None, values=None):
+                   version=None, values=None,
+                   tiller_namespace='kube-system', tiller_host=None):
+    tiller_args = {
+        'tiller_namespace': tiller_namespace,
+        'tiller_host': tiller_host,
+    }
     args = []
     if version is not None:
         args += ['--version', version]
     if values is not None:
         args += ['--values', '/dev/stdin']
     cmd = _helm_cmd('install', '--namespace', namespace,
-                    '--name', name, chart_name, *args)
+                    '--name', name, chart_name, *args, **tiller_args)
     if values is not None:
         cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
     LOG.debug('Creating release with args: %s', cmd)
     return ok_or_output(cmd, 'Failed to create release "{}"'.format(name))
 
 
-def release_delete(name):
-    cmd = _helm_cmd('delete', '--purge', name)
+def release_delete(name, tiller_namespace='kube-system', tiller_host=None):
+    cmd = _helm_cmd('delete', '--purge', name,
+                    tiller_namespace=tiller_namespace, tiller_host=tiller_host)
     return ok_or_output(cmd, 'Failed to delete release "{}"'.format(name))
 
 
 def release_upgrade(name, chart_name, namespace='default',
-                    version=None, values=None):
+                    version=None, values=None,
+                    tiller_namespace='kube-system', tiller_host=None):
+    tiller_args = {
+        'tiller_namespace': tiller_namespace,
+        'tiller_host': tiller_host,
+    }
     args = []
     if version is not None:
         args += ['--version', version]
     if values is not None:
         args += ['--values', '/dev/stdin']
     cmd = _helm_cmd('upgrade', '--namespace', namespace,
-                    name, chart_name, *args)
+                    name, chart_name, *args, **tiller_args)
     if values is not None:
         cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
     LOG.debug('Upgrading release with args: %s', cmd)
     return ok_or_output(cmd, 'Failed to upgrade release "{}"'.format(name))
 
 
-def get_values(name):
-    cmd = _helm_cmd('get', 'values', '--all', name)
+def get_values(name, tiller_namespace='kube-system', tiller_host=None):
+    cmd = _helm_cmd('get', 'values', '--all', name,
+                    tiller_namespace=tiller_namespace, tiller_host=tiller_host)
     return yaml.deserialize(__salt__['cmd.run_stdout'](**cmd))
