diff --git a/d/seher/haeuser/special/seherfaqmobil.c b/d/seher/haeuser/special/seherfaqmobil.c
index 250db4b..b7513a8 100644
--- a/d/seher/haeuser/special/seherfaqmobil.c
+++ b/d/seher/haeuser/special/seherfaqmobil.c
@@ -1,7 +1,7 @@
 // tragbare Seher-FAQ, gibt es im Seherladen zu kaufen bzw. automatisch zur Seherwerdung
 // Rikus@mg.mud.de
 
-inherit "std/thing";
+inherit "/std/thing";
 
 #include <properties.h>
 #include <wizlevels.h>
@@ -11,51 +11,92 @@
 
 static string *seite;
 
-mapping synonym = ([]);
+mapping synonym = ([
+  "neuigkeiten":"0",
+  "transport":"1",
+  "transporter":"1",
+  "transportmoeglichkeit":"1",
+  "transportmoeglichkeiten":"1",
+  "portale":"1",
+  "seherportale":"1",
+  "sehertore":"1",
+  "quest":"2",
+  "quests":"2",
+  "seherquest":"2",
+  "seherquests":"2",
+  "fluchtrichtung":"3",
+  "level":"4",
+  "seherlevel":"4",
+  "kommunikation":"5",
+  "kugel":"6",
+  "magische kugel":"6",
+  "seherkugel":"6",
+  "kristallkugel":"6",
+  "seherladen":"7",
+  "designer-seher":"8",
+  "designerseher":"8",
+  "fehlermeldung":"9",
+  "paralleldimension":"10",
+  "portal":"11",
+  "paraportal":"11",
+  "para-portal":"11",
+  "finger":"12",
+  "finger-befehl":"12",
+  "fingerbefehl":"12",
+  "echo":"13",
+  "remote":"13",
+  "r-emote":"13",
+  "haus":"14",
+  "haeuser":"14",
+  "seherhaus":"14",
+  "seherhaeuser":"14",
+  "nachwort":"15",
+  "danksagung":"16",
+  "danksagungen":"16",
+]);
 
-create()
-{
-//  if (!clonep(this_object())) return;
+protected void create() {
+  if ( !clonep() ) {
+    set_next_reset(-1);
+    return;
+  }
   ::create();
+  
   SetProp(P_SHORT,"Die SeherFAQ");
   SetProp(P_NAME,"SeherFAQ");
   SetProp(P_GENDER,FEMALE); 
-  SetProp(P_LONG,"Dies ist die SeherFAQ. Wenn Du weitere Fragen oder "+
-          "Anregungen zu dieser FAQ\nhast, sei so nett und schicke Sting "+
-          "einen kurzen Brief. Zum Inhalt der FAQ\nkommst Du mit "+
-          ">lies inhalt<\n");
+  SetProp(P_LONG, break_string(
+    "Dies ist die SeherFAQ. Wenn Du weitere Fragen oder Anregungen zu "
+    "dieser FAQ hast, sei so nett und schicke dem Regionsmagier Seher oder "
+    "einem Erzmagier einen kurzen Brief. Zum Inhalt der FAQ kommst Du mit "
+    "dem Befehl 'lies inhalt'",78));
   SetProp(P_WEIGHT,100);
   SetProp(P_VALUE,1000);
   AddId(({"faq","seherfaq"}));
   AddCmd("lies","lesen");
-  restore_object(FAQ("faq"));
   seite = get_dir(FAQ("*"))-({".","..","faq.o"});
 }
 
-init()
-{
-  object o;
-  ::init();
-  if ((o=environment()) && query_once_interactive(o) && !IS_SEER(o))
-     call_out("wech",0);
+public varargs void init(object oldenv) {
+  ::init(oldenv);
+  object o = environment();
+  if ( objectp(o) && query_once_interactive(o) && !IS_SEER(o) )
+    call_out("wech",0);
 }
 
-wech()
-{
-   write("Die Seher-FAQ lacht Dich aus und loest sich in Wohlgefallen auf.\n");
-   remove();
+void wech() {
+  write("Die Seher-FAQ lacht Dich aus und loest sich in Wohlgefallen auf.\n");
+  remove();
 }
 
-int lesen(string str)
-{
+int lesen(string str) {
   if (!str || str == "") {
     notify_fail("Was willst Du denn lesen?\n");
     return 0;
   }
-  if (environment()!=this_player()) 
-  {
-     notify_fail("Du musst die FAQ schon erst nehmen!\n");
-     return 0;
+  if (environment()!=this_player()) {
+    notify_fail("Du musst die FAQ schon erst nehmen!\n");
+    return 0;
   }
   str = lower_case(this_player()->_unparsed_args());
   if (member(seite,str)<0) {
@@ -70,10 +111,10 @@
   return 1;
 }
 
-string _query_extralook()
-{
-   object o;
-   if ((o=environment()) && (o->QueryProp(P_GENDER)==FEMALE))
-      return "Mit ihrer Seher-FAQ outet sie sich als Wurstseherin.\n";
-   return "Mit seiner Seher-FAQ outet er sich als Wurstseher.\n";
+string _query_extralook() {
+  object owner = environment();
+  return sprintf("Mit %s Seher-FAQ outet %s sich als Wurstseher%s.\n",
+           owner->QueryPossPronoun(this_object(), WEM, SINGULAR),
+           owner->QueryPronoun(WER),
+           owner->QueryProp(P_GENDER)==FEMALE ? "in" : "" );
 }
