diff --git a/std/shells/magier.c b/std/shells/magier.c
index efde69f..320b947 100644
--- a/std/shells/magier.c
+++ b/std/shells/magier.c
@@ -166,7 +166,7 @@
 
 static string _query_race()
 {
-  if (previous_object() && previous_object()->query_login_object())
+  if (previous_object() && ({int})previous_object()->query_login_object())
     return 0;
 
   return Query(P_RACE) ? Query(P_RACE) : Set(P_RACE, "Magier");
@@ -304,7 +304,7 @@
   if (str=="\\ESCAPE" && IS_LORD(this_object()))
   {
     __set_environment(this_object(),"/room/void");
-    environment()->init();
+    ({void})environment()->init();
     printf("You escaped.\n");
     return "";
   }
diff --git a/std/shells/magier/admin.c b/std/shells/magier/admin.c
index 64f3168..0dcac9f 100644
--- a/std/shells/magier/admin.c
+++ b/std/shells/magier/admin.c
@@ -89,7 +89,7 @@
   if (!str) return 0;
   if (sscanf(str,"%s %s",master,domain)!=2) return 0;
   if (!master || !domain) return 0;
-  if (!"/secure/master"->add_domain_master(master,domain))
+  if (!({int})"/secure/master"->add_domain_master(master,domain))
     write("Hat nicht funktioniert.\n");
   else
     write("Ok.\n");
@@ -109,7 +109,7 @@
   if (!str) return 0;
   if (sscanf(str,"%s %s",master,domain)!=2) return 0;
   if (!master || !domain) return 0;
-  if (!"/secure/master"->remove_domain_master(master,domain))
+  if (!({int})"/secure/master"->remove_domain_master(master,domain))
     write("Hat nicht funktioniert.\n");
   else
     write("Ok.\n");
@@ -130,7 +130,7 @@
   if (!str) return 0;
   if (sscanf(str, "%s %s", master, guild)!=2) return 0;
   if (!master || !guild) return 0;
-  if (!"/secure/master"->add_guild_master(master,guild))
+  if (!({int})"/secure/master"->add_guild_master(master,guild))
     write("Hat nicht funktioniert.\n");
   else
     write ("Ok.\n");
@@ -150,7 +150,7 @@
   if (!str) return 0;
   if (sscanf(str, "%s %s", master, guild)!=2) return 0;
   if (!master || !guild) return 0;
-  if (!"/secure/master"->remove_guild_master(master,guild))
+  if (!({int})"/secure/master"->remove_guild_master(master,guild))
     write("Hat nicht funktioniert.\n");
   else
     write("Ok.\n");
@@ -179,12 +179,12 @@
 
     if ( arg=="?" )
     {
-        write(call_other("/secure/sinmaster","ListSinners"));
+        write(({string})call_other("/secure/sinmaster","ListSinners"));
         return 1;
     }
     if ( arg=="!" )
     {
-        write(call_other("/secure/sinmaster","Dump"));
+        write(({string})call_other("/secure/sinmaster","Dump"));
         return 1;
     }
     if ( arg=="*" )
@@ -200,7 +200,7 @@
     {
       if ( i<2 )
         return 0;
-      write(call_other("/secure/sinmaster","RemoveSin",
+      write(({string})call_other("/secure/sinmaster","RemoveSin",
             lowerstring(parts[0][1..]),
             to_int(parts[1])));
     }
@@ -208,7 +208,7 @@
     {
       if ( i<2 )
         return 0;
-      write(call_other("/secure/sinmaster","AddSin",
+      write(({string})call_other("/secure/sinmaster","AddSin",
             lowerstring(parts[0][1..]),
             implode(parts[1..]," ")));
     }
@@ -216,7 +216,7 @@
     {
       if ( i>1 )
         return 0;
-      write(call_other("/secure/sinmaster","ListSins",
+      write(({string})call_other("/secure/sinmaster","ListSins",
             lowerstring(parts[0])));
     }
     return 1;
@@ -251,7 +251,7 @@
   }
 
   name=lower_case(name);
-  "/secure/master"->BanishName( name, grund, force );
+  ({int})"/secure/master"->BanishName( name, grund, force );
   return 1;
 }
 
@@ -305,7 +305,7 @@
     name = lower_case(name);
 
     if ( !grund || !stringp(grund) || lower_case(grund) != "loeschen" ){
-        "/secure/merlin"->MBanishInsert( name, grund, this_interactive() );
+        ({void})"/secure/merlin"->MBanishInsert( name, grund, this_interactive() );
         write( "Du setzt "+capitalize(name)+" auf die MBanish-Liste.\n" );
     }
     else{
@@ -313,7 +313,7 @@
             write( "Das duerfen nur Erzmagier.\n" );
             return 1;
         }
-        "/secure/merlin"->MBanishDelete( name );
+        ({void})"/secure/merlin"->MBanishDelete( name );
         write( "Du loescht "+capitalize(name)+" von der MBanish-Liste.\n" );
     }
 
@@ -342,7 +342,7 @@
 
   name = lower_case(name);
 
-  if ( !"/secure/master"->TBanishName( name, days ) )
+  if ( !({int})"/secure/master"->TBanishName( name, days ) )
       return 1;
 
   if ( !days )
@@ -395,7 +395,7 @@
 
     _notify_fail("Syntax: sbanish <numerische ip> <tage>\n");
 
-    if ( sscanf( this_player()->_unparsed_args(), "%s %d", ip, days ) != 2 )
+    if ( sscanf( ({string})this_player()->_unparsed_args(), "%s %d", ip, days ) != 2 )
         return 0;
 
     if ( !ip || !sizeof(ip) )
diff --git a/std/shells/magier/comm.c b/std/shells/magier/comm.c
index 5263979..444efb3 100644
--- a/std/shells/magier/comm.c
+++ b/std/shells/magier/comm.c
@@ -51,7 +51,7 @@
   }
   msg=break_string(msg,78);
   tell_object(ob,msg);
-  printf("%s->%s",ob->Name(WEN),msg);
+  printf("%s->%s",({string})ob->Name(WEN),msg);
   return 1;
 }
 
diff --git a/std/shells/magier/magier_ext.c b/std/shells/magier/magier_ext.c
index 365ac63..926d0b2 100644
--- a/std/shells/magier/magier_ext.c
+++ b/std/shells/magier/magier_ext.c
@@ -154,7 +154,7 @@
 static string _set_currentdir(string path)
 {
   Set(P_CURRENTDIR, path);
-  this_object()->modify_prompt();  // Prompt mit neuem Pfad setzen, telnetneg
+  ({void})this_object()->modify_prompt();  // Prompt mit neuem Pfad setzen, telnetneg
   return path;
 }
 
@@ -212,7 +212,7 @@
 
 static string _set_prompt(string prompt) {
   Set(P_PROMPT, prompt, F_VALUE);
-  this_object()->modify_prompt(); // neuen Prompt setzen (telnetneg.c)
+  ({void})this_object()->modify_prompt(); // neuen Prompt setzen (telnetneg.c)
   return prompt;
 }
 
@@ -292,7 +292,7 @@
            "nicht moeglich.\n");
     return 1;
   }
