diff --git a/doc/sphinx/lfun/InformDefend.rst b/doc/sphinx/lfun/InformDefend.rst
index fbc0b12..df3fa9c 100644
--- a/doc/sphinx/lfun/InformDefend.rst
+++ b/doc/sphinx/lfun/InformDefend.rst
@@ -3,80 +3,88 @@
 
 FUNKTION
 --------
-::
 
-	void InformDefend(object enemy);
+  void InformDefend(object enemy);
 
 DEFINIERT IN
 ------------
-::
 
-	/std/living/combat.c
+  /std/living/combat.c
 
 ARGUMENTE
 ---------
-::
 
-	enemy
-	  Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+  enemy
+    Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
 
 BESCHREIBUNG
 ------------
-::
 
-	Es ist moeglich, dass Objekte ueber Angriffe auf Lebewesen
-	informiert werden, 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 werden alle Objekte per Aufruf
-	von InformDefend() darueber informiert, wobei der Angreifer als
-	Parameter uebergeben wird.
-	Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
-	wobei der Skill SK_INFORM_DEFEND, sofern vorhanden, aufgerufen wird.
+  Es ist moeglich, dass Objekte ueber Angriffe auf Lebewesen
+  informiert werden, 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 werden alle Objekte per Aufruf
+  von InformDefend() darueber informiert, wobei der Angreifer als
+  Parameter uebergeben wird.
+  Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
+  wobei der Skill SK_INFORM_DEFEND, 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());
-	  }
-	// folgende Funktion wird automatisch aufgerufen, wenn der
-	// Beschwoerer angegriffen wird
-	  void InformDefend(object enemy)
-	  { if(!IsEnemy(enemy)&&enemy!=owner)
-	      Kill(enemy);
-	  }
-	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:
+
+.. code-block:: pike
+
+  inherit "/std/npc";
+
+  #include <properties.h>
+
+  object owner;
+
+  protected 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());
+  }
+
+  // folgende Funktion wird automatisch aufgerufen, wenn der
+  // Beschwoerer angegriffen wird
+
+  public void InformDefend(object enemy)
+  { 
+    if(!IsEnemy(enemy)&&enemy!=owner)
+      Kill(enemy);
+  }
+
+  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(), DefendOther(), Kill(), IsEnemy(),
-	P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
 
-
-Last modified: Thu Jul 29 18:48:45 1999 by Patryn
-
+Letzte Aenderung: 28.10.2022, Bugfix
