diff --git a/doc/lfun/AddToMenu b/doc/lfun/AddToMenu
index 82407f4..7ceacbb 100644
--- a/doc/lfun/AddToMenu
+++ b/doc/lfun/AddToMenu
@@ -127,6 +127,9 @@
         dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
         simuliert, sollen aber nicht mehr eingesetzt werden.
         
+        Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
+        sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
+        
         Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
         'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
         checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
@@ -143,13 +146,13 @@
         AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
         ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
         ({"Du isst die Keule mit einem schlechten Gewissen.",
-          "&& isst die Keule mit einem schlechten Gewissen."}),
+          "@WER1 isst die Keule mit einem schlechten Gewissen."}),
         ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
         ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
           "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
           "wohl ein Tippfehler auf der Karte gewesen sein.",
           "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-          "Stueck aus dessen Keule und braet diese fuer &&."}) );
+          "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
         }
 
         1) Name der Speise (des Getraenks) auf der Karte (bei menue).
@@ -175,28 +178,11 @@
            ben werden (also NICHT der Bestell-Text).
 
            ({"Du isst die Keule mit einem schlechten Gewissen.",
-             "&& isst die Keule mit einem schlechten Gewissen."}),
+             "@WER1 isst die Keule mit einem schlechten Gewissen."}),
 
-           Verfuegbare Platzhalter sind (pl = this_player()):
-
-           &&  - pl->name(WER,2)
-           &1& - pl->name(WER,2)
-           &2& - pl->name(WESSEN,2)
-           &3& - pl->name(WEM,2)
-           &4& - pl->name(WEN,2)
-           &1# - capitalize(pl->name(WER,2))
-           &2# - capitalize(pl->name(WESSEN,2))
-           &3# - capitalize(pl->name(WEM,2))
-           &4# - capitalize(pl->name(WEN,2))
-           &!  - pl->QueryPronoun(WER)
-           &5& - pl->QueryPronoun(WE);
-           &6& - pl->QueryPronoun(WESSEN)
-           &7& - pl->QueryPronoun(WEM)
-           &8& - pl->QueryPronoun(WEN)
-           &5# - capitalize(pl->QueryPronoun(WER))
-           &6# - capitalize(pl->QueryPronoun(WESSEN))
-           &7# - capitalize(pl->QueryPronoun(WEM))
-           &8# - capitalize(pl->QueryPronoun(WEN))
+           Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
+           als Objekt an replace_personal() uebergeben. Fuer die
+           moeglichen Platzhalter siehe dort.
           
         6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
            sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
@@ -224,10 +210,31 @@
            "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
            "wohl ein Tippfehler auf der Karte gewesen sein.",
            "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-           "Stueck aus dessen Keule und braet diese fuer &&."}));
+           "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
+
+LISTE DER ALTEN PLATZHALTER (DEPRECATED):
+           &&  - pl->name(WER,2)
+           &1& - pl->name(WER,2)
+           &2& - pl->name(WESSEN,2)
+           &3& - pl->name(WEM,2)
+           &4& - pl->name(WEN,2)
+           &1# - capitalize(pl->name(WER,2))
+           &2# - capitalize(pl->name(WESSEN,2))
+           &3# - capitalize(pl->name(WEM,2))
+           &4# - capitalize(pl->name(WEN,2))
+           &!  - pl->QueryPronoun(WER)
+           &5& - pl->QueryPronoun(WE);
+           &6& - pl->QueryPronoun(WESSEN)
+           &7& - pl->QueryPronoun(WEM)
+           &8& - pl->QueryPronoun(WEN)
+           &5# - capitalize(pl->QueryPronoun(WER))
+           &6# - capitalize(pl->QueryPronoun(WESSEN))
+           &7# - capitalize(pl->QueryPronoun(WEM))
+           &8# - capitalize(pl->QueryPronoun(WEN))
+
 
 SIEHE AUCH:
         AddFood(), AddDrink(), /sys/pub.h
-        RemoveFromMenu()
+        RemoveFromMenu(), replace_personal()
 ----------------------------------------------------------------------------
 Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn
