diff --git a/bin/install.pike b/bin/install.pike
index 7c177d14fb922a8670d6da62fb3354fc1a04bb8d..3eabe8d74af5326e9b59e3e08244e55c40bb078d 100644
--- a/bin/install.pike
+++ b/bin/install.pike
@@ -389,6 +389,7 @@ string fakeroot(string s)
 				   vars->TMP_BINDIR,
 				   vars->BASEDIR,
 				   vars->MANDIR_SRC,
+				   vars->DOCDIR_SRC,
 				   vars->TMP_LIBDIR,
 				   vars->fakeroot,
 				 }),regquote)));
@@ -456,6 +457,7 @@ void do_export()
     TRANSLATE(vars->SRCDIR,tmpdir+"/src"),
     TRANSLATE(vars->TMP_BINDIR,tmpdir+"/bin"),
     TRANSLATE(vars->MANDIR_SRC,tmpdir+"/man"),
+    TRANSLATE(vars->DOCDIR_SRC,tmpdir+"/refdoc"),
     TRANSLATE(vars->TMP_LIBDIR,tmpdir+"/build/lib"),
     "unpack_master.pike" : tmpdir+"/build/master.pike",
     "":tmpdir+"/build",
@@ -514,6 +516,7 @@ void do_export()
     RELAY(SRCDIR)
     RELAY(TMP_BINDIR)
     RELAY(MANDIR_SRC)
+    RELAY(DOCDIR_SRC)
     RELAY(BASEDIR)
     " TMP_BUILDDIR="+translate("", translator)+
     (((vars->PIKE_MODULE_RELOC||"") != "")? " PIKE_MODULE_RELOC=1":"")+
@@ -599,6 +602,7 @@ done
 		   "  TMP_BINDIR=\\\"bin\\\"\\\n"
 		   "  TMP_BUILDDIR=\\\"build\\\"\\\n"
 		   "  MANDIR_SRC=\\\"man\\\"\\\n"
+		   "  DOCDIR_SRC=\\\"doc\\\"\\\n"
 		   "  PIKE_MODULE_RELOC=\\\"" + vars->PIKE_MODULE_RELOC +
 		                       "\\\"\\\n"
 		   "  $ARGS\"\n"
@@ -999,6 +1003,7 @@ int pre_install(array(string) argv)
       mklink(getcwd(),export_base_name+".dir/build");
       mklink(vars->TMP_BINDIR,export_base_name+".dir/bin");
       mklink(vars->MANDIR_SRC,export_base_name+".dir/man");
+      mklink(vars->DOCDIR_SRC,export_base_name+".dir/refdoc");
 
       cd(export_base_name+".dir");
 
@@ -1007,6 +1012,7 @@ int pre_install(array(string) argv)
       vars->SRCDIR="src";
       vars->TMP_BINDIR="bin";
       vars->MANDIR_SRC="man";
+      vars->DOCDIR_SRC="refdoc";
       vars->TMP_BUILDDIR="build";
 
 #endif
@@ -1140,6 +1146,7 @@ void dump_modules()
 		vars->SRCDIR,
 		vars->TMP_BINDIR,
 		vars->MANDIR_SRC,
+		vars->DOCDIR_SRC,
 		vars->TMP_LIBDIR,
 		vars->BASEDIR,
 		vars->fakeroot,
@@ -1336,6 +1343,9 @@ void do_install()
     // create a directory for extracted module documentation
     mkdirhier(combine_path(doc_prefix, "src", "extracted"));
 
