diff --git a/salt/files/orchestrate.sls b/salt/files/orchestrate.sls
index 39ed271..dde20cb 100644
--- a/salt/files/orchestrate.sls
+++ b/salt/files/orchestrate.sls
@@ -1,43 +1,113 @@
 {%- from "salt/map.jinja" import master with context %}
+
 {%- if master.enabled %}
+  {%- for environment_name, environment in master.get('environment', {}).iteritems() %}
+    {%- if master.base_environment == environment_name %}
+      {%- set sorted_priorities = priorities|dictsort(false, 'value') %}
+      {#- Set debug = True to log simple state result - Fail/True - to /var/log/salt/ on both master and respective minions #}
+      {%- set debug = False %}
+      {#- Uncomment to print parsed metadata from formula_name/meta/salt.yml to output file %}
 
-{{ formula_dict }}
+PARSED METADATA: 
 
-{%- for environment_name, environment in master.get('environment', {}).iteritems() %}
+---------------
 
-{%- if master.base_environment == environment_name %}
+Passed from salt/master/orchestrate.sls
+---
 
-{%- set formula_dict = environment.get('formula', {}) %}
-{%- set new_formula_dict = {} %}
+priorities: {{ priorities }}
 
-{%- for formula_name, formula in formula_dict.iteritems() %}
+sorted_priorities: {{ sorted_priorities }}
 
-{%- set _tmp = new_formula_dict.update({formula_name: formula.get('orchestrate_order', 100)}) %}
+args: {{ args }}
 
-{%- endfor %}
+---------------
 
-{%- set sorted_formula_list = new_formula_dict|dictsort(false, 'value') %}
-	
-{%- for formula in sorted_formula_list %}
+      #}
 
-{%- if salt['file.file_exists']('/srv/salt/env/'+environment_name+'/'+formula.0+'/orchestrate.sls') %}
+      {%- for state in sorted_priorities %}
+        {%- set formula = state.0.split('.') %}
 
-{{ salt['cmd.run']('cat /srv/salt/env/'+environment_name+'/'+formula.0+'/orchestrate.sls') }}
+        {%- if salt['file.directory_exists']('/srv/salt/env/'+environment_name+'/'+formula.0+'/orchestrate') and formula|length > 1 and salt['file.file_exists']('/srv/salt/env/'+environment_name+'/'+formula.0+'/orchestrate/'+formula.1+'.sls') %}
 
-{%- else %}
+{{ salt['cmd.run']('cat /srv/salt/env/'+environment_name+'/'+formula.0+'/orchestrate/'+formula.1+'.sls') }}
 
-{{ formula.0 }}:
+        {%- else %}
+          {%- if args[ state.0 ] is defined %}
+
+{{ state.0 }}:
   salt.state:
-    - tgt: 'services:{{ formula.0 }}'
-    - tgt_type: grain
-    - sls: {{ formula.0 }}
+    - tgt: '{{ state.0|replace(".", ":") }}'
+    - tgt_type: pillar
+    - queue: True
+    - sls: {{ state.0 }}
+    {{ args[ state.0 ]|yaml(false)|indent(4) }}
 
+            {%- if debug %}
+
+{{ state.0 }}.logok:
+  salt.function:
+    - tgt: 'I@salt:master or I@{{ state.0|replace(".", ":") }}'
+    - tgt_type: compound
+    - queue: True
+    - name: cmd.run
+    - arg:
+      - 'echo "$(date +"%d %h %Y %H:%M:%S") | state: {{ state.0}} - status: OK" >> /var/log/salt/orchestrate_runner'
+    - require:
+      - salt: {{ state.0 }}
+
+{{ state.0 }}.logfail:
+  salt.function:
+    - tgt: 'I@salt:master or I@{{ state.0|replace(".", ":") }}'
+    - tgt_type: compound
+    - queue: True
+    - name: cmd.run
+    - arg:
+      - 'echo "$(date +"%d %h %Y %H:%M:%S") | state: {{ state.0}} - status: FAIL" >> /var/log/salt/orchestrate_runner'
+    - onfail:
+      - salt: {{ state.0 }}
+
+            {%- endif %}
+          {%- else %}
+
+{{ state.0 }}:
+  salt.state:
+    - tgt: '{{ state.0|replace(".", ":") }}{%- if "." not in state.0 %}:*{%- endif %}'
+    - tgt_type: pillar
+    - queue: True
+    - sls: {{ state.0 }}
+
+            {%- if debug %}
+
+{{ state.0 }}.logok:
+  salt.function:
+    - tgt: 'I@salt:master or I@{{ state.0|replace(".", ":") }}'
+    - tgt_type: compound
+    - queue: True
+    - name: cmd.run
+    - arg:
+      - 'echo "$(date +"%d %h %Y %H:%M:%S") | state: {{ state.0}} - status: OK" >> /var/log/salt/orchestrate_runner'
+    - require:
+      - salt: {{ state.0 }}
+
+{{ state.0 }}.logfail:
+  salt.function:
+    - tgt: 'I@salt:master or I@{{ state.0|replace(".", ":") }}'
+    - tgt_type: compound
+    - queue: True
+    - name: cmd.run
+    - arg:
+      - 'echo "$(date +"%d %h %Y %H:%M:%S") | state: {{ state.0}} - status: FAIL" >> /var/log/salt/orchestrate_runner'
+    - onfail:
+      - salt: {{ state.0 }}
+
+            {%- endif %}
+          {%- endif %}
+        {%- endif %}
+
+      {%- endfor %}
+
+    {%- endif %}
+  {%- endfor %}
 {%- endif %}
 
-{%- endfor %}
-
-{%- endif %}
-
-{%- endfor %}
-
-{%- endif %}
\ No newline at end of file
diff --git a/salt/master/orchestrate.sls b/salt/master/orchestrate.sls
index 4aae098..80be824 100644
--- a/salt/master/orchestrate.sls
+++ b/salt/master/orchestrate.sls
@@ -1,32 +1,54 @@
 {%- from "salt/map.jinja" import master with context %}
+
 {%- if master.enabled %}
+  {%- for environment_name, environment in master.get('environment', {}).iteritems() %}
+    {%- if master.base_environment == environment_name %}
+      {%- set priorities = {} %}
+      {%- set args = {} %}
+      {%- set formulas = environment.get('formula', {}) %}
 
-{%- for environment_name, environment in master.get('environment', {}).iteritems() %}
+      {%- for formula_name, formula in formulas.iteritems() %}
+        {%- if salt['file.file_exists'](master.dir.files+'/'+environment_name+'/'+formula_name+'/meta/salt.yml') %}
+          {%- set grains_fragment_file = formula_name+'/meta/salt.yml' %}
+          {%- macro load_grains_file() %}{% include grains_fragment_file %}{% endmacro %}
+          {%- set grains_yaml = load_grains_file()|load_yaml %}
 
-{%- if master.base_environment == environment_name %}
+          {%- for state, priority in grains_yaml['orchestrate'].iteritems() %}
+            {%- do priorities.update({ formula_name+'.'+state: grains_yaml['orchestrate'][state]['priority'] }) %}
+            {%- set arguments = [] %}
 
-{%- set formula_dict = {} %}
-{%- for formula_name, formula in formula_dict.iteritems() %}
+            {%- for arg_name, arg_value in grains_yaml['orchestrate'][state].iteritems() %}
+              {%- if 'priority' not in arg_name %}
+                {%- do arguments.append({arg_name: arg_value}) %}
+              {%- endif %}
+            {%- endfor %}
 
-{%- if salt['file.file_exists']('salt://'+formula_name+'/meta/salt.yml') %}
-{%- set grains_fragment_file = formula_name+'/meta/salt.yml' %}
-{%- macro load_grains_file() %}{% include grains_fragment_file %}{% endmacro %}
-{%- set grains_yaml = load_grains_file()|load_yaml %}
-{% _dummy = formula_dict.update{formula_name: grains_yaml.orchestrate }}
-{%- else %}
-{%- endif %}
-{%- endfor %}
+            {%- if arguments %}
+              {%- do args.update({ formula_name+'.'+state: arguments }) %}
+            {%- endif %}
+          {%- endfor %}
+        {%- else %}
+          {%- do priorities.update({ formula_name: 10000 }) %}
+        {%- endif %}
+      {%- endfor %}
 
-/srv/salt/env/{{ environment_name}}/orchestrate.sls:
+{{ master.dir.files }}/{{ environment_name }}/orchestrate:
+  file.directory:
+    - user: root
+    - group: root
+    - mode: 755
+    - makedirs: True
+
+{{ master.dir.files }}/{{ environment_name }}/orchestrate/init.sls:
   file.managed:
   - source: salt://salt/files/orchestrate.sls
   - user: root
   - template: jinja
   - defaults:
-      formula_dict: {{ formula_dict|yaml }}
+      priorities: {{ priorities }}
+      args: {{ args }}
 
+    {%- endif %}
+  {%- endfor %}
 {%- endif %}
 
-{%- endfor %}
-
-{%- endif %}
\ No newline at end of file
diff --git a/salt/meta/salt.yml b/salt/meta/salt.yml
index 4f3a32b..81225fe 100644
--- a/salt/meta/salt.yml
+++ b/salt/meta/salt.yml
@@ -1,9 +1,10 @@
 orchestrate:
   master:
-    priority: 10
-  minion:
-    priority: 20
-  syndic:
-    priority: 200
-  control:
+    priority: 60
+  minion: 
+    priority: 70
+  control: 
     priority: 400
+    require:
+    - salt: salt.master
+
