diff --git a/slapos/recipe/publish.py b/slapos/recipe/publish.py
index 520388cff7d736b4b84ac952ead85c0f7e55f749..bd1cf70958d93250602373975caab6a529d99c26 100644
--- a/slapos/recipe/publish.py
+++ b/slapos/recipe/publish.py
@@ -31,19 +31,22 @@ from slapos.recipe.librecipe import GenericSlapRecipe
 CONNECTION_PARAMETER_STRING = 'connection-'
 
 class Recipe(GenericSlapRecipe):
-  def _install(self):
-    publish_dict = {}
-    done = set()
+  def __init__(self, buildout, name, options):
+    super(Recipe, self).__init__(buildout, name, options)
+    # Tell buildout about the sections we will access during install.
+    self._extend_set = done = set()
     extends = [self.name]
     while extends:
-        name = extends.pop()
-        done.add(name)
-        for k, v in self.buildout[name].iteritems():
-          if k[:1] == '-':
-            if k == '-extends':
-              extends += set(v.split()) - done
-          elif k != 'recipe':
-            publish_dict[k] = v
+      name = extends.pop()
+      done.add(name)
+      extends += set(self.buildout[name].get('-extends', '').split()) - done
+
+  def _install(self):
+    publish_dict = {}
+    for name in self._extend_set:
+      for k, v in self.buildout[name].iteritems():
+        if k != 'recipe' and not k.startswith('-'):
+          publish_dict[k] = v
     self._setConnectionDict(publish_dict, self.options.get('-slave-reference'))
     return []