diff --git a/doc/lfun/DefendOther b/doc/lfun/DefendOther
index 0d36fc2..2b706f5 100644
--- a/doc/lfun/DefendOther
+++ b/doc/lfun/DefendOther
@@ -6,8 +6,8 @@
 FUNKTION
 ========
 
-   public <int|string*|mapping>* DefendOther(int dam, string|string* dam_type,
-                                             int|mapping spell, object enemy)
+   public <int|string*|mapping>* DefendOther(int dam, string* dam_type,
+                                       int|mapping si_spell, object enemy)
 
 
 DEFINIERT IN
@@ -19,16 +19,20 @@
 ARGUMENTE
 =========
 
-   dam
+   int dam
      Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
      verursacht werden soll.
-   dam_type
+
+   string* dam_type
      Der Schadenstyp (oder die Schadenstypen), der beim zu
      verteidigenden Lebewesen verursacht werden sollen.
-   spell
-     Wenn das zu verteidigende Lebewesen mit Spells angegriffen wurde,
-     so koennte man hier mehr Infos entnehmen.
-   enemy
+
+   mapping si_spell
+     Mapping mit zusaetzlichen Informationen zum Angriff
+     Alte Objekte uebergeben manchmal einen Integer (0 fuer
+     physikalischen Angriff, 1 fuer Zauber.
+
+   object enemy
      Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
 
 
@@ -37,9 +41,9 @@
 
    Array mit den Eintraegen der gegebenenfalls veraenderten
    uebergebenen Parameter:
-       (1) dam      [Typ int],
-       (2) dam_type [Typ string*],
-       (3) spell    [Typ mapping].
+           (1) dam      [Typ int],
+           (2) dam_type [Typ string*],
+           (3) spell    [Typ mapping].
 
 
 BESCHREIBUNG
@@ -52,15 +56,18 @@
    Zumeist wird es sich bei den Objekten natuerlich ebenfalls um
    andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet
    sind, verteidigen sollen.
+
    Bei einem Angriff auf das Lebewesen koennen alle Objekte per Aufruf
    von DefendOther() in einen Angriff eingreifen, wobei die
    Schadensstaerke, der Schadenstyp (die Schadenstypen),
    Zusatzinformationen fuer Angriffsspells und der Angreifer als
    Parameter uebergeben werden.
-   Desweiteren ist zu beachten, dass bei als physikalisch markierten
+
+   Des weiteren ist zu beachten, dass bei als physikalisch markierten
    Angriffen in einem Team nur Verteidiger aus der ersten Reihe
    beruecksichtigt werden und dass bei einem Angriff zufaellig aus
    allen moeglichen Verteidigern ausgewaehlt wird.
+
    Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
    wobei der Skill SK_DEFEND_OTHER, sofern vorhanden, aufgerufen wird.
 
@@ -70,29 +77,37 @@
 
    Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
    verteidigen, z.B. beschworene Daemonen:
-     inherit "std/npc";
-     include <properties.h>
-     object owner;
-     void create()
-     { ::create();
-       SetProp(P_NAME,"Daemon");
-       ...
-     }
+
+   inherit "/std/npc";
+
+   include <properties.h>
+
+   object owner;
+
+   void create() {
+     ::create();
+     SetProp(P_NAME,"Daemon");
+     ...
+   }
+
    // nach Clonen des Daemons folgende Funktion mit Beschwoerer als
    // Parameter aufrufen
-     Identify(object caster)
-     { if(!objectp(caster))
-         call_out(#'remove,0);
-       owner=caster;
-       owner->AddDefender(this_object());
-     }
+   void Identify(object caster) {
+     if (!objectp(caster))
+       call_out(#'remove,0);
+     owner = caster;
+     owner->AddDefender(this_object());
+   }
+
    // der Daemon wehrt jeden Angriff mit Feuer voll ab, man muss zuerst
    // den Verteidiger umbringen, um den Beschwoerer toeten zu koennen
-     mixed DefendOther(int dam,mixed dam_type,mixed spell,object enemy)
-     { if(sizeof(dam_type)&&member_array(DT_FIRE,dam_type)!=-1)
-         dam=0;
-       return({dam,dam_type,spell});
-     }
+   public <int|string*|mapping>* DefendOther(int dam,
+       string|string* dt, int|mapping spell, object enemy) {
+     if (sizeof(dt) && member(dt, DT_FIRE) != -1)
+       dam = 0;
+     return ({dam, dam_type, spell});
+   }
+
    Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
    Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
    diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
@@ -102,7 +117,14 @@
 SIEHE AUCH
 ==========
 
-   AddDefender(), RemoveDefender(), InformDefend(), Kill(), IsEnemy(),
-   P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+   Funktionen:
+      AddDefender(), RemoveDefender(), InformDefend(), Kill(),
+      IsEnemy(), Defend()
 
-Last modified: Fri Feb 25 14:45:00 2000 by Paracelsus
+   Properties
+      P_DEFENDERS
+
+   Objekte:
+      /std/living/combat.c, /sys/new_skills.h
+
+Last modified: 2019-Aug-26, Arathorn
