diff --git a/software/slaprunner/README.txt b/software/slaprunner/README.txt
index d103a8006870455f28cf368c54f0e9e68c0e8c56..a9f0a97369f0df0d0f55f64eae9e3e0c5ddeb78c 100644
--- a/software/slaprunner/README.txt
+++ b/software/slaprunner/README.txt
@@ -127,11 +127,11 @@ Example :
 Git repositories :
 ------------------
 
-It is easy to give access to your git repository/ies to everyone, or to clone it on your own computer. For this, there are 2 urls to remember:
-  - For read only, you can clone : https://[IPV6]:PORT/git-public/YourRepo.git/
-  - For read and write access, using your runner account : https://[IPV6]:PORT/git/YourRepo.git/
+It is easy to give access to your git repository/ies to everyone, or to clone it on your own computer. For this, fetch the git_url parameter returned by your webrunner instance. It should look like that : https://[IPV6]:PORT/git/YourRepo.git/
 
-To create the repo, go in the folder srv/runner/project and initiate a new git repo (git init/clone --bare XXX).
+To create the repo, go to the folder srv/runner/project and initiate a new git repo (git init/clone --bare YourRepo). Then, to clone the repo, just append its name to the previous URL.
+
+Please notice that your repositories are in public access for reading. However, an account is needed to push to the repository (use your webrunner account, or create a new user in the parameters section of the webrunner).
 
 For the moment, the PORT is the port of monitoring, which is 9685.
 
diff --git a/software/slaprunner/common.cfg b/software/slaprunner/common.cfg
index d4a0aa1b5830d029c7b3aca7c87bdaf8bf215d83..7afc7eaaea1ef86bedd48b3f9c1b11638e46dbde 100644
--- a/software/slaprunner/common.cfg
+++ b/software/slaprunner/common.cfg
@@ -43,7 +43,7 @@ mode = 0644
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner.cfg
 output = ${buildout:directory}/template-runner.cfg.in
-md5sum = 9878115a2969489b57e8563ef3d4d6d3
+md5sum = b5644037da14e79576840975415ee1a4
 mode = 0644
 
 [template-runner-import-script]
@@ -58,7 +58,7 @@ mode = 0644
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner-import.cfg.in
 output = ${buildout:directory}/instance-runner-import.cfg
-md5sum = 354ff83819e8379f5e4a2e2985e34e9e
+md5sum = a85d054b3e2ae9243d8d188c897dc121
 mode = 0644
 
 [template-runner-export-script]
@@ -73,13 +73,13 @@ mode = 0644
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner-export.cfg.in
 output = ${buildout:directory}/instance-runner-export.cfg
-md5sum = 6930a0d6c88896c43a8e60509ba6bd1c
+md5sum = 521bad4c571b5b2dc3eee6090802de95
 mode = 0644
 
 [template-resilient]
 recipe = slapos.recipe.download
 url = ${:_profile_base_location_}/instance-resilient.cfg.jinja2
-md5sum = 1f7332d0b0671929a2de87ef9ce998c8
+md5sum = aec7fb7fe57b48c5c26c7adcdff36d26
 filename = instance-resilient.cfg.jinja2
 mode = 0644
 
@@ -87,7 +87,7 @@ mode = 0644
 recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/instance-resilient-test.cfg.jinja2
 download-only = true
-md5sum = abba49f5f397bfe6f6ea5e5dd185b1e9
+md5sum = 01545742e97b4b95cd5e14d5d7cb1584
 filename = instance-resilient-test.cfg.jinja2
 mode = 0644
 
@@ -103,7 +103,7 @@ mode = 0644
 recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/httpd_conf.in
 download-only = true
-md5sum = 63782f8eaa94af729ec6bba80e062d8f
+md5sum = 444399390eb19c7e23dd06593c067b4d
 filename = httpd_conf.in
 mode = 0644
 
@@ -118,13 +118,13 @@ location = ${buildout:parts-directory}/${:_buildout_section_name_}
 [template-slapos-cfg]
 recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/template/${:filename}
