diff --git a/doc/lfun/AddSpell b/doc/lfun/AddSpell
index dbc6869..3ec1bf8 100644
--- a/doc/lfun/AddSpell
+++ b/doc/lfun/AddSpell
@@ -3,7 +3,7 @@
 FUNKTION:
     varargs int AddSpell(int rate, int damage, string TextForEnemy,
                          string TextForOthers, string|string* dam_type,
-                         string func, int|mapping spellarg)
+                         string|closure func, int|mapping spellarg)
 
 DEFINIERT IN:
     /std/npc/combat.c
@@ -17,9 +17,10 @@
     TextForOthers - Text, den andere im Raum erhalten sollen
     dam_type      - Schadenstyp(en) fuer Defend(),
                     (Default: ({DT_MAGIC}) )
-    func          - Funktionsname, die nach Anwendung aufgerufen werden soll
-                    (Optional, gerufen an this_object(), bekommt als Argumente
-                     object enemy, int real_damage, string* dam_type)
+    func          - Funktionsname oder Closure, die nach Anwendung
+                    aufgerufen werden soll
+                    (Optional, bekommt als Argumente object enemy, 
+                    int real_damage, string* dam_type)
     spellarg      - Spell-Argument fuer Defend(), Default ist "1"
 
 BESCHREIBUNG:
@@ -58,8 +59,8 @@
 
     In der von AddSpell gerufenen Methode "func" koennen speziellere
     Sachen mit dem aktuellen Feind angestellt werden koennen. Die Methode
-    darf als Sichtbarkeitsmodifikator maximal "", "public" oder "static"
-    (obsolet) haben und muss im selben Objekt definiert sein.
+    muss im selben Objekt definiert sein, sofern der Funktionsname und
+    keine Closure uebergeben wird.
 
     Will man einen physischen Angriff ausloesen, MUSS <spellarg> ein Mapping
     mit ([SP_PHYSICAL_ATTACK: 1]) sein. Bei Uebergeben einer 0 oder Weglassen
@@ -146,4 +147,4 @@
      Abwehr:     Defend, Defend_bsp, SpellDefend
      Methoden:   modifiers
 
-11.12.2015 Arathorn
+Zuletzt geaendert: 20.11.2016, Bugfix
diff --git a/std/npc/combat.c b/std/npc/combat.c
index 747714b..4b74646 100644
--- a/std/npc/combat.c
+++ b/std/npc/combat.c
@@ -133,10 +133,12 @@
 #define SPELL_ARG 6
 
 varargs int AddSpell(int rate, int damage, string TextForEnemy,
-                     string TextForOthers, string|string* dam_type, string func,
-                     int|mapping spellarg) {
+                     string TextForOthers, string|string* dam_type, 
+                     string|closure func, int|mapping spellarg)
+{
   mixed *spells;
   int total_rates;
+  closure cl;
 
   if (rate<0 || damage<=0 || !stringp(TextForEnemy) ||
       !stringp(TextForOthers))
@@ -154,6 +156,22 @@
   if (intp(spellarg))
     spellarg = ([SP_PHYSICAL_ATTACK: 0]);
 
+  // Falls func ein String ist eine Closure erstellen und diese speichern.
+  if(stringp(func))
+  {
+    cl=symbol_function(func,this_object());
+    if(!closurep(func))
+    {
+      catch(raise_error(
+        "AddSpell(): Es konnte keine Closure fuer "+func+" erstellt werden.");
+        publish);
+    }
+  }
+  else
+  {
+    cl=func;
+  }
+  
   // Falls vorhanden, alte Syntax auf die von replace_personal() anpassen,
   // die im heart_beat() beim Ausgeben der Meldung verwendet wird.
   if ( strstr(TextForOthers, "@", 0) != -1 )
@@ -172,7 +190,7 @@
   if (!pointerp(spells))
     spells=({});
   spells+=({({total_rates, damage, TextForEnemy, TextForOthers,
-              dam_type, func, spellarg})});
+              dam_type, cl, spellarg})});
   Set(P_SPELLS,spells);
   Set("npc:total_rates",total_rates);
   return 1;
@@ -315,12 +333,15 @@
   if ( !objectp(ME) || !objectp(enemy) 
       || enemy->QueryProp(P_GHOST) ) return;
   
-  if (spells[i][SPELL_FUNC] && stringp(spells[i][SPELL_FUNC]))
-    catch(call_other(this_object(),
-         spells[i][SPELL_FUNC],
-         enemy,
-         damage,
-         spells[i][SPELL_DAMTYPE]);publish);
+  closure cl = spells[i][SPELL_FUNC];
+  if (cl)
+  {
+    if (closurep(cl))
+      catch(funcall(cl, enemy, damage, spells[i][SPELL_DAMTYPE]);publish);
+    else
+      raise_error(sprintf("P_SPELL defekt: SPELL_FUNC in Spell %i ist keine "
+                          "Closure.\n", i));
+  }
 }
 
 // Heartbeats nachholen.
