diff --git a/doc/lfun/AddInfo b/doc/lfun/AddInfo
index 76c6e1c..730c26f 100644
--- a/doc/lfun/AddInfo
+++ b/doc/lfun/AddInfo
@@ -6,8 +6,9 @@
 FUNKTION
 ========
 
-   public varargs void AddInfo(string|string* key, string|closure info,
-                  string indent, int|string silent, string|closure casebased);
+   public varargs void AddInfo(string|string* key, string|closure
+   info,
+      string indent, int|string silent, string|closure casebased);
 
 
 DEFINIERT IN
@@ -20,12 +21,13 @@
 =========
 
    string|string* frage
-      Schluesselwoerter, fuer die der NPC eine Antwort geben soll,
+      Schluesselphrase(n), fuer die der NPC eine Antwort geben soll,
       wenn man ihn danach fragt
 
    string|closure meldung
       Information, die gegeben werden soll; wenn 'meldung' eine
-      Closure ist, wird der gerufenen Funktion nichts uebergeben.
+      Closure ist, wird der gerufenen Funktion die vom Spieler
+      gefragte Schluesselphrase uebergeben.
 
    string indent    (optional)
       Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
@@ -34,8 +36,8 @@
       Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
 
    string|closure casebased   (optional)
-      Closure mit Returnwert string oder int. Der Funktion werden
-      keine Argumente uebergeben.
+      Closure mit Returnwert string oder int. Der Funktion wird die
+      vom Spieler gefragte Schluesselphrase uebergeben.
 
 
 BESCHREIBUNG
@@ -48,7 +50,7 @@
    Meldung wird der Name des Monsters vorangestellt.
 
    Frage:
-      Schluessel muessen kleingeschrieben sein, koennen aber
+      Schluesselphrasen muessen kleingeschrieben sein, koennen aber
       Leerzeichen enthalten.
 
    Meldung:
@@ -125,13 +127,13 @@
 
    // Beispiel 3: dynamisch
    // ein Prototyp, damit wir die Methode bekannt machen
-   protected string query_kekse();
+   protected string query_kekse(string key);
 
    AddInfo(({"keks","kekse"}),
        #'query_kekse,        // ein Verweis auf die Funktion
        "sagt: ");
 