-md5sum = 847df63cf5a226ed338d7ca34b0220b5
+md5sum = ba3721425ba34e265b1f8390ed7196cf
 location = ${buildout:parts-directory}/${:_buildout_section_name_}
 filename = slapos.cfg.in
 download-only = true
 mode = 0644
 
-[parameters-template]
+[template-parameters]
 recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/${:filename}
 md5sum = f8446fcf254b4929eb828a9a1d7e5f62
@@ -133,6 +133,33 @@ filename = parameters.xml.in
 download-only = true
 mode = 0644
 
+[template-bash-profile]
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/template/${:filename}
+md5sum = 39dc910743c70d5120a778779a052cad
+location = ${buildout:parts-directory}/${:_buildout_section_name_}
+filename = bash_profile.in
+download-only = true
+mode = 0644
+
+[template-supervisord]
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/template/${:filename}
+md5sum = af2d78440a358ec268d7ece4fce99ec9
+location = ${buildout:parts-directory}/${:_buildout_section_name_}
+filename = supervisord.conf.in
+download-only = true
+mode = 0644
+
+[template-listener-slapgrid]
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/template/${:filename}
+md5sum = 49d50410cf7467175a841eb7cd0d93d4
+location = ${buildout:parts-directory}/${:_buildout_section_name_}
+filename = listener_slapgrid.py.in
+download-only = true
+mode = 0644
+
 [eggs]
 recipe = z3c.recipe.scripts
 eggs =
@@ -152,6 +179,7 @@ eggs =
   slapos.recipe.build
   slapos.toolbox[flask_auth]
   slapos.core
+  supervisor
   xml_marshaller
   Gunicorn
 
@@ -171,3 +199,9 @@ eggs =
   xml_marshaller
   pytz
   slapos.libnetworkcache
+
+[extra-eggs]
+recipe = zc.recipe.egg
+interpreter = pythonwitheggs
+eggs +=
+  supervisor
diff --git a/software/slaprunner/httpd_conf.in b/software/slaprunner/httpd_conf.in
index 52f68a2e1419b42837128f914e3a75bb2ee440cb..d70bfa8dd5611d3491779a6b7563e182c325ed2d 100644
--- a/software/slaprunner/httpd_conf.in
+++ b/software/slaprunner/httpd_conf.in
@@ -21,9 +21,12 @@ LoadModule ssl_module modules/mod_ssl.so
 LoadModule alias_module modules/mod_alias.so
 LoadModule env_module modules/mod_env.so
 LoadModule rewrite_module modules/mod_rewrite.so
+LoadModule headers_module modules/mod_headers.so
 LoadModule log_config_module modules/mod_log_config.so
 LoadModule dav_module modules/mod_dav.so
 LoadModule dav_fs_module modules/mod_dav_fs.so
+LoadModule cache_module modules/mod_cache.so
+LoadModule file_cache_module modules/mod_file_cache.so
 
 ErrorLog "{{ parameters.path_error_log }}"
 LogFormat "%h %l %u %t \"%r\" %>s %b" common
@@ -71,17 +74,15 @@ Alias /share {{ parameters.runner_home }}
 
 ScriptSock {{ parameters.path_pid }}
 
-SetEnv GIT_PROJECT_ROOT {{ parameters.project_folder }}
 SetEnv GIT_HTTP_EXPORT_ALL
 ScriptAlias /git/ {{ parameters.git_http_backend }}/
 ScriptAlias /git-public/ {{ parameters.git_http_backend }}/
 
 RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
 RewriteCond %{REQUEST_URI} /git-receive-pack$
-RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
-RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes]
 
-<LocationMatch "^/git-public/">
+<LocationMatch "^/git/">
+        SetEnv GIT_PROJECT_ROOT:{{- parameters.project_private_folder -}}
         Order Deny,Allow
         Deny from env=AUTHREQUIRED
 
@@ -89,10 +90,10 @@ RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes]
         AuthName "Git Access"
         AuthUserFile "{{ parameters.etc_dir }}/.htpasswd"
         Require valid-user
-        Satisfy any
 </LocationMatch>
 
-<LocationMatch "^/git/">
+<LocationMatch "^/git-public/">
+        SetEnv GIT_PROJECT_ROOT:{{- parameters.project_public_folder -}}
         Order Deny,Allow
         Deny from env=AUTHREQUIRED
 
