diff --git a/README.rst b/README.rst
index 0631c4d..a8378fd 100644
--- a/README.rst
+++ b/README.rst
@@ -306,6 +306,14 @@
             - repository: base
               file: macros/git.groovy
 
+Purging undefined jobs from Jenkins
+
+.. code-block:: yaml
+
+    jenkins:
+      client:
+        purge_jobs: true
+
 Plugins management from client
 
 .. code-block:: yaml
diff --git a/_states/jenkins_job.py b/_states/jenkins_job.py
index 0213f4e..a8ee964 100644
--- a/_states/jenkins_job.py
+++ b/_states/jenkins_job.py
@@ -41,45 +41,48 @@
         The Salt URL for the file to use for
         configuring the job.
     '''
-
+    test = __opts__['test']
     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(
-                ET.tostringlist(oldXML, encoding='utf8', method='xml'),
-                ET.tostringlist(newXML, encoding='utf8', method='xml'), lineterm='')
-            __salt__['jenkins.update_job'](name, config, __env__)
-            ret['changes'] = ''.join(diff)
-            ret['comment'].append('Job {0} updated.'.format(name))
-
+    if test:
+        status = 'CREATED'
+        ret['changes'][name] = status
+        ret['comment'] = 'Job %s %s' % (name, status.lower())
     else:
-        cached_source_path = __salt__['cp.cache_file'](config, __env__)
-        with salt.utils.fopen(cached_source_path) as _fp:
-            new_config_xml = _fp.read()
+        _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())
 
-        __salt__['jenkins.create_job'](name, config, __env__)
+            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(
+                    ET.tostringlist(oldXML, encoding='utf8', method='xml'),
+                    ET.tostringlist(newXML, encoding='utf8', method='xml'), lineterm='')
+                __salt__['jenkins.update_job'](name, config, __env__)
+                ret['changes'] = ''.join(diff)
+                ret['comment'].append('Job {0} updated.'.format(name))
 
-        buf = six.moves.StringIO(new_config_xml)
-        _current_job_config = buf.readlines()
+        else:
+            cached_source_path = __salt__['cp.cache_file'](config, __env__)
+            with salt.utils.fopen(cached_source_path) as _fp:
+                new_config_xml = _fp.read()
 
-        diff = difflib.unified_diff('', buf, lineterm='')
-        ret['changes'] = ''.join(diff)
-        ret['comment'].append('Job {0} added.'.format(name))
+            __salt__['jenkins.create_job'](name, config, __env__)
 
-    ret['comment'] = '\n'.join(ret['comment'])
+            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
 
 
@@ -93,17 +96,70 @@
         The name of the Jenkins job to remove.
 
     '''
-
+    test = __opts__['test']
     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)
+    if test:
+        status = 'DELETED'
+        ret['changes'][name] = status
+        ret['comment'] = 'Node %s %s' % (name, status.lower())
     else:
-        ret['comment'] = 'Job {0} already absent.'.format(name)
+        _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
+
+
+def cleanup(name, jobs, **kwargs):
+    '''
+    Perform a cleanup - uninstall any installed job absents in given jobs list
+
+    name
+        The name of the Jenkins job to remove.
+    jobs
+        List of jobs which may NOT be uninstalled
+
+    '''
+    test = __opts__['test']
+    ret = {'name': name,
+           'result': True,
+           'changes': {},
+           'comment': "Cleanup not necessary"}
+    list_jobs_groovy = """\
+        print(Jenkins.instance.items.collect{{it -> it.name}})
+    """
+    deleted_jobs = []
+    if test:
+        status = 'CLEANED'
+        ret['changes'][name] = status
+        ret['comment'] = 'Jobs %s' % status.lower()
+    else:
+        call_result = __salt__['jenkins_common.call_groovy_script'](list_jobs_groovy,{})
+        if call_result["code"] == 200:
+            existing_jobs = call_result["msg"]
+            if existing_jobs:
+                for job in existing_jobs[1:-1].split(","):
+                    if job:
+                        job = job.strip()
+                        if job not in jobs:
+                            __salt__['jenkins.delete_job'](job)
+                            deleted_jobs.append(job)
+            else:
+                log.error("Cannot get existing jobs list from Jenkins")
+            if len(deleted_jobs) > 0:
+                for del_job in deleted_jobs:
+                    ret['changes'][del_job] = "removed"
+                ret['comment'] = 'Jobs {} deleted.'.format(deleted_jobs)
+        else:
+            status = 'FAILED'
+            log.error(
+                "Jenkins jobs API call failure: %s", call_result["msg"])
+            ret['comment'] = 'Jenkins jobs API call failure: %s' % (
+                call_result["msg"])
     return ret
diff --git a/jenkins/client/job.sls b/jenkins/client/job.sls
index 3138d4d..7fe0b0f 100644
--- a/jenkins/client/job.sls
+++ b/jenkins/client/job.sls
@@ -43,3 +43,9 @@
 {%- endif %}
 
 {%- endfor %}
+
+{%- if client.get('purge_jobs', False) %}
+jenkins_clean_undefined_jobs:
+  jenkins_job.cleanup:
+  - jobs: {{ client.get('job', {}).keys()|yaml }}
+{%- endif %}
\ No newline at end of file
