diff --git a/doc/sefun/shadow b/doc/sefun/shadow
index 9309dea..2b7032c 100644
--- a/doc/sefun/shadow
+++ b/doc/sefun/shadow
@@ -1,143 +1,162 @@
-FUNKTION:
-     object shadow(object ob, int flag)
 
-ARGUMENTE:
-     object ob		- das vom shadow betroffene Objekt
-     int flag		- 0 fuer eine Shadow-Existenzabfrage
-                      1 fuer Shadow durch previous_object()
-
-BESCHREIBUNG:
-     Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
-     als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
-     zurueckgegeben, sonst 0.
-     Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
-     zurueck gegeben.
-
-     Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
-     B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
-     wird sie in A gerufen, bei Nichtexistenz in B.
-     A ist das einzige Objekt, welche die beschatteten Funktionen mit 
-     call_other() in B aufrufen kann, selbst B kann nicht per call_other() 
-     diese Funktion rufen.
-     Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
-
-     Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
-     als Shadow zu wirken.
-
-     Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
-     - das zu beschattende Objekt ob:
-       - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
-       - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
-         zurueck
-       - beschattet selbst niemanden
-       - hat kein '#pragma no_shadow' gesetzt
-     - der Beschatter:
-       - wird nicht selbst (direkt) beschattet
-       - beschattet noch niemanden (sonst folgt direkter Abbruch)
-       - hat kein environment()
-       - definiert/beschattet keine Methode, die im beschatteten Objekt ob 
-         als nomask definiert ist
-
-     Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
-     zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
-     erstellt:
-
-     B macht shadow(A, 1)
-     B->A
-     C macht shadow(A, 1)
-     C->B->A
-
-BEISPIELE:
-     // wenn: B beschattet A, dann
-     shadow(find_object(A), 0) == B
+shadow()
+********
 
 
-     // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
-     --- aa.c ---
-     void fun() {
-         printf("%O [a] fun()\n", this_object());
-     }
+FUNKTION
+========
 
-     void fun3() {
-         printf("%O [a] fun3()\n", this_object());
-     }
+   object shadow(object ob, int flag)
 
