diff --git a/std/player/comm.c b/std/player/comm.c
index dc447b7..716f0af 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -532,12 +532,20 @@
      (name == ignore[0] && member(ignore[1..], verb) != -1));
 }
 
-private int comm_beep() {
+private int comm_beep(string msg_action)
+{
   if (QueryProp(P_ALERT) & AL_NO_SOUND) return 0; // kein ton
   int beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
-  if (!beep_interval || ((time()-last_beep_time) < beep_interval)) return 0;
-  last_beep_time=time();
-  return 1;
+  if(beep_interval && ((time()-last_beep_time) > beep_interval) &&
+    ((msg_action == MA_TELL && QueryProp(P_ALERT) & MB_TELL) ||
+    (msg_action == MA_SAY && QueryProp(P_ALERT) & MB_SAY) ||
+    (msg_action == MA_CHANNEL && QueryProp(P_ALERT) & MB_CHANNEL) ||
+    (msg_action == MA_SHOUT && QueryProp(P_ALERT) & MB_SHOUT)))
+  {
+    last_beep_time=time();
+    return 1;
+  }
+  return 0;
 }
 
 private varargs void add_to_tell_history( string uid, int sent, int recv,
@@ -909,7 +917,12 @@
   if(te && QueryProp(P_AWAY))
     msg = msg[0..<2]+" [" + strftime("%H:%M",time()) + "]\n";
 
-  if (flag & (MSGFLAG_SAY | MSGFLAG_TELL) && comm_beep()) {
+  if((!objectp(sender) || sender != ME) &&
+    ((flag & MSGFLAG_SAY) && comm_beep(MA_SAY) ||
+    (flag & MSGFLAG_TELL) && comm_beep(MA_TELL) ||
+    (flag & MSGFLAG_CHANNEL) && comm_beep(MA_CHANNEL) ||
+    (flag & MSGFLAG_SHOUT) && comm_beep(MA_SHOUT)))
+  {
     msg=MESSAGE_BEEP+msg;
   }
   efun::tell_object(ME, msg);
@@ -961,21 +974,71 @@
 }
 
 
+private int filter_flags(int flag, string text)
+{
+  return (flag & QueryProp(P_ALERT));
+}
+
 static int _msg_beep(string str) {
-  int beep_interval;
-  notify_fail("Syntax: klingelton <1 bis 3600 Sekunden> oder klingelton aus\n");
-  if (stringp(str)) {
+  int beep_interval = to_int(str);
+  if(beep_interval > 0)
+  {
+    SetProp(P_MESSAGE_BEEP,beep_interval);
+  }
+  else if (stringp(str))
+  {
+    notify_fail(
+      "Syntax:\n"
+      "- klingelton <1 bis 3600 Sekunden>\n"
+      "- klingelton aus\n"
+      "- klingelton <+/-><tm / sag / ebenen / ruf / alle>\n");
     if (str=="aus")
       SetProp(P_MESSAGE_BEEP,0);
-    else if ((beep_interval=to_int(str)) > 0 && beep_interval<=3600)
-      SetProp(P_MESSAGE_BEEP,beep_interval);
-    else return 0;
+    else
+    {
+      mapping flags = ([
+        "tm": MB_TELL,
+        "teilemit": MB_TELL,
+        "sag": MB_SAY,
+        "sage": MB_SAY,
+        "ebene": MB_CHANNEL,
+        "ebenen": MB_CHANNEL,
+        "ruf": MB_SHOUT,
+        "rufe": MB_SHOUT,
+        "alle": MB_ALL]);
+      foreach(string part : explode(str, " ") - ({""}))
+      {
+        if(!(part[1..] in flags)) continue;
+        if(part[0] == '+')
+        {
+          SetProp(P_ALERT,
+            QueryProp(P_ALERT) | flags[part[1..]]);
+        }
+        else if(part[0] == '-')
+        {
+          SetProp(P_ALERT,
+            QueryProp(P_ALERT) & ~ flags[part[1..]]);
+        }
+      }
+    }
   }
 
   beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
-  ReceiveNotify("Ton bei Mitteilungen: "+
-        (beep_interval ? "aller "+beep_interval+" Sekunden." : "aus."),
-        query_verb());
+  mapping text = ([
+    MB_SAY: "sage",
+    MB_TELL: "teile mit",
+    MB_CHANNEL: "Ebenenmeldungen",
+    MB_SHOUT: "rufe"]);
+  string types = CountUp(map(filter(m_indices(text), #'filter_flags), text));
+  if(!sizeof(types))
+  {
+    types = "nichts";
+  }
+  ReceiveNotify(
+    "Klingelton bei "
+    + types
+    + (beep_interval ? ", alle " + beep_interval + " Sekunden." : ", nie."),
+    query_verb());
   return 1;
 }
 
@@ -1928,14 +1991,10 @@
       // entleeren.
       _flush_cache(0);
     }
-
-    // ggf. Piepston anhaengen. NACH Koboldablage, die sollen erstmal keinen
-    // Pieps kriegen.
-    if (comm_beep())
-      flags |= MSG_ALERT;
   }
 
-  if(flags & MSG_ALERT && !(QueryProp(P_ALERT) & AL_NO_SOUND))
+  if((flags & MSG_ALERT && !(QueryProp(P_ALERT) & AL_NO_SOUND)) ||
+    (interactive(origin) && origin != ME && comm_beep(msg_action)))
   {
     msg += MESSAGE_BEEP;
   }
