diff --git a/std/player/base.c b/std/player/base.c
index 7f616d0..71591e2 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -206,7 +206,6 @@
 
   Set(P_NO_ASCII_ART, SAVE, F_MODE_AS);
 
-  Set(P_VISUALBELL, SAVE, F_MODE_AS);
   Set(P_CARRIED_VALUE, SAVE, F_MODE_AS);
 
   Set(P_PROMPT, "> ");
@@ -3654,27 +3653,27 @@
   if(!str)
   {
     write("Derzeitige Einstellung fuer Tonausgabe: "+
-         (QueryProp(P_VISUALBELL)?"AUS":"EIN")+".\n");
+         ((QueryProp(P_ALERT) & AL_NO_SOUND)?"AUS":"EIN")+".\n");
     return 1;
   }
   if (str=="ein")
   {
-    if(!QueryProp(P_VISUALBELL))
+    if(!(QueryProp(P_ALERT) & AL_NO_SOUND))
       write("Die Tonausgabe stand schon auf EIN.\n");
     else
       {
-  SetProp(P_VISUALBELL,0);
+  SetProp(P_ALERT, QueryProp(P_ALERT) & ~ AL_NO_SOUND);
         write("OK, Tonausgabe auf EIN gestellt.\n");
       }
   }
   else
     if (str=="aus")
     {
-      if(QueryProp(P_VISUALBELL))
+      if(QueryProp(P_ALERT) & AL_NO_SOUND)
         write("Die Tonausgabe stand schon auf AUS.\n");
       else
         {
-          SetProp(P_VISUALBELL,1);
+          SetProp(P_ALERT, QueryProp(P_ALERT) | AL_NO_SOUND);
     write("OK, Tonausgabe auf AUS gestellt.\n");
   }
     }
@@ -3848,7 +3847,7 @@
 
   if(pointerp(list=Query(P_WAITFOR)) && sizeof(list) && member(list,who)!=-1)
   {
-    if (!QueryProp(P_VISUALBELL))
+    if (!(QueryProp(P_ALERT) & AL_NO_SOUND))
         name+=sprintf("%c",7); // Char fuer Pieps an den String anhaengen.
     // Moechte der Spieler keine ASCII-Grafik sehen, wird diese Meldung ohne
     // Leerzeichen formatiert, so dass sie von Screenreadern vorgelesen wird.
diff --git a/std/player/comm.c b/std/player/comm.c
index 0f529a5..dc447b7 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -84,6 +84,7 @@
 void create()
 {
   ::create();
+  Set(P_ALERT, SAVE, F_MODE_AS);
   Set(P_EARMUFFS, 0);
   Set(P_EARMUFFS, SAVE, F_MODE);
   Set(P_EARMUFFS, SECURED, F_MODE);
@@ -532,7 +533,7 @@
 }
 
 private int comm_beep() {
-  if (QueryProp(P_VISUALBELL)) return 0; // kein ton
+  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();
@@ -1931,7 +1932,12 @@
     // ggf. Piepston anhaengen. NACH Koboldablage, die sollen erstmal keinen
     // Pieps kriegen.
     if (comm_beep())
-      msg=msg + MESSAGE_BEEP;
+      flags |= MSG_ALERT;
+  }
+
+  if(flags & MSG_ALERT && !(QueryProp(P_ALERT) & AL_NO_SOUND))
+  {
+    msg += MESSAGE_BEEP;
   }
 
   // Ausgabenachricht bauen und an den Spieler senden.
diff --git a/std/player/soul.c b/std/player/soul.c
index d75888f..8217f3a 100644
--- a/std/player/soul.c
+++ b/std/player/soul.c
@@ -2723,7 +2723,7 @@
       +(adverb ? "." : (flag ? ": "+sfoo : "."));
     out_oth="@@gname@@ wirft "+QPP(MALE, WEN)
       +" Wecker@@adverb@@ nach @@wem@@.";
-          if (!who->QueryProp(P_VISUALBELL))
+          if (!(who->QueryProp(P_ALERT) & AL_NO_SOUND))
          out_vic[0]=7; // chr(7)==BEL
       else out_vic=out_vic[1..];
     return FeelIt();
diff --git a/std/shells/magier.c b/std/shells/magier.c
index 084652e..d415ec5 100644
--- a/std/shells/magier.c
+++ b/std/shells/magier.c
@@ -276,7 +276,7 @@
         delayed_write(
            ({
              ({sprintf("%s%s IST JETZT %s!!!\n",
-                       (QueryProp(P_VISUALBELL) ? "" : sprintf("%c",7)),
+                       ((QueryProp(P_ALERT) & AL_NO_SOUND)? "" : sprintf("%c",7)),
                        name,
                        (vis_change?
                          (rein?"SICHTBAR":"UNSICHTBAR"):
@@ -287,7 +287,7 @@
         delayed_write(
            ({
              ({sprintf("%s%s   I S T   J E T Z T   %s !!!\n",
-                       (QueryProp(P_VISUALBELL) ? "" : sprintf("%c",7)),
+                       ((QueryProp(P_ALERT) & AL_NO_SOUND)? "" : sprintf("%c",7)),
                        name,
                        (vis_change?
                          (rein?"S I C H T B A R":"U N S I C H T B A R"):