@@ -100,6 +101,7 @@ RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes]
         AuthName "Git Access"
         AuthUserFile "{{ parameters.etc_dir }}/.htpasswd"
         Require valid-user
+        Satisfy any
 </LocationMatch>
 
 include {{ parameters.cgi_httpd_conf }}
diff --git a/software/slaprunner/instance-resilient-test.cfg.jinja2 b/software/slaprunner/instance-resilient-test.cfg.jinja2
index 01260e54534f396f0cfbc1a5c7eef8530fa3b640..5cd1f347827d795ab5a132a49247815c7546c4f8 100644
--- a/software/slaprunner/instance-resilient-test.cfg.jinja2
+++ b/software/slaprunner/instance-resilient-test.cfg.jinja2
@@ -42,7 +42,7 @@ software-url = ${slap-connection:software-release-url}
 software-type = resilient
 name = Resilient Instance (Root Instance)
 {% set cluster_parameter_dict = slapparameter_dict.get('cluster', {}) -%}
-config = resiliency-backup-periodicity {{ cluster_parameter_dict.keys() | join(' ') }}
+config = resiliency-backup-periodicity resilient-clone-number {{ cluster_parameter_dict.keys() | join(' ') }}
 {% for key, value in cluster_parameter_dict.items() -%}
 config-{{ key }} = {{ dumps(value) }}
 {% endfor -%}
diff --git a/software/slaprunner/instance-resilient.cfg.jinja2 b/software/slaprunner/instance-resilient.cfg.jinja2
index 07ddb7f3b9f5ea4960d7001213ea6fdaa30682c8..4431627e9fe2f1c3937a5b55d8c9cbc5772275d0 100644
--- a/software/slaprunner/instance-resilient.cfg.jinja2
+++ b/software/slaprunner/instance-resilient.cfg.jinja2
@@ -28,7 +28,7 @@ parts +=
 
 # Bubble up the parameters
 [request-runner]
-return = url ssh-public-key ssh-url notification-id ip backend_url url ssh_command access_url 1_info 2_info monitor_url webdav_url public_url
+return = url ssh-public-key ssh-url notification-id ip backend_url url ssh_command access_url 1_info 2_info monitor_url webdav_url public_url git_public_url git_private_url
 
 [publish-connection-informations]
 recipe = slapos.cookbook:publish
@@ -41,6 +41,8 @@ ssh_command = ${request-runner:connection-ssh_command}
 monitor_url = ${request-runner:connection-monitor_url}
 webdav_url = ${request-runner:connection-webdav_url}
 public_url = ${request-runner:connection-public_url}
+git_public_url = ${request-runner:connection-git_public_url}
+git_private_url = ${request-runner:connection-git_private_url}
 
 [slap-parameter]
 # Default parameters for distributed deployment
diff --git a/software/slaprunner/instance-runner-export.cfg.in b/software/slaprunner/instance-runner-export.cfg.in
index 4eddb63c85b57e33bcc918fec0b82a173bfb548d..dd91a76f03ffc59856db36c4bbafab8d61dc8426 100644
--- a/software/slaprunner/instance-runner-export.cfg.in
+++ b/software/slaprunner/instance-runner-export.cfg.in
@@ -27,6 +27,7 @@ parts +=
   cron-entry-prepare-software
   deploy-instance-parameters
   minishell-cwd
+  supervisord-wrapper
 ## Monitoring part
 ###Parts to add for monitoring
   cron
@@ -45,6 +46,7 @@ parts +=
   cgi-httpd-graceful-wrapper
   monitor-promise
   monitor-instance-log-access
+  bash-profile
 ## Monitor for runner
   monitor-current-log-access
   monitor-check-resilient-feed-file
diff --git a/software/slaprunner/instance-runner-import.cfg.in b/software/slaprunner/instance-runner-import.cfg.in
index d37e2e813895260c82fa6767513b415205adf8e2..8bdd41276af1500c3547b535d4892633a562b507 100644
--- a/software/slaprunner/instance-runner-import.cfg.in
+++ b/software/slaprunner/instance-runner-import.cfg.in
@@ -24,6 +24,8 @@ parts +=
   cron-entry-prepare-software
   deploy-instance-parameters
   instance-software-type
