Load from files
diff --git a/README.rst b/README.rst
index b4bc7e6..c11b4cf 100644
--- a/README.rst
+++ b/README.rst
@@ -150,7 +150,7 @@
                 description: multi-liner
                 default: default_text
 
-Groovy script samples
+Inline Groovy script samples
 
 .. code-block:: yaml
 
@@ -187,6 +187,27 @@
               }
 
 
+GIT controlled groovy script samples
+
+.. code-block:: yaml
+
+    jenkins:
+      client:
+        source:
+          engine: git
+          address: repo_url
+          branch: branch
+        job:
+          test_workflow_jenkins_simple:
+            type: workflow
+            display_name: Test jenkins simple workflow
+            script_file: jobs/test_workflow_jenkins_simple.groovy
+          test_workflow_jenkins_input:
+            type: workflow
+            display_name: Test jenkins workflow inputs
+            script_file: jobs/test_workflow_jenkins_input.groovy
+
+
 Usage
 =====
 
diff --git a/jenkins/client.sls b/jenkins/client.sls
index 8bb0010..80a4af6 100644
--- a/jenkins/client.sls
+++ b/jenkins/client.sls
@@ -7,7 +7,9 @@
 
 jenkins_client_dirs:
   file.directory:
-  - name: /srv/salt/env/dev/_jenkins_jobs
+  - names:
+    - /srv/jenkins
+    - {{ client.dir.salt_root }}/_jenkins/cache
   - makedirs: true
 
 /etc/salt/minion.d/_jenkins.conf:
@@ -15,9 +17,31 @@
   - source: salt://jenkins/files/_jenkins.conf
   - template: jinja
 
+{%- if client.source.engine == "git" %}
+
+reclass_data_source:
+  git.latest:
+  - name: {{ client.source.address }}
+  - target: {{ client.dir.jenkins_root }}
+  - rev: {{ client.source.branch }}
+  - reload_pillar: True
+
+{%- elif client.source.engine == "local" %}
+
+reclass_data_dir:
+  file.managed:
+  - name: {{ client.dir.jenkins_root }}
+  - mode: 700
+
+{%- endif %}
+
+{{ client.dir.salt_root }}/_jenkins/jobs:
+  file.symlink:
+    - target: {{ client.dir.jenkins_root }}
+
 {%- for job_name, job in client.job.iteritems() %}
 
-/srv/salt/env/dev/_jenkins_jobs/{{ job_name }}.xml:
+{{ client.dir.salt_root }}/_jenkins/cache/{{ job_name }}.xml:
   file.managed:
   - source: salt://jenkins/files/jobs/{{ job.type }}.xml
   - mode: 400
@@ -33,7 +57,7 @@
   - name: {{ job_name }}
   - config: salt://_jenkins_jobs/{{ job_name }}.xml
   - require:
-    - file: /srv/salt/env/dev/_jenkins_jobs/{{ job_name }}.xml
+    - file: {{ client.dir.salt_root }}/_jenkins/cache/{{ job_name }}.xml
 
 {%- endfor %}
 
diff --git a/jenkins/files/jobs/workflow.xml b/jenkins/files/jobs/workflow.xml
index 9b10270..84b06bb 100644
--- a/jenkins/files/jobs/workflow.xml
+++ b/jenkins/files/jobs/workflow.xml
@@ -1,5 +1,9 @@
 {%- from "jenkins/map.jinja" import client with context %}
 {%- set job = salt['pillar.get']('jenkins:client:job:'+job_name) -%}
+{%- macro load_groovy_file() %}
+{%- set groovy_file='_jenkins/jobs/'+job.script_file %}
+{%- include groovy_file %}
+{%- endmacro %}
 <?xml version='1.0' encoding='UTF-8'?>
 <flow-definition plugin="workflow-job@2.5">
   <description>{{ job.get('description', 'Salt generated, do not edit.') }}</description>
@@ -27,7 +31,9 @@
             </a>
           </choices>
           {%- endif %}
+          {%- if param.default is defined %}
           <defaultValue>{{ param.default|e }}</defaultValue>
+          {%- endif %}
         </hudson.model.{{ client.param[param.type] }}ParameterDefinition>
         {%- endfor %}
       </parameterDefinitions>
@@ -35,7 +41,7 @@
     {%- endif %}
   </properties>
   <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.12">
-    <script>{{ job.script|e }}</script>
+    <script>{% if job.script_file is defined %}{{ load_groovy_file()|e }}{% else %}{{ job.script|e }}{% endif %}</script>
     <sandbox>true</sandbox>
   </definition>
   <triggers>
diff --git a/jenkins/map.jinja b/jenkins/map.jinja
index 7336d88..efe6814 100644
--- a/jenkins/map.jinja
+++ b/jenkins/map.jinja
@@ -64,9 +64,17 @@
     'Debian': {
         'pkgs': ['python-jenkins'],
         'param': param,
+        'dir': {
+            'salt_root': '/srv/salt/env/dev',
+            'jenkins_root': '/srv/jenkins/client',
+        }
     },
     'RedHat': {
         'pkgs': ['python-jenkins'],
         'param': param,
+        'dir': {
+            'salt_root': '/srv/salt/env/dev',
+            'jenkins_root': '/srv/jenkins/client',
+        }
     },
 }, merge=salt['pillar.get']('jenkins:client')) %}