+    // copy the documentation source
+    install_dir(vars->DOCDIR_SRC, combine_path(doc_prefix, "src"), 0);
+
     foreach(({"install_module", "precompile.pike", "smartlink",
 	      "fixdepends.sh", "mktestsuite", "test_pike.pike"}), string f)
       install_file(combine_path(vars->TMP_BINDIR,f),
@@ -1452,6 +1462,7 @@ int main(int argc, array(string) argv)
     if(vars->BASEDIR[-1]!='/') vars->BASEDIR += "/";
     if(!vars->LIBDIR_SRC) vars->LIBDIR_SRC=vars->BASEDIR+"lib";
     if(!vars->MANDIR_SRC) vars->MANDIR_SRC=vars->BASEDIR+"man";
+    if(!vars->DOCDIR_SRC) vars->DOCDIR_SRC=vars->BASEDIR+"refdoc";
     if(!vars->SRCDIR) vars->SRCDIR=vars->BASEDIR+"src";
   }
   else if(vars->SRCDIR) {
diff --git a/lib/modules/Tools.pmod/Standalone.pmod/module.pike b/lib/modules/Tools.pmod/Standalone.pmod/module.pike
index 1861aab2b7f501366180ad0e68648beb1f6245b0..a5bbf041916162132a8914fcb591a38a264d976d 100644
--- a/lib/modules/Tools.pmod/Standalone.pmod/module.pike
+++ b/lib/modules/Tools.pmod/Standalone.pmod/module.pike
@@ -1,10 +1,10 @@
 // -*- Pike -*-
 
-// $Id: module.pike,v 1.20 2003/10/31 11:39:50 grubba Exp $
+// $Id: module.pike,v 1.21 2003/11/04 22:24:39 bill Exp $
 
 #pike __REAL_VERSION__
 
-constant version = ("$Revision: 1.20 $"/" ")[1];
+constant version = ("$Revision: 1.21 $"/" ")[1];
 constant description = "Pike module installer.";
 
 // Source directory
@@ -27,6 +27,10 @@ string local_module_path="$$HOME/lib/pike/modules";
 // we prefer the last element, because if there are more than one
 // master() puts the lib/modules path last.
 string system_module_path=master()->system_module_path[-1];
+
+// where do we install the documentation?
+string system_doc_path;
+
 #endif
 string run_pike;
 
@@ -130,6 +134,16 @@ void do_make(array(string) cmd)
     lmp="./plib/modules";
   else lmp = local_module_path;
 
+  // we should try to find the core autodoc file
+  if(file_stat(combine_path(system_module_path, "../../doc/src/core_autodoc.xml")))
+  {
+    system_doc_path=combine_path(system_module_path, "../../doc");
+  }
+  else if(file_stat(combine_path(system_module_path, "../../../doc/pike/src/core_autodoc.xml")))
+  {
+    system_doc_path=combine_path(system_module_path, "../../../doc/pike");
+  }
+
   array(string) makecmd=(
     ({make})+
     do_split_quoted_string(make_flags)+
@@ -145,6 +159,8 @@ void do_make(array(string) cmd)
       "SRCDIR="+fix("$src"),
       "TMP_MODULE_BASE=.",
       "PIKE_EXTERNAL_MODULE=pike_external_module",
+      "CORE_AUTODOC_PATH=" + combine_path(system_doc_path, "src/core_autodoc.xml"),
+      "SYSTEM_DOC_PATH=" + system_doc_path,
       "SYSTEM_MODULE_PATH=" + system_module_path,
       "LOCAL_MODULE_PATH=" + lmp,
       "RUNPIKE="+run_pike,
diff --git a/refdoc/Makefile b/refdoc/Makefile
index a7a080177f87580aa14abb71ad5b13023871f418..34d55089d9498d53018b4bf7203901129f71a9b8 100644
--- a/refdoc/Makefile
+++ b/refdoc/Makefile
@@ -1,7 +1,7 @@
 #
 # Main Makefile for extracting AutoDoc mk II to XML
 #
-# $Id: Makefile,v 1.57 2003/11/04 21:34:15 bill Exp $
+# $Id: Makefile,v 1.58 2003/11/04 22:24:39 bill Exp $
 #
 # Henrik Grubbstr�m 2001-02-02
 #
@@ -20,14 +20,14 @@ caudium.net: modref caudium_modref traditional
 
 modref: $(BUILDDIR)/modref.xml structure/modref.css structure/modref.html \
 	  presentation/make_html.pike presentation/tree-split-autodoc.pike
-	@$(MAKE) PIKE="$(PIKE)" BUILDDIR="$(BUILDDIR)" low_modref
+	@$(MAKE) PIKE="$(PIKE)" BUILDDIR="$(BUILDDIR)" DESTDIR="$(DESTDIR)" low_modref
 
 low_modref:
 	rm -rf modref || /bin/true
 	@mkdir modref
 	@cp structure/modref.css modref/style.css
 	@$(PIKE) presentation/tree-split-autodoc.pike \
-	  $(BUILDDIR)/modref.xml structure/modref.html modref predef
+	  $(BUILDDIR)/modref.xml structure/modref.html $(DESTDIR)modref predef
 	@mkdir $(DESTDIR)modref/images
 	cp $(BUILDDIR)/doc_build/images/* $(DESTDIR)modref/images
 	@for file in pike_logo.gif next.gif prev.gif unit.gif \
@@ -66,11 +66,11 @@ low_one_page:
 	@$(PIKE) presentation/make_html.pike --img= $(BUILDDIR)/onepage.xml
 
 traditional: traditional_manual $(BUILDDIR)/traditional.xml presentation/make_html.pike
-	@$(MAKE) PIKE="$(PIKE)" BUILDDIR="$(BUILDDIR)" low_traditional
+	@$(MAKE) PIKE="$(PIKE)" BUILDDIR="$(BUILDDIR)" DESTDIR="$(DESTDIR)" low_traditional
 
 low_traditional:
 	cp $(BUILDDIR)/doc_build/images/* $(DESTDIR)traditional_manual/images/
-	@$(PIKE) presentation/make_html.pike --img=images/ $(BUILDDIR)/traditional.xml
+	@$(PIKE) presentation/make_html.pike --dest=$(DESTDIR) --img=images/ $(BUILDDIR)/traditional.xml
 
 # Sub targets used by the above targets.
 
diff --git a/refdoc/presentation/make_html.pike b/refdoc/presentation/make_html.pike
index 135e1be7079101696ddca8374f68ac1e0f3cd9a3..3ade551d00bbf7d2f29a36a215433c5f162015f7 100644
--- a/refdoc/presentation/make_html.pike
+++ b/refdoc/presentation/make_html.pike
@@ -6,6 +6,7 @@
 
 function resolve_reference; 
 string image_path = "images/";
+string dest_path;
 
 mapping lay = ([
  "docgroup" : "\n\n<hr clear='all' size='1' noshadow='noshadow' />\n<dl>",
@@ -1115,13 +1116,28 @@ string layout_toploop(Node n) {
     switch(c->get_any_name()) {
 
     case "dir":
+      string cwd;
+      if(dest_path)
+      {
+        cwd=getcwd();
+        cd(dest_path);
+      }  
       Stdio.mkdirhier(c->get_attributes()->name);
       layout_toploop(c);
+      if(cwd)
+        cd(cwd);
       break;
 
     case "file":
+      if(dest_path)
+      {
+        cwd=getcwd();
+        cd(dest_path);
+      }  
       Stdio.write_file( c->get_attributes()->name,
 			frame_html(layout_toploop(c)) );
+      if(cwd)
+        cd(cwd);
       break;
 
     case "appendix":
@@ -1149,6 +1165,10 @@ int main(int num, array args) {
       image_path = tmp;
       args -= ({ arg });
     }
+    if(sscanf(arg, "--dest=%s", tmp) && tmp!="") {
+      dest_path = tmp;
+      args -= ({ arg });
+    }
     if(arg=="--help") {
       write(#"make_html.pike [args] <input file>
 --img=<image path>
diff --git a/src/Makefile.in b/src/Makefile.in
index fd9122f5bf2455fd06ac1248c3e5037d13d37a74..4cd6dc100b8a0aebd8775396f4041f81ef8730b1 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.in,v 1.364 2003/11/04 16:41:52 bill Exp $
+# $Id: Makefile.in,v 1.365 2003/11/04 22:24:39 bill Exp $
 #
 
 # This line is needed on some machines.
@@ -26,6 +26,7 @@ DOCDIR = @DOCDIR@
 
 # These are used during binary exports and installation.
 MANDIR_SRC = @MANDIR@
+DOCDIR_SRC = @DOCDIR@
 BASEDIR = @BASEDIR@
 
 # These are used by the files generated by fixdepends.sh
@@ -401,7 +402,8 @@ install: pike tools autodoc.xml
 	@$(RUNPIKE) $(TMP_BINDIR)/install.pike \
 	exec_prefix="$(exec_prefix)" lib_prefix="$(lib_prefix)" \
 	TMP_LIBDIR="$(TMP_LIBDIR)" LIBDIR_SRC="$(LIBDIR_SRC)" \
-	SRCDIR="$(SRCDIR)" prefix="$(prefix)" MANDIR_SRC="$(MANDIR_SRC)" \
+	SRCDIR="$(SRCDIR)" prefix="$(prefix)" DOCDIR_SRC="$(DOCDIR_SRC)" \
+	MANDIR_SRC="$(MANDIR_SRC)" \
 	man_prefix="$(man_prefix)" pike_name=$(pike_name) \
 	fakeroot="$(buildroot)" PIKE_MODULE_RELOC="$(PIKE_MODULE_RELOC)" \
 	$(INSTALLARGS)
@@ -410,7 +412,8 @@ install_interactive: pike tools autodoc.xml
 	@$(RUNPIKE) $(TMP_BINDIR)/install.pike --interactive \
 	exec_prefix="$(exec_prefix)"  prefix=$(prefix) \
 	TMP_LIBDIR="$(TMP_LIBDIR)" LIBDIR_SRC="$(LIBDIR_SRC)" \
-	SRCDIR="$(SRCDIR)" MANDIR_SRC="$(MANDIR_SRC)" \
+	SRCDIR="$(SRCDIR)" DOCDIR_SRC="$(DOCDIR_SRC)" \
+	MANDIR_SRC="$(MANDIR_SRC)" \
 	fakeroot="$(buildroot)" PIKE_MODULE_RELOC="$(PIKE_MODULE_RELOC)"
 
 # tidy up a bit
@@ -500,7 +503,8 @@ tinstall: master-stamp
 	-rm -rf test-install
 	$(RUNPIKE) $(TMP_BINDIR)/install.pike lib_prefix="$(lib_prefix)" \
 	TMP_LIBDIR="$(TMP_LIBDIR)" LIBDIR_SRC="$(LIBDIR_SRC)" \
-	SRCDIR="$(SRCDIR)" MANDIR_SRC="$(MANDIR_SRC)" \
+	SRCDIR="$(SRCDIR)" DOCDIR_SRC="$(DOCDIR_SRC)" \
+	MANDIR_SRC="$(MANDIR_SRC)" \
 	man_prefix="$(man_prefix)" fakeroot="$(buildroot)" \
 	PIKE_MODULE_RELOC="$(PIKE_MODULE_RELOC)" pike_name="test-pike" \
 	prefix="./test-install" $(INSTALLARGS)
@@ -508,7 +512,8 @@ tinstall: master-stamp
 just-tinstall: master-stamp
 	$(RUNPIKE) $(TMP_BINDIR)/install.pike lib_prefix="$(lib_prefix)" \
 	TMP_LIBDIR="$(TMP_LIBDIR)" LIBDIR_SRC="$(LIBDIR_SRC)" \
-	SRCDIR="$(SRCDIR)" MANDIR_SRC="$(MANDIR_SRC)" \
+	SRCDIR="$(SRCDIR)" DOCDIR_SRC="$(DOCDIR_SRC)" \
+	MANDIR_SRC="$(MANDIR_SRC)" \
 	man_prefix="$(man_prefix)" fakeroot="$(buildroot)" \
 	PIKE_MODULE_RELOC="$(PIKE_MODULE_RELOC)" pike_name="test-pike" \
 	prefix="./test-install" $(INSTALLARGS)
@@ -697,7 +702,8 @@ bin_export:
 	@$(RUNPIKE) $(TMP_BINDIR)/install.pike --export \
 	exec_prefix="$(exec_prefix)" lib_prefix="$(lib_prefix)" \
 	TMP_LIBDIR="$(TMP_LIBDIR)" LIBDIR_SRC="$(LIBDIR_SRC)" \
-	SRCDIR="$(SRCDIR)" prefix="$(prefix)" MANDIR_SRC="$(MANDIR_SRC)" \
+	SRCDIR="$(SRCDIR)" prefix="$(prefix)" DOCDIR_SRC="$(DOCDIR_SRC)" \
+	MANDIR_SRC="$(MANDIR_SRC)" \
 	BASEDIR="$(BASEDIR)" man_prefix="$(man_prefix)" \
 	pike_name=$(pike_name) PIKE_MODULE_RELOC="$(PIKE_MODULE_RELOC)"
 	@case " $(CC)" in \
diff --git a/src/modules/common_module_makefile.in b/src/modules/common_module_makefile.in
index 13584626ee8d2033636c9f5f41ca37e8c6af67df..c908d872131377748560a2394df7244bead2cfac 100644
--- a/src/modules/common_module_makefile.in
+++ b/src/modules/common_module_makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: common_module_makefile.in,v 1.13 2003/11/04 00:06:48 bill Exp $
+# $Id: common_module_makefile.in,v 1.14 2003/11/04 22:24:39 bill Exp $
 #
 # Contains stuff common to both dynamic_module_makefile and
 # static_module_makefile.
@@ -108,7 +108,7 @@ module.pmod: Makefile $(MODULE_PMOD_IN)
 	@echo "Making module.pmod" ; \
 	if [ "x$(MODULE_PMOD_IN)" = "x" ]; then \
 	  echo >module.pmod  '// Generated automatically by'; \
-	  echo >>module.pmod '// $$Id: common_module_makefile.in,v 1.13 2003/11/04 00:06:48 bill Exp $$'; \
+	  echo >>module.pmod '// $$Id: common_module_makefile.in,v 1.14 2003/11/04 22:24:39 bill Exp $$'; \
 	  echo >>module.pmod '#pike __REAL_VERSION__'; \
 	  echo >>module.pmod 'inherit $(MODULE_PROGRAM);'; \
 	else \
@@ -194,3 +194,9 @@ gdb_verify: testsuite $(PIKE_EXTERNAL_MODULE)
 
 extract_autodoc: $(PIKE_EXTERNAL_MODULE) plib/refdoc
 	$(RUNPIKE) -x extract_autodoc --builddir=plib/refdoc --srcdir=plib/modules
+
+join_autodoc: extract_autodoc
+	$(RUNPIKE) -x join_autodoc --quiet --post-process  "plib/autodoc.xml" "$(CORE_AUTODOC_PATH)" "plib/refdoc"
+
+refdoc:	join_autodoc
+	cd $(SYSTEM_DOC_PATH)/src && $(MAKE) $(MAKE_FLAGS) DESTDIR="$(SYSTEM_DOC_PATH)" modref