diff --git a/_grains/jenkins.py b/_grains/jenkins.py
deleted file mode 100644
index b8f85d7..0000000
--- a/_grains/jenkins.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-import json
-
-def main():
-    output = { "jenkins_plugins" : {} }
-
-    list_plugin_groovy = """\
-        pluginList = []
-        Jenkins.instance.pluginManager.plugins.each{ pluginList << ("'${it.shortName}@${it.version}'")}
-        print pluginList
-    """
-    call_result = __salt__['jenkins_common.call_groovy_script'](list_plugin_groovy, [])
-
-    plugins = json.loads(call_result)
-
-    for plugin in plugins:
-        plugin_fields = plugin.split('@')
-        output["jenkins_plugins"][plugin_fields[0]] = {"version": plugin_fields[1]}
-
-    if output:
-        return output
-    else:
-        return None
diff --git a/_grains/jenkins_plugins.py b/_grains/jenkins_plugins.py
new file mode 100644
index 0000000..c13cb8b
--- /dev/null
+++ b/_grains/jenkins_plugins.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+
+import jenkins
+import salt.config
+
+def main():
+    output = { "jenkins_plugins" : {} }
+    opts = salt.config.minion_config('/etc/salt/minion')
+    user = opts['jenkins']['user']
+    password = opts['jenkins']['password']
+    url = opts['jenkins']['url']
+
+    server = jenkins.Jenkins(url, username=user, password=password)
+    plugins = server.get_plugins(depth=1)
+    for plugin_name, plugin_dict in plugins.iteritems():
+        output["jenkins_plugins"][plugin_name[0]] = {"version" : (plugin_dict["backupVersion"] or 0)}
+    return output
diff --git a/jenkins/files/jobs/_common.xml b/jenkins/files/jobs/_common.xml
index 5922fc1..e62d08b 100644
--- a/jenkins/files/jobs/_common.xml
+++ b/jenkins/files/jobs/_common.xml
@@ -12,7 +12,7 @@
     <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
     {%- endif %}
     {%- if job.get('scm', {}).github is defined %}
-    <com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@{% salt['grains.get']('jenkins_plugins:github:version') %}">
+    <com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@{{ salt['grains.get']('jenkins_plugins:github:version', '1.21.1') }}">
       <projectUrl>{{ job.scm.github.url }}</projectUrl>
       {%- if job.scm.github.name is defined %}
       <displayName>{{ job.scm.github.name }}</displayName>
@@ -37,7 +37,7 @@
           </threshold>
         </jenkins.triggers.ReverseBuildTrigger>
         {%- elif type == 'github' %}
-        <com.cloudbees.jenkins.GitHubPushTrigger plugin="github@{% salt['grains.get']('jenkins_plugins:github:version') %}">
+        <com.cloudbees.jenkins.GitHubPushTrigger plugin="github@{{ salt['grains.get']('jenkins_plugins:github:version', '1.21.1') }}">
           <spec/>
         </com.cloudbees.jenkins.GitHubPushTrigger>
         {%- elif type == 'pollscm' %}
@@ -46,8 +46,8 @@
           <ignorePostCommitHooks>false</ignorePostCommitHooks>
         </hudson.triggers.SCMTrigger>
         {%- elif type == 'gerrit' %}
-        <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@{% salt['grains.get']('jenkins_plugins:gerrit-trigger:version') %}">
-          <spec></spec>
+        <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@{{ salt['grains.get']('jenkins_plugins:gerrit-trigger:version', '2.23.0') }}">
+          <spec/>
           <gerritProjects>
             {%- for pname, project in trigger.project.iteritems() %}
             <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
@@ -76,7 +76,7 @@
             <onNotBuilt>{%- if "not_built" in trigger.get('skip_vote',[]) %}true{%- else %}false{%- endif %}</onNotBuilt>
           </skipVote>
           <silentMode>{{ trigger.get('silent_mode', False)|lower }}</silentMode>
-          <notificationLevel></notificationLevel>
+          <notificationLevel/>
           <silentStartMode>{{ trigger.get('silent_start_mode', False)|lower }}</silentStartMode>
           <escapeQuotes>true</escapeQuotes>
           <nameAndEmailParameterMode>PLAIN</nameAndEmailParameterMode>
