diff --git a/doc/lfun/AddMaterial b/doc/lfun/AddMaterial
new file mode 100644
index 0000000..7f90d82
--- /dev/null
+++ b/doc/lfun/AddMaterial
@@ -0,0 +1,100 @@
+
+AddMaterial()
+*************
+
+
+FUNKTION
+========
+
+   private static varargs void AddMaterial(string mat, int gender,
+                                           mixed names, mixed groups,
+                                           mixed dif) {
+
+
+DEFINIERT IN
+============
+
+   /p/daemon/materialdb.c (MATERIALDB)
+
+
+ARGUMENTE
+=========
+
+   string mat
+     Materialstring, definiert in <thing/material.h>
+
+   int gender
+     Geschlecht des einzutragenden Materials
+
+   mixed names
+     Name des Materials:
+     - "<Nominativ>" oder (meist nur Nom. und Gen. noetig)
+     - ({"<Nominativ>","<Genitiv>","<Dativ>","<Akkusativ>"})
+
+   mixed groups
+     Eingruppierung des Materials:
+     - MATGROUP_XXX oder ({MATGROUP_XXX,...})
+     - ([MAT_GROUP_XXX:xx,MATGROUP_YYY:yy,...])
+
+   mixed dif
+     Schwierigkeiten bei der Erkennbarkeit:
+     - int x oder ({MINMAT,x1,MATPOS1,x2,MATPOS2 ...})
+     - xn: Erkennbarkeitsschwierigkeit (100=100%) -100..100
+     - MINMAT: Erkennung zumindest als _dieses_ Material
+               moeglich
+     - MATPOSn: moegliches Material, erkennbar, wenn
+                Erkennbarkeitfaehigkeit>=xn
+                -> das letzte MATPOS muss natuerlich
+                   string mat entsprechen
+
+
+BESCHREIBUNG
+============
+
+   Es wird in die Materialiendatenbank eine neues Material aufgenommen,
+   die Stringkonstante dafuer wird vorher in <thing/material.h> fest-
+   gelegt. Falls der Genitiv nicht Nominativ+"s" entspricht (z.B. "Seide"),
+   sollte dieser explizit angegeben werden.
+   Nach Neuladen der Datenbank ist dieses Material auch per MaterialName(),
+   'erkennbar' (siehe mixed dif, siehe Beispiel) bzw. seinen einzelnen
+   Gruppen zuordnbar.
+
+
+BEISPIELE
+=========
+
+   AddMaterial(MAT_NITROGLYCERINE,NEUTER,"Nitroglycerin",
+               ({MATGROUP_EXPLOSIVE,MATGROUP_FLUID}),
+               ({MAT_OIL,25,MAT_MISC_EXPLOSIVE,50,MAT_NITROGLYCERINE}));
+
+   Damit wird das Material Nytroglycerin aufgenommen, ein explosiver
+   (damit entflammbarer) sowie fluessiger Stoff. Liegt die Erkennungs-
+   faehigkeit (MaterialName()) unter 25, wird es nur als Oel erkannt,
+   liegt sie unter 50, wird es zumindest als explosives Material erkannt,
+   liegt sie ueber 49, so wird es korrekt erkannt (wie schade :) ).
+
+
+BEMERKUNGEN
+===========
+
+   Wird in der create() der Datenbank aufgerufen. Zu beachten:
+   - vor Eintrag eines _neuen_ Materials die Datenbank durchsuchen!
+   - bei den Materialiengruppen die automatischen Abhaengigkeiten in
+     AddMaterial() durchsehen!
+   - bitte Datenbank neu laden
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/PreventMove b/doc/lfun/PreventMove
index 920372d..ec8c1da 100644
--- a/doc/lfun/PreventMove
+++ b/doc/lfun/PreventMove
@@ -3,8 +3,8 @@
 *************
 
 
-PreventInsert()
-===============
+PreventMove()
+=============
 
 
 FUNKTION
@@ -16,63 +16,69 @@
 DEFINIERT IN
 ============
 
-   /std/thing/moving.c
-   /std/living/moving.c
-   /std/player/moving.c
+   /std/thing/moving.c /std/living/moving.c /std/player/moving.c
 
 
 ARGUMENTE
 =========
 
    dest
-        Das Ziel des Moves
+      Das Ziel des Moves
+
    oldenv
-        Das (Noch-)Environment des Objekts
+      Das (Noch-)Environment des Objekts
+
    method
-        Die Move-Methode(n), mit der/denen bewegt werden soll
+      Die Move-Methode(n), mit der/denen bewegt werden soll
 
 
 BESCHREIBUNG
 ============
 
-   Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
-   bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
-   M_NOCHECK die meisten Pruefungen ab).
-   Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
-   das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
-   PreventLeave() geprueft.
-   Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
-   PreventLeaveLiving/PreventInsertLiving() ausgewertet.
-   Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
-   enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
+   Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach
+   'dest' bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B.
+   schaltet M_NOCHECK die meisten Pruefungen ab). Bei Gegenstaenden
+   wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel das Objekt
+   aufnehmen will (MayAddWeight(), PreventInsert) oder auch
+   PreventLeave() geprueft. Bei Lebewesen wird z.B. P_NO_TPORT in
+   'dest' und 'oldenv' und PreventLeaveLiving/PreventInsertLiving()
+   ausgewertet. Bei Spielern wird auch noch getestet, ob method M_GO
+   oder M_TPORT enthaelt und ob das Ziel nur von Testspielern betreten
+   werden kann.
 
 
 RUeCKGABEWERT
 =============
 
-   0, wenn das Objekt bewegt werden darf.
-   Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
-   /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
-   hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
-   ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
+   0, wenn das Objekt bewegt werden darf. Wenn es nicht bewegt werden
+   darf, sind als Rueckgabewerte die in /sys/moving.h definierten
+   Move-Fehlerwerte zulaessig (s. move()). Sollte hier ein ungueltiger
+   Fehlerwert zurueckgegeben werden, wird das move() ebenfalls
+   abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
 
 
 BEMERKUNGEN
 ===========
 
    Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
-   Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
+   Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge
+   beachten:
+
    1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
    Pruefungen nur zu machen, wenn es nicht in method vorkommt.
-   2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
-   bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
-   das geerbte PreventMove() noch aufrufen und dessen Wert
-   zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc.
-   nicht funktionieren oder bei Lebewesen die Prevent*() im Environment
-   nicht gerufen werden!
-   3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
-   sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
-   4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
+
+   2. *GANZ WICHTIG*: Wenn ihr mit euren Pruefungen fertig sein und
+   das Objekt bewegt werden duerfte, die geerbten Pruefungen noch
+   testen, also *IMMER* das geerbte PreventMove() noch aufrufen und
+   dessen Wert zurueckgeben/beruecksichtigen, da sonst Pruefungen des
+   Gewichts etc. nicht funktionieren oder bei Lebewesen die Prevent*()
+   im Environment nicht gerufen werden!
+
+   3. Die Funktion ist nur objektintern zu verwenden, Call-Other von
+   aussen sind nicht moeglich, beim Ueberschreiben 'protected' nicht
+   vergessen.
+
+   4. Nochmal: Geerbtes PreventMove() *NICHT VERGESSEN*!
 
 
 BEISPIELE
@@ -104,6 +110,6 @@
 
    PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
    PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+   PreventMove(), MayAddWeight(), move()
 
-Last modified: 04.08.2007, Zesstra
+Last modified: 09.01.2020, Zesstra
