diff --git a/std/player/comm.c b/std/player/comm.c
index e6c8718..c8981f2 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -1175,9 +1175,39 @@
   return (flag & QueryProp(P_ALERT));
 }
 
+private string beep_status()
+{
+  int beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
+  mapping text = ([
+    MB_SAY: "sage",
+    MB_TELL: "teile mit",
+    MB_CHANNEL: "Ebenenmeldungen",
+    MB_MENTION: "Erwaehnungen",
+    MB_SHOUT: "rufe",
+    MB_MISC: "sonstige",]);
+  string types = CountUp(map(filter(m_indices(text), #'_alert_filter_flags), text));
+  if(!sizeof(types))
+  {
+    types = "Keine";
+  }
+  return
+    "Gewaehlte Klingeltoene: " + types + "\n"
+    "Zeitabstand: "
+    + (beep_interval ? "maximal alle " + beep_interval + " Sekunden."
+                     : "keiner") + "\n"
+    + (QueryProp(P_ALERT) & AL_NO_SOUND ? " Allerdings sind Toene insgesamt "
+         "bei Dir abgeschaltet. (\'hilfe ton\')" : "");
+}
+
 static int _msg_beep(string str)
 {
-  int beep_interval;
+  if(!sizeof(str))
+  {
+    ReceiveNotify(
+      beep_status(),
+      query_verb());
+    return 1;
+  }
 
   notify_fail(
     "Syntax:\n"
@@ -1186,8 +1216,6 @@
     "- klingelton ein\n"
     "- klingelton <+/-><tm / sag / ebenen / ruf / erwaehnung / sonstige / alle / >\n");
 
-  if(!sizeof(str))
-    return 0;
   if (!regmatch(str,"^[[:digit:]]", RE_PCRE))
   {
     if (str=="aus")
@@ -1207,7 +1235,7 @@
         ]);
       foreach(string part : explode(str, " ") - ({""}))
       {
-        if(!(part[1..] in flags)) continue;
+        if(!(part[1..] in flags)) return 0;
         if(part[0] == '+')
         {
           SetProp(P_ALERT,
@@ -1218,6 +1246,10 @@
           SetProp(P_ALERT,
             QueryProp(P_ALERT) & ~ flags[part[1..]]);
         }
+        else
+        {
+          return 0;
+        }
       }
       // 0 hat leider historisch die Bedeutung von MB_MISC, daher muss hier
       // statt dessen auf AL_NO_SOUND gesetzt werden.
@@ -1229,32 +1261,19 @@
   }
   else
   {
-    beep_interval = to_int(str);
+    int beep_interval = to_int(str);
     if(beep_interval >= 0)
     {
-        SetProp(P_MESSAGE_BEEP, beep_interval);
+      SetProp(P_MESSAGE_BEEP, beep_interval);
+    }
+    else
+    {
+      return 0;
     }
   }
 
-  beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
-  mapping text = ([
-    MB_SAY: "sage",
-    MB_TELL: "teile mit",
-    MB_CHANNEL: "Ebenenmeldungen",
-    MB_MENTION: "Erwaehnungen",
-    MB_SHOUT: "rufe",
-    MB_MISC: "sonstige",]);
-  string types = CountUp(map(filter(m_indices(text), #'_alert_filter_flags), text));
-  if(!sizeof(types))
-  {
-    types = "Keine";
-  }
   ReceiveNotify(
-    "Gewaehlte Klingeltoene: " + types + "\n"
-    "Zeitabstand: "
-    + (beep_interval ? "maximal alle " + beep_interval + " Sekunden." : "kein") + "\n"
-    + (QueryProp(P_ALERT) & AL_NO_SOUND ? " Allerdings sind Toene insgesamt "
-         "bei Dir abgeschaltet. (\'hilfe ton\')" : ""),
+    beep_status(),
     query_verb());
   return 1;
 }
