diff --git a/CHANGES.txt b/CHANGES.txt
index bb60daf9fdb5e9b27bee21182767e71acec45a21..d5ff05f171452cb5b52cbe6fd76201924205a2a5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,17 @@
 Changes
 =======
 
+0.85 (2013-12-03)
+-----------------
+
+ * Slaprunner: recipe replaced by a buildout profile [14fbcd92]
+ * Slaprunner: import instances can automatically deploy Software Releases [64c48388]
+ * Slaprunner: backup script passes basic authentification [8877615]
+ * Slaprunner: backup doesn't destroy symlinks for Software Releases [f519a078]
+ * Shellinabox: now uses uid and gid to start [e9349c65]
+ * Shellinabox: can do autoconnection [516e772]
+ * Librecipe-generic: correction of bash code for /bin/sh compatibility [bee8c9c8]
+
 0.84.2 (2013-10-04)
 -------------------
 
diff --git a/component/cloud9/buildout.cfg b/component/cloud9/buildout.cfg
index dbe3692ae1272667d9422079ed45c82b03f8c359..4dddf5497debb7b670db7df178d50995d57645f9 100644
--- a/component/cloud9/buildout.cfg
+++ b/component/cloud9/buildout.cfg
@@ -19,7 +19,7 @@ recipe = slapos.recipe.build:npm
 packages = sm@0.2.11
 node = nodejs
 environment =
-  PATH=${nodejs:location}/bin:%(PATH)s
+  PATH=${nodejs-0.6:location}/bin:%(PATH)s
 
 [cloud9-stable]
 # Online IDE written in javascript/node.js
@@ -49,7 +49,34 @@ recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/${:filename}
 filename = cloud9-socket.patch
 download-only = true
-#md5sum = 5dc8cc28447ed3747b8a53c768d872aa
+md5sum = c581456cb3a76841898f79f9600e3a1e
+
+[cloud9-file-already-exist.patch]
+# This patch prevents the error "File already exists"
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/${:filename}
+filename = cloud9-file_already_exist.patch
+download-only = true
+md5sum = 0bc104af8176388d60cbf884b72c8318
+
+[cloud9-remove-all-listeners.patch]
+# This patch prevents cloud9 to die every
+# time a tab is closed
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/${:filename}
+filename = cloud9-removeAllListeners.patch
+download-only = true
+md5sum = 357915330d677f4917140e02a55646b7
+
+[cloud9-git-download]
+recipe = slapos.recipe.build:gitclone
+repository = https://github.com/ajaxorg/cloud9.git
+revision = f7d102bc225c922f116d2cea52a746d64343ea59
+location = ${buildout:parts-directory}/cloud9
+git-executable = ${git:location}/bin/git
+develop = true
+use-cache = true
+ignore-ssl-certificate = true
 
 [cloud9-git]
 # Online IDE written in javascript/node.js
@@ -58,13 +85,10 @@ download-only = true
 # NODE_PATH=${:destination}/node_modules ${nodejs:node_location} ${:cloud9_js_location}
 recipe = plone.recipe.command
 stop-on-error = true
-commit = f7d102bc225c922f116d2cea52a746d64343ea59
-repository = https://github.com/ajaxorg/cloud9.git
-location = ${buildout:parts-directory}/${:_buildout_section_name_}
-environment = export GIT_SSL_NO_VERIFY=true; export PATH=${git:location}/bin:${nodejs:location}/bin:${node-sm:location}/node_modules/sm/bin:$PATH; export CPPFLAGS="-I${libxml2:location}/include -I${nodejs:location}/include"; export LDFLAGS="-L${libxml2:location}/lib -Wl,-rpath=${libxml2:location}/lib"; export HOME=${:location};
-command = ${:environment} (git clone --quiet ${:repository} ${:location} && cd ${:location} && git reset --hard ${:commit} && ${node-sm:location}/node_modules/.bin/sm install && patch -p1 < ${cloud9-session-directory.patch:location}/${cloud9-session-directory.patch:filename} && ${node-sm:location}/node_modules/.bin/sm install && patch -p1 < ${cloud9-socket.patch:location}/${cloud9-socket.patch:filename}) || (rm -fr ${:location}; exit 1)
-update-command =
-executable = ${:location}/server.js
+environment = export GIT_SSL_NO_VERIFY=true; export PATH=${git:location}/bin:${nodejs-0.6:location}/bin:${node-sm:location}/node_modules/.bin/:$PATH; export CPPFLAGS="-I${libxml2:location}/include -I${nodejs-0.6:location}/include"; export LDFLAGS="-L${libxml2:location}/lib -Wl,-rpath=${libxml2:location}/lib"; export HOME=${cloud9-git-download:location};
+command = ${:environment} (cd ${cloud9-git-download:location} && ${node-sm:location}/node_modules/.bin/sm install && patch -p1 < ${cloud9-session-directory.patch:location}/${cloud9-session-directory.patch:filename} && patch -p1 < ${cloud9-socket.patch:location}/${cloud9-socket.patch:filename} && patch -p1 < ${cloud9-file-already-exist.patch:location}/${cloud9-file-already-exist.patch:filename} && patch -p1 < ${cloud9-remove-all-listeners.patch:location}/${cloud9-remove-all-listeners.patch:filename}) || (rm -fr ${cloud9-git-download:location}; exit 1)
+update-command = true
+executable = ${cloud9-git-download:location}/server.js
 
 [cloud9-npm]
 # Online IDE written in javascript/node.js
diff --git a/component/cloud9/cloud9-file_already_exist.patch b/component/cloud9/cloud9-file_already_exist.patch
new file mode 100644
index 0000000000000000000000000000000000000000..58d7b077bea7b1a5f820437752da0cd06f659647
--- /dev/null
+++ b/component/cloud9/cloud9-file_already_exist.patch
@@ -0,0 +1,13 @@
+diff --git a/node_modules/vfs-local/localfs.js b/node_modules/vfs-local/localfs.js
+index 7ce9981..1dd07b7 100644
+--- a/node_modules/vfs-local/localfs.js
++++ b/node_modules/vfs-local/localfs.js
+@@ -677,7 +677,7 @@ module.exports = function setup(fsOptions) {
+                     else {
+                         var err = new Error("File already exists.");
+                         err.code = "EEXIST";
+-                        callback(err);
++                        //callback(err);
+                     }
+                 });
+             });
diff --git a/component/cloud9/cloud9-removeAllListeners.patch b/component/cloud9/cloud9-removeAllListeners.patch
new file mode 100644
index 0000000000000000000000000000000000000000..53995165e9f983fd444332154eaf982374aa9ee8
--- /dev/null
+++ b/component/cloud9/cloud9-removeAllListeners.patch
@@ -0,0 +1,20 @@
+diff --git a/plugins-server/cloud9.ide.watcher/file_watcher.js b/plugins-server/cloud9.ide.watcher/file_watcher.
+index b7ed7da..36dcd05 100644
+--- a/plugins-server/cloud9.ide.watcher/file_watcher.js
++++ b/plugins-server/cloud9.ide.watcher/file_watcher.js
+@@ -69,11 +69,11 @@ util.inherits(FileWatcher, EventEmitter);
+ 
+     this.close = function() {
+         if (this.watcher) {
+-            this.watcher.removeAllListeners();
++            //this.watcher.removeAllListeners();
+             this.watcher.close();
+             this.emit("close");
+         }
+         this.watcher = null;
+     };
+ 
+-}).call(FileWatcher.prototype);
+\ No newline at end of file
++}).call(FileWatcher.prototype);
+
diff --git a/setup.py b/setup.py
index f6f7facfbf818b4f9bb439c6a661e0d1471bbd0c..0df61b04440db1ff9adad63909799d89f41d1193 100755
--- a/setup.py
+++ b/setup.py
@@ -28,7 +28,7 @@ from setuptools import setup, find_packages
 import glob
 import os
 
-version = '0.84.2'
+version = '0.85'
 name = 'slapos.cookbook'
 long_description = open("README.txt").read() + "\n" + \
     open("CHANGES.txt").read() + "\n"