diff --git a/std/room/pub.c b/std/room/pub.c
index c15e33e..92eb9f8 100644
--- a/std/room/pub.c
+++ b/std/room/pub.c
@@ -71,6 +71,34 @@
   set_next_reset(-1);
 }
 
+// Die alten durch die neuen Platzhalter ersetzen
+private string replace_dummy(string str)
+{
+  switch(str)
+  {
+    case "&&": return "@WERU1";
+    case "&1&": return "@WERU1";
+    case "&2&": return "@WESSENU1";
+    case "&3&": return "@WEMU1";
+    case "&4& ": return "@WENU1";
+    case "&1#": return "@WERU1";
+    case "&2#": return "@WESSENU1";
+    case "&3#": return "@WEMU1";
+    case "&4# ": return "@WENU1";
+    case "&!": return "@WERQP1";
+    case "&5&": return "@WERQP1";
+    case "&6&": return "@WESSENQP1";
+    case "&7&": return "@WEMQP1";
+    case "&8&": return "@WENQP1";
+    case "&5#": return "@WERQP1";
+    case "&6#": return "@WESSENQP1";
+    case "&7#": return "@WEMQP1";
+    case "&8#": return "@WENQP1";
+    default: return str;
+  }
+  return str;
+}
+
 /* Zur Syntax:
  *
  * menuetext - Der Text steht im Menue
@@ -136,6 +164,18 @@
   for( i=sizeof(ids)-1;i>=0;i-- )
     id_list += ([ ids[i] : ident ]);
 
+  if(pointerp(msg) && sizeof(msg)>=2)
+  {
+    msg[0]=regreplace(msg[0],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+    msg[1]=regreplace(msg[1],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+  }
+
+  if(pointerp(d_msg) && sizeof(d_msg)>=2)
+  {
+    d_msg[0]=regreplace(msg[0],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+    d_msg[1]=regreplace(msg[1],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+  }    
+  
   if ( intp(refresh) && (refresh>0) )
     refresh = ([ PR_ALL : refresh; 1 ]);
   else if ( !mappingp(refresh) )
@@ -509,35 +549,16 @@
   return 0;
 }
 
-/* Hier hats jede Menge neue Platzhalter */
+
 string mess(string str,object pl)
 {
-  string dummy1, dummy2;
-
   if ( !pl )
     pl=PL;
 
   if ( !stringp(str) || str=="" )
     return str;
 
-  str=implode(explode(str,"&&"),pl->name(WER,2));
-  str=implode(explode(str,"&1&"),pl->name(WER,2));
-  str=implode(explode(str,"&2&"),pl->name(WESSEN,2));
-  str=implode(explode(str,"&3&"),pl->name(WEM,2));
-  str=implode(explode(str,"&4&"),pl->name(WEN,2));
-  str=implode(explode(str,"&1#"),capitalize(pl->name(WER,2)));
-  str=implode(explode(str,"&2#"),capitalize(pl->name(WESSEN,2)));
-  str=implode(explode(str,"&3#"),capitalize(pl->name(WEM,2)));
-  str=implode(explode(str,"&4#"),capitalize(pl->name(WEN,2)));
-  str=implode(explode(str,"&!"),pl->QueryPronoun(WER));
-  str=implode(explode(str,"&5&"),pl->QueryPronoun(WER));
-  str=implode(explode(str,"&6&"),pl->QueryPronoun(WESSEN));
-  str=implode(explode(str,"&7&"),pl->QueryPronoun(WEM));
-  str=implode(explode(str,"&8&"),pl->QueryPronoun(WEN));
-  str=implode(explode(str,"&5#"),capitalize(pl->QueryPronoun(WER)));
-  str=implode(explode(str,"&6#"),capitalize(pl->QueryPronoun(WESSEN)));
-  str=implode(explode(str,"&7#"),capitalize(pl->QueryPronoun(WEM)));
-  str=implode(explode(str,"&8#"),capitalize(pl->QueryPronoun(WEN)));
+  str=replace_personal(str,({pl}),1);
 
   return break_string(capitalize(str),78,"", BS_LEAVE_MY_LFS);
 }
