diff --git a/lib/master.pike b/lib/master.pike
index 46cdeae961fc6adc16587109f26662b391796bce..8eb64b81702dfb8c67f666facc1adcb4a6404bea 100644
--- a/lib/master.pike
+++ b/lib/master.pike
@@ -215,11 +215,19 @@ class dirnode
   void create(string name) { dirname=name; }
   object|program `[](string index)
   {
-    index=dirname+"/"+index;
-    if(object o=((object)"/master")->findmodule(index))
+    object m=((object)"/master");
+    if(mixed o=m->findmodule(dirname+"/module"))
     {
-      if(mixed tmp=o->_module_value)
-	return tmp;
+      if(mixed tmp=o->_module_value) o=tmp;
+      if(o=o[index])
+      {
+	if(mixed tmp=o->_module_value) o=tmp;
+	return o;
+      }
+    }
+    if(object o=((object)"/master")->findmodule(dirname+"/"+index))
+    {
+      if(mixed tmp=o->_module_value) o=tmp;
       return o;
     }
     return (program) index;