-  ob->start_player(capitalize(getuid(this_object())));
+  ({int})ob->start_player(capitalize(getuid(this_object())));
   remove();
   return 1;
 }
@@ -451,7 +451,7 @@
             QueryProp(P_MMSGOUT)),({ this_object() }));
   if (inform=="e") {
     // Logout-event ausloesen
-    EVENTD->TriggerEvent(EVT_LIB_LOGOUT, ([
+    ({int})EVENTD->TriggerEvent(EVT_LIB_LOGOUT, ([
             E_OBJECT: this_object(),
             E_PLNAME: getuid(this_object()),
             E_ENVIRONMENT: environment() ]) );
@@ -473,7 +473,7 @@
   SetProp(P_INVIS, 0);
   if (inform=="e") {
     // Login-event ausloesen
-    EVENTD->TriggerEvent(EVT_LIB_LOGIN, ([
+    ({int})EVENTD->TriggerEvent(EVT_LIB_LOGIN, ([
           E_OBJECT: this_object(),
           E_PLNAME: getuid(this_object()),
           E_ENVIRONMENT: environment() ]) );
diff --git a/std/shells/magier/objects.c b/std/shells/magier/objects.c
index 1a51ba5..b93f6c7 100644
--- a/std/shells/magier/objects.c
+++ b/std/shells/magier/objects.c
@@ -67,8 +67,8 @@
   if (!objectp(ob))
     return printf("clone: %s: Objekt beim Erzeugen zerstoert.\n",
                   args[0]),1;
-  if ((ob->move(this_object(),M_GET)>0) || 
-      (!objectp(ob)||ob->move(environment(),M_NOCHECK)>0)||!objectp(ob))
+  if ((({int})ob->move(this_object(),M_GET)>0) || 
+      (!objectp(ob)||({int})ob->move(environment(),M_NOCHECK)>0)||!objectp(ob))
   {
     if (!objectp(ob))
       return printf("clone: %s: Objekt beim Erzeugen zerstoert.\n",
@@ -118,11 +118,11 @@
   }
   else
     ob=args[0];
-  cmdline=capitalize(to_string(ob->name(WER)));
+  cmdline=capitalize(to_string(({string})ob->name(WER)));
   flags=({int})ob->QueryProp(P_PLURAL); // Missbrauch von flags :o)
   if (query_verb()=="destruct")
   {
-    if (!ob->remove())
+    if (!({int})ob->remove())
     {
       notify_fail(cmdline+" will nicht zerstoert werden!\n");
       return 0;
diff --git a/std/shells/magier/parsing.c b/std/shells/magier/parsing.c
index a38210a..31d3429 100644
--- a/std/shells/magier/parsing.c
+++ b/std/shells/magier/parsing.c
@@ -285,7 +285,7 @@
   }
 
   // Normalisiertes Pfadarray besorgen
-  string *patharray=master()->path_array(filename);
+  string *patharray=({string*})master()->path_array(filename);
   // und daraus auch filename neu erzeugen
   filename=implode(patharray, "/");
 
@@ -301,7 +301,7 @@
 
     object *vrooms = ({});
     if (vcompiler)
-      vrooms = vcompiler->QueryObjects();
+      vrooms = ({object*})vcompiler->QueryObjects();
     
     map(vrooms,#'_vc_map,&data);
   }
diff --git a/std/shells/magier/players.c b/std/shells/magier/players.c
index a07c343..6c80ffe 100644
--- a/std/shells/magier/players.c
+++ b/std/shells/magier/players.c
@@ -87,7 +87,7 @@
       if ( !pointerp(message) || sizeof(message) != 3 ){
           tell_room(environment(),sprintf("%s beschwoert einen Blitz "
                 "vom Himmel.\n",capitalize(getuid())),({ this_object() }));
-          printf("Du toetest %s.\n",opfer->name( WEN,2));
+          printf("Du toetest %s.\n",({string})opfer->name( WEN,2));
       }
       else
       {
@@ -97,7 +97,7 @@
         tell_object(opfer,_zap_message(message[2],opfer));
       }
 
-      opfer->die();
+      ({void})opfer->die();
       return 1;
   }
   else{
@@ -121,7 +121,7 @@
     mixed *pur = Query(P_PURSUERS);
     if ( pointerp(pur) && sizeof(pur) && objectp(pur[0]) )
     {
-      pur[0]->RemovePursuer(this_object());
+      ({void})pur[0]->RemovePursuer(this_object());
       ReceiveMsg("Verfolgungsmodus abgeschaltet.", MT_NOTIFICATION);
     }
     else
@@ -167,10 +167,10 @@
     else
     {
       ReceiveMsg(sprintf(
-        "Du verfolgst jetzt %s. [%s]", ziel->name(WEN), object_name(ziel)),
+        "Du verfolgst jetzt %s. [%s]", ({string})ziel->name(WEN), object_name(ziel)),
         MT_NOTIFICATION, MA_MOVE);
-      ziel->AddPursuer(this_object());
-      ziel->TakeFollowers();
+      ({void})ziel->AddPursuer(this_object());
+      ({void})ziel->TakeFollowers();
     }
   }
   else
@@ -201,10 +201,10 @@
     }
   if(living=find_living(livname))
   {
-    if (living->move(object_name(environment()),
+    if (({int})living->move(object_name(environment()),
                      M_TPORT|M_NOCHECK)<=0)
     {
-      printf("Teleportieren von %s fehlgeschlagen.\n",living->Name(WEM));
+      printf("Teleportieren von %s fehlgeschlagen.\n",({string})living->Name(WEM));
       if (IS_LEARNER(living))
         tell_object(living,sprintf("%s wollte Dich teleportieren, "
              "hat aber versagt!\n",capitalize(getuid())));
@@ -215,7 +215,7 @@
     "Du verlierst die Orientierung ...\n"
     +(QueryProp(P_INVIS)?"":"%s holt Dich zu sich.\n"),
     capitalize(getuid())));
-    printf("%s wurde herbeizitiert.\n",living->Name(WER));
+    printf("%s wurde herbeizitiert.\n",({string})living->Name(WER));
     return 1;
   }
   printf("Das Lebewesen '%s' konnte nicht gefunden werden.\n",
@@ -249,13 +249,13 @@
     mapping enemies = ({mapping})obj->StopHuntingMode(1);
     foreach(object en : enemies)
     {
-      en->StopHuntFor(obj, 1);
+      ({int})en->StopHuntFor(obj, 1);
       tell_object(obj,sprintf("%s beendet Deinen Kampf mit %s.\n",
-                              capitalize(getuid()),en->Name(WEM)));
+                              capitalize(getuid()),({string})en->Name(WEM)));
       tell_object(en,sprintf("%s beendet Deinen Kampf mit %s.\n",
                                   capitalize(getuid()),him));
     }
-    printf("%s und alle Gegner wurden befriedet.\n",obj->Name(WER));
+    printf("%s und alle Gegner wurden befriedet.\n",({string})obj->Name(WER));
   }
   return 1;
 }
@@ -281,7 +281,7 @@
   spieler = filter(users(),(: return !IS_LEARNER($1); :));
 #endif
   spieler = sort_array(spieler, function int (object a, object b)
-      { return a->QueryProp(P_LEVEL) > b->QueryProp(P_LEVEL); } );
+      { return ({int})a->QueryProp(P_LEVEL) > ({int})b->QueryProp(P_LEVEL); } );
   
   res = "Lvl Name         Erfahrung   QP  Int Str Dex Con WC   "
     "AC   HANDS HP  (max)\n"
@@ -290,19 +290,19 @@
   for (i=sizeof(spieler)-1; i>=0; i--)
     res += sprintf("%3d %-12s %9d %5d %3d %3d %3d %3d %4d %4d  %5d "
                    "%4d (%4d)\n",
-     spieler[i]->QueryProp(P_LEVEL),
+     ({int})spieler[i]->QueryProp(P_LEVEL),
      capitalize(getuid(spieler[i])),
-     spieler[i]->QueryProp(P_XP),
-     spieler[i]->QueryProp(P_QP),
-     spieler[i]->QueryAttribute(A_INT),
-     spieler[i]->QueryAttribute(A_STR),
-     spieler[i]->QueryAttribute(A_DEX),
-     spieler[i]->QueryAttribute(A_CON),
-     spieler[i]->QueryProp(P_TOTAL_WC),
-     spieler[i]->QueryProp(P_TOTAL_AC),
-     (sizeof(hands=(({int *})spieler[i]->QueryProp(P_HANDS)))?hands[1]:0),
-     spieler[i]->QueryProp(P_HP),
-     spieler[i]->QueryProp(P_MAX_HP));
+     ({int})spieler[i]->QueryProp(P_XP),
+     ({int})spieler[i]->QueryProp(P_QP),
+     ({int})spieler[i]->QueryAttribute(A_INT),
+     ({int})spieler[i]->QueryAttribute(A_STR),
+     ({int})spieler[i]->QueryAttribute(A_DEX),
+     ({int})spieler[i]->QueryAttribute(A_CON),
+     ({int})spieler[i]->QueryProp(P_TOTAL_WC),
+     ({int})spieler[i]->QueryProp(P_TOTAL_AC),
+     (sizeof(hands=(({<int|string|string*>*})spieler[i]->QueryProp(P_HANDS)))?hands[1]:0),
+     ({int})spieler[i]->QueryProp(P_HP),
+     ({int})spieler[i]->QueryProp(P_MAX_HP));
   More(res);
   return 1;
 }
@@ -324,14 +324,14 @@
   if (!(living = find_living(living_name)))
     return printf ("Ein Lebewesen namens '%s' konnte nicht gefunden werden!\n",
                    capitalize(living_name)),1;
-  if (living->command_me(what))
+  if (({int})living->command_me(what))
   {
     printf("Du zwingst %s zu \"%s\".\n",capitalize(living_name),what);
     if (!IS_ARCH(this_object()) &&
         getuid()!=({string|int})living->QueryProp(P_TESTPLAYER))
       log_file(SHELLLOG("ZWINGE"),
                sprintf("%s zwingt %s (%s) zu %s [%s]\n",
-                       capitalize(getuid()),living->Name(),capitalize(getuid(living)),
+                       capitalize(getuid()),({string})living->Name(),capitalize(getuid(living)),
                        what,dtime(time())));
   }
   else
@@ -360,7 +360,7 @@
   }
   lpv = ({int})ob->QueryProp(P_HP);
   mpv = ({int})ob->QueryProp(P_SP);
-  ob->heal_self(1000000);
+  ({void})ob->heal_self(1000000);
   string|int testie = ({string|int})ob->QueryProp(P_TESTPLAYER);
   if (!IS_LEARNER(ob)
       && (!testie || (to_string(testie)[<5..<1] == "Gilde")))
@@ -368,7 +368,7 @@
     log_file(SHELLLOG("HEAL"),
        sprintf("%s heilt %s (%s) %s (LP: %d -> %d, MP: %d -> %d)\n",
          capitalize(geteuid(this_player())),
-         call_other(ob,"name"), capitalize(geteuid(ob)),
+         ({string})call_other(ob,"name"), capitalize(geteuid(ob)),
          dtime(time()), lpv, ({int})ob->QueryProp(P_HP),
                mpv,({int})ob->QueryProp(P_SP)));
   }