-   protected string query_kekse() {
+   protected string query_kekse(string key) {
      if(present("keks", this_object()))
        return("Ich hab noch welche. Aetsch!");
      else if(present("keks", environment()))
@@ -146,8 +148,8 @@
 
    // Beispiel 4: dynamischer
    // ein Prototyp, damit wir die Methode bekannt machen
-   protected string query_kekse();
-   protected mixed case_fighting();
+   protected string query_kekse(string key);
+   protected mixed case_fighting(string key);
 
    AddInfo(({"keks","kekse"}),
        #'query_kekse,"        // ein Verweis auf die Funktion
@@ -155,13 +157,13 @@
        0,                     // nicht silent :)
        #'case_fighting);      // noch ein Funktionsverweis
 
-   protected string query_kekse() {
+   protected string query_kekse(string key) {
      if(present("keks"))
        return("Ich hab noch welche. Aetsch!");
      return("Menno. Keine mehr da!");
    }
 
-   protected mixed case_fighting() {
+   protected mixed case_fighting(string key) {
      if(InFight())
        return("Keine Zeit fuer Kekse. Muss kaempfen.");
      return 0;
@@ -177,7 +179,7 @@
 
    // Beispiel 5: ### dynamisch und komplex ###
    // ein Prototyp, damit wir die Methode bekannt machen
-   protected string question_gold();
+   protected string question_gold(string key);
 
    // "gold" wird eine Closure auf die Methode question_gold()
    // zugewiesen, ausserdem soll es still bleiben (wir informieren
@@ -185,7 +187,7 @@
    AddInfo("gold", #'question_gold, "murmelt: ", 1);
 
    // los gehts, wir generieren unsere Antwort selbst
-   protected string question_gold() {
+   protected string question_gold(string key) {
      // wieviel Kohle hat der Spieler
      int money = this_player()->QueryMoney();
      string* valuables = ({});
@@ -266,4 +268,4 @@
    Interna:
       GetInfoArr() , do_frage()
 
-24.09.2020, Arathorn
+09.08.2021, Zesstra
diff --git a/doc/lfun/AddSpecialInfo b/doc/lfun/AddSpecialInfo
index be61558..3c164fd 100644
--- a/doc/lfun/AddSpecialInfo
+++ b/doc/lfun/AddSpecialInfo
@@ -6,31 +6,9 @@
 FUNKTION
 ========
 
-   public varargs void AddSpecialInfo(string|string* keys, string functionname,
-                  string indent, int|string silent, string|closure  casebased);
-
-
-ARGUMENTE
-=========
-
-   string|string* frage
-     Schluesselwoerter, fuer die der NPC eine Antwort geben soll, wenn
-     man ihn danach fragt
-
-   string functionname
-     Name der Funktion, die gerufen werden soll, um den Informationstext
-     des NPCs zu ermitteln. Der gerufenen Funktion werden keine Argumente
-     uebergeben.
-
-   string indent    (optional)
-     Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
-
-   int|string silent    (optional)
-     Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
-
-   string|closure casebased   (optional)
-     Closure mit Returnwert string oder int.
-     Der Funktion werden keine Argumente uebergeben.
+   public varargs void AddSpecialInfo(string|string* keys, string
+   functionname,
+      string indent, int|string silent, string|closure  casebased);
 
 
 DEFINIERT IN
@@ -39,25 +17,49 @@
    /std/npc/info.c
 
 
+ARGUMENTE
+=========
+
+   string|string* frage
+      Schluesselphrase(n), fuer die der NPC eine Antwort geben soll,
+      wenn man ihn danach fragt
+
+   string functionname
+      Name der Funktion, die gerufen werden soll, um den
+      Informationstext des NPCs zu ermitteln. Der gerufenen Funktion
+      wird die vom Spieler gefragte Schluesselphrase uebergeben.
+
+   string indent    (optional)
+      Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
+
+   int|string silent    (optional)
+      Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+
+   string|closure casebased   (optional)
+      Closure mit Returnwert string oder int. Der Funktion wird die
+      vom Spieler gefragte Schluesselphrase uebergeben.
+
+
 BESCHREIBUNG
 ============
 
-   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
-   einer Information mit dem Schluessel frage fragt, so wird die Methode
-   "function" gerufen. Die Rueckgabe wird als Meldung ausgegeben.
+   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>"
+   nach einer Information mit dem Schluessel frage fragt, so wird die
+   Methode "function" gerufen. Die Rueckgabe wird als Meldung
+   ausgegeben.
 
    Fuer die Beschreibung der weiteren Parameter siehe man AddInfo(L).
 
-   AddSpecialInfo(keys, "function", ...) entspricht:
-   - AddInfo(keys, #'function, ...)
+   "AddSpecialInfo(keys, "function", ...)" entspricht "AddInfo(keys,
+   #'function, ...)".
 
 
 BEMERKUNGEN
 ===========
 
    Da AddSpecialInfo() und AddInfo() auf die gleichen Daten zugreifen,
-   kann man Informationen, die mit AddSpecialInfo() gesetzt wurden, auch
-   mit RemoveInfo() entfernen. Es gibt kein RemoveSpecialInfo().
+   kann man Informationen, die mit AddSpecialInfo() gesetzt wurden,
+   auch mit RemoveInfo() entfernen. Es gibt kein RemoveSpecialInfo().
 
 
 BEISPIELE
@@ -69,13 +71,13 @@
                   "query_kekse",      // der Methodenname
                   "sagt: ");
    // ist uebrigens das gleiche wie:
-   // static string query_kekse();
+   // static string query_kekse(string key);
    // ...
    // AddInfo(({"keks","kekse"}),
    //         #'query_kekse,          // ein Verweis auf die Methode
    //         "sagt: ");
    ...
-   static string query_kekse() {
+   static string query_kekse(string key) {
     if(present("keks"))
      return("Ich hab noch welche. Aetsch!");
     return("Menno. Keine mehr da!");
@@ -106,4 +108,4 @@
    Interna:
       GetInfoArr() , do_frage()
 
-24.09.2020, Arathorn
+09.08.2021, Zesstra
diff --git a/doc/lfun/short b/doc/lfun/short
index c446d1c..5da9b46 100644
--- a/doc/lfun/short
+++ b/doc/lfun/short
@@ -6,7 +6,7 @@
 FUNKTION
 ========
 
-   public varargs string short();
+   public string short();
 
 
 DEFINIERT IN
@@ -24,7 +24,7 @@
 BESCHREIBUNG
 ============
 
-   Der Inhalt der Property P_SHORT wird ausgewertet, mit ".n"
+   Der Inhalt der Property P_SHORT wird ausgewertet, mit ".\n"
    abgeschlossen und zurueckgegeben.
 
    Durch Ueberladen von short() lassen sich ggf. weitere Eigenschaften
