diff --git a/doc/help/teamkampf b/doc/help/teamkampf
index 1af65c3..7e1cb53 100644
--- a/doc/help/teamkampf
+++ b/doc/help/teamkampf
@@ -120,6 +120,25 @@
                       vor anderen Teammitgliedern eingeordnet werden.
                       Ansonsten wird nach AR geordnet.
 
+team autoinform       Hiermit kann ein automatischer Bericht ueber
+                      Aenderungen der LP oder KP von Teammitgliedern
+                      eingestellt werden. Nur der Teamleiter kann einstellen,
+                      was berichtet wird, alle anderen im Team koennen nur
+                      einstellen, dass sie auch informiert werden wollen.
+                      Normalerweise wird der Bericht gesammelt hoechstens
+                      einmal pro Sekunde gesendet. Fuer die Nutzung dieses
+                      Berichts ist die Quest 'Hilf den Gnarfen' noetig.
+                      Mit Leerzeichen getrennt koennen die folgenden Angaben
+                      gemacht werden:
+                      aus: autoinform abschalten
+                      ein: ueber fallende LP informiert werden
+                      +lp: ueber steigende und fallende LP informiert werden
+                      kp: ueber fallende KP informiert werden
+                      +kp: ueber steigende und fallende KP informiert werden
+                      sofort: bei Aenderungen sofort einzeln informieren,
+                              nicht nur einmal pro Sekunde. Kann den Scroll
+                              deutlich erhoehen!
+
 team farben           Damit laesst sich aendern, ab wann die eigenen
                       Lebenspunkte bzw. Konzentrationspunkte gelb oder
                       gar rot (bzw. fett) angezeigt werden.
diff --git a/obj/team.c b/obj/team.c
index 9e481b0..607e07a 100644
--- a/obj/team.c
+++ b/obj/team.c
@@ -11,6 +11,8 @@
 #include <new_skills.h>
 #include <ansi.h>
 #include <wizlevels.h>
+#include <living/comm.h>
+
 #define ME this_object()
 #define PO previous_object()
 #define TP this_player()
@@ -43,6 +45,7 @@
 private nosave mapping autoinf_hp;
 private nosave mapping autoinf_sp;
 private nosave int autoinf_time;
+private nosave object *autoinf_subscribers = ({});
 private nosave string *hist;
 
 private nosave object debugger;
@@ -1261,15 +1264,52 @@
   string *words,txt;
   int i,fl;
 
+  // Eigentlich braeuchte man die nur fuer die SP-Benachrichtigungen, aber
+  // dann wird alle viel komplizierter, weil man dann bei Aenderungen und
+  // Teamleiterwechseln pruefen muss etc.
+  if (!(TP->QueryProp(P_CAN_FLAGS) & CAN_REPORT_SP)) {
+    TP->ReceiveMsg("Du musst zunaechst die Quest \"Hilf den "
+        "Gnarfen\" bestehen, um diese Funktion nutzen zu koennen.",
+        MT_NOTIFICATION|MSG_DONT_IGNORE);
+    return 1;
+  }
   if (TP!=leader)
-    return notify_fail("Nur der Teamleiter kann automatisch "+
-                       "informiert werden.\n"),0;
+  {
+    switch(arg)
+    {
+      case "an":
+      case "ein":
+        if (!(TP in autoinf_subscribers))
+            autoinf_subscribers += ({TP});
+        TP->ReceiveMsg("Du erhaelst eine Kopie des Autoinform-Berichtes "
+            "an den Teamleiter, falls bzw. sobald dieser einen solchen "
+            "konfiguriert hat.",MT_NOTIFICATION|MSG_DONT_IGNORE);
+        break;
+
+      case "aus":
+        autoinf_subscribers -= ({TP});
+        TP->ReceiveMsg("Du erhaelst keine Kopie des Autoinform-Berichtes "
+            "an den Teamleiter.",MT_NOTIFICATION|MSG_DONT_IGNORE);
+        break;
+
+      default:
+        notify_fail("Nur der Teamleiter kann den Inhalt des "
+                    "Autoinform-Berichts konfigurieren.\n");
+        return 0;
+    }
+    return 1;
+  }
+  //else TP == leader
   words=old_explode(arg?arg:""," ");fl=0;
-  for (i=sizeof(words)-1;i>=0;i--) {
+  for (i=sizeof(words)-1;i>=0;i--)
+  {
     switch(words[i]) {
     case "aus":
-      write("Du wirst nicht mehr automatisch informiert.\n");
+      TP->ReceiveMsg(
+        "Du und das Team werden nicht mehr automatisch informiert.",
+        MT_NOTIFICATION|MSG_DONT_IGNORE);
       autoinf_flags=0;
+      autoinf_subscribers -= ({TP});
       return 1;
     case "+kp":
       fl|=AUTOINF_SP_PLUS;
@@ -1286,14 +1326,16 @@
     case "sofort":
       fl|=AUTOINF_INSTANT;
       break;
-    default:
-      ;
     }
   }
-  if (!fl)
-    return notify_fail("WIE moechtest Du automatisch informiert werden?\n"),0;
+  if (!fl) {
+    notify_fail("WIE moechtest Du automatisch informiert werden?\n");
+    return 0;
+  }
   if (fl==AUTOINF_INSTANT) fl|=AUTOINF_HP_MINUS;
   autoinf_flags=fl;
+  if (!(TP in autoinf_subscribers))
+      autoinf_subscribers += ({TP});
   txt="Du wirst"+((fl&AUTOINF_INSTANT)?" sofort ":" ")+"informiert, wenn";
   if (fl&(AUTOINF_HP_PLUS|AUTOINF_HP_MINUS)) {
     txt+=" die Lebenspunkte eines Teammitglieds";
@@ -1304,7 +1346,7 @@
     txt+=" die Konzentrationspunkte";
     if (fl&(AUTOINF_SP_PLUS)) txt+=" sich aendern"; else txt+=" fallen";
   }
-  write(break_string(txt+".\n",78));
+  TP->ReceiveMsg(txt+".", MT_NOTIFICATION|MSG_DONT_IGNORE);
   return 1;
 }
 
@@ -1330,11 +1372,17 @@
     if (str!="") str+=", ";
     str+=sprintf("%s: %d KP",ob->name(WER),autoinf_sp[ob]);
   }
-
-  if (str!="" && IsMember(leader))
-    tell_object(leader,break_string(capitalize(str)+"\n",78));
   autoinf_hp=([]);
   autoinf_sp=([]);
+  str = capitalize(str);
+  // Und an alle Subscriber zustellen.
+  foreach(object pl: autoinf_subscribers)
+  {
+    if (pl)
+      pl->ReceiveMsg(str, MT_NOTIFICATION|MSG_DONT_IGNORE);
+    else
+      autoinf_subscribers -= ({0}); // bereinigen
+  }
 }
 
 void NotifyHpChange() {