+  bash-profile
+  supervisord-wrapper
 # have to repeat the next one, as it's not inherited from pbsready-import
   import-on-notification
 ## Monitoring part
@@ -82,4 +84,4 @@ rendered = $${monitor-directory:monitoring-cgi}/latest-restored-backup
 template = ${template-wrapper:output}
 mode = 744
 context =
-  key content :command
\ No newline at end of file
+  key content :command
diff --git a/software/slaprunner/instance-runner.cfg b/software/slaprunner/instance-runner.cfg
index e657fe1c6adb8816b2739d41d47f78ba4519e80a..421c4b4745b7315acac8f6d943502e6085ba5d40 100644
--- a/software/slaprunner/instance-runner.cfg
+++ b/software/slaprunner/instance-runner.cfg
@@ -24,6 +24,9 @@ parts =
   deploy-instance-parameters
   instance-software-type
   minishell-cwd
+  bash-profile
+  supervisord-wrapper
+  supervisord-promise
 {% if slapparameter_dict.get('custom-frontend-backend-url') %}
   custom-frontend-promise
 {% endif %}
@@ -136,6 +139,8 @@ project-test = $${:test}/project
 software-test = $${:test}/software
 instance-test = $${:test}/instance
 sessions = $${buildout:directory}/.sessions
+private-project = $${:home}/.git-private
+public-project = $${:home}/.git-public
 
 #Create password recovery code for slaprunner
 [recovery-code]
@@ -155,8 +160,7 @@ working-directory = $${runnerdirectory:home}
 project-directory = $${runnerdirectory:project}
 instance_root = $${runnerdirectory:instance-root}
 software_root = $${runnerdirectory:software-root}
-#XXX-Nico hardcoded default port because overridden by this buildout config
-instance-monitor-url = https://[$${:ipv6}]:9685
+instance-monitor-url = https://[$${:ipv6}]:$${monitor-parameters:port}
 etc_dir = $${directory:etc}
 log_dir =  $${directory:log}
 run_dir = $${directory:run}
@@ -173,6 +177,7 @@ wrapper = $${directory:services}/slaprunner
 debug = $${slap-parameter:debug}
 access-url = https://[$${:ipv6}]:$${:runner_port}
 supervisord_config = $${directory:etc}/supervisord.conf
+supervisord_server = http://$${supervisord:server}
 proxy_database = $${slaprunner:working-directory}/proxy.db
 console = False
 verbose = False
@@ -183,6 +188,8 @@ autorun = $${slap-parameter:autorun}
 knowledge0_file = $${buildout:directory}/$${public:filename}
 minishell_cwd_file = $${directory:etc}/.minishell-cwd
 minishell_history_file = $${directory:etc}/.minishell_history
+software_info_json = $${runnerdirectory:home}/software_info.json
+instance_info_json = $${runnerdirectory:home}/instance_info.json
 
 [test-runner]
 <= slaprunner
@@ -219,7 +226,7 @@ keygen-binary = ${dropbear:location}/bin/dropbearkey
 recipe = slapos.cookbook:dropbear
 host = $${slap-network-information:global-ipv6}
 port = 22222
-home = $${directory:ssh}
+home = $${buildout:directory}
 wrapper = $${directory:bin}/runner_sshd
 shell = ${bash:location}/bin/bash
 rsa-keyfile = $${directory:ssh}/server_key.rsa
@@ -316,6 +323,8 @@ dav_lock = $${directory:var}/DavLock
 etc_dir = $${directory:etc}
 var_dir = $${directory:var}
 project_folder = $${directory:project}
+project_private_folder = $${runnerdirectory:private-project}
+project_public_folder = $${runnerdirectory:public-project}
 runner_home = $${runnerdirectory:home}
 git_http_backend = ${git:location}/libexec/git-core/git-http-backend
 cgi_httpd_conf = $${monitor-httpd-configuration-file:rendered}
@@ -351,6 +360,7 @@ error-log-file = gunicorn-error.log
 wrapper-path = $${gunicorn:bin_launcher}
 environment = PATH=$${environ:PATH}:${git:location}/bin/
   RUNNER_CONFIG=$${slaprunner:slapos.cfg}