@@ -422,11 +422,11 @@
   a=0;res="";
   for(i=0; i<sizeof(list); i++) {
     string name_; 
-    name_ = capitalize(list[i]->query_real_name()||"<logon>");
+    name_ = capitalize(({string})list[i]->query_real_name()||"<logon>");
     res += sprintf( "%s%-15s%s %s%-13s%s %s%3d%s %s %s %s%s%s%s %s%s\n",
                     a_ipnum, query_ip_number(list[i]),a_end,a_name,
-                    (list[i]->QueryProp(P_INVIS)?"("+name_+")":name_),
-                    a_end,a_level, MASTER->get_wiz_level(getuid(list[i])),
+                    (({int})list[i]->QueryProp(P_INVIS)?"("+name_+")":name_),
+                    a_end,a_level, ({int})MASTER->get_wiz_level(getuid(list[i])),
                     a_end,a_age,
                     time2string("%4x %0X",(({int})list[i]->QueryProp(P_AGE))*2),
                     query_idle(list[i])>=300?(a++,(a_idle+"I")):" ",
@@ -522,10 +522,10 @@
 
   foreach(object u: spieler)
   {
-    string second=u->QueryProp(P_SECOND);
+    string second=({string})u->QueryProp(P_SECOND);
     if (stringp(second) && sizeof(second))
     {
-      if (!master()->find_userinfo(second))
+      if (!({int})master()->find_userinfo(second))
         second = "*ungueltig*";
       else
         second = capitalize(second);
@@ -535,7 +535,7 @@
 
     arg+=sprintf("%-11s %-17s %26s  %-15s\n",
                  capitalize(getuid(u)), second,
-                 dtime(u->QueryProp(P_LAST_LOGIN)),
+                 dtime(({int})u->QueryProp(P_LAST_LOGIN)),
                  _spieler_time2string(query_idle(u)));
   }
   arg+="==============================================================="
diff --git a/std/shells/magier/upd.c b/std/shells/magier/upd.c
index f48d73c..87a3030 100644
--- a/std/shells/magier/upd.c
+++ b/std/shells/magier/upd.c
@@ -39,7 +39,7 @@
 { 
     if ( query_once_interactive(obj) )
       { 
-        obj->move( inv_saver, NO_CHECK );
+        ({int})obj->move( inv_saver, NO_CHECK );
         return obj;
       }
     return 0;
@@ -140,7 +140,7 @@
   }
   if (!(flags&UPD_H))
   {
-    if(err = catch(obj->remove()))
+    if(err = catch(({int})obj->remove()))
       printf("upd: %s: remove() fehlgeschlagen. Aufruf von " +
              "destruct().\n",file);
   }
@@ -394,10 +394,10 @@
             items=transpose_array(items)[0];
             while (i--)
               if (member(items, inv[i])==-1)
-                    inv[i]->move(inv_saver,NO_CHECK);
+                    ({int})inv[i]->move(inv_saver,NO_CHECK);
           }
           else // In diesem Objekt sind keine Items gesetzt.
-            while (i--) inv[i]->move(inv_saver,NO_CHECK);
+            while (i--) ({int})inv[i]->move(inv_saver,NO_CHECK);
         }
       }
       else
@@ -453,7 +453,7 @@
                  _illegal_closure(pro[names[i], F_SET_METHOD]) )
               m_delete( pro, names[i] );
           
-          obj->SetProperties(pro);
+          ({mapping})obj->SetProperties(pro);
           msg += ", Properties gesetzt";
         }
         // Wenn kein UPD_C, wird ggf. das Ergebnis von Configure() wieder
@@ -476,7 +476,7 @@
         }
         if (env)
         {
-          if ( obj->move( env, NO_CHECK ) <= 0 )
+          if ( ({int})obj->move( env, NO_CHECK ) <= 0 )
             printf( "upd: /%O konnte nicht in /%O zurueckbewegt werden\n",
                     obj, env );
           else
@@ -484,7 +484,7 @@
         }
         if (i=sizeof(inv))
         {
-          while(i--) if (inv[i]) inv[i]->move(obj, NO_CHECK );
+          while(i--) if (inv[i]) ({int})inv[i]->move(obj, NO_CHECK );
           msg += ", Inhalt zurueckbewegt";
         }
       }