-     --- bb.c ---
-     int fun() {
-         printf("%O [b] fun()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun();
-     }
 
-     void fun2() {
-         printf("%O [b] fun2()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun3();
-         this_object()->fun3();
-     }
+ARGUMENTE
+=========
 
-     void do_shadow(object target) { shadow(target, 1); }
+   object ob          - das vom shadow betroffene Objekt
+   int flag           - 0 fuer eine Shadow-Existenzabfrage
+                    1 fuer Shadow durch previous_object()
 
-     --- cc.c ---
-     int fun() {
-         printf("%O [c] fun()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun();
-     }
 
-     void fun3() {
-         printf("%O [c] fun3()\n", this_object());
-     }
+BESCHREIBUNG
+============
 
-     void do_shadow(object target) { shadow(target, 1); }
+   Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
+   als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
+   zurueckgegeben, sonst 0.
+   Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
+   zurueck gegeben.
 
-     // darauf arbeitender Code
+   Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
+   B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
+   wird sie in A gerufen, bei Nichtexistenz in B.
+   A ist das einzige Objekt, welche die beschatteten Funktionen mit
+   call_other() in B aufrufen kann, selbst B kann nicht per call_other()
+   diese Funktion rufen.
+   Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
 
-     object a, b, c;
+   Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
+   als Shadow zu wirken.
 
-     destruct("/doc/beispiele/shadow/aa");
-     a = load_object("/doc/beispiele/shadow/aa");
-     destruct("/doc/beispiele/shadow/bb");
-     b = load_object("/doc/beispiele/shadow/bb");
-     destruct("/doc/beispiele/shadow/cc");
-     c = load_object("/doc/beispiele/shadow/cc");
+   Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
+   - das zu beschattende Objekt ob:
+     - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
+     - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
+       zurueck
+     - beschattet selbst niemanden
+     - hat kein '#pragma no_shadow' gesetzt
+   - der Beschatter:
+     - wird nicht selbst (direkt) beschattet
+     - beschattet noch niemanden (sonst folgt direkter Abbruch)
+     - hat kein environment()
+     - definiert/beschattet keine Methode, die im beschatteten Objekt ob
+       als nomask definiert ist
 
-     b->do_shadow(a);
-     c->do_shadow(a);
-     printf("--- a->fun() ---\n");
-     a->fun();
-     printf("--- b->fun() ---\n");
-     b->fun();
-     printf("--- c->fun() ---\n");
-     c->fun();
-     printf("--- b->fun2() ---\n");
-     b->fun2();
+   Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
+   zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
+   erstellt:
 
-     // ... und seine Ausgabe:
+   B macht shadow(A, 1)
+   B->A
+   C macht shadow(A, 1)
+   C->B->A
 
-     --- a->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- b->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- c->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- b->fun2() ---
-     /doc/beispiele/shadow/bb [b] fun2()
-     /doc/beispiele/shadow/aa [a] fun3()
-     /doc/beispiele/shadow/cc [c] fun3()
 
-     // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
-     // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
-     // schon ihre Chance hatten.
-     // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
-     // an a von c uebernommen.
+BEISPIELE
+=========
 
-SIEHE AUCH:
-     Generell:	     shadow(E)
-     Rechte:	     query_allow_shadow(M), query_prevent_shadow(L)
-     Informationen:  query_shadowing(E)
+   // wenn: B beschattet A, dann
+   shadow(find_object(A), 0) == B
 
-8.Aug 2007 Gloinson
\ No newline at end of file
+
+   // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
+   --- aa.c ---
+   void fun() {
+       printf("%O [a] fun()\n", this_object());
+   }
+
+   void fun3() {
+       printf("%O [a] fun3()\n", this_object());
+   }
+
+   --- bb.c ---
+   int fun() {
+       printf("%O [b] fun()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun();
+   }
+
+   void fun2() {
+       printf("%O [b] fun2()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun3();
+       this_object()->fun3();
+   }
+
+   void do_shadow(object target) { shadow(target, 1); }
+
+   --- cc.c ---
+   int fun() {
+       printf("%O [c] fun()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun();
+   }
+
+   void fun3() {
+       printf("%O [c] fun3()\n", this_object());
+   }
+
+   void do_shadow(object target) { shadow(target, 1); }
+
+   // darauf arbeitender Code
+
+   object a, b, c;
+
+   destruct("/doc/beispiele/shadow/aa");
+   a = load_object("/doc/beispiele/shadow/aa");
+   destruct("/doc/beispiele/shadow/bb");
+   b = load_object("/doc/beispiele/shadow/bb");
+   destruct("/doc/beispiele/shadow/cc");
+   c = load_object("/doc/beispiele/shadow/cc");
+
+   b->do_shadow(a);
+   c->do_shadow(a);
+   printf("--- a->fun() ---\n");
+   a->fun();
+   printf("--- b->fun() ---\n");
+   b->fun();
+   printf("--- c->fun() ---\n");
+   c->fun();
+   printf("--- b->fun2() ---\n");
+   b->fun2();
+
+   // ... und seine Ausgabe:
+
+   --- a->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- b->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- c->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- b->fun2() ---
+   /doc/beispiele/shadow/bb [b] fun2()
+   /doc/beispiele/shadow/aa [a] fun3()
+   /doc/beispiele/shadow/cc [c] fun3()
+
+   // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
+   // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
+   // schon ihre Chance hatten.
+   // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
+   // an a von c uebernommen.
+
+
+SIEHE AUCH
+==========
+
+   Generell:       shadow(E)
+   Rechte:         query_allow_shadow(M), query_prevent_shadow(L)
+   Informationen:  query_shadowing(E)
+
+8.Aug 2007 Gloinson