@@ -184,7 +184,6 @@ setup(name=name,
           'slapmonitor = slapos.recipe.slapmonitor:MonitorRecipe',
           'slapmonitor-xml = slapos.recipe.slapmonitor:MonitorXMLRecipe',
           'slapreport = slapos.recipe.slapreport:Recipe',
-          'slaprunner = slapos.recipe.slaprunner:Recipe',
           'slaprunner.test = slapos.recipe.slaprunner:Test',
           'slaprunner.export = slapos.recipe.slaprunner.backup:ExportRecipe',
           'slaprunner.import = slapos.recipe.slaprunner.backup:ImportRecipe',
diff --git a/slapos/recipe/librecipe/generic.py b/slapos/recipe/librecipe/generic.py
index 88e51abd9fc3f8efde4120ec8892c61fa112fa9f..fbe6e3658c68a434540edeb0ac888044914db39a 100644
--- a/slapos/recipe/librecipe/generic.py
+++ b/slapos/recipe/librecipe/generic.py
@@ -155,7 +155,7 @@ class GenericBaseRecipe(object):
           pidfile=%s
           if [ -e $pidfile ]; then
             pid=$(cat $pidfile)
-            if [[ ! -z $(ps -p "$pid" | grep $(basename %s)) ]]; then
+            if [ ! -z $(ps -p "$pid" | grep $(basename %s)) ]; then
               echo "Already running with pid $pid."
               exit 1
             else
diff --git a/slapos/recipe/shellinabox.py b/slapos/recipe/shellinabox.py
index 4b1e499a02c27e565d8332f9e50c60245a8ac97d..dd2643fff3c4e75ed48c7c77dfc467bdc22c6db8 100644
--- a/slapos/recipe/shellinabox.py
+++ b/slapos/recipe/shellinabox.py
@@ -34,7 +34,11 @@ from slapos.recipe.librecipe import GenericBaseRecipe
 
 def login_shell(args):
   password = args['password']
-  entered_password = getpass()
+  
+  if (password != ''):
+    entered_password = getpass()
+  else:
+    entered_password = ''
 
   if entered_password != password:
     return 1
@@ -54,11 +58,11 @@ def shellinabox(args):
     with open(args['ssl_certificate']) as public_key_file:
       print >> certificate_file, public_key_file.read()
 
-  user = pwd.getpwuid(os.getuid()).pw_name
-  group = grp.getgrgid(os.getgid()).gr_name
+  user = pwd.getpwuid(os.getuid()).pw_uid
+  group = grp.getgrgid(os.getgid()).gr_gid
   service = '/:%(user)s:%(group)s:%(directory)s:%(command)s' % {
-    'user': group,
-    'group': user,
+    'user': user,
+    'group': group,
     'directory': args['directory'],
     'command': args['login_shell'],
   }
diff --git a/slapos/recipe/slaprunner/__init__.py b/slapos/recipe/slaprunner/__init__.py
index f49f1a99f9f7179eaeef872aa62971026beb490c..6804b73d92b78a4192badd9975feb5330d189628 100644
--- a/slapos/recipe/slaprunner/__init__.py
+++ b/slapos/recipe/slaprunner/__init__.py
@@ -27,78 +27,8 @@
 from slapos.recipe.librecipe import GenericBaseRecipe
 import os
 
-class Recipe(GenericBaseRecipe):
-
-  def _options(self, options):
-    self.ipv4 = options['ipv4'].strip()
-    self.ipv6 = options['ipv6'].strip()
-    self.proxy_port = options['proxy_port'].strip()
-    self.runner_port = options['runner_port'].strip()
-    self.workdir = options['working-directory'].strip()
-    self.software_directory = options['software-directory'].strip()
-    self.instance_directory = options['instance-directory'].strip()
-    self.partition_amount = options['partition-amount'].strip()
-    self.cloud9_url = options.get('cloud9-url', '').strip()
-    self.log_file = os.path.join(options['log_dir'].strip(), 'slaprunner.log')
-    # Set slaprunner access URL, CLN Beware ipv6 access is made throught nginx
-    options['access-url'] = 'https://[%s]:%s' % (self.ipv6, self.runner_port)
-
-  def install(self):
-    path_list = []
-
-    configuration = dict(
-        software_root=self.software_directory,
-        instance_root=self.instance_directory,
-        master_url='http://%s:%s' % (self.ipv4, self.proxy_port),
-        computer_id='slaprunner',
-        partition_amount=self.partition_amount,
-        slapgrid_sr=self.options['slapgrid_sr'],
-        slapgrid_cp=self.options['slapgrid_cp'],
-        slapproxy=self.options['slapproxy'],
-        supervisor=self.options['supervisor'],
-        supervisord_config=os.path.join(self.instance_directory, 'etc',
-          'supervisord.conf'),
-        runner_workdir=self.workdir,
-        etc_dir=self.options['etc_dir'],
-        run_dir=self.options['run_dir'],
-        log_dir=self.options['log_dir'],
-        runner_host=self.ipv4,
-        runner_port=self.runner_port,
-        ipv4_address=self.ipv4,
-        ipv6_address=self.ipv6,
-        proxy_host=self.ipv4,
-        proxy_port=self.proxy_port,
-        proxy_database=os.path.join(self.workdir, 'proxy.db'),
-        git=self.options['git-binary'],
-        ssh_client=self.options['ssh_client'],
-        public_key=self.options['public_key'],
-        private_key=self.options['private_key'],
-        cloud9_url=self.cloud9_url
-    )
-
-    config_file = self.createFile(self.options['slapos.cfg'],
-        self.substituteTemplate(self.getTemplateFilename('slapos.cfg.in'),
-        configuration))
-    path_list.append(config_file)
-
-    environment = dict(
-        PATH=os.path.dirname(
-            self.options['git-binary']) + ':' + os.environ['PATH'],
-        GIT_SSH=self.options['ssh_client']
-    )
-    launch_args = [self.options['slaprunner'].strip(), config_file,
-                   '--log_file', self.log_file]
-    if self.optionIsTrue('debug', default=False):
-      launch_args.append('--debug')
-
-    wrapper = self.createPythonScript(self.options['wrapper'],
-        'slapos.recipe.librecipe.execute.executee',
-        (launch_args, environment)
-    )
-    path_list.append(wrapper)
-
-    return path_list
-
+#XXX-Nicolas This recipe has to be deleted as soon as possible
+#No changes allowed, except full-replacement using buildout
 class Test(GenericBaseRecipe):
   def _options(self, options):
     self.ipv4 = options['ipv4'].strip()
diff --git a/slapos/recipe/slaprunner/backup.py b/slapos/recipe/slaprunner/backup.py
index 887761596e67a163860069efbc4274cc7b0f165e..31d7844ebb937048b0cf3f0edf263eea5e466139 100644
--- a/slapos/recipe/slaprunner/backup.py
+++ b/slapos/recipe/slaprunner/backup.py
@@ -70,7 +70,7 @@ class ExportRecipe(GenericBaseRecipe):
                     fi
                   done
                 }
