diff --git a/software/neoppod/buildout.hash.cfg b/software/neoppod/buildout.hash.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a1e5db9f2af5e4bd9f7974bc58fe7f1fa279852a
--- /dev/null
+++ b/software/neoppod/buildout.hash.cfg
@@ -0,0 +1,49 @@
+# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax.
+# The only allowed lines here are (regexes):
+# - "^#" comments, copied verbatim
+# - "^[" section beginings, copied verbatim
+# - lines containing an "=" sign which must fit in the following categorie.
+#   - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file
+#     Copied verbatim.
+#   - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported
+#     by the re-generation script.
+#     Re-generated.
+# - other lines are copied verbatim
+# Substitution (${...:...}), extension ([buildout] extends = ...) and
+# section inheritance (< = ...) are NOT supported (but you should really
+# not need these here).
+[instance-common]
+filename = instance-common.cfg.in
+md5sum = 0a3a54fcc7be0bbd63cbd64f006ceebc
+
+[root-common]
+filename = root-common.cfg.in
+md5sum = ccc6e33412259415ec6c3452d37b77cc
+
+[instance-neo-admin]
+filename = instance-neo-admin.cfg.in
+md5sum = 87670ddc6b5d2007dac1b6d2ba86d168
+
+[instance-neo-master]
+filename = instance-neo-master.cfg.in
+md5sum = 9f27195d770b2f57461c60a82c851ab9
+
+[instance-neo]
+filename = instance-neo.cfg.in
+md5sum = d18e049d580720e733502b774b0d6790
+
+[template-neo-my-cnf]
+filename = my.cnf.in
+md5sum = 9f6f8f2b5f4cb0d97d50ffc1d3837e2f
+
+[template-neo]
+filename = instance.cfg.in
+md5sum = 83dc9faca482b2ddbd3d5fa968af7c33
+
+[cluster]
+filename = cluster.cfg.in
+md5sum = 5afd326de385563b5aeac81039f23341
+
+[runTestSuite.in]
+_update_hash_filename_ = runTestSuite.in
+md5sum = b656e805c5dbc7f9c73716398b3e032e
diff --git a/software/neoppod/software-common.cfg b/software/neoppod/software-common.cfg
index 147fd18593ff3174dd9548dee9fe5cf6f435aa43..c0cfc40fc85e23e2219f3cd508bc31b74124cdcf 100644
--- a/software/neoppod/software-common.cfg
+++ b/software/neoppod/software-common.cfg
@@ -6,6 +6,7 @@
 
 [buildout]
 extends =
+    buildout.hash.cfg
     ../../stack/slapos.cfg
     ../../stack/logrotate/buildout.cfg
     ../../stack/monitor/buildout.cfg
@@ -85,16 +86,15 @@ scripts =
 
 [download-base-neo]
 recipe = slapos.recipe.build:download
-url = ${:_profile_base_location_}/${:_buildout_section_name_}.cfg.in
+url = ${:_profile_base_location_}/${:filename}
 # XXX: following mode should be the default
 mode = 644
 
 # XXX: must be rendered, not just dled
 [instance-common]
 recipe = slapos.recipe.template:jinja2
-template = ${:_profile_base_location_}/${:_buildout_section_name_}.cfg.in
+template = ${:_profile_base_location_}/${:filename}
 rendered = ${buildout:directory}/${:_buildout_section_name_}.cfg
-md5sum = 0a3a54fcc7be0bbd63cbd64f006ceebc
 context =
     key bin_directory buildout:bin-directory
     key develop_eggs_directory buildout:develop-eggs-directory
@@ -112,24 +112,18 @@ adapter-context =
 
 [root-common]
 <= download-base-neo
-md5sum = ccc6e33412259415ec6c3452d37b77cc
 
 [instance-neo-admin]
 <= download-base-neo
-md5sum = 87670ddc6b5d2007dac1b6d2ba86d168
 
 [instance-neo-master]
 <= download-base-neo
-md5sum = 9f27195d770b2f57461c60a82c851ab9
 
 [instance-neo]
 <= download-base-neo
-md5sum = d18e049d580720e733502b774b0d6790
 
 [template-neo-my-cnf]
 <= download-base-neo
-url = ${:_profile_base_location_}/my.cnf.in
-md5sum = 9f6f8f2b5f4cb0d97d50ffc1d3837e2f
 
 [template-mysqld-wrapper]
 recipe = slapos.recipe.template:jinja2
diff --git a/software/neoppod/software.cfg b/software/neoppod/software.cfg
index dfaa76fc66af2ef219ebcbb2eb89658efc623d09..19c5a3e971a3e7c60b1c8e8f280eb75310d43c11 100644
--- a/software/neoppod/software.cfg
+++ b/software/neoppod/software.cfg
@@ -1,16 +1,16 @@
 [buildout]
 extends =
+    buildout.hash.cfg
     software-common.cfg
 
 parts +=
 # NEO instanciation
-    template
+    template-neo
     runTestSuite_py
 
-[template]
+[template-neo]
 recipe = slapos.recipe.template:jinja2
-template = ${:_profile_base_location_}/instance.cfg.in
-md5sum = 83dc9faca482b2ddbd3d5fa968af7c33
+template = ${:_profile_base_location_}/${:filename}
 # XXX: "template.cfg" is hardcoded in instanciation recipe
 rendered = ${buildout:directory}/template.cfg
 context =
@@ -22,12 +22,10 @@ context =
 
 [cluster]
 <= download-base-neo
-md5sum = 5afd326de385563b5aeac81039f23341
 
 [runTestSuite.in]
 recipe = slapos.recipe.build:download
-url = ${:_profile_base_location_}/${:_buildout_section_name_}
-md5sum = b656e805c5dbc7f9c73716398b3e032e
+url = ${:_profile_base_location_}/${:_update_hash_filename_}
 
 [runTestSuite_py]
 recipe = zc.recipe.egg