diff --git a/doc/lfun/Query b/doc/lfun/Query
index 2b39998..27c2d9e 100644
--- a/doc/lfun/Query
+++ b/doc/lfun/Query
@@ -1,81 +1,108 @@
+
 Query()
-FUNKTION:
-     public varargs mixed Query(string name, int Type);
+*******
 
-DEFINIERT IN:
-     /std/thing/properties.c
 
-ARGUMENTE:
-     string name - Property, deren Wert(e) ausgelesen werden
-     int type  - Art der gewuenschten Information.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Wert einer der inneren Eigenschaften der Property 'name' wird
-     zurueckgegeben.  'Type' ist dabei einer der in /sys/thing/properties.h
-     und folgend aufgelisteten F_XXX-Werte:
+   public varargs mixed Query(string name, int Type);
 
-     F_VALUE (==0, Default)
-         Unter Umgehung einer eventuell vorhandenen Abfragemethode oder
-         _query_'name'() wird der Datenwert der Property 'name'
-         zurueckgegeben.
-     F_MODE
-          Die internen Flags der Property werden zurueckgegeben.Dies koennen
-          (logisch mit & verknuepft) sein:
-          SAVE  - Property soll bei save_object() gespeichert werden
-          PROTECTED - Objekt selbst/EM/Root kann Property manipulieren
-          SECURED  - wie PROTECTED, das Flag kann aber nicht
-                     zurueckgesetzt werden (immer SECURED)
-          NOSETMETHOD - niemand kann Property manipulieren
-                        (auch kein F_SET_METHOD oder _set_'name'())
-     F_SET_METHOD
-          Ein eventuell fuer die Property eingetragene F_SET_METHOD wird
-          zurueckgegeben.
-          (_set_'name'()-Methoden werden so nicht aufgefuehrt!)
-     F_QUERY_METHOD
-          Ein eventuell fuer die Property eingetragene F_QUERY_METHOD wird
-          zurueckgegeben.
-          (_query_'name'()-Methoden werden so nicht aufgefuehrt!)
 
-RUeCKGABEWERT:
-     Die gewuenschte Eigenschaft, abhaengig von 'Type'.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - Query() sollte nicht zum regulaeren Auslesen des Inhalt einer
-       Property verwendet werden, da sowohl F_QUERY_METHOD als auch
-       libinterne _query_'name'()-Methoden umgangen werden und das Ergebnis
-       fuer so veraenderte Propertys undefiniert ist
-     - _set_'name'() und _query_'name'() sind alte Propertymethoden und
-       sollten nicht in normalen Objekten benutzt werden ->
-       F_SET_METHOD/F_QUERY_METHOD (ggf. mit PROTECTED) nutzen
-     - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
-       sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
-       diese geht nur 'static' (in diesem Fall empfohlen).
+   /std/thing/properties.c
 
-BEISPIELE:
-     // Auslesen des Wertes unter Umgehung einer Abfragemethode
-     Query(P_XYZ, F_VALUE);
 
-     // Auslesen der Flags erfaehrt man mit:
-     Query(P_XYZ, F_MODE);
+ARGUMENTE
+=========
 
-     // sauberes Programmieren, wir wollen eine F_QUERY_METHOD setzen,
-     // pruefen vorher auf Existenz:
-     if(this_player()->Query(P_FROG, F_QUERY_METHOD) {
-      write(break_string(
-       "Ich kann dich nicht weiter vor Froschsein schuetzen!",
-       "Der Magier winkt ab: ", 78));
-      say(break_string(
-       "Ich kann dich nicht weiter vor Froschsein schuetzen!",
-       "Der Magier sagt zu "+this_player()->name(WEM)+": ", 78));
-     } else {
-      this_player()->Set(P_FROG, #'query_protect_frog, F_QUERY_METHOD);
-      ...
-     }
+   string name - Property, deren Wert(e) ausgelesen werden
+   int type  - Art der gewuenschten Information.
 
-SIEHE AUCH:
-     Aehnliches: SetProp(L), QueryProp(L), Set(L)
-     Generell:  SetProperties(L), QueryProperties(L)
-     Konzept:  properties, /std/thing/properties.c
-     Sonstiges:  P_AUTOLOADOBJ
+
+BESCHREIBUNG
+============
+
+   Der Wert einer der inneren Eigenschaften der Property 'name' wird
+   zurueckgegeben.  'Type' ist dabei einer der in /sys/thing/properties.h
+   und folgend aufgelisteten F_XXX-Werte:
+
+   F_VALUE (==0, Default)
+       Unter Umgehung einer eventuell vorhandenen Abfragemethode oder
+       _query_'name'() wird der Datenwert der Property 'name'
+       zurueckgegeben.
+   F_MODE
+        Die internen Flags der Property werden zurueckgegeben.Dies koennen
+        (logisch mit & verknuepft) sein:
+        SAVE  - Property soll bei save_object() gespeichert werden
+        PROTECTED - Objekt selbst/EM/Root kann Property manipulieren
+        SECURED  - wie PROTECTED, das Flag kann aber nicht
+                   zurueckgesetzt werden (immer SECURED)
+        NOSETMETHOD - niemand kann Property manipulieren
+                      (auch kein F_SET_METHOD oder _set_'name'())
+   F_SET_METHOD
+        Ein eventuell fuer die Property eingetragene F_SET_METHOD wird
+        zurueckgegeben.
+        (_set_'name'()-Methoden werden so nicht aufgefuehrt!)
+   F_QUERY_METHOD
+        Ein eventuell fuer die Property eingetragene F_QUERY_METHOD wird
+        zurueckgegeben.
+        (_query_'name'()-Methoden werden so nicht aufgefuehrt!)
+
+
+RUeCKGABEWERT
+=============
+
+   Die gewuenschte Eigenschaft, abhaengig von 'Type'.
+
+
+BEMERKUNGEN
+===========
+
+   - Query() sollte nicht zum regulaeren Auslesen des Inhalt einer
+     Property verwendet werden, da sowohl F_QUERY_METHOD als auch
+     libinterne _query_'name'()-Methoden umgangen werden und das Ergebnis
+     fuer so veraenderte Propertys undefiniert ist
+   - _set_'name'() und _query_'name'() sind alte Propertymethoden und
+     sollten nicht in normalen Objekten benutzt werden ->
+     F_SET_METHOD/F_QUERY_METHOD (ggf. mit PROTECTED) nutzen
+   - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
+     sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
+     diese geht nur 'static' (in diesem Fall empfohlen).
+
+
+BEISPIELE
+=========
+
+   // Auslesen des Wertes unter Umgehung einer Abfragemethode
+   Query(P_XYZ, F_VALUE);
+
+   // Auslesen der Flags erfaehrt man mit:
+   Query(P_XYZ, F_MODE);
+
+   // sauberes Programmieren, wir wollen eine F_QUERY_METHOD setzen,
+   // pruefen vorher auf Existenz:
+   if(this_player()->Query(P_FROG, F_QUERY_METHOD) {
+    write(break_string(
+     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
+     "Der Magier winkt ab: ", 78));
+    say(break_string(
+     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
+     "Der Magier sagt zu "+this_player()->name(WEM)+": ", 78));
+   } else {
+    this_player()->Set(P_FROG, #'query_protect_frog, F_QUERY_METHOD);
+    ...
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches: SetProp(L), QueryProp(L), Set(L)
+   Generell:  SetProperties(L), QueryProperties(L)
+   Konzept:  properties, /std/thing/properties.c
+   Sonstiges:  P_AUTOLOADOBJ
 
 28.03.2008, Zesstra
