diff --git a/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike b/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
index 988e489ce2f1c2cdb7173932cffac245b27edcad..55770cfd467ea60618ad0a777254d18700f861d5 100644
--- a/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
+++ b/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
@@ -1,4 +1,4 @@
-// $Id: assemble_autodoc.pike,v 1.25 2003/01/20 17:44:02 nilsson Exp $
+// $Id: assemble_autodoc.pike,v 1.26 2003/02/08 01:46:29 nilsson Exp $
 
 constant description = "Assembles AutoDoc output file.";
 
@@ -13,6 +13,7 @@ int appendix;
 
 mapping queue = ([]);
 mapping appendix_queue = ([]);
+mapping ns_queue = ([]);
 array(Node) chapters = ({});
 
 Node void_node = Node(XML_ELEMENT, "void", ([]), 0);
@@ -140,6 +141,21 @@ class mvEntry {
   }
 }
 
+class mvPeelEntry {
+  inherit Entry;
+  constant type = "mvPeel";
+
+  void `()(Node data) {
+    Node i_node = target->get_parent();
+
+    // WARNING! Disrespecting information hiding!
+    int pos = search(i_node->mChildren, data);
+    array pre = i_node->mChildren[..pos-1];
+    array post = i_node->mChildren[pos+1..];
+    i_node->mChildren = pre + data->mChildren + post;
+  }
+}
+
 class cpEntry {
   inherit Entry;
   constant type = "cp";
@@ -150,11 +166,28 @@ class cpEntry {
   }
 }
 
-void enqueue_move(string source, Node target) {
+void enqueue_move(Node target) {
+
+  mapping(string:string) m = target->get_attributes();
+  if(m->namespace) {
+    string ns = m->namespace;
+    sscanf(ns, "%s::", ns);
+    ns += "::";
+    if(ns_queue[ns])
+      error("Move source already allocated (%O).\n", ns);
+    if(m->peel="yes")
+      ns_queue[ns] = mvPeelEntry(target);
+    else
+      ns_queue[ns] = mvEntry(target);
+    return;
+  }
+  else if(!m->entity)
+    error("Error in insert-move element.\n");
+
   mapping bucket = queue;
 
-  if(source != "") {
-    array path = map(source/".", replace, "-", ".");
+  if(m->entity != "") {
+    array path = map(m->entity/".", replace, "-", ".");
     if (!has_value(path[0], "::")) {
       // Default namespace.
       path = ({ "predef::" }) + path;
@@ -171,7 +204,7 @@ void enqueue_move(string source, Node target) {
   }
 
   if(bucket[0])
-    error("Move source already allocated (%s).\n", source);
+    error("Move source already allocated (%s).\n", m->entity);
 
   bucket[0] = mvEntry(target);
 }
@@ -203,7 +236,7 @@ void section_ref_expansion(Node n) {
       break;
 
     case "insert-move":
-      enqueue_move(c->get_attributes()->entity, c);
+      enqueue_move(c);
       break;
 
     default:
@@ -230,7 +263,7 @@ void chapter_ref_expansion(Node n, string dir) {
       break;
 
     case "insert-move":
-      enqueue_move(c->get_attributes()->entity, c);
+      enqueue_move(c);
       break;
 
     default:
@@ -385,33 +418,37 @@ static void move_items_low(Node n, mapping jobs, void|Node wrapper) {
     }
 }
 
-void move_items(Node n, mapping jobs, void|Node wrapper)
+void move_items(Node n, mapping jobs)
 {
   if(jobs[0]) {
-    if(wrapper)
-      jobs[0]( wrap(n, wrapper->clone()) );
-    else
-      jobs[0](n);
+    jobs[0](n);
     m_delete(jobs, 0);
   }
-  if(!sizeof(jobs)) return;
+  if(!sizeof(jobs) && !sizeof(ns_queue)) return;
 
   foreach(n->get_elements("namespace"), Node c) {
     mapping m = c->get_attributes();
     string name = m->name + "::";
+
+    if(ns_queue[name]) {
+      ns_queue[name]( c );
+      m_delete(ns_queue, name);
+    }
+
     mapping e = jobs[name];
     if(!e) continue;
 
     Node wr = Node(XML_ELEMENT, "autodoc",
 		   n->get_attributes()+(["hidden":"1"]), 0);
-    if(wrapper)
-      wr = wrap( wr, wrapper->clone() );
 
     move_items_low(c, e, wr);
 
     if(!sizeof(e))
       m_delete(jobs, name);
   }
+
+  foreach(indices(ns_queue), string name)
+    werror("Failed to move namespace %O.\n", name);
 }
 
 string make_toc_entry(Node n) {
@@ -453,6 +490,8 @@ void report_failed_entries(mapping scope, string path) {
 int(0..1) main(int num, array(string) args) {
 
   int T = time();
+  if(has_value(args, "--version"))
+     werror("$Id: assemble_autodoc.pike,v 1.26 2003/02/08 01:46:29 nilsson Exp $\n");
   if(num<3)
     error("To few arguments\n");