diff --git a/refdoc/bin/assembler.pike b/refdoc/bin/assembler.pike
index d10d8729d4000a322b62b40373818632bae3953e..aaa09a030dca09d5d028acbc5046ee6d79b69f12 100644
--- a/refdoc/bin/assembler.pike
+++ b/refdoc/bin/assembler.pike
@@ -8,6 +8,8 @@ int appendix;
 mapping queue = ([]);
 mapping appendix_queue = ([]);
 
+Node void_node = Node(XML_ELEMENT, "void", ([]), 0);
+
 // array( array(name,file) )
 array toc = ({});
 class TocNode {
@@ -37,6 +39,9 @@ class Entry (Node target) {
   }
 }
 
+
+// --- Some debug functions
+
 string visualize(Node n, int depth) {
   if(n->get_node_type() == XML_TEXT)
     return Parser.XML.Tree.text_quote(n->get_text());
@@ -65,15 +70,19 @@ string visualize(Node n, int depth) {
   return data + "</" + name + ">";
 }
 
+string vis(Node n) {
+  if(!n || n->get_node_type()!=XML_ELEMENT) return sprintf("%O", n);
+  return sprintf("<%s%{ %s='%s'%}>", n->get_tag_name(), (array)n->get_attributes());
+}
+
+// ---
+
+
 class mvEntry {
   inherit Entry;
   constant type = "mv";
 
   void `()(Node data) {
-    Node p = data->get_parent();
-    if(p)
-      p->remove_child(data);
-
     if(args) {
       mapping m = data->get_attributes();
       foreach(indices(args), string index)
@@ -236,6 +245,11 @@ void ref_expansion(Node n, string dir, void|string file) {
       c->get_attributes()->number = (string)++appendix;
       toc += ({ ({ c->get_attributes()->name, file }) });
       break;
+
+    case "void":
+      c->get_parent()->remove_child(c);
+      void_node->add_child(c);
+      chapter_ref_expansion(c);
     }
   }
 }
@@ -264,16 +278,20 @@ void move_appendices(Node n) {
 Node wrap(Node n, Node wrapper) {
   if(wrapper->count_children())
     wrap(n, wrapper[0]);
-  else
+  else {
+    Node p = n->get_parent();
+    if(p) p->remove_child(n);
     wrapper->add_child(n);
+  }
   return wrapper;
 }
 
 void move_items(Node n, mapping jobs, void|Node wrapper) {
   if(jobs[0]) {
-    Node m = n;
-    if(wrapper) m = wrap(n, wrapper->clone());
-    jobs[0](m);
+    if(wrapper)
+      jobs[0]( wrap(n, wrapper->clone()) );
+    else
+      jobs[0](n);
     m_delete(jobs, 0);
   }
 
@@ -281,12 +299,11 @@ void move_items(Node n, mapping jobs, void|Node wrapper) {
     foreach(n->get_elements(type), Node c) {
       mapping m = c->get_attributes();
       string name = m->name || m["homogen-name"];
-      if(type!="docgroup") werror("Testing %O %O\n", type, name);
       mapping|Entry e = jobs[ name ];
       if(!e) continue;
       if(mappingp(e)) {
 	Node wr = Node(XML_ELEMENT, n->get_tag_name(),
-		       n->get_attributes()+([]), 0);
+		       n->get_attributes()+(["hidden":"1"]), 0);
 	if(wrapper)
 	  wr = wrap( wr, wrapper->clone() );
 
@@ -309,6 +326,7 @@ void report_failed_entries(mapping scope, string path) {
 
 int(0..1) main(int num, array(string) args) {
 
+  int T = time();
   if(num<3)
     error("To few arguments\n");
 
@@ -338,5 +356,6 @@ int(0..1) main(int num, array(string) args) {
 
   werror("Writing final manual source file.\n");
   write( (string)n );
+  werror("Took %d seconds.\n\n", time()-T);
   return 0;
 }