diff --git a/_states/jenkins_job.py b/_states/jenkins_job.py
new file mode 100644
index 0000000..e28bed8
--- /dev/null
+++ b/_states/jenkins_job.py
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+
+# Import Python libs
+from __future__ import absolute_import
+import difflib
+import logging
+
+# Import Salt libs
+import salt.ext.six as six
+import salt.utils
+
+# Import XML parser
+import xml.etree.ElementTree as ET
+
+log = logging.getLogger(__name__)
+
+
+def _elements_equal(e1, e2):
+    if e1.tag != e2.tag:
+        return False
+    if e1.text != e2.text:
+        return False
+    if e1.tail != e2.tail:
+        return False
+    if e1.attrib != e2.attrib:
+        return False
+    if len(e1) != len(e2):
+        return False
+    return all(_elements_equal(c1, c2) for c1, c2 in zip(e1, e2))
+
+
+def present(name,
+            config=None,
+            **kwargs):
+    '''
+    Ensure the job is present in the Jenkins
+    configured jobs
+    name
+        The unique name for the Jenkins job
+    config
+        The Salt URL for the file to use for
+        configuring the job.
+    '''
+
+    ret = {'name': name,
+           'result': True,
+           'changes': {},
+           'comment': ['Job {0} is up to date.'.format(name)]}
+
+    _job_exists = __salt__['jenkins.job_exists'](name)
+
+    if _job_exists:
+        _current_job_config = __salt__['jenkins.get_job_config'](name)
+        buf = six.moves.StringIO(_current_job_config)
+        oldXML = ET.fromstring(buf.read())
+
+        cached_source_path = __salt__['cp.cache_file'](config, __env__)
+        with salt.utils.fopen(cached_source_path) as _fp:
+            newXML = ET.fromstring(_fp.read())
+        if not _elements_equal(oldXML, newXML):
+            diff = difflib.unified_diff(
+                oldXML.tostring(), newXML.tostring(), lineterm='')
+            __salt__['jenkins.update_job'](name, config, __env__)
+            ret['changes'] = ''.join(diff)
+            ret['comment'].append('Job {0} updated.'.format(name))
+
+    else:
+        cached_source_path = __salt__['cp.cache_file'](config, __env__)
+        with salt.utils.fopen(cached_source_path) as _fp:
+            new_config_xml = _fp.read()
+
+        __salt__['jenkins.create_job'](name, config, __env__)
+
+        buf = six.moves.StringIO(new_config_xml)
+        _current_job_config = buf.readlines()
+
+        diff = difflib.unified_diff('', buf, lineterm='')
+        ret['changes'] = ''.join(diff)
+        ret['comment'].append('Job {0} added.'.format(name))
+
+    ret['comment'] = '\n'.join(ret['comment'])
+    return ret
+
+
+def absent(name,
+           **kwargs):
+    '''
+    Ensure the job is present in the Jenkins
+    configured jobs
+
+    name
+        The name of the Jenkins job to remove.
+
+    '''
+
+    ret = {'name': name,
+           'result': True,
+           'changes': {},
+           'comment': []}
+
+    _job_exists = __salt__['jenkins.job_exists'](name)
+
+    if _job_exists:
+        __salt__['jenkins.delete_job'](name)
+        ret['comment'] = 'Job {0} deleted.'.format(name)
+    else:
+        ret['comment'] = 'Job {0} already absent.'.format(name)
+    return ret
diff --git a/_states/jenkins_user.py b/_states/jenkins_user.py
index 6f37ec3..0441b42 100644
--- a/_states/jenkins_user.py
+++ b/_states/jenkins_user.py
@@ -21,6 +21,7 @@
 print(result)
 """  # noqa
 
+
 def present(name, username, password, admin=False):
     """
     Main jenkins users state method
@@ -47,7 +48,7 @@
         # try to call jenkins script api with given user and password to prove
         # his existence
         user_exists_result = __salt__['jenkins_common.call_groovy_script'](
-            "print(\"TEST\")", {"username": username}, username, password,[200, 401])
+            "print(\"TEST\")", {"username": username}, username, password, [200, 401])
         user_exists = user_exists_result and user_exists_result[
             "code"] == 200 and user_exists_result["msg"].count("TEST") == 1
         if not user_exists:
diff --git a/jenkins/client/init.sls b/jenkins/client/init.sls
index a31d0a1..a126e87 100644
--- a/jenkins/client/init.sls
+++ b/jenkins/client/init.sls
@@ -6,6 +6,7 @@
   - jenkins.client.job
   - jenkins.client.credential
   - jenkins.client.user
+  - jenkins.client.node
   
 jenkins_client_install:
   pkg.installed:
diff --git a/jenkins/client/job.sls b/jenkins/client/job.sls
index 8139299..3138d4d 100644
--- a/jenkins/client/job.sls
+++ b/jenkins/client/job.sls
@@ -19,7 +19,7 @@
     - file: jenkins_client_dirs
 
 jenkins_job_{{ job_name }}_present:
-  jenkins.present:
+  jenkins_job.present:
   - name: {{ job_name }}
   - config: {{ client.dir.jenkins_jobs_root }}/{{ job_name }}.xml
   - watch:
@@ -35,7 +35,7 @@
     - file: jenkins_client_dirs
 
 jenkins_job_{{ job_name }}_absent:
-  jenkins.absent:
+  jenkins_job.absent:
   - name: {{ job_name }}
   - watch:
     - file: /etc/salt/minion.d/_jenkins.conf