+  LANG=en_GB.UTF-8
 
 [gunicorn-graceful]
 recipe = slapos.cookbook:wrapper
@@ -440,7 +450,7 @@ ssh_command = ssh $${dropbear-runner-server:host} -p $${dropbear-runner-server:p
 monitor_url = https://$${monitor-frontend:connection-domain}
 webdav_url = $${:monitor_url}/share/
 public_url =  $${:monitor_url}/public/
-git_public_url =  https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git-public/
+git_public_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git-public/
 git_private_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git/
 
 #---------------------------
@@ -459,6 +469,7 @@ path = $${directory:promises}/slaprunner_frontend
 url = https://$${request-frontend:connection-domain}/login
 dash_path = ${dash:location}/bin/dash
 curl_path = ${curl:location}/bin/curl
+check-secure = 1
 
 [dropbear-promise]
 recipe = slapos.cookbook:check_port_listening
@@ -570,7 +581,7 @@ command = $${prepare-software:wrapper-path}
 [instance-parameters]
 recipe = slapos.recipe.template:jinja2
 extensions = jinja2.ext.do
-template = ${parameters-template:location}/${parameters-template:filename}
+template = ${template-parameters:location}/${template-parameters:filename}
 rendered = $${directory:etc}/.parameter.xml.default
 mode = 0644
 context =
@@ -610,6 +621,78 @@ command = if [ ! -f $${slaprunner:minishell_cwd_file} ]; then echo $${runnerdire
 location = $${slaprunner:minishell_cwd_file}
 stop-on-error = true
 
+[bash-profile]
+recipe = slapos.recipe.template:jinja2
+template = ${template-bash-profile:location}/${template-bash-profile:filename}
+rendered = $${buildout:directory}/.bash_profile
+context =
+    raw path $PATH:${nano:location}/bin:${vim:location}/bin:${screen:location}/bin:${git:location}/bin:${curl:location}/bin:${python2.7:location}/bin
+    key workdir runnerdirectory:home
+
+[supervisord]
+autorestart = false
+autostart = false
+directory = $${buildout:directory}
+exitcodes = 0
+logfile = $${directory:log}/supervisord.log
+no_logfile = NONE
+numprocs = 1
+path = $${environ:PATH}
+pidfile = $${directory:run}/supervisord.pid
+server = $${slaprunner:ipv4}:$${:port}
+port = 39986
+slapgrid-cp = slapgrid-cp
+slapgrid-cp-command = $${slaprunner:slapos} node instance --all --cfg $${slaprunner:slapos.cfg} --pidfile $${:slapgrid-cp-pid} --verbose --logfile $${:slapgrid-cp-log}
+slapgrid-cp-log = $${runnerdirectory:home}/instance.log
+slapgrid-cp-pid = $${directory:run}/slapgrid-cp.pid
+slapgrid-cp-startretries = 0
+slapgrid-sr = slapgrid-sr
+slapgrid-sr-command = $${slaprunner:slapos} node software --all --cfg $${slaprunner:slapos.cfg} --pidfile $${:slapgrid-sr-pid} --verbose --logfile $${:slapgrid-sr-log}
+slapgrid-sr-log = $${runnerdirectory:home}/software.log
+slapgrid-sr-pid = $${directory:run}/slapgrid-sr.pid
+slapgrid-sr-startretries = 0
+slapproxy = slapproxy
+slapproxy-autorestart = true
+slapproxy-autostart = true
+slapproxy-startsecs = 1
+slapproxy-command = $${slaprunner:slapos} proxy start --logfile $${:slapproxy-log} --cfg $${slaprunner:slapos.cfg}
+slapproxy-log = $${directory:log}/slapproxy.log
+socket_name = unix://$${:socket_path}
+socket_path = $${directory:tmp}/supervisord.sock
+startsecs = 0
+# This file logs errors from listeners. Supervisord has its own logfile.
+# Processes should handle their logs by themselves
+stderr_logfile = $${directory:log}/supervisord-errors.log
+
+[supervisord-conf]
+recipe = slapos.recipe.template:jinja2
+template = ${template-supervisord:location}/${template-supervisord:filename}
+rendered = $${directory:etc}/supervisord.conf
+context =
+    section supervisord supervisord
+    key listener_slapgrid listener-slapgrid-bin:rendered
+
+[listener-slapgrid-bin]
+recipe = slapos.recipe.template:jinja2
+template = ${template-listener-slapgrid:location}/${template-listener-slapgrid:filename}
+rendered = $${directory:bin}/listener_slapgrid.py
+mode = 0744
+context =
+    section supervisord supervisord
+    section slaprunner slaprunner
+    raw python_executable ${buildout:directory}/bin/${extra-eggs:interpreter}
+
+[supervisord-wrapper]
+recipe = slapos.cookbook:wrapper
+command-line = $${buildout:directory}/bin/supervisord -c $${supervisord-conf:rendered} --nodaemon
+wrapper-path = $${directory:services}/supervisord
+
+[supervisord-promise]
+recipe = slapos.cookbook:check_port_listening
+path = $${directory:promises}/supervisord
+hostname = $${slaprunner:ipv4}
+port = $${supervisord:port}
+
 [monitor-current-log-access]
 < = monitor-directory-access
 source = $${directory:log}
diff --git a/software/slaprunner/software.cfg b/software/slaprunner/software.cfg
index 181b16ae9c90858374195aeb0cf7c8629b22f862..c0294046c3931aa3f6f1b8355325c6cc292fe70d 100644
--- a/software/slaprunner/software.cfg
+++ b/software/slaprunner/software.cfg
@@ -21,9 +21,12 @@ gunicorn = 19.1.0
 plone.recipe.command = 1.1
 pycrypto = 2.6.1
 rdiff-backup = 1.0.5
+slapos.core = 1.0.5
 slapos.recipe.build = 0.12
 slapos.recipe.download = 1.0.dev-r4053
-slapos.toolbox = 0.39.3
+slapos.toolbox = 0.40.1
+slapos.recipe.template = 2.5
+supervisor = 3.1.1
 smmap = 0.8.2
 z3c.recipe.scripts = 1.0.1
 
@@ -46,3 +49,5 @@ feedparser = 5.1.3
 # Required by:
 # slapos.toolbox==0.39.3
 paramiko = 1.14.1
+
+Jinja2 = 2.7.3
diff --git a/software/slaprunner/template/bash_profile.in b/software/slaprunner/template/bash_profile.in
new file mode 100644
index 0000000000000000000000000000000000000000..6076e688896e66927f5cb29531a0ec16a76503bc
--- /dev/null
+++ b/software/slaprunner/template/bash_profile.in
@@ -0,0 +1,8 @@
+# Beware, this file is automatically processed by slapgrid
+# Do not modify it, your changes will be lost
+# If you want to load your custom bash configuration, please use a .bashrc file
+
+cd {{ workdir }}
+export PATH={{- path }}
+export PS1="\w $ "
+export LANG="en_GB.UTF-8"
diff --git a/software/slaprunner/template/listener_slapgrid.py.in b/software/slaprunner/template/listener_slapgrid.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..3fa465311ae229ecac9777489ae704d2fb76d71a
--- /dev/null
+++ b/software/slaprunner/template/listener_slapgrid.py.in
@@ -0,0 +1,44 @@
+#!{{ python_executable }}
+
+import datetime
+import json
+import sys
+import xmlrpclib
+
+from supervisor import childutils
+
+
+def write_stdout(s):
+    sys.stdout.write(s)
+    sys.stdout.flush()
+
+def write_stderr(s):
+    sys.stderr.write(s)
+    sys.stderr.flush()
+
+
+def write_slapgrid_result(process):
+    server = xmlrpclib.Server("http://{{- supervisord['server'] -}}")
+    # Tuple of tuples containing 2 elements : process name and the path of its info file
+    json_files = dict([("slapgrid-sr", "{{- slaprunner['software_info_json'] -}}"),
+                       ("slapgrid-cp", "{{- slaprunner['instance_info_json'] -}}")])
+    info = server.supervisor.getProcessInfo(process)
+    result = dict()
+    result['last_build'] = datetime.datetime.fromtimestamp(info['stop']).strftime("%Y-%m-%d %H:%M:%S")
+    result['success'] = info['exitstatus']
+    open(json_files[process], 'w').write(json.dumps(result))
+
+
+def main():
+    while 1:
+        headers, payload = writer.wait()
+        try:
+            processname = dict(x.split(':') for x in payload.split())['processname']
+            write_slapgrid_result(processname)
+        except:
+            pass
+        writer.ok()
+
+if __name__ == '__main__':
+    writer = childutils.EventListenerProtocol()
+    main()
diff --git a/software/slaprunner/template/slapos.cfg.in b/software/slaprunner/template/slapos.cfg.in
index a73143b968c9995370c3319ebcb680493bc2b2ab..8e741311f19a58a962e8fb30ac9fac985b51bbb1 100644
--- a/software/slaprunner/template/slapos.cfg.in
+++ b/software/slaprunner/template/slapos.cfg.in
@@ -15,6 +15,7 @@ slapos_cfg = {{ slaprunner['slapos.cfg'] }}
 slapproxy = {{ slaprunner['slapproxy'] }}
 supervisor = {{ slaprunner['supervisor'] }}
 supervisord_config = {{ slaprunner['supervisord_config'] }}
+supervisord_server = {{ slaprunner['supervisord_server'] }}
 runner_workdir = {{ slaprunner['working-directory'] }}
 runner_host = {{ slaprunner['ipv4'] }}
 runner_port = {{ slaprunner['runner_port'] }}
diff --git a/software/slaprunner/template/supervisord.conf.in b/software/slaprunner/template/supervisord.conf.in
new file mode 100644
index 0000000000000000000000000000000000000000..0fa1590988a307deeeb2ce4e3ea64e139401a78a
--- /dev/null
+++ b/software/slaprunner/template/supervisord.conf.in
@@ -0,0 +1,62 @@
+[unix_http_server]
+file = {{ supervisord['socket_path'] }}
+
+[supervisorctl]
+serverurl = {{ supervisord['socket_name'] }}
+
+[inet_http_server]
+port = {{ supervisord['server'] }}
+
+[supervisord]
+logfile = {{ supervisord['logfile'] }}
+pidfile = {{ supervisord['pidfile'] }}
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[program:{{- supervisord['slapgrid-sr'] -}}]
+command = {{ supervisord['slapgrid-sr-command'] }}
+process_name = {{ supervisord['slapgrid-sr'] }}
+numprocs = {{ supervisord['numprocs'] }}
+autostart = {{ supervisord['autostart'] }}
+exitcodes = {{ supervisord['exitcodes'] }}
+startretries = {{ supervisord['slapgrid-sr-startretries'] }}
+startsecs = {{ supervisord['startsecs'] }}
+autorestart = {{ supervisord['autorestart'] }}
+stdout_logfile = {{ supervisord['no_logfile'] }}
+stderr_logfile = {{ supervisord['no_logfile'] }}
+directory = {{ supervisord['directory'] }}
+environment = PATH="{{- supervisord['path'] -}}"
+
+[program:{{- supervisord['slapgrid-cp'] -}}]
+command = {{ supervisord['slapgrid-cp-command'] }}
+process_name = {{ supervisord['slapgrid-cp'] }}
+numprocs = {{ supervisord['numprocs'] }}
+autostart = {{ supervisord['autostart'] }}
+exitcodes = {{ supervisord['exitcodes'] }}
+startretries = {{ supervisord['slapgrid-cp-startretries'] }}
+startsecs = {{ supervisord['startsecs'] }}
+autorestart = {{ supervisord['autorestart'] }}
+stdout_logfile = {{ supervisord['no_logfile'] }}
+stderr_logfile = {{ supervisord['no_logfile'] }}
+directory = {{ supervisord['directory'] }}
+environment = PATH="{{- supervisord['path'] -}}"
+
+[program:{{- supervisord['slapproxy'] -}}]
+command = {{ supervisord['slapproxy-command'] }}
+process_name = {{ supervisord['slapproxy'] }}
+numprocs = {{ supervisord['numprocs'] }}
+autostart = {{ supervisord['slapproxy-autostart'] }}
+startsecs = {{ supervisord['slapproxy-startsecs'] }}
+exitcodes = {{ supervisord['exitcodes'] }}
+autorestart = {{ supervisord['slapproxy-autorestart'] }}
+stdout_logfile = {{ supervisord['no_logfile'] }}
+stderr_logfile = {{ supervisord['no_logfile'] }}
+directory = {{ supervisord['directory'] }}
+environment = PATH="{{- supervisord['path'] -}}"
+
+[eventlistener:listener-slapgrid]
+command = {{ listener_slapgrid }}
+events = PROCESS_STATE_EXITED
+stdout_logfile = {{ supervisord['no_logfile'] }}
+stderr_logfile = {{ supervisord['stderr_logfile'] }}
diff --git a/stack/monitor/buildout.cfg b/stack/monitor/buildout.cfg
index 9c389aabc797b829638e5b3086c14861f6bc5922..76984e6c8056333292c42d22a9cdb2f266ea7cd3 100644
--- a/stack/monitor/buildout.cfg
+++ b/stack/monitor/buildout.cfg
@@ -49,7 +49,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/${:filename}
 download-only = true
 md5sum = cb2f15850d3dc82459a0044adb4416cf
-destination = ${buildout:directory}/parts/monitor-template-monitor-bin
+destination = ${buildout:parts-directory}/monitor-template-monitor-bin
 filename = monitor.py.in
 mode = 0644
 
@@ -66,7 +66,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
 md5sum = e759977b21c70213daa4c2701f2c2078
-destination = ${buildout:directory}/parts/monitor-index
+destination = ${buildout:parts-directory}/monitor-index
 filename = index.cgi.in
 mode = 0644
 
@@ -74,7 +74,7 @@ mode = 0644
 recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
-destination = ${buildout:directory}/parts/monitor-template-index
+destination = ${buildout:parts-directory}/monitor-template-index
 md5sum = 7400c8cfa16a15a0d41f512b8bbb1581
 filename = index.html.jinja2
 mode = 0644
@@ -84,7 +84,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
 md5sum = e43d79bec8824265e22df7960744113a
-destination = ${buildout:directory}/parts/monitor-template-status-cgi
+destination = ${buildout:parts-directory}/monitor-template-status-cgi
 filename = status.cgi.in
 mode = 0644
 
@@ -93,7 +93,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
 #md5sum = 4fb26753ee669b8ac90ffe33dbd12e8f
-destination = ${buildout:directory}/parts/monitor-template-status-history-cgi
+destination = ${buildout:parts-directory}/monitor-template-status-history-cgi
 filename = status-history.cgi.in
 mode = 0644
 
@@ -102,7 +102,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
 md5sum = b4cef123a3273e848e8fe496e22b20a8
-destination = ${buildout:directory}/parts/monitor-template-settings-cgi
+destination = ${buildout:parts-directory}/monitor-template-settings-cgi
 filename = settings.cgi.in
 mode = 0644
 
@@ -111,7 +111,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/webfile-directory/${:filename}
 download-only = true
 md5sum = c7ba7ecb09d0d1d24e7cb73a212cc33f
-destination = ${buildout:directory}/parts/monitor-template-monitor-password-cgi
+destination = ${buildout:parts-directory}/monitor-template-monitor-password-cgi
 filename = monitor-password.cgi.in
 mode = 0644
 
@@ -120,7 +120,7 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/${:filename}
 download-only = true
 md5sum = 5f1b93ccdea7c3031aef396154c64938
-destination = ${buildout:directory}/parts/monitor-template-rss-bin
+destination = ${buildout:parts-directory}/monitor-template-rss-bin
 filename = status2rss.py
 mode = 0644
 
@@ -136,7 +136,7 @@ recipe = hexagonit.recipe.download
 url = http://git.erp5.org/gitweb/slapos.git/snapshot/930be99041ea26b7b1186830e5eb56ef0acc1bdf.tar.gz
 download-only = false
 filename = monitor-static.tar.gz
-destination = ${buildout:directory}/parts/monitor-static-files
+destination = ${buildout:parts-directory}/monitor-static-files
 ignore-existing = true
 strip-top-level-dir = true
 mode = 0644