diff --git a/doc/props/P_COMMANDS b/doc/props/P_COMMANDS
index d0ff99b..5812b35 100644
--- a/doc/props/P_COMMANDS
+++ b/doc/props/P_COMMANDS
@@ -1,58 +1,76 @@
+
 P_COMMANDS
-NAME:
-     P_COMMANDS "commands"
+**********
 
-DEFINIERT IN:
-     <thing/commands.h>
 
-BESCHREIBUNG:
-     Diese Property enthaelt ein Mapping mit den Befehlen, die dem Objekt
-     zugeordnet sind.
+NAME
+====
 
-     Sie sollte nicht von Hand manipuliert werden, sondern nur ueber die
-     Funktionen AddCmd() und RemoveCmd().
+   P_COMMANDS "commands"
 
-     Das Mapping hat folgenden Aufbau:
 
-     ([ befehl : ({funktion1,...});
-                 ({flag1,...});
-                 ({regel1,...});
-                 ({id1, ...}),
-                 ({closure auf fun1, ...}),
-        ... ])
+DEFINIERT IN
+============
 
-     Die Eintraege entsprechen den Parametern des AddCmd()-Aufrufs, sind
-     aber in anderer Form. Als Beispiel:
+   <thing/commands.h>
 
-     AddCmd(verb,fun1,1);
-     AddCmd(verb+syn1a|syn1b&syn2a|syn2b|syn2c, fun2,
-            error1_notify|error2_notify^error2_write);
-     -->
-     ([verb:
-        ({fun1,fun2});                                        // funs
-        ({1,({error1_notify, error2_write^error2_say, 1})});  // flags
-        ({0,({({syn1a,syn1b}),({syn2a,syn2b,syn2c})})});      // rules
-        0;                                                    // IDs
-        ({closure auf fun1, closure auf fun2}) ])             // Cache
 
-     Funs:  ({<fun1> ,...
-              'fun' kann sein: Closure
-                               String: Methodenname - wird etwas geprueft
-                               Objekt: wenn keine Methode, this_object() fuer
-                                       intern, previous_object() fuer extern
-                               0 (erloschenes externes Objekt)
-     Rules: ({<Regelsatz fuer fun1>, ({<1. Synonymgruppe>,
-                                       <2. Synonymgruppe, ...}), ...})
-     Flags: ({<Flag fuer fun1>, ({<Fehlermeldung 1. Synonymgruppe>, ... ,
-                                  [, Index fuer write anstatt notify_fail]}),
-             ... })
-     IDs:   0 oder ({<ID fuer fun1>}) oder ({0, <ID fuer fun2>}) ...
-     Cache: ({<closure fuer fun1>, ...
+BESCHREIBUNG
+============
 
-BEMERKUNGEN:
-     Cache-Closures sind bei Export immer genullt
+   Diese Property enthaelt ein Mapping mit den Befehlen, die dem Objekt
+   zugeordnet sind.
 
-SIEHE AUCH:
-     /std/thing/commands.c, AddCmd(), RemoveCmd()
+   Sie sollte nicht von Hand manipuliert werden, sondern nur ueber die
+   Funktionen AddCmd() und RemoveCmd().
 
-16. Dez 2016 Gloinson
\ No newline at end of file
+   Das Mapping hat folgenden Aufbau:
+
+   ([ befehl : ({funktion1,...});
+               ({flag1,...});
+               ({regel1,...});
+               ({id1, ...}),
+               ({closure auf fun1, ...}),
+      ... ])
+
+   Die Eintraege entsprechen den Parametern des AddCmd()-Aufrufs, sind
+   aber in anderer Form. Als Beispiel:
+
+   AddCmd(verb,fun1,1);
+   AddCmd(verb+syn1a|syn1b&syn2a|syn2b|syn2c, fun2,
+          error1_notify|error2_notify^error2_write);
+   -->
+   ([verb:
+      ({fun1,fun2});                                        // funs
+      ({1,({error1_notify, error2_write^error2_say, 1})});  // flags
+      ({0,({({syn1a,syn1b}),({syn2a,syn2b,syn2c})})});      // rules
+      0;                                                    // IDs
+      ({closure auf fun1, closure auf fun2}) ])             // Cache
+
+   Funs:  ({<fun1> ,...
+            'fun' kann sein: Closure
+                             String: Methodenname - wird etwas geprueft
+                             Objekt: wenn keine Methode, this_object() fuer
+                                     intern, previous_object() fuer extern
+                             0 (erloschenes externes Objekt)
+   Rules: ({<Regelsatz fuer fun1>, ({<1. Synonymgruppe>,
+                                     <2. Synonymgruppe, ...}), ...})
+   Flags: ({<Flag fuer fun1>, ({<Fehlermeldung 1. Synonymgruppe>, ... ,
+                                [, Index fuer write anstatt notify_fail]}),
+           ... })
+   IDs:   0 oder ({<ID fuer fun1>}) oder ({0, <ID fuer fun2>}) ...
+   Cache: ({<closure fuer fun1>, ...
+
+
+BEMERKUNGEN
+===========
+
+   Cache-Closures sind bei Export immer genullt
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/commands.c, AddCmd(), RemoveCmd()
+
+16. Dez 2016 Gloinson