-                sync_element %(srv-directory)s/runner  %(backup-directory)s/runner/ instance project  proxy.db softwareLink
+                sync_element %(srv-directory)s/runner  %(backup-directory)s/runner/ instance project  proxy.db
                 sync_element %(etc-directory)s  %(backup-directory)s/etc/ .rcode .project .users .htpasswd ssh
                 if [ -d %(backup-directory)s/runner/software ]; then
                   rm %(backup-directory)s/runner/software/*
@@ -119,13 +119,14 @@ class ImportRecipe(GenericBaseRecipe):
                     fi
                   done
                 }
-                restore_element %(backup-directory)s/runner/ %(srv-directory)s/runner  instance project  proxy.db softwareLink
+                restore_element %(backup-directory)s/runner/ %(srv-directory)s/runner  instance project  proxy.db
                 restore_element  %(backup-directory)s/etc/ %(etc-directory)s .rcode .project .users .htpasswd ssh
                 ifs=$IFS IFS=';'
                 read user pass remaining < %(etc-directory)s/.users
                 IFS=$ifs
                 %(curl-binary)s --insecure -vg6L -F clogin="$user" -F cpwd="$pass" --dump-header login_cookie  %(backend-url)s/doLogin;
-                %(curl-binary)s --insecure -vg6LX POST --cookie login_cookie --max-time 5  %(backend-url)s/runSoftwareProfile;
+                %(curl-binary)s --insecure -vg6L --cookie login_cookie --max-time 5  %(backend-url)s/isSRReady;
+                %(curl-binary)s --insecure -vg6LX POST --cookie login_cookie --max-time 5  %(backend-url)s/runSoftwareProfile --user "$user":"$pass";
                 rm -f login_cookie
                 """ % self.options)
         self.createExecutable(wrapper, content=content)
diff --git a/software/slaprunner/README.txt b/software/slaprunner/README.txt
index 112c4fd3a490cb5d18a471848ffc17cc6fc9828d..81b7c30234afade3fbe8df745e6608dbc02ddc23 100644
--- a/software/slaprunner/README.txt
+++ b/software/slaprunner/README.txt
@@ -28,3 +28,74 @@ instance-amount
 Optional parameter.
 
 Default: 10
+
+AUTO-DEPLOYMENT
+---------------
+
+You can automatically deploy a software release while deploying the webrunner itself, using the paramater XML.
+
+To do this, you only need to pass as a parameter named "slapos-software" : "AAA/BBB", where AAA is the folder of slapos.git where is located your BBB software.
+For example, to deploy the hello-world software, you need to pass : software/helloworld
+
+This is possible because the slapos.git is automatically downloaded when the webrunner is deployed.
+
+It is also possible to download you own git repository, by providing the url in the "slapos-repository" parameter.
+
+Last but not least, it is also possible to switch the branch with the parameter "slapos-reference" (by default pointing on master)
+
+Resilience :
+------------
+
+To order a resilient runner, you have to request a runner with the option: "--type resilient"
+
+You can then decide on which node you want to deploy each instance, with the parameters.xml :
+	<?xml version='1.0' encoding='utf-8'?>
+	<instance>
+	  <parameter id="-sla-runner2-computer_guid">COMP-XXXX</parameter>
+	  <parameter id="-sla-pbs2-computer_guid">COMP-XXXX</parameter>
+	  <parameter id="-sla-pbs1-computer_guid">COMP-XXXX</parameter>
+	  <parameter id="-sla-runner1-computer_guid">COMP-XXXX</parameter>
+	  <parameter id="-sla-runner0-computer_guid">COMP-XXXX</parameter>
+	</instance>
+
+If you want to check by yourself that the pull-backup instances do their job, you can change directory to the slappart of runner0, and run ./bin/exporter (after creating your account, using the given backend_url or url): it would fill ./srv/backup/runner with data. If you then go to an import instance (runner1 or runner2) on the port 50005, you should be able to sign in the runner.
+
+
+Tips :
+~~~~~
+
+To find in which partition the instance has been deployed, you can open the page of this specific instance, and look for "slappartXX" on the page.
+
+Tests :
+-------
+
+To test the runner, start by ordering a runner with default type. Then READ the important note below :
+
+/!\ IMPORTANT NOTE ON THE TESTS /!\ : in order to make them work, you have to comment the last line of the file __init__.py in the runner module (which is just : "run()"). Indeed, this line is used to load the config, when importing this module throught Gunicorn (the wsgi server). But the test suite loads itself the configuration, in fonction of the tested scenarios, etc... (You can find the module in the SR folder directory, under ./eggs/slapos.toolbox, or under parts/slapos.toolbox if you have a development version)
+
+Then, su in the concerned slapuserX and run "./bin/runTestSuite".
+
+For the tests on the resiliency of the webrunner, please refer to the README in slapos.toolbox.git/slapos/resiliencytest
+
+Request custom frontend :
+-------------------------
+
+While deploying a server in your instance, you may need to ask for a custom ipv4 frontend.
+
+The way to do that is to send a new parameter to your runner instance, using the parameters XML. The name of it is "custom-frontend-backend-url".
+
+To create the frontend, you now have to wait the slaprunner to be processed.
+
+If you deploy a server, which uses basic auth, you also have to declare the parameter "custom-frontend-basic-auth" as true, or your slaprunner instance won't show as correctly instanciated.
+
+Example :
+	<?xml version='1.0' encoding='utf-8'?>
+	<instance>
+	<parameter id="custom-frontend-backend-url">http(s)://[THE_IPV6_ADDRESS]:PORT</parameter>
+	<parameter id="custom-frontend-basic-auth">true</parameter>
+	</instance>
+
+Things to notice for the nex developer :
+----------------------------------------
+
+As you can see in instance-runner-*.cfg, the buildout section extends a hard-coded template file. If one day you need to modify the filename, do not forget to modify it in instance.cfg, but also in these files ! (the problem is that the content of instance.cfg is not known by buildout while the deployment of the software release)
diff --git a/software/slaprunner/TODO.txt b/software/slaprunner/TODO.txt
index 106a496ac153cab6541aa0fe2b10fbb4b8a48568..3bcbcfcca3853eaa2eeb6224ffb71c6469c6709d 100644
--- a/software/slaprunner/TODO.txt
+++ b/software/slaprunner/TODO.txt
@@ -1,2 +1,2 @@
-- Use https to connect to the runner. !!! Critical
 - resilient sr: Cloned instances should not launch slapgrid-sr if it was not launched on export instance
+- shellinabox password should be the same in all the resilient instances
diff --git a/software/slaprunner/common.cfg b/software/slaprunner/common.cfg
index 30b7ffb04978aaf4515c0e45caa8ac4e932355a3..2ffed96504be4b0e43ee611a4542dec861502b17 100644
--- a/software/slaprunner/common.cfg
+++ b/software/slaprunner/common.cfg
@@ -9,6 +9,9 @@ extends =
   ../../component/lxml-python/buildout.cfg
   ../../component/nginx/buildout.cfg
   ../../component/rsync/buildout.cfg
+  ../../component/python-2.7/buildout.cfg
+  ../../component/shellinabox/buildout.cfg
+  ../../component/busybox/buildout.cfg
   ../../stack/flask.cfg
   ../../stack/shacache-client.cfg
   ../../stack/resilient/buildout.cfg
@@ -25,7 +28,7 @@ parts =
   instance-runner-import
   instance-runner-export
   slapos-cookbook
-
+  slapos-cfg-template 
 # XXX: we have to manually add this for resilience
   rdiff-backup
   collective.recipe.template-egg
@@ -76,48 +79,50 @@ command =
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance.cfg
 output = ${buildout:directory}/template.cfg
-md5sum = 92a2f3bcd5ff79e3b61ca4a8bacb73ec
+md5sum = 8a47421ac6158b4ee476acab212c67d9
 mode = 0644
 
 [template-runner]
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner.cfg
-output = ${buildout:directory}/template-runner.cfg
-md5sum = bcd1ee4dd126d2c6e9461f7753fc83b7
+output = ${buildout:directory}/template-runner.cfg.in
+md5sum = e1f7b39241c1c211410ad5ef75845c68
 mode = 0644
 
 [instance-runner-import]
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner-import.cfg.in
 output = ${buildout:directory}/instance-runner-import.cfg
-md5sum = f16cb60bb16632e652bea69cd5cdd9b7
+md5sum = 93e3c496c0955a0f7e09570bbe44e3ea
 mode = 0644
 
 [instance-runner-export]
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-runner-export.cfg.in
 output = ${buildout:directory}/instance-runner-export.cfg
-md5sum = 9ce3482e64a0c957f7a5f25ad0dc03ae
+md5sum = 3a69ef9a2743dbb4ab0708a7675d100c
 mode = 0644
 
 [template-resilient]
 recipe = slapos.recipe.download
 url = ${:_profile_base_location_}/instance-resilient.cfg.jinja2
-md5sum = 2562a6ac6893cc71a7328d7064aff599
+md5sum = c23e8eb84b4e8375543e104e0993a019
 filename = instance-resilient.cfg.jinja2
 mode = 0644
 
 [template-resilient-test]
-recipe = slapos.recipe.download
+recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/instance-resilient-test.cfg.jinja2
-md5sum = ac772d3a1cce4072acfabd563df449bb
+download-only = true
+md5sum = 18269f9c88f9c3bb1c2b535e44f64f56
 filename = instance-resilient-test.cfg.jinja2
 mode = 0644
 
 [template_nginx_conf]
-recipe = slapos.recipe.download
+recipe = hexagonit.recipe.download
 url = ${:_profile_base_location_}/nginx_conf.in
-md5sum = 09b7677dfc6b23c1f58e67fd06a7625e
+download-only = true
+md5sum = e169a8f217fab490ffb435d4b2d07ef3
 filename = nginx_conf.in
 mode = 0644
 
@@ -129,6 +134,15 @@ filename = launcher.in
 mode = 0644
 location = ${buildout:parts-directory}/${:_buildout_section_name_}
 
+[slapos-cfg-template]
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/template/${:filename}
+md5sum = 6e90b4d037ba549640345827370f8dc3
+location = ${buildout:parts-directory}/${:_buildout_section_name_}
+filename = slapos.cfg.in 
+download-only = true
+mode = 0644
+
 [eggs]
 recipe = z3c.recipe.scripts
 eggs =
@@ -145,6 +159,8 @@ eggs =
   slapos.core
   xml_marshaller
   pytz
+  collective.recipe.environment
+  Gunicorn
 
 # Add slapos.libnetworkcache to path of slapos.core so that slaprunner can build SRs using cache
 [slapos-cookbook]
@@ -162,4 +178,3 @@ eggs =
   xml_marshaller
   pytz
   slapos.libnetworkcache
-
diff --git a/software/slaprunner/development.cfg b/software/slaprunner/development.cfg
index 00d313714ffcf4a35dd46fda2af29a42d4073296..0591bd4930d7380734fcb7aa0b42c591deec4afe 100644
--- a/software/slaprunner/development.cfg
+++ b/software/slaprunner/development.cfg
@@ -26,20 +26,21 @@ develop =
 [slapos.toolbox-repository]
 recipe = slapos.recipe.build:gitclone
 repository = http://git.erp5.org/repos/slapos.toolbox.git
-branch = kvmresiliency
+branch = slaprunner-paas
 git-executable = ${git:location}/bin/git
 
 [slapos.cookbook-repository]
 recipe = slapos.recipe.build:gitclone
 repository = http://git.erp5.org/repos/slapos.git
-branch = slaprunner
+branch = slaprunner-paas-test
 git-executable = ${git:location}/bin/git
 
 # Used for resiliency tests only
 [erp5.util-repository]
 recipe = slapos.recipe.build:gitclone
 repository = http://git.erp5.org/repos/erp5.git
-branch = scalability-master2
+#branch = scalability-master2
+revision = f9a812f4e97ffeed359bc5611366a5c8675ec749
 git-executable = ${git:location}/bin/git
 
 #[slapos.core-repository]
diff --git a/software/slaprunner/instance-resilient-test.cfg.jinja2 b/software/slaprunner/instance-resilient-test.cfg.jinja2
index 65ec46bfe334f8691d580ff3c9b01c172cd33c3b..f56389f374c4a86947828243cbb4cb409b17c57a 100644
--- a/software/slaprunner/instance-resilient-test.cfg.jinja2
+++ b/software/slaprunner/instance-resilient-test.cfg.jinja2
@@ -46,10 +46,13 @@ config = resiliency-backup-periodicity frontend-domain cloud9-frontend-domain {{
 {% for key, value in cluster_parameter_dict.items() -%}
 config-{{ key }} = {{ dumps(value) }}
 {% endfor -%}
-config-resiliency-backup-periodicity = *
+config-resiliency-backup-periodicity = * * * * *
 # XXX hardcoded
 config-frontend-domain = google.com
 config-cloud9-frontend-domain = google.com
+# XXX Hack to deploy Root Instance on the same computer as the type-test Instance
+sla = computer_guid
+sla-computer_guid = ${slap-connection:computer-id}
 return = backend_url
 
 [slap-parameter]
diff --git a/software/slaprunner/instance-resilient.cfg.jinja2 b/software/slaprunner/instance-resilient.cfg.jinja2
index b3d85c561faa56c726ec5437aa5bbaeff5a32ecd..e7ea8b060caf9707563a03999816b481de81a15b 100644
--- a/software/slaprunner/instance-resilient.cfg.jinja2
+++ b/software/slaprunner/instance-resilient.cfg.jinja2
@@ -17,17 +17,19 @@ parts +=
 
 # Bubble up the parameters
 [request-runner]
-return = url ssh-public-key ssh-url notification-id ip backend_url url cloud9_url ssh_command password_recovery_code cloud9_backend_url
+return = url ssh-public-key ssh-url notification-id ip backend_url url cloud9_url ssh_command password_recovery_code cloud9_backend_url shell_password access_url
 
 [publish-connection-informations]
 recipe = slapos.cookbook:publish
 1_info = Set your passord in slaprunner in order to access cloud9
 backend_url = ${request-runner:connection-backend_url}
+access_url = ${request-runner:connection-access_url}
 url = ${request-runner:connection-url}
 cloud9_url = ${request-runner:connection-cloud9_url}
 cloud9_backend_url = ${request-runner:connection-cloud9_backend_url}
 ssh_command = ${request-runner:connection-ssh_command}
 password_recovery_code = ${request-runner:connection-password_recovery_code}
+shell_password = ${request-runner:connection-shell_password}
 
 [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 a98c73486d74f132a5d80f77aeee28f8d106762c..8793c2f6b14c120e357e27571f13ad53d784f758 100644
--- a/software/slaprunner/instance-runner-export.cfg.in
+++ b/software/slaprunner/instance-runner-export.cfg.in
@@ -1,5 +1,5 @@
 [buildout]
-extends = ${template-runner:output}
+extends = template-runner.cfg
           ${pbsready-export:output}
 
 parts +=
@@ -9,20 +9,28 @@ parts +=
   certificate-authority
   ca-nginx
   ca-node-frontend
-  slaprunner
+  ca-shellinabox
+  gunicorn-launcher
+  gunicorn-graceful
   test-runner
   sshkeys-dropbear-runner
   dropbear-server-add-authorized-key
   sshkeys-authority
+  publish-connection-informations
   slaprunner-promise
   slaprunner-frontend-promise
   cloud9-promise
   cloud9-frontend-promise
   dropbear-promise
+  shellinabox-promise
   symlinks
+  request-cloud9-frontend
   node-frontend-promise
   nginx-promise
-  publish-connection-informations
+  shellinabox
+  slapos-cfg
+  slapos-repo-config
+  prepare-software
   cron-entry-backup
 
 [exporter]
diff --git a/software/slaprunner/instance-runner-import.cfg.in b/software/slaprunner/instance-runner-import.cfg.in
index 12546dbbfddd0839e7bef52adeea475d4257beec..1c61fb016c9f8d667642fac9058251855879eefb 100644
--- a/software/slaprunner/instance-runner-import.cfg.in
+++ b/software/slaprunner/instance-runner-import.cfg.in
@@ -1,5 +1,5 @@
 [buildout]
-extends = ${template-runner:output}
+extends = template-runner.cfg
           ${pbsready-import:output}
 
 parts +=
@@ -9,7 +9,9 @@ parts +=
   certificate-authority
   ca-nginx
   ca-node-frontend
-  slaprunner
+  ca-shellinabox
+  gunicorn-launcher
+  gunicorn-graceful
   test-runner
   sshkeys-dropbear-runner
   dropbear-server-add-authorized-key
@@ -17,8 +19,14 @@ parts +=
   slaprunner-promise
   cloud9-promise
   dropbear-promise
+  shellinabox-promise
+  nginx-promise
+  shellinabox
   symlinks
   nginx-promise
+  slapos-cfg
+  slapos-repo-config
+  prepare-software
 # have to repeat the next one, as it's not inherited from pbsready-import
   import-on-notification
 
diff --git a/software/slaprunner/instance-runner.cfg b/software/slaprunner/instance-runner.cfg
index a6d5d4cdf64e8cf0b2c39f6c3db648552f940058..ae64000ad648dce780d755362e73091de4d46397 100644
--- a/software/slaprunner/instance-runner.cfg
+++ b/software/slaprunner/instance-runner.cfg
@@ -6,7 +6,9 @@ parts =
   certificate-authority
   ca-nginx
   ca-node-frontend
-  slaprunner
+  ca-shellinabox
+  gunicorn-launcher
+  gunicorn-graceful
   test-runner
   sshkeys-dropbear-runner
   dropbear-server-add-authorized-key
@@ -17,15 +19,64 @@ parts =
   cloud9-promise
   cloud9-frontend-promise
   dropbear-promise
+  shellinabox-promise
   symlinks
   request-cloud9-frontend
   node-frontend-promise
   nginx-promise
+  shellinabox
+  slapos-cfg
+  slapos-repo-config
+  prepare-software
+{% if slapparameter_dict.get('custom-frontend-backend-url') %}
+  custom-frontend-promise
+{% endif %}
 
 eggs-directory = ${buildout:eggs-directory}
 develop-eggs-directory = ${buildout:develop-eggs-directory}
 offline = true
 
+{% if slapparameter_dict.get('custom-frontend-backend-url') -%}
+# Requests, if defined, a frontend to allow access to a server
+# located inside of the virtual machine listening to port X
+# to LAN IPv4.
+# Internaly, the frontend will be asked to listen on the IPv6
+# with port X + 10000, to match NAT rules of Qemu.
+[request-custom-frontend]
+recipe = slapos.cookbook:request
+software-url = {{ slapparameter_dict.get('custom-frontend-software-url', 'http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg') }}
+software-type = {{ slapparameter_dict.get('custom-frontend-software-type', 'RootSoftwareInstance') }}
+slave = true
+name = Custom Web Frontend
+
+server-url = $${slap-connection:server-url}
+key-file = $${slap-connection:key-file}
+cert-file = $${slap-connection:cert-file}
+computer-id = $${slap-connection:computer-id}
+partition-id = $${slap-connection:partition-id}
+
+{% if slapparameter_dict.get('custom-frontend-instance-guid') -%}
+sla = instance_guid
+sla-instance_guid = $${slap-parameter:frontend-instance-guid}
+{% endif -%}
+
+config = url
+config-url = {{ slapparameter_dict.get('custom-frontend-backend-url') }}
+return = site_url domain
+
+[custom-frontend-promise]
+recipe = slapos.cookbook:check_url_available
+path = $${directory:promises}/custom_frontend_promise
+url = https://$${request-custom-frontend:connection-domain}
+{% if slapparameter_dict.get('custom-frontend-basic-auth') -%}
+check-secure = 1
+{% endif -%}
+dash_path = {{ dash_executable_location }}
+curl_path = {{ curl_executable_location }}
+
+[publish-connection-informations]
+custom-frontend-url = https://$${request-custom-frontend:connection-domain}
+{% endif -%}
 
 # Create all needed directories
 [directory]
@@ -47,7 +98,7 @@ promises = $${:etc}/promise/
 test = $${:etc}/test/
 nginx-data = $${directory:srv}/nginx
 ca-dir = $${:srv}/ssl
-
+project = $${:srv}/runner/project/
 
 [runnerdirectory]
 recipe = slapos.cookbook:mkdirectory
@@ -65,7 +116,7 @@ sessions = $${buildout:directory}/.sessions
 [recovery-code]
 recipe = slapos.cookbook:generate.password
 storage-path = $${directory:etc}/.rcode
-bytes = 4
+bytes = 8
 
 # Deploy cloud9 and slaprunner
 [cloud9]
@@ -75,11 +126,10 @@ port = 4443
 wrapper = $${directory:services}/cloud9
 working-directory = $${runnerdirectory:home}
 git-binary = ${git:location}/bin/git
-node-binary = ${nodejs:location}/bin/node
+node-binary = ${nodejs-0.6:location}/bin/node
 cloud9 = ${cloud9:executable}
 
 [slaprunner]
-recipe = slapos.cookbook:slaprunner
 slaprunner = ${buildout:directory}/bin/slaprunner
 slapgrid_sr = ${buildout:directory}/bin/slapgrid-sr
 slapgrid_cp = ${buildout:directory}/bin/slapgrid-cp
@@ -105,6 +155,12 @@ partition-amount = $${slap-parameter:instance-amount}
 cloud9-url = $${cloud9:access-url}
 wrapper = $${directory:services}/slaprunner
 debug = $${slap-parameter:debug}
+access-url = https://[$${:ipv6}]:$${:runner_port} 
+supd-temp-var = $${directory:etc}/supervisord.conf
+prox-db-var = $${slaprunner:working-directory}/proxy.db
+console = False
+verbose = False
+debug = False
 
 [test-runner]
 <= slaprunner
@@ -182,7 +238,7 @@ context =
 	key backend_port nginx-frontend:port
 	raw shell_path ${bash:location}/bin/bash
 	raw node_env ${buildout:parts-directory}:${npm-modules:location}/node_modules
-	raw node_path ${nodejs:location}/bin/node
+	raw node_path ${nodejs-0.6:location}/bin/node
 	raw conf_path ${simple-proxy:location}/${simple-proxy:filename}
 
 #---------------------------
@@ -218,7 +274,7 @@ path_pid = $${directory:run}/nginx.pid
 path_log = $${directory:log}/nginx.log
 path_access_log = $${directory:log}/nginx.access.log
 path_error_log = $${directory:log}/nginx.error.log
-path_tmp = $${buildout:directory}/tmp
+path_tmp = $${directory:tmp}/
 # Config files
 path_nginx_conf = $${directory:etc}/nginx.conf
 # Executables
@@ -235,6 +291,8 @@ recipe = slapos.recipe.template:jinja2
 template = ${template_nginx_conf:location}/${template_nginx_conf:filename}
 rendered = $${nginx-frontend:path_nginx_conf}
 context =
+    key shellinabox_port shellinabox:port
+    key socket gunicorn:socket
     section param_nginx_frontend nginx-frontend
     section param_tempdir tempdirectory
 
@@ -246,6 +304,29 @@ mode = 700
 context =
     section param_nginx_frontend nginx-frontend
 
+#--------------------
+#--
+#-- WSGI
+
+[gunicorn]
+bin_gunicorn = $${directory:bin}/gunicorn
+bin_launcher = $${directory:services}/gunicorn
+path_shell = ${dash:location}/bin/dash
+socket = $${directory:tmp}/flaskserver.sock
+path_pid = $${directory:run}/gunicorn.pid
+
+[gunicorn-launcher]
+recipe = slapos.cookbook:wrapper
+command-line = $${gunicorn:bin_gunicorn} slapos.runner:app -p $${gunicorn:path_pid} -b unix:$${gunicorn:socket} -e RUNNER_CONFIG=$${slaprunner:slapos.cfg} --preload
+wrapper-path = $${gunicorn:bin_launcher}
+environment = PATH=$${environ:PATH}
+  RUNNER_CONFIG=$${slaprunner:slapos.cfg}
+
+[gunicorn-graceful]
+recipe = slapos.cookbook:wrapper
+command-line = $${directory:bin}/killpidfromfile $${gunicorn:path_pid} SIGHUP
+wrapper-path = $${directory:scripts}/gunicorn-graceful
+
 #--------------------
 #--
 #-- ssl certificates
@@ -289,6 +370,13 @@ wrapper = $${directory:services}/node-frontend
 # Put domain name
 name = example.com
 
+[ca-shellinabox]
+<= certificate-authority
+recipe = slapos.cookbook:certificate_authority.request
+executable = $${shellinabox:wrapper}
+wrapper = $${directory:services}/shellinaboxd
+key-file = $${cadirectory:certs}/shellinabox.key
+cert-file = $${cadirectory:certs}/shellinabox.crt
 #--------------------
 #--
 #-- Request frontend
@@ -301,7 +389,7 @@ name = SlapRunner Frontend
 software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
 slave = true
 config = url domain
-config-url = $${node-frontend:access-url}
+config-url = $${slaprunner:access-url}
 config-domain = $${slap-parameter:frontend-domain}
 return = site_url domain
 
@@ -324,10 +412,12 @@ return = site_url domain
 recipe = slapos.cookbook:publish
 1_info = Set your passord in slaprunner in order to access cloud9
 backend_url = $${slaprunner:access-url}
+access_url = $${slaprunner:access-url}/login
 url =  https://$${request-frontend:connection-domain}
 cloud9_backend_url = $${node-frontend:access-url}
 cloud9_url = https://$${request-cloud9-frontend:connection-domain}
 ssh_command = ssh $${dropbear-runner-server:host} -p $${dropbear-runner-server:port}
+shell_password = $${shellinabox:password}
 password_recovery_code = $${recovery-code:passwd}
 
 #---------------------------
@@ -343,7 +433,7 @@ port = $${slaprunner:runner_port}
 [slaprunner-frontend-promise]
 recipe = slapos.cookbook:check_url_available
 path = $${directory:promises}/slaprunner_frontend
-url = https://$${request-frontend:connection-domain}
+url = https://$${request-frontend:connection-domain}/login
 dash_path = ${dash:location}/bin/dash
 curl_path = ${curl:location}/bin/curl
 
@@ -380,6 +470,12 @@ path = $${directory:promises}/dropbear
 hostname = $${dropbear-runner-server:host}
 port = $${dropbear-runner-server:port}
 
+[shellinabox-promise]
+recipe = slapos.cookbook:check_port_listening
+path = $${directory:promises}/shellinabox
+hostname = $${shellinabox:ipv6}
+port = $${shellinabox:port}
+
 [symlinks]
 recipe = cns.recipe.symlink
 symlink_target = $${directory:bin}
@@ -393,4 +489,91 @@ instance-amount = 10
 debug = false
 cloud9-frontend-domain =
 frontend-domain =
+slapos-repository = http://git.erp5.org/repos/slapos.git
+slapos-software =
+slapos-reference = master
+auto-deploy = true
+
+[slapos-cfg]
+recipe = slapos.recipe.template:jinja2
+template = ${slapos-cfg-template:location}/${slapos-cfg-template:filename}
+rendered = $${slaprunner:slapos.cfg}
+mode = 700
+context =
+  key software_root runnerdirectory:software-root
+  key instance_root runnerdirectory:instance-root
+  key ipv4 slaprunner:ipv4
+  key proxy_port slaprunner:proxy_port
+  key partition_amount slaprunner:partition-amount
+  key slapgrid_sr slaprunner:slapgrid_sr 
+  key slapgrid_cp slaprunner:slapgrid_cp
+  key slapproxy slaprunner:slapproxy 
+  key supervisor slaprunner:supervisor
+  key supervisord_config slaprunner:supd-temp-var
+  key runner_workdir slaprunner:working-directory
+  key runner_port slaprunner:runner_port
+  key ipv6 slaprunner:ipv6
+  key etc_dir slaprunner:etc_dir
+  key proxy_host slaprunner:ipv4
+  key proxy_database slaprunner:prox-db-var
+  key ssh_client slaprunner:ssh_client
+  key public_key slaprunner:public_key
+  key private_key slaprunner:private_key
+  key git slaprunner:git-binary
+  key cloud9_url slaprunner:cloud9-url
+  key run_dir slaprunner:run_dir
+  key log_dir slaprunner:log_dir
+  key console slaprunner:console
+  key verbose slaprunner:verbose
+  key debug slaprunner:debug
+  key auto_deploy slap-parameter:auto-deploy
+
+[shellinabox]
+recipe = slapos.cookbook:shellinabox
+ipv6 = $${slap-network-information:global-ipv6}
+port = 8080
+shell = $${shell:wrapper}
+wrapper = $${directory:bin}/shellinaboxd
+shellinabox-binary = ${shellinabox:location}/bin/shellinaboxd 
+password = $${shellinabox-code:passwd}
+directory = $${runnerdirectory:home}
+login-shell = $${directory:bin}/login
+certificate-directory = $${cadirectory:certs}
+cert-file = $${ca-shellinabox:cert-file}
+key-file = $${ca-shellinabox:key-file}
+
+[shellinabox-code]
+recipe = slapos.cookbook:generate.password
+storage-path = $${directory:etc}/.scode
+bytes = 8
+
+[shell]
+recipe = slapos.cookbook:shell
+wrapper = $${directory:bin}/sh
+shell = ${bash:location}/bin/bash
+home = $${runnerdirectory:home}
+path = $${environ:PATH}
+ps1 = "\\w> "
+
+[environ]
+recipe = collective.recipe.environment
+
+[slapos-repo]
+recipe = slapos.recipe.build:gitclone
+repository = $${slap-parameter:slapos-repository}
+git-executable = ${git:location}/bin/git
+develop = true
+location = $${directory:project}/slapos
+
+[slapos-repo-config]
+recipe = plone.recipe.command
+stop-on-error = true
+reference = $${slap-parameter:slapos-reference}
+location = $${slapos-repo:location}
+command = cd $${:location} && ${git:location}/bin/git checkout $${:reference} && echo "$${directory:etc}/.project" && SR=$${slap-parameter:slapos-software} && if [ -n "$SR" ] && [ ! -f "$${directory:etc}/.project" ]; then echo workspace/slapos/$${slap-parameter:slapos-software}/ > $${directory:etc}/.project; fi
+
+[prepare-software]
+recipe = slapos.cookbook:wrapper
+command-line = ${curl:location}/bin/curl -g https://[$${slaprunner:ipv6}]:$${slaprunner:runner_port}/isSRReady --max-time 1 --insecure
+wrapper-path = $${directory:scripts}/prepareSoftware
 
diff --git a/software/slaprunner/instance.cfg b/software/slaprunner/instance.cfg
index deb88f91c81a13726467fe4408b4082ff44e6835..c3da08060e1c036abc0bcce45440e000cebe5b4f 100644
--- a/software/slaprunner/instance.cfg
+++ b/software/slaprunner/instance.cfg
@@ -7,16 +7,30 @@ develop-eggs-directory = ${buildout:develop-eggs-directory}
 
 [switch_softwaretype]
 recipe = slapos.cookbook:softwaretype
-default = ${template-runner:output}
+default = $${instance-base-runner:rendered}
 resilient = $${instance-resilient:rendered}
 test = $${instance-resilient-test:rendered}
-runner = ${template-runner:output}
+runner = $${instance-base-runner:rendered}
 runner-import = ${instance-runner-import:output}
 runner-export = ${instance-runner-export:output}
 
 frozen = ${instance-frozen:output}
 pull-backup = ${template-pull-backup:output}
 
+[instance-base-runner]
+recipe = slapos.recipe.template:jinja2
+template = ${template-runner:output}
+rendered = $${buildout:directory}/template-runner.cfg
+extensions = jinja2.ext.do
+context = key buildout buildout:bin-directory
+          key develop_eggs_directory buildout:develop-eggs-directory
+          key eggs_directory buildout:eggs-directory
+          key slapparameter_dict slap-configuration:configuration
+          raw curl_executable_location ${curl:location}/bin/curl
+          raw dash_executable_location ${dash:location}/bin/dash
+          raw dcron_executable_location ${dcron:location}/sbin/crond
+mode = 0644
+
 [instance-resilient]
 recipe = slapos.recipe.template:jinja2
 template = ${template-resilient:target}
@@ -50,4 +64,4 @@ computer = $${slap-connection:computer-id}
 partition = $${slap-connection:partition-id}
 url = $${slap-connection:server-url}
 key = $${slap-connection:key-file}
-cert = $${slap-connection:cert-file}
\ No newline at end of file
+cert = $${slap-connection:cert-file}
diff --git a/software/slaprunner/nginx_conf.in b/software/slaprunner/nginx_conf.in
index c5b2ed295395ce6cf433852f35392dd4141b8c3e..0adab07b0b04a837f8f959f12002c5eac30a8b1b 100644
--- a/software/slaprunner/nginx_conf.in
+++ b/software/slaprunner/nginx_conf.in
@@ -55,16 +55,39 @@ http {
         fastcgi_temp_path {{ param_tempdir['fastcgi_temp_path'] }};
         uwsgi_temp_path {{ param_tempdir['uwsgi_temp_path'] }};
         scgi_temp_path {{ param_tempdir['scgi_temp_path'] }};
+	error_page 401 /login;
         location / {
-            proxy_pass  http://{{ param_nginx_frontend['runner-ip'] }}:{{ param_nginx_frontend['runner-port'] }};
+            auth_basic "Restricted";
+            auth_basic_user_file {{ param_nginx_frontend['etc_dir'] }}/.htpasswd;
+            proxy_redirect off;
+            proxy_set_header   X-Forwarded-Proto $scheme;
+            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
+            proxy_set_header   X-Forwarded-Host  $http_host;
+            proxy_set_header   X-Accel-Mapping   /private/;
+
+            proxy_pass http://unix:{{ socket }};
+        }
+        location ~ ^(/login|/doLogin|/static|/setAccount|/configAccount|/slapgridResult|/isSRReady) {
+            proxy_redirect off;
+            proxy_set_header   X-Forwarded-Proto $scheme;
+            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
+            proxy_set_header   X-Forwarded-Host  $http_host;
+            proxy_set_header   X-Accel-Mapping   /private/;
+
+            proxy_pass http://unix:{{ socket }};
+        }
+	location /shellinabox {
+            proxy_pass  http://[{{ param_nginx_frontend['global-ip'] }}]:{{ shellinabox_port }}/;
             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
+            auth_basic "Restricted";
+            auth_basic_user_file {{ param_nginx_frontend['etc_dir'] }}/.htpasswd;
             proxy_redirect off;
             proxy_buffering off;
             proxy_set_header        Host              $host;
             proxy_set_header        X-Real-IP         $remote_addr;
-            proxy_set_header        X-Forwarded-Proto $scheme;
+	    proxy_set_header        X-Forwarded-Proto $scheme;
             proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Host  $http_host;
-        }
+	    proxy_set_header        X-Forwarded-Host  $http_host;
+	}
     }
 }
diff --git a/software/slaprunner/software.cfg b/software/slaprunner/software.cfg
index 3b453c0d56fe1ec33ed4b29a0a71c72aeb9e3a3a..3e5c50a50218a4fa2443d42628eb6e577b61bc38 100644
--- a/software/slaprunner/software.cfg
+++ b/software/slaprunner/software.cfg
@@ -11,7 +11,81 @@ extends = common.cfg
 # signature certificates of the following uploaders.
 #   Cedric de Saint Martin
 #   Test Agent
+#   Romain Courteaud
+#   Sebastien Robin
+#   Kazuhiko Shiozaki
+#   Cedric de Saint Martin
+#   Yingjie Xu
+#   Gabriel Monnerat
+#   Łukasz Nowak
+#   Test Agent (Automatic update from tests)
+#   Aurélien Calonne
+#   Nicolas Wavrant
 signature-certificate-list =
+  -----BEGIN CERTIFICATE-----
+  MIIB9jCCAV+gAwIBAgIJAO4V/jiMoICoMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
+  BAMMCENPTVAtMjMyMCAXDTEyMDIxNjExMTAyM1oYDzIxMTIwMTIzMTExMDIzWjAT
+  MREwDwYDVQQDDAhDT01QLTIzMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+  wi/3Z8W9pUiegUXIk/AiFDQ0UJ4JFAwjqr+HSRUirlUsHHT+8DzH/hfcTDX1I5BB
+  D1ADk+ydXjMm3OZrQcXjn29OUfM5C+g+oqeMnYQImN0DDQIOcUyr7AJc4xhvuXQ1
+  P2pJ5NOd3tbd0kexETa1LVhR6EgBC25LyRBRae76qosCAwEAAaNQME4wHQYDVR0O
+  BBYEFMDmW9aFy1sKTfCpcRkYnP6zUd1cMB8GA1UdIwQYMBaAFMDmW9aFy1sKTfCp
+  cRkYnP6zUd1cMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAskbFizHr
+  b6d3iIyN+wffxz/V9epbKIZVEGJd/6LrTdLiUfJPec7FaxVCWNyKBlCpINBM7cEV
+  Gn9t8mdVQflNqOlAMkOlUv1ZugCt9rXYQOV7rrEYJBWirn43BOMn9Flp2nibblby
+  If1a2ZoqHRxoNo2yTmm7TSYRORWVS+vvfjY= -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB9jCCAV+gAwIBAgIJAKRvzcy7OH0UMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
+  BAMMCENPTVAtNzcyMCAXDTEyMDgxMDE1NDI1MVoYDzIxMTIwNzE3MTU0MjUxWjAT
+  MREwDwYDVQQDDAhDT01QLTc3MjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+  o7aipd6MbnuGDeR1UJUjuMLQUariAyQ2l2ZDS6TfOwjHiPw/mhzkielgk73kqN7A
+  sUREx41eTcYCXzTq3WP3xCLE4LxLg1eIhd4nwNHj8H18xR9aP0AGjo4UFl5BOMa1
+  mwoyBt3VtfGtUmb8whpeJgHhqrPPxLoON+i6fIbXDaUCAwEAAaNQME4wHQYDVR0O
+  BBYEFEfjy3OopT2lOksKmKBNHTJE2hFlMB8GA1UdIwQYMBaAFEfjy3OopT2lOksK
+  mKBNHTJE2hFlMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAaNRx6YN2
+  M/p3R8/xS6zvH1EqJ3FFD7XeAQ52WuQnKSREzuw0dsw12ClxjcHiQEFioyTiTtjs
+  5pW18Ry5Ie7iFK4cQMerZwWPxBodEbAteYlRsI6kePV7Gf735Y1RpuN8qZ2sYL6e
+  x2IMeSwJ82BpdEI5niXxB+iT0HxhmR+XaMI=
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB4DCCAUkCADANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJGUjEZMBcGA1UE
+  CBMQRGVmYXVsdCBQcm92aW5jZTEPMA0GA1UEChMGTmV4ZWRpMB4XDTExMDkxNTA5
+  MDAwMloXDTEyMDkxNTA5MDAwMlowOTELMAkGA1UEBhMCRlIxGTAXBgNVBAgTEERl
+  ZmF1bHQgUHJvdmluY2UxDzANBgNVBAoTBk5leGVkaTCBnzANBgkqhkiG9w0BAQEF
+  AAOBjQAwgYkCgYEApYZv6OstoqNzxG1KI6iE5U4Ts2Xx9lgLeUGAMyfJLyMmRLhw
+  boKOyJ9Xke4dncoBAyNPokUR6iWOcnPHtMvNOsBFZ2f7VA28em3+E1JRYdeNUEtX
+  Z0s3HjcouaNAnPfjFTXHYj4um1wOw2cURSPuU5dpzKBbV+/QCb5DLheynisCAwEA
+  ATANBgkqhkiG9w0BAQsFAAOBgQBCZLbTVdrw3RZlVVMFezSHrhBYKAukTwZrNmJX
+  mHqi2tN8tNo6FX+wmxUUAf3e8R2Ymbdbn2bfbPpcKQ2fG7PuKGvhwMG3BlF9paEC
+  q7jdfWO18Zp/BG7tagz0jmmC4y/8akzHsVlruo2+2du2freE8dK746uoMlXlP93g
+  QUUGLQ==
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB8jCCAVugAwIBAgIJAPu2zchZ2BxoMA0GCSqGSIb3DQEBBQUAMBIxEDAOBgNV
+  BAMMB3RzeGRldjMwHhcNMTExMDE0MTIxNjIzWhcNMTIxMDEzMTIxNjIzWjASMRAw
+  DgYDVQQDDAd0c3hkZXYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrPbh+
+  YGmo6mWmhVb1vTqX0BbeU0jCTB8TK3i6ep3tzSw2rkUGSx3niXn9LNTFNcIn3MZN
+  XHqbb4AS2Zxyk/2tr3939qqOrS4YRCtXBwTCuFY6r+a7pZsjiTNddPsEhuj4lEnR
+  L8Ax5mmzoi9nE+hiPSwqjRwWRU1+182rzXmN4QIDAQABo1AwTjAdBgNVHQ4EFgQU
+  /4XXREzqBbBNJvX5gU8tLWxZaeQwHwYDVR0jBBgwFoAU/4XXREzqBbBNJvX5gU8t
+  LWxZaeQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQA07q/rKoE7fAda
+  FED57/SR00OvY9wLlFEF2QJ5OLu+O33YUXDDbGpfUSF9R8l0g9dix1JbWK9nQ6Yd
+  R/KCo6D0sw0ZgeQv1aUXbl/xJ9k4jlTxmWbPeiiPZEqU1W9wN5lkGuLxV4CEGTKU
+  hJA/yXa1wbwIPGvX3tVKdOEWPRXZLg==
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB7jCCAVegAwIBAgIJAJWA0jQ4o9DGMA0GCSqGSIb3DQEBBQUAMA8xDTALBgNV
+  BAMMBHg2MXMwIBcNMTExMTI0MTAyNDQzWhgPMjExMTEwMzExMDI0NDNaMA8xDTAL
+  BgNVBAMMBHg2MXMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANdJNiFsRlkH
+  vq2kHP2zdxEyzPAWZH3CQ3Myb3F8hERXTIFSUqntPXDKXDb7Y/laqjMXdj+vptKk
+  3Q36J+8VnJbSwjGwmEG6tym9qMSGIPPNw1JXY1R29eF3o4aj21o7DHAkhuNc5Tso
+  67fUSKgvyVnyH4G6ShQUAtghPaAwS0KvAgMBAAGjUDBOMB0GA1UdDgQWBBSjxFUE
+  RfnTvABRLAa34Ytkhz5vPzAfBgNVHSMEGDAWgBSjxFUERfnTvABRLAa34Ytkhz5v
+  PzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAFLDS7zNhlrQYSQO5KIj
+  z2RJe3fj4rLPklo3TmP5KLvendG+LErE2cbKPqnhQ2oVoj6u9tWVwo/g03PMrrnL
+  KrDm39slYD/1KoE5kB4l/p6KVOdeJ4I6xcgu9rnkqqHzDwI4v7e8/D3WZbpiFUsY
+  vaZhjNYKWQf79l6zXfOvphzJ
+  -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   MIIB9jCCAV+gAwIBAgIJAO4V/jiMoICoMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
   BAMMCENPTVAtMjMyMCAXDTEyMDIxNjExMTAyM1oYDzIxMTIwMTIzMTExMDIzWjAT
@@ -26,6 +100,45 @@ signature-certificate-list =
   If1a2ZoqHRxoNo2yTmm7TSYRORWVS+vvfjY=
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
+  MIIB9jCCAV+gAwIBAgIJAIlBksrZVkK8MA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
+  BAMMCENPTVAtMzU3MCAXDTEyMDEyNjEwNTUyOFoYDzIxMTIwMTAyMTA1NTI4WjAT
+  MREwDwYDVQQDDAhDT01QLTM1NzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+  ts+iGUwi44vtIfwXR8DCnLtHV4ydl0YTK2joJflj0/Ws7mz5BYkxIU4fea/6+VF3
+  i11nwBgYgxQyjNztgc9u9O71k1W5tU95yO7U7bFdYd5uxYA9/22fjObaTQoC4Nc9
+  mTu6r/VHyJ1yRsunBZXvnk/XaKp7gGE9vNEyJvPn2bkCAwEAAaNQME4wHQYDVR0O
+  BBYEFKuGIYu8+6aEkTVg62BRYaD11PILMB8GA1UdIwQYMBaAFKuGIYu8+6aEkTVg
+  62BRYaD11PILMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAMoTRpBxK
+  YLEZJbofF7gSrRIcrlUJYXfTfw1QUBOKkGFFDsiJpEg4y5pUk1s5Jq9K3SDzNq/W
+  it1oYjOhuGg3al8OOeKFrU6nvNTF1BAvJCl0tr3POai5yXyN5jlK/zPfypmQYxE+
+  TaqQSGBJPVXYt6lrq/PRD9ciZgKLOwEqK8w=
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB9jCCAV+gAwIBAgIJAPHoWu90gbsgMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
+  BAMMCXZpZmlibm9kZTAeFw0xMjAzMTkyMzIwNTVaFw0xMzAzMTkyMzIwNTVaMBQx
+  EjAQBgNVBAMMCXZpZmlibm9kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+  ozBijpO8PS5RTeKTzA90vi9ezvv4vVjNaguqT4UwP9+O1+i6yq1Y2W5zZxw/Klbn
+  oudyNzie3/wqs9VfPmcyU9ajFzBv/Tobm3obmOqBN0GSYs5fyGw+O9G3//6ZEhf0
+  NinwdKmrRX+d0P5bHewadZWIvlmOupcnVJmkks852BECAwEAAaNQME4wHQYDVR0O
+  BBYEFF9EtgfZZs8L2ZxBJxSiY6eTsTEwMB8GA1UdIwQYMBaAFF9EtgfZZs8L2ZxB
+  JxSiY6eTsTEwMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAc43YTfc6
+  baSemaMAc/jz8LNLhRE5dLfLOcRSoHda8y0lOrfe4lHT6yP5l8uyWAzLW+g6s3DA
+  Yme/bhX0g51BmI6gjKJo5DoPtiXk/Y9lxwD3p7PWi+RhN+AZQ5rpo8UfwnnN059n
+  yDuimQfvJjBFMVrdn9iP6SfMjxKaGk6gVmI=
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB9jCCAV+gAwIBAgIJAMNZBmoIOXPBMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
+  BAMMCENPTVAtMTMyMCAXDTEyMDUwMjEyMDQyNloYDzIxMTIwNDA4MTIwNDI2WjAT
+  MREwDwYDVQQDDAhDT01QLTEzMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+  6peZQt1sAmMAmSG9BVxxcXm8x15kE9iAplmANYNQ7z2YO57c10jDtlYlwVfi/rct
+  xNUOKQtc8UQtV/fJWP0QT0GITdRz5X/TkWiojiFgkopza9/b1hXs5rltYByUGLhg
+  7JZ9dZGBihzPfn6U8ESAKiJzQP8Hyz/o81FPfuHCftsCAwEAAaNQME4wHQYDVR0O
+  BBYEFNuxsc77Z6/JSKPoyloHNm9zF9yqMB8GA1UdIwQYMBaAFNuxsc77Z6/JSKPo
+  yloHNm9zF9yqMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAl4hBaJy1
+  cgiNV2+Z5oNTrHgmzWvSY4duECOTBxeuIOnhql3vLlaQmo0p8Z4c13kTZq2s3nhd
+  Loe5mIHsjRVKvzB6SvIaFUYq/EzmHnqNdpIGkT/Mj7r/iUs61btTcGUCLsUiUeci
+  Vd0Ozh79JSRpkrdI8R/NRQ2XPHAo+29TT70=
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
   MIIB9jCCAV+gAwIBAgIJAKRvzcy7OH0UMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
   BAMMCENPTVAtNzcyMCAXDTEyMDgxMDE1NDI1MVoYDzIxMTIwNzE3MTU0MjUxWjAT
   MREwDwYDVQQDDAhDT01QLTc3MjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
@@ -38,6 +151,32 @@ signature-certificate-list =
   5pW18Ry5Ie7iFK4cQMerZwWPxBodEbAteYlRsI6kePV7Gf735Y1RpuN8qZ2sYL6e
   x2IMeSwJ82BpdEI5niXxB+iT0HxhmR+XaMI=
   -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB+DCCAWGgAwIBAgIJAKGd0vpks6T/MA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
+  BAMMCUNPTVAtMTU4NDAgFw0xMzA2MjAxMjE5MjBaGA8yMTEzMDUyNzEyMTkyMFow
+  FDESMBAGA1UEAwwJQ09NUC0xNTg0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+  gQDZTH9etPUC+wMZQ3UIiOwyyCfHsJ+7duCFYjuo1uZrhtDt/fp8qb8qK9ob+df3
+  EEYgA0IgI2j/9jNUEnKbc5+OrfKznzXjrlrH7zU8lKBVNCLzQuqBKRNajZ+UvO8R
+  nlqK2jZCXP/p3HXDYUTEwIR5W3tVCEn/Vda4upTLcPVE5wIDAQABo1AwTjAdBgNV
+  HQ4EFgQU7KXaNDheQWoy5uOU01tn1M5vNkEwHwYDVR0jBBgwFoAU7KXaNDheQWoy
+  5uOU01tn1M5vNkEwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQASmqCU
+  Znbvu6izdicvjuE3aKnBa7G++Fdp2bdne5VCwVbVLYCQWatB+n4crKqGdnVply/u
+  +uZ16u1DbO9rYoKgWqjLk1GfiLw5v86pd5+wZd5I9QJ0/Sbz2vZk5S4ciMIGwArc
+  m711+GzlW5xe6GyH9SZaGOPAdUbI6JTDwLzEgA==
+  -----END CERTIFICATE-----
+  -----BEGIN CERTIFICATE-----
+  MIIB+DCCAWGgAwIBAgIJAJAOvB8P2YYMMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
+  BAMMCUNPTVAtMTg1MjAgFw0xMzEyMDMxMjU5NDJaGA8yMTEzMTEwOTEyNTk0Mlow
+  FDESMBAGA1UEAwwJQ09NUC0xODUyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+  gQDgR2qKVURmOUmzc7KVL2Gk2VezWlHlJy3V3k1WVYahhFsSjf3O4VyTtroHbIGu
+  YMJaHLSvGvvvkVJIz/DKqOvl1/6435t+coYECimvzqzTBDWFlEKJbEixz/3nPnXe
+  CFqVzuCQ7e3nRIrIGLml6jZnXwPlzx8ANn1LO8pwKHj+xwIDAQABo1AwTjAdBgNV
+  HQ4EFgQUvo7qkSq82Ax5/vnxHoJOhySQSGowHwYDVR0jBBgwFoAUvo7qkSq82Ax5
+  /vnxHoJOhySQSGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCbNxtq
+  BckDSWb92gy/p+JbkMXLjRSSWgeKafvWQXMXpPHW847CPzUDB7zT0rT8a8SRjVuL
+  Vt/oo2VlJ9xbKEz/qppX8w1TwEZhEJk6h8ky51s2EyyITUy8LHESJes9l46DRbr8
+  Rm6WS5sk5oiCd146YkWhfZuOsQHXSG/+WC/GPQ==
+  -----END CERTIFICATE-----
 
 [versions]
 Flask-Auth = 0.85
@@ -46,35 +185,36 @@ Werkzeug = 0.8.3
 apache-libcloud = 0.11.4
 async = 0.6.1
 buildout-versions = 1.7
+cliff = 1.4
+cmd2 = 0.6.6
 cns.recipe.symlink = 0.2.3
+collective.recipe.environment = 0.2.0
+collective.recipe.template = 1.10
+erp5.util = 0.4.36
 gitdb = 0.5.4
 hexagonit.recipe.cmmi = 1.6
-inotifyx = 0.2.0
+inotifyx = 0.2.0-1
+lock-file = 2.0
 lxml = 3.0.1
 meld3 = 0.6.10
 netaddr = 0.7.10
 plone.recipe.command = 1.1
+prettytable = 0.7.2
 pycrypto = 2.6
-pytz = 2013b
-#slapos.cookbook = 0.71.1
+pytz = 2013.7
+rdiff-backup = 1.0.5
+requests = 1.2.3
+slapos.cookbook = 0.85
 slapos.core = 0.35.1
 slapos.libnetworkcache = 0.13.4
 slapos.recipe.build = 0.11.5
+slapos.recipe.cmmi = 0.2
+slapos.recipe.download = 1.0.dev-r4053
 slapos.recipe.template = 2.4.2
-#slapos.toolbox = 0.34.0
+slapos.toolbox = 0.38
 smmap = 0.8.2
 xml-marshaller = 0.9.7
 z3c.recipe.scripts = 1.0.1
-lock-file = 2.0
-rdiff-backup = 1.0.5
-slapos.recipe.cmmi = 0.2
-slapos.recipe.download = 1.0.dev-r4053
-slapos.toolbox = 0.35.1
-slapos.cookbook = 0.78.5
-cliff = 1.4
-cmd2 = 0.6.6
-prettytable = 0.7.2
-requests = 1.2.3
 # Required by:
 # slapos.core==0.34
 # slapos.toolbox==0.34.0
@@ -94,7 +234,7 @@ feedparser = 5.1.3
 
 # Required by:
 # hexagonit.recipe.cmmi==1.6
-hexagonit.recipe.download = 1.6nxd002
+hexagonit.recipe.download = 1.7nxd002
 
 # Required by:
 # slapos.core==0.34
@@ -134,3 +274,6 @@ unittest2 = 0.5.1
 # Required by:
 # slapos.core==0.34
 zope.interface = 4.0.3
+
+# WSGI server
+gunicorn = 18.0
diff --git a/software/slaprunner/template/slapos.cfg.in b/software/slaprunner/template/slapos.cfg.in
new file mode 100644
index 0000000000000000000000000000000000000000..e36ec04b1fced1d9507073d3d50ac9f232ca930e
--- /dev/null
+++ b/software/slaprunner/template/slapos.cfg.in
@@ -0,0 +1,44 @@
+[slapos]
+software_root = {{ software_root }}
+instance_root = {{instance_root }}
+master_url = http://{{ ipv4 }}:{{ proxy_port }}
+computer_id = slaprunner
+maximal_delay = 0
+
+[slapformat]
+partition_amount = {{ partition_amount }}
+
+[slaprunner]
+slapgrid_sr = {{ slapgrid_sr }}
+slapgrid_cp = {{ slapgrid_cp }}
+slapproxy = {{ slapproxy }}
+supervisor = {{ supervisor }}
+supervisord_config = {{ supervisord_config }}
+runner_workdir = {{ runner_workdir }}
+runner_host = {{ ipv4 }}
+runner_port = {{ runner_port }}
+ipv4_address = {{ ipv4 }}
+ipv6_address = {{ ipv6 }}
+etc_dir = {{ etc_dir }}
+run_dir = {{ run_dir }}
+log_dir = {{ log_dir }}
+console = {{ console }}
+verbose = {{ verbose }}
+debug = {{ debug }}
+auto_deploy = {{ auto_deploy }}
+
+[slapproxy]
+host = {{ proxy_host }}
+port = {{ proxy_port }}
+database_uri = {{ proxy_database }}
+
+[sshkeys_authority]
+ssh_client = {{ ssh_client }}
+public_key = {{ public_key }}
+private_key = {{ private_key }}
+
+[gitclient]
+git = {{ git }}
+
+[cloud9_IDE]
+cloud9 = {{ cloud9_url }}
diff --git a/stack/erp5/buildout.cfg b/stack/erp5/buildout.cfg
index a885afb913034570a9fc2c8e0d8504ec1217648d..a1761d04465b58a3f318252d297235a11dc76517 100644
--- a/stack/erp5/buildout.cfg
+++ b/stack/erp5/buildout.cfg
@@ -141,7 +141,7 @@ parts =
 [slapos.cookbook-repository]
 recipe = slapos.recipe.build:gitclone
 repository = http://git.erp5.org/repos/slapos.git
-branch = erp5-component
+branch = erp5
 git-executable = ${git:location}/bin/git
 
 [check-recipe]