diff --git a/_states/helm_release.py b/_states/helm_release.py
index d736045..1004afb 100644
--- a/_states/helm_release.py
+++ b/_states/helm_release.py
@@ -3,35 +3,36 @@
 
 from salt.serializers import yaml
 
+
+def failure(name, message):
+    return {
+        'name': name,
+        'changes': {},
+        'result': False,
+        'comment': message,
+    }
+
+
 def present(name, chart_name, version=None, values=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),
-            }
+        if not result:
+            return failure(name, 'Failed to create release "{}"'.format(name))
+        return {
+            'name': name,
+            'changes': {name: 'CREATED'},
+            'result': True,
+            'comment': 'Release "{}" was created'.format(name),
+        }
+
     old_values = __salt__['helm.get_values'](name)
     result = __salt__['helm.release_upgrade'](
         name, chart_name, version, values)
     if not result:
-        return {
-            'name': name,
-            'changes': {},
-            'result': False,
-            'comment': 'Failed to create release "{}"'.format(name),
-        }
+        return failure(name, 'Failed to create release "{}"'.format(name))
+
     new_values = __salt__['helm.get_values'](name)
     if new_values == old_values:
         return {
@@ -40,6 +41,7 @@
             'result': True,
             'comment': 'Release "{}" already exists'.format(name),
         }
+
     old_str = yaml.serialize(old_values, default_flow_style=False)
     new_str = yaml.serialize(new_values, default_flow_style=False)
     diff = difflib.unified_diff(
@@ -63,12 +65,7 @@
         }
     result = __salt__['helm.release_delete'](name)
     if not result:
-        return {
-            'name': name,
-            'changes': {},
-            'result': False,
-            'comment': 'Failed to delete release "{}"'.format(name),
-        }
+        return failure(name, 'Failed to delete release "{}"'.format(name))
     return {
         'name': name,
         'changes': {name: 'DELETED'},
