diff --git a/_modules/helm.py b/_modules/helm.py
new file mode 100644
index 0000000..b849676
--- /dev/null
+++ b/_modules/helm.py
@@ -0,0 +1,30 @@
+import logging
+
+from salt.serializers import yaml
+
+HELM_HOME = '/srv/helm/home'
+LOG = logging.getLogger(__name__)
+
+def _helm_cmd(*args):
+    return {
+        'cmd': ('helm',) + args,
+        'env': {'HELM_HOME': HELM_HOME},
+    }
+
+
+def release_exists(name):
+    cmd = _helm_cmd('list', '--short', '--all', name)
+    return __salt__['cmd.run_stdout'](**cmd) == name
+
+
+def release_create(name, chart_name, version=None, values=None):
+    args = []
+    if version is not None:
+        args += ['--version', version]
+    if values is not None:
+        args += ['--values', '/dev/stdin']
+    cmd = _helm_cmd('install', '--name', name, chart_name, *args)
+    if values is not None:
+        cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
+    LOG.debug('Creating release with args: %s', cmd)
+    return __salt__['cmd.retcode'](**cmd) == 0
diff --git a/_states/helm_release.py b/_states/helm_release.py
new file mode 100644
index 0000000..d5272c0
--- /dev/null
+++ b/_states/helm_release.py
@@ -0,0 +1,27 @@
+import logging
+
+def present(name, chart_name, version=None, values=None, logLevel=None):
+    exists =  __salt__['helm.release_exists'](name)
+    if not exists:
+        result = __salt__['helm.release_create'](
+            name, chart_name, version, values)
+        if result:
+            return {
+                'name': name,
+                'changes': {name: 'CREATED'},
+                'result': True,
+                'comment': 'Release "{}" was created'.format(name),
+            }
+        else:
+            return {
+                'name': name,
+                'changes': {},
+                'result': False,
+                'comment': 'Failed to create release "{}"'.format(name),
+            }
+    return {
+        'name': name,
+        'changes': {},
+        'result': True,
+        'comment': 'Release "{}" already exists'.format(name),
+    }
diff --git a/helm/client.sls b/helm/client.sls
index ccf0e4b..5c02416 100644
--- a/helm/client.sls
+++ b/helm/client.sls
@@ -63,33 +63,20 @@
 {%- endfor %}
 
 {%- for release_id, release in client.releases.items() %}
-
-{%- if release.get('values', False) %}
-{%- set values_path = "/srv/helm/releases/" + release_id + "/values.yaml" %}
-
-{{ values_path }}:
-  file.managed:
-    - makedirs: True
-    - contents: |
-        {{ release['values']|yaml(False)|indent(8) }}
-
-{%- endif %}
-
 {%- set release_name = release.get('name', release_id) %}
-
 ensure_{{ release_id }}_release:
-  cmd.run:
-    - name: helm install --name "{{ release_name }}" {{ release['chart'] }}
-      {%- if release.get('version') %} --version {{ release['version'] }}{% endif %}
-      {%- if release.get('values') %} --values {{ values_path }}{% endif %}
-    - unless: helm get "{{ release_name }}"
-    - env:
-      - HELM_HOME: {{ helm_home }}
+  helm_release.present:
+    - name: {{ release_name }}
+    - chart_name: {{ release['chart'] }}
+    {%- if release.get('version') %}
+    - version: {{ release['version'] }}
+    {% endif %}
+    {%- if release.get('values') %}
+    - values:
+        {{ release['values']|yaml(False)|indent(8) }}
+    {% endif %}
     - require:
       - cmd: prepare_client
-      {%- if release.get('values') %}
-      - file: {{ values_path }}
-      {%- endif %}
 {%- endfor %}
 
 {%- endif %}
