diff --git a/doc/pcmd/klingelton b/doc/pcmd/klingelton
index f855d2e..427d933 100644
--- a/doc/pcmd/klingelton
+++ b/doc/pcmd/klingelton
@@ -1,23 +1,41 @@
-KOMMANDO:
-	klingelton aus
-        klingelton 1..3600 
+KLINGELTON
+==========
 
-ARGUMENTE:
-                  : aktuellen Status anzeigen  
-	  1..3600 : Klingelton maximal aller n Sekunden 
-	  AUS     : Klingelton ausschalten.
+KOMMANDO
+--------
 
-BESCHREIBUNG:
-        Um Mitteilungen im Scroll nicht zu verpassen, wird bei eingeschaltetem
-        Klingelton in den voreingestellten Zeitintervallen ein Tonsignal vom
-        Mud erzeugt. Das ist besonders fuer blinde Spieler von Vorteil, denen
-        sonst Mitteilungen schnell mal verloren gehen.
-        Der Ton wird nur produziert, wenn man mit 'ton ein' die Tonausgabe
-        des Muds aktiviert hat.
-        Mitteilungen sind in diesem Zusammenhang 'sag' und 'teile mit'.
+  klingelton aus
+  klingelton <1..3600>
+  klingelton <+/-><tm / sag / ebenen / ruf / alle>
+
+ARGUMENTE
+---------
+
+  - Kein Argument
+    aktuellen Status anzeigen  
+  - 1..3600
+    Klingelton maximal aller n Sekunden 
+  - AUS
+    Klingelton ausschalten.
+  - <+/-><tm / sag / ebenen / ruf / alle>
+    Konfigurieren, fuer welche Art von Mitteilungen man Klingeltoene hoeren
+    moechte, es koennen auch mehrere gleichzeitig uebergeben werden,
+    z.B. "klingelton +tm -sag"
+
+BESCHREIBUNG
+------------
+
+  Um Mitteilungen im Scroll nicht zu verpassen, wird bei eingeschaltetem
+  Klingelton in den voreingestellten Zeitintervallen ein Tonsignal vom Mud
+  erzeugt, wenn eine Mitteilung aus den aktivierten Kategorien eingeht. Das
+  ist besonders fuer blinde Spieler von Vorteil, denen sonst Mitteilungen
+  schnell mal verloren gehen.
+  Der Ton wird nur produziert, wenn man mit 'ton ein' die Tonausgabe
+  des Muds aktiviert hat.
  
-SIEHE AUCH:
-	teile mit, sag, klingelton, grafik aus, ton, keepalive
+SIEHE AUCH
+----------
 
-LETZTE AENDERUNG:
-   16. Mai 2007  Ennox
+  teile mit, sag, grafik, ton, tmhist
+
+LETZTE AENDERUNG: 21.01.2022, Bugfix
diff --git a/doc/sphinx/props/P_ALERT.rst b/doc/sphinx/props/P_ALERT.rst
index 6be860a..b9ec630 100644
--- a/doc/sphinx/props/P_ALERT.rst
+++ b/doc/sphinx/props/P_ALERT.rst
@@ -23,6 +23,12 @@
   Aktuell gibt es folgende Moeglichkeiten:
   - AL_NO_SOUND
     Keine Pieptoene empfangen
+  - MB_SAY
+    Alert bei Messages mit MA_SAY
+  - MB_TELL
+    Alert bei Messages mit MA_TELL (tm)
+  - MB_CHANNEL
+    Alert bei Ebenennachrichten.
 
 BEMERKUNGEN
 -----------
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;
   }
diff --git a/sys/player/comm.h b/sys/player/comm.h
index 5459ecb..bbc01fb 100644
--- a/sys/player/comm.h
+++ b/sys/player/comm.h
@@ -31,6 +31,12 @@
 #define P_ALERT     "visualbell"
 #define AL_NO_SOUND 1
 // Bis 1024 (2^10) reserviert fuer allg. Einstellungen
+#define MB_TELL    2048
+#define MB_SAY     4096
+#define MB_CHANNEL 8192
+#define MB_SHOUT   16384
+// Flags < 1048576 (2^20) reserviert fuer Flags
+#define MB_ALL     (MB_SAY | MB_TELL | MB_CHANNEL | MB_SHOUT)
 
 // definitions for Message()
 
