diff --git a/doc/sphinx/lfun/DefendOther.rst b/doc/sphinx/lfun/DefendOther.rst
index e18c9c7..363ff24 100644
--- a/doc/sphinx/lfun/DefendOther.rst
+++ b/doc/sphinx/lfun/DefendOther.rst
@@ -5,37 +5,41 @@
 --------
 ::
 
-  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
 ------------
 ::
 
-	/std/living/combat.c
+    /std/living/combat.c
 
 ARGUMENTE
 ---------
 ::
 
-	dam
-	  Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
-	  verursacht werden soll.
-	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
-	  Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+    int dam
+      Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
+      verursacht werden soll.
+
+    string* dam_type
+      Der Schadenstyp (oder die Schadenstypen), der beim zu
+      verteidigenden Lebewesen verursacht werden sollen.
+
+    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.
 
 RUeCKGABEWERT
 -------------
 ::
 
-	Array mit den Eintraegen der gegebenenfalls veraenderten
-	uebergebenen Parameter: 
+    Array mit den Eintraegen der gegebenenfalls veraenderten
+    uebergebenen Parameter: 
             (1) dam      [Typ int], 
             (2) dam_type [Typ string*], 
             (3) spell    [Typ mapping].
@@ -44,66 +48,78 @@
 ------------
 ::
 
-	Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
-	umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen
-	mittels AddDefender() angemeldet wurden und sich der selben Umgebung
-	befinden.
-	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
-	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.
+    Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
+    umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen
+    mittels AddDefender() angemeldet wurden und sich der selben Umgebung
+    befinden.
+    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.
+
+    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.
 
 BEISPIEL
 --------
 ::
 
-	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");
-	    ...
-	  }
-	// 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());
-	  }
-	// 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});
-	  }
-	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
-	uebergeben wird.
+    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");
+      ...
+    }
+    
+    // nach Clonen des Daemons folgende Funktion mit Beschwoerer als
+    // Parameter aufrufen
+    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
+    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
+    uebergeben wird.
 
 SIEHE AUCH
 ----------
-::
 
-	AddDefender(), RemoveDefender(), InformDefend(), Kill(), IsEnemy(),
-	P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+  Funktionen:
+    :doc:`../lfun/AddDefender`, :doc:`../lfun/RemoveDefender`, :doc:`../lfun/InformDefend`, :doc:`../lfun/Kill`, :doc:`../lfun/IsEnemy`, :doc:`../lfun/Defend`
+  Properties
+    :doc:`../props/P_DEFENDERS`
+  Objekte:
+    /std/living/combat.c, /sys/new_skills.h
 
-
-Last modified: Fri Feb 25 14:45:00 2000 by Paracelsus
-
+Last modified: 2019-Aug-26, Arathorn 