@@ -159,12 +159,16 @@
             {%- endfor %}
           </triggerOnEvents>
           <dynamicTriggerConfiguration>false</dynamicTriggerConfiguration>
-          <triggerConfigURL></triggerConfigURL>
+          <triggerConfigURL/>
           <triggerInformationAction/>
         </com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger>
         {%- elif type == 'timer' and trigger.spec != '' %}
         <hudson.triggers.TimerTrigger>
+          {%- if trigger.spec is defined and trigger.spec != '' %}
           <spec>{{ trigger.spec }}</spec>
+          {%- else %}
+          <spec/>
+          {%- endif %}
         </hudson.triggers.TimerTrigger>
         {%- endif %}
         {%- endif %}
diff --git a/jenkins/files/jobs/_parameters.xml b/jenkins/files/jobs/_parameters.xml
index b42b19b..0f63ad5 100755
--- a/jenkins/files/jobs/_parameters.xml
+++ b/jenkins/files/jobs/_parameters.xml
@@ -5,7 +5,7 @@
         <hudson.model.{{ param.get('type', 'string')|capitalize }}ParameterDefinition>
           <name>{{ param_name }}</name>
           {%- if param.description is defined %}
-          <description>{{ description }}</description>
+          <description>{{ param.description }}</description>
           {%- else %}
           <description/>
           {%- endif %}
diff --git a/jenkins/files/jobs/workflow-scm.xml b/jenkins/files/jobs/workflow-scm.xml
index dba25d1..2aca88c 100644
--- a/jenkins/files/jobs/workflow-scm.xml
+++ b/jenkins/files/jobs/workflow-scm.xml
@@ -2,11 +2,11 @@
 {%- if job is not defined -%}
   {%- set job = salt['pillar.get']('jenkins:client:job:'+job_name) -%}
 {%- endif -%}
-<?xml version="1.0" encoding='UTF-8'?><flow-definition plugin="workflow-job@{% salt['grains.get']('jenkins_plugins:workflow-job:version') %}">
+<?xml version="1.0" encoding="UTF-8"?><flow-definition plugin="workflow-job@{{ salt['grains.get']('jenkins_plugins:workflow-job:version', '2.6') }}">
   {%- include "jenkins/files/jobs/_common.xml" %}
-  <definition class="org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition" plugin=workflow-cps@"{% salt['grains.get']('jenkins_plugins:workflow-cps:version') %}">
+  <definition class="org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition" plugin="workflow-cps@{{ salt['grains.get']('jenkins_plugins:workflow-cps:version', '2.13') }}">
     {%- if job.scm.get('type', 'git') == 'git' %}
-    <scm class="hudson.plugins.git.GitSCM" plugin="git@{% salt['grains.get']('jenkins_plugins:git:version') %}">
+    <scm class="hudson.plugins.git.GitSCM" plugin="git@{{ salt['grains.get']('jenkins_plugins:git:version', '2.5.3') }}">
       <configVersion>2</configVersion>
       <userRemoteConfigs>
         <hudson.plugins.git.UserRemoteConfig>
diff --git a/jenkins/files/jobs/workflow.xml b/jenkins/files/jobs/workflow.xml
index 7400d39..561d6f2 100644
--- a/jenkins/files/jobs/workflow.xml
+++ b/jenkins/files/jobs/workflow.xml
@@ -14,9 +14,9 @@
 {%- endmacro -%}
 
 <?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job@2.5">
+<flow-definition ="workflow-job@{{ salt['grains.get']('jenkins_plugins:workflow-job:version', '2.5') }}">
   {%- include "jenkins/files/jobs/_common.xml" %}
-  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@{% salt['grains.get']('jenkins_plugins:workflow-cps:version') %}">
+  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@{{ salt['grains.get']('jenkins_plugins:workflow-cps:version', '2.12') }}">
     <script>// libraries
 {%- if job.libs is defined %}
 {%- for lib in job.libs %}
