diff --git a/src/modules/Image/illustration.pike b/src/modules/Image/illustration.pike
index f0c3d2e6943064a0c7637ea74e6393a4b175e284..6ff598e3a471a8c91fd811671a8f5e817cf7c7d6 100644
--- a/src/modules/Image/illustration.pike
+++ b/src/modules/Image/illustration.pike
@@ -1,4 +1,4 @@
-/* $Id: illustration.pike,v 1.1 1997/05/29 22:51:19 mirar Exp $ */
+/* $Id: illustration.pike,v 1.2 1997/10/29 02:57:04 mirar Exp $ */
 
 import Image;
 import Stdio;
@@ -15,13 +15,29 @@ object foo()
 ***the string***
 }
 
-string doit(string name)
+string doit(string name,mapping has,object f,string src)
 {
+   rm("doc/"+name); // clean up
+
    object o=foo();
-   if (o->toppm()==lena()->toppm()) 
+   string s=o->toppm();
+
+   if (s==lena()->toppm()) 
       return "<img src=lena.gif width=67 height=67>";
+
+   if (has[s]) return has[s];
    
-   rm("doc/"+name);
    write_file("doc/"+name,o->togif());
-   return "<img src="+name+" width="+o->xsize()+" height="+o->ysize()+">";
+
+   f->write(
+      "<a name="+name+">"
+      "<img border=0 src="+name+" width="+o->xsize()+" height="+o->ysize()+" align=right>"
+      "<pre>"+src+"</pre>"
+      "</a><br clear=all><hr>"
+      );
+
+   return has[s]=
+      "<a href=illustrations.html#"+name+">"
+      "<img border=0 src="+name+" width="+o->xsize()+" height="+o->ysize()+">"
+      "</a>";
 }
diff --git a/src/modules/Image/mkdoc.pike b/src/modules/Image/mkdoc.pike
index ed3a2f20b31f212a9696c4c7dfc58c62e7250bea..3583acc87736387d0c6d7282ccd6018f5047e52e 100644
--- a/src/modules/Image/mkdoc.pike
+++ b/src/modules/Image/mkdoc.pike
@@ -1,10 +1,11 @@
-/* $Id: mkdoc.pike,v 1.11 1997/10/27 22:40:34 mirar Exp $ */
+/* $Id: mkdoc.pike,v 1.12 1997/10/29 02:57:06 mirar Exp $ */
 
 import Stdio;
 import Array;
 
 mapping parse=([]);
 int illustration_counter;
+object illustration_source;
 
 string illustration_code=read_bytes("illustration.pike");
 object lena_image=Image.image()->fromppm(read_file("doc/lena.ppm"));
@@ -190,6 +191,8 @@ object(File) make_file(string filename)
    return f;
 }
 
+mapping ills=([]);
+
 string fixdesc(string s,string prefix)
 {
    s=stripws(s);
@@ -208,10 +211,12 @@ string fixdesc(string s,string prefix)
    while (sscanf(t,"%s<illustration>%s</illustration>%s",t,u,v)==3)
    {
       s+=t;
+
       array err=catch {
 	 object x=compile_string(replace(illustration_code,"***the string***",u))();
 	 x->lena_image=lena_image;
-	 u=x->doit("illustration_"+illustration_counter+++".gif");
+	 u=x->doit("illustration_"+illustration_counter+++".gif",
+		   ills,illustration_source,u);
       };
       if (err)
       {
@@ -475,6 +480,9 @@ void make_doc_files(string dir)
 {
    stdout->write("modules: "+sort(indices(parse))*", "+"\n");
 
+   illustration_source=File();
+   illustration_source->open(dir+"illustrations.html","wct");
+
    string module;
    
    foreach (sort(indices(parse)),module)