diff --git a/std/container/items.c b/std/container/items.c
index d25aa0b..c27736f 100644
--- a/std/container/items.c
+++ b/std/container/items.c
@@ -100,14 +100,14 @@
   {
     for(i=sizeof(filename);i--;)
     {
-      filename[i] = (string)master()->make_path_absolute( filename[i] );
+      filename[i] = ({string})master()->make_path_absolute( filename[i] );
     }
       
     file=filename[random(sizeof(filename))];
   }
   else 
   {
-    file=filename=(string)master()->make_path_absolute(filename);
+    file=filename=({string})master()->make_path_absolute(filename);
   }
   
   if(props==1)
diff --git a/std/container/light.c b/std/container/light.c
index d0e2e4c..24a2bf4 100644
--- a/std/container/light.c
+++ b/std/container/light.c
@@ -115,7 +115,7 @@
    // etwas an einem container geaendert wird. Daher Auswertung jedes mal
    // neu aktualisieren.
    if (!environment()
-       || !(envlight=(int)environment()->QueryProp(P_INT_LIGHT)))
+       || !(envlight=({int})environment()->QueryProp(P_INT_LIGHT)))
       return Query(P_INT_LIGHT, F_VALUE);
    else {
       intlight = Query(P_INT_LIGHT, F_VALUE);
diff --git a/std/gilden_ob.c b/std/gilden_ob.c
index 51a4b88..7b0a565 100644
--- a/std/gilden_ob.c
+++ b/std/gilden_ob.c
@@ -42,7 +42,7 @@
 
   if (!pl && !(pl=this_player()))
     return 0;
-  if (!(plg=(string)pl->QueryProp(P_GUILD)))
+  if (!(plg=({string})pl->QueryProp(P_GUILD)))
     return 0;
   if (GuildName()!=plg) {
     _notify_fail("Du gehoerst dieser Gilde nicht an!\n");
@@ -72,7 +72,7 @@
   int lv;
   mapping lvs;
 
-  if (!(lv=(int)this_player()->QueryProp(P_GUILD_LEVEL))) return 1;
+  if (!(lv=({int})this_player()->QueryProp(P_GUILD_LEVEL))) return 1;
   if (!(lvs=QueryProp(P_GUILD_LEVELS))) return 0;
   return check_cond(lvs[lv+1]); // Bedingung fuer naechsten Level testen.
 }
@@ -83,9 +83,9 @@
 
 
   if (!pl ||
-      !(lv=(int)pl->QueryProp(P_GUILD_LEVEL)))
+      !(lv=({int})pl->QueryProp(P_GUILD_LEVEL)))
     return;
-  switch((int)pl->QueryProp(P_GENDER)) {
+  switch(({int})pl->QueryProp(P_GENDER)) {
   case MALE:
     ti=QueryProp(P_GUILD_MALE_TITLES);
     break;
@@ -132,7 +132,7 @@
     printf("Du kannst dieser Gilde nicht beitreten.\nGrund: %s",res);
     return -3;
   }
-  if (erg=(int)GUILDMASTER->beitreten()) {
+  if (erg=({int})GUILDMASTER->beitreten()) {
     if (erg<0)
       return erg;
     if (!(this_player()->QueryProp(P_GUILD_LEVEL)))
@@ -143,7 +143,7 @@
 }
 
 varargs int austreten(int loss) {
-    return (int)GUILDMASTER->austreten(loss);
+    return ({int})GUILDMASTER->austreten(loss);
 }
 
 int bei_oder_aus_treten(string str) {
@@ -240,7 +240,7 @@
   if (!(sfunc=ski[SI_SKILLFUNC]))
     sfunc=spell;
   spellbook=SPELLBOOK_DIR+spellbook;
-  if (!(ski2=(mapping)(spellbook->QuerySpell(sfunc))))
+  if (!(ski2=({mapping})(spellbook->QuerySpell(sfunc))))
     return 0;
   return AddSkillMappings(ski2,ski); // Reihenfolge wichtig!
   // Die Gilde kann Spelleigenschaften neu definieren!
@@ -260,14 +260,14 @@
     ski+=sinfo;
   spellbook=SPELLBOOK_DIR+spellbook;
   // printf("%O %O %O %O\n",spellbook,caster,spell,ski);
-  return (int)spellbook->UseSpell(caster,spell,ski);
+  return ({int})spellbook->UseSpell(caster,spell,ski);
 }
 
 static int
 InitialSkillAbility(mapping ski, object pl) {
   if (!ski || !pl) return 0;
   return (300*GetOffset(SI_SKILLLEARN,ski,pl)+
-          (200*(int)pl->QueryAttribute(A_INT)*
+          (200*({int})pl->QueryAttribute(A_INT)*
            GetFactor(SI_SKILLLEARN,ski,pl))/100);
 }
 
@@ -451,7 +451,7 @@
   else if (sum > MAX_ABILITY)
     sum = MAX_ABILITY;
   
-  return (int)pl->SetProp(P_GUILD_RATING, sum);
+  return ({int})pl->SetProp(P_GUILD_RATING, sum);
 }
 
 // Wird von /std/player/quest.c aufgerufen, wenn Quest geloest.
diff --git a/std/living/life.c b/std/living/life.c
index d868cdd..7feb2c2 100644
--- a/std/living/life.c
+++ b/std/living/life.c
@@ -17,7 +17,7 @@
 //  P_POISON        -- level of poison
 //  P_CORPSE        -- corpse-object
 //  P_DEAF          -- if living is deaf
-#pragma strong_types,save_types,rtt_checks
+#pragma strict_types,save_types,rtt_checks
 #pragma range_check
 #pragma no_clone
 
@@ -232,7 +232,7 @@
   if ( QueryProp(P_XP) && objectp(enemy) )
   {
     if ( !QueryProp(P_NO_XP) )
-      enemy->AddExp(dam*(int)QueryProp(P_TOTAL_WC)/10);
+      enemy->AddExp(dam*({int})QueryProp(P_TOTAL_WC)/10);
   }
 
   if (living(enemy)) {
@@ -516,7 +516,7 @@
   // NPC_Killed_By() rufen.
   if ( !query_once_interactive(ME) )
   {
-    object killer = ((object) QueryProp(P_KILLER)) || previous_object() ||
+    object killer = (({object}) QueryProp(P_KILLER)) || previous_object() ||
       this_interactive() || this_player();
 
     if ( killer && query_once_interactive(killer) )
diff --git a/std/living/moving.c b/std/living/moving.c
index b05262c..78a1cf5 100644
--- a/std/living/moving.c
+++ b/std/living/moving.c
@@ -3,7 +3,7 @@
 // living/moving.c -- moving of living objects
 //
 // $Id: moving.c 9448 2016-01-22 17:52:28Z Zesstra $
-#pragma strong_types
+#pragma strict_types
 #pragma save_types
 #pragma range_check
 #pragma no_clone
@@ -224,7 +224,7 @@
                 || ((file_size(fn+".c")>0 ||
                     (file_size(vc=implode(explode(fn,"/")[0..<2],"/")+
                           "/virtual_compiler.c")>0 &&
-                    !catch(tmp=(int)call_other(vc,"QueryValidObject",fn);
+                    !catch(tmp=({int})call_other(vc,"QueryValidObject",fn);
                            publish) && tmp>0)) &&
                     !catch(load_object(fn);publish) )) &&
                   (!interactive(ME) || !fn->QueryProp(P_NO_PLAYERS) || 
@@ -301,13 +301,13 @@
             string *mout;
             if ( !textout ){
                 if ( method & M_TPORT )
-                    textout = (string) QueryProp(P_MMSGOUT) ||
-                        (string) QueryProp(P_MSGOUT);
+                    textout = ({string}) QueryProp(P_MMSGOUT) ||
+                        ({string}) QueryProp(P_MSGOUT);
                 else 
-                    textout = (mout = explode( (string)
+                    textout = (mout = explode( ({string})
                                                 QueryProp(P_MSGOUT) || "",
                                                       "#" ))[0]
-                         || (string)QueryProp(P_MMSGOUT);
+                         || ({string})QueryProp(P_MMSGOUT);
             }
 
             if ( !sizeof(direction) )
@@ -378,9 +378,9 @@
     if ( !(method & M_SILENT) ) {
       if ( !textin ) {        
         if ( method & M_TPORT )
-              textin = (string) QueryProp(P_MMSGIN);
+              textin = ({string}) QueryProp(P_MMSGIN);
         else
-              textin = (string) QueryProp(P_MSGIN);
+              textin = ({string}) QueryProp(P_MSGIN);
       }
             
       inv = all_inventory(environment()) - ({ this_object() });
diff --git a/std/player/restrictions.c b/std/player/restrictions.c
index dc00415..4b79c2b 100644
--- a/std/player/restrictions.c
+++ b/std/player/restrictions.c
@@ -54,23 +54,18 @@
 
 // **** local property methods
 static int _query_max_weight() {
-  int str,val;
-  mixed ski;
-  
   if (QueryProp(P_GHOST) && !IS_WIZARD(ME))
     return 0;
-  str=QueryAttribute(A_STR);
-  ski = UseSkill(SK_CARRY, ([SI_SKILLARG : str ]));
+  int str=QueryAttribute(A_STR);
+  int ski = UseSkill(SK_CARRY, ([SI_SKILLARG : str ]));
 
-  if (!intp(ski))
-    ski = 0;
-  
+  int val;
   if (str<0) {
-    val=9200+str*160+(int)ski;
+    val=9200+str*160+ski;
     if (val<3000) val=3000;
     return val;
   }
-  val = 9200+str*800+(int)ski;
+  val = 9200+str*800+ski;
   if (val<3000)
     val = 3000;
   return val;
diff --git a/std/player/skills.c b/std/player/skills.c
index fa60d1d..cdac73e 100644
--- a/std/player/skills.c
+++ b/std/player/skills.c
@@ -7,7 +7,7 @@
 //
 // 2003-01-20: Nun Zooks Baustelle
 //
-#pragma strong_types
+#pragma strict_types
 #pragma save_types
 #pragma range_check
 #pragma no_clone
@@ -45,7 +45,7 @@
 
   // Wir holen die Gilden aus dem Gildenmaster 
   foreach(string guild:
-      (string *)call_other(GUILDMASTER,"QueryProp",P_VALID_GUILDS))
+      ({string *})call_other(GUILDMASTER,"QueryProp",P_VALID_GUILDS))
   {
     if(catch(act=call_other("/gilden/"+guild,"QueryProp",
         P_GUILD_DEACTIVATE_SKILLS); publish ))
@@ -299,8 +299,8 @@
               //wt_aus=call_other(waf_aus,"QueryProp",P_WEAPON_TYPE);
               //if (wt_azu==wt_aus)
               if (objectp(waf_aus) && objectp(waf_azu) &&
-                  (string)waf_aus->QueryProp(P_WEAPON_TYPE)
-                     == (string)waf_azu->QueryProp(P_WEAPON_TYPE)) 
+                  ({string})waf_aus->QueryProp(P_WEAPON_TYPE)
+                     == ({string})waf_azu->QueryProp(P_WEAPON_TYPE)) 
                 {
                 // Bonus von bis zu 5 Punkten
                 //log_file("humni/log_azubi",
diff --git a/std/room/description.c b/std/room/description.c
index b09fdfa..9431d31 100644
--- a/std/room/description.c
+++ b/std/room/description.c
@@ -4,7 +4,7 @@
 //
 // $Id: description.c 9468 2016-02-19 21:07:04Z Gloinson $
 
-#pragma strong_types
+#pragma strict_types
 #pragma save_types
 #pragma range_check
 #pragma no_clone
@@ -109,7 +109,7 @@
   
   // ggf. Tueren hinzufuegen.
   if (QueryProp(P_DOOR_INFOS)) {
-    string tmp=((string)call_other(DOOR_MASTER,"look_doors"));
+    string tmp=(({string})call_other(DOOR_MASTER,"look_doors"));
     if (stringp(tmp) && sizeof(tmp))
         descr += tmp;
   }
@@ -120,7 +120,7 @@
     descr += GetExits(viewer) || "";
 
   // Viewpoint (Objekt oder Objektarray) sind nicht sichtbar
-  inv_descr = (string) make_invlist(viewer, all_inventory(ME) 
+  inv_descr = ({string}) make_invlist(viewer, all_inventory(ME) 
 		  - (pointerp(viewpoint)?viewpoint:({viewpoint})) ,flags);
 
   if ( inv_descr != "" )
@@ -164,7 +164,7 @@
     descr += GetExits(viewer) || "";
 
   // Viewpoint (Objekt oder Objektarray) sind nicht sichtbar
-  inv_descr = (string) make_invlist( viewer, all_inventory(ME) 
+  inv_descr = ({string}) make_invlist( viewer, all_inventory(ME) 
 		  - (pointerp(viewpoint)?viewpoint:({viewpoint})) );
 
   if ( inv_descr != "" )
diff --git a/std/room/doors.c b/std/room/doors.c
index a9bab7d..10e1cca 100644
--- a/std/room/doors.c
+++ b/std/room/doors.c
@@ -86,12 +86,12 @@
   string *cmds;
   int i,j;
 
-  if (!pointerp(info=(mixed *)QueryProp(P_DOOR_INFOS))) return;
+  if (!pointerp(info=({mixed *})QueryProp(P_DOOR_INFOS))) return;
   add_action("oeffnen","oeffne");
   add_action("schliessen","schliesse");
   add_action("schliessen","schliess");
   for (i=sizeof(info)-1;i>=0;i--) {
-    cmds=(string *)(info[i][D_CMDS]);
+    cmds=({string *})(info[i][D_CMDS]);
     for (j=sizeof(cmds)-1;j>=0;j--)
       add_action("go_door",cmds[j]);
     // Befehle IMMER anfuegen, gechecked wird sowieso erst beim Durchgehen.
@@ -108,14 +108,14 @@
 {
   if (!str || !QueryProp(P_DOOR_INFOS))
     return 0;
-  return (int) call_other(DOOR_MASTER,"oeffnen",str);
+  return ({int}) call_other(DOOR_MASTER,"oeffnen",str);
 }
 
 int schliessen (string str)
 {
   if (!str || !QueryProp(P_DOOR_INFOS))
     return 0;
-  return (int) call_other(DOOR_MASTER,"schliessen",str);
+  return ({int}) call_other(DOOR_MASTER,"schliessen",str);
 }
 
 varargs int
diff --git a/std/room/gilde.c b/std/room/gilde.c
index 3086fe1..737dfc2 100644
--- a/std/room/gilde.c
+++ b/std/room/gilde.c
@@ -3,7 +3,7 @@
 // gilde.c -- Standardgilde
 //
 // $Id: gilde.c 8388 2013-02-16 17:28:31Z Zesstra $
-#pragma strong_types
+#pragma strict_types
 #pragma save_types
 #pragma range_check
 #pragma no_clone
@@ -237,9 +237,9 @@
   if (lev<0) lev=0;
 
   if (pl->QueryProp(P_GENDER) == MALE)
-    titles=(mapping)QueryProp(P_GUILD_MALE_TITLES);
+    titles=QueryProp(P_GUILD_MALE_TITLES);
   else
-    titles=(mapping)QueryProp(P_GUILD_FEMALE_TITLES);
+    titles=QueryProp(P_GUILD_FEMALE_TITLES);
 
   if (!mappingp(titles) || !sizeof(titles)) return 0;
 
@@ -280,7 +280,7 @@
   // Falls die konkrete Gilde des Spielern irgedwas mit dem Titel in
   // ABhaengigkeit des Spielerlevels tun will. Ausnahmsweise per call_other,
   // die Funktion kommt eigentlich aus /std/gilden_ob.c.
-  string gname=(string)pl->QueryProp(P_GUILD);
+  string gname=({string})pl->QueryProp(P_GUILD);
   (GUILD_DIR+"/"+gname)->adjust_title(pl);
 
   return 1;
diff --git a/std/shells/magier/admin.c b/std/shells/magier/admin.c
index 7e86dc9..64f3168 100644
--- a/std/shells/magier/admin.c
+++ b/std/shells/magier/admin.c
@@ -45,7 +45,7 @@
   if (member(({"commands","email","hosts","inetd","list","mud_port","time",
          "version"}),type)==-1)
     write("TYPEs: commands, email, hosts, inetd, list, mud_port, time, version\n");
-  if (ret=(string)INETD->_send_udp(mud,([SENDER:getuid(), REQUEST:QUERY, DATA:type]),1))
+  if (ret=({string})INETD->_send_udp(mud,([SENDER:getuid(), REQUEST:QUERY, DATA:type]),1))
     write(ret);
   else
     write("Anfrage abgeschickt.\n");
@@ -189,7 +189,7 @@
     }
     if ( arg=="*" )
     {
-        More((string)call_other("/secure/sinmaster","Dump",1));
+        More(({string})call_other("/secure/sinmaster","Dump",1));
         return 1;
     }
 
@@ -267,7 +267,7 @@
     _notify_fail( "Syntax: mbanish <name> [<grund>]\n" );
 
     if ( !str || !stringp(str) || !sizeof(str) ){
-        if ( !mappingp(list = (mapping)"/secure/merlin"->MBanishList()) ||
+        if ( !mappingp(list = ({mapping})"/secure/merlin"->MBanishList()) ||
              !(i = sizeof(list)) ){
             write( "Momentan ist kein Spieler auf der mbanish-Liste.\n" );
             return 1;
@@ -357,14 +357,21 @@
 {
     string ip;
     int days;
-    mapping sites;
 
     // Mindestens L26 fuer diesen Befehl
     if ( secure_level() <= DOMAINMEMBER_LVL )
         return 0;
 
-    if ( !str || !stringp(str) || !sizeof(str) ){
-        if ( !sizeof(sites = (mapping)MASTER->SiteBanish( 0, 0 )) ){
+    if ( !str || !stringp(str) || !sizeof(str) )
+    {
+        mapping|int sites = ({mapping|int})MASTER->SiteBanish( 0, 0 );
+        if ( !mappingp(sites) )
+        {
+            write("Du darfst (noch) keine gesperrten Adressen abfragen!\n");
+            return 1;
+        }
+        if ( !sizeof(sites) )
+        {
             write( "Es sind zur Zeit keine Adressen gesperrt!\n" );
             return 1;
         }
@@ -396,8 +403,11 @@
 
 //    _notify_fail( "Ungueltiges Adress-Format!\n" );
 
-    if ( !days ){
-        int res=(int)MASTER->SiteBanish(ip, 0);
+    if ( !days )
+    {
+        // Eigentlich ist SiteBanish() int|mapping. Bei diesem Aufruf kommt
+        // jedoch nur int zurueck. Fall sichs das mal aendert, soll es buggen.
+        int res=({int})MASTER->SiteBanish(ip, 0);
         if ( res == 1 )
              printf( "Die Adresse '%s' ist jetzt nicht mehr gesperrt.\n",
                      ip );
@@ -407,17 +417,23 @@
         else
             printf( "Du darfst nur eigene Sperrungen wieder aufheben!\n" );
     }
-    else {
-        int res;
+    else
+    {
         if ( days != 1 && !IS_DEPUTY(secure_euid()) )
+        {
             write( "Du darfst Adressen nur fuer einen Tag sperren!\n" );
-        else if ( (res = (int)MASTER->SiteBanish(ip, days)) == 1 )
+            return 1;
+        }
+        // Eigentlich ist SiteBanish() int|mapping. Bei diesem Aufruf kommt
+        // jedoch nur int zurueck. Fall sichs das mal aendert, soll es buggen.
+        int res = ({int})MASTER->SiteBanish(ip, days);
+        if ( res  == 1 )
              printf( "Die Adresse '%s' ist jetzt fuer %s gesperrt.\n",
                      ip, (days > 1 ? sprintf( "%d Tage", days ) :
                       (days > 0 ? "einen Tag" : "immer")) );
         else if ( res == -1 )
             write( "Du darfst " + (LORD_SECURITY ? "255 IP-Adressen"
-                                   : "nur einzelne IP-Adressen") + " sperren!\n" );
+                             : "nur einzelne IP-Adressen") + " sperren!\n" );
         else if ( res == -2 )
             write( "Du hast schon genug Adressen gesperrt!\n" );
     }
diff --git a/std/shells/magier/fileedit.c b/std/shells/magier/fileedit.c
index b558585..b0bfeb0 100644
--- a/std/shells/magier/fileedit.c
+++ b/std/shells/magier/fileedit.c
@@ -95,8 +95,8 @@
 static mixed cp_file(mixed filedata,int move,int flags, mixed *do_delete)
 {
   string source,dest;
-  source=(string)filedata[FULLNAME];
-  dest=(string)filedata[DESTNAME];
+  source=filedata[FULLNAME];
+  dest=filedata[DESTNAME];
   if (source==dest) return ERROR(SAME_FILE,source,RET_FAIL);
   if (!MAY_READ(source)) return ERROR(NO_READ,source,RET_JUMP);
   if (!MAY_WRITE(dest)) return ERROR(NO_WRITE,dest,RET_JUMP);
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index f96d6e3..ca0aa20 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -161,7 +161,7 @@
   string group="";
   if (flags&LS_U)
   {
-    creator=(string)call_other(master(),"creator_file", full);
+    creator=({string})call_other(master(),"creator_file", full);
     switch(creator)
     {
       case ROOTID: creator="root"; break;
@@ -445,10 +445,10 @@
           !regexp(({""}),args[0]))
         return printf("man: Ungueltiger Ausdruck in Maske.\n"),1;
     }
-    tmp=(string *)call_other(MAND,"locate",args[0],flags&(MAN_M|MAN_R));
+    tmp=({string *})call_other(MAND,"locate",args[0],flags&(MAN_M|MAN_R));
   }
 
-  oldman_result=(mapping)0;
+  oldman_result=0;
   if(i && sizeof(tmp)>2 && sizeof(tmp)>=(i<<1))
     tmp=tmp[((i<<1)-2)..((i<<1)-1)];
   switch(sizeof(tmp))
@@ -500,7 +500,7 @@
   if (flags==-1||sizeof(args)!=2)
     return USAGE("rman <hilfeseite> <mudname>");
   write("man: " +
-        (string)call_other(UDP_CMD_DIR+"man","send_request",args[1],args[0]));
+        ({string})call_other(UDP_CMD_DIR+"man","send_request",args[1],args[0]));
   return 1;
 }
 
diff --git a/std/shells/magier/magier_ext.c b/std/shells/magier/magier_ext.c
index 9660015..365ac63 100644
--- a/std/shells/magier/magier_ext.c
+++ b/std/shells/magier/magier_ext.c
@@ -356,7 +356,7 @@
       printf("Du hoerst auf zu snoopen.\n");
     // evtl. irgendetwas loggen ... sollte eigentlich nicht passieren.
     }
-    snoopee=(object)0;
+    snoopee=0;
     return 1;
   }
   SetProp(P_SNOOPFLAGS,flags); // FUNKTIONIERT NUR, WENN magier.h und
diff --git a/std/shells/magier/objects.c b/std/shells/magier/objects.c
index 1968de6..1a51ba5 100644
--- a/std/shells/magier/objects.c
+++ b/std/shells/magier/objects.c
@@ -119,7 +119,7 @@
   else
     ob=args[0];
   cmdline=capitalize(to_string(ob->name(WER)));
-  flags=(int)ob->QueryProp(P_PLURAL); // Missbrauch von flags :o)
+  flags=({int})ob->QueryProp(P_PLURAL); // Missbrauch von flags :o)
   if (query_verb()=="destruct")
   {
     if (!ob->remove())
diff --git a/std/shells/magier/parsing.c b/std/shells/magier/parsing.c
index d719550..a38210a 100644
--- a/std/shells/magier/parsing.c
+++ b/std/shells/magier/parsing.c
@@ -33,7 +33,7 @@
 // Rueckgabe: Dateiname
 //
 
-static mixed to_filename(string str)
+static string to_filename(string str)
 {
   string *tmp,p,newfn;
   int i;
@@ -88,7 +88,7 @@
   }
   if (build_fn)
   {
-    if (str=(string)to_filename(str)) line+=({ str });
+    if (str=to_filename(str)) line+=({ str });
   } 
   else
     line+= ({ str });
diff --git a/std/shells/magier/upd.c b/std/shells/magier/upd.c
index cd86d33..f48d73c 100644
--- a/std/shells/magier/upd.c
+++ b/std/shells/magier/upd.c
@@ -370,7 +370,7 @@
       // mittels Configure()
       if ( ! (flags & UPD_C ) )
       {
-        catch(restore_config=(mixed)call_resolved(&configdata,obj,
+        catch(restore_config=call_resolved(&configdata,obj,
                                                   "Configure",0);
               publish);
         // Wenn UPD_CONF gesetzt wird, _muss_ das Objekt ein oeffentliches
@@ -388,7 +388,7 @@
           mixed items;
           // Herausbekommen, ob hier Items existieren, die per AddItem 
           // erzeugt werden. Die duerfen nicht gesichert werden.
-          items=(mixed)obj->QueryProp(P_ITEMS); // mixed, da array of arrays
+          items=({mixed})obj->QueryProp(P_ITEMS); // mixed, da array of arrays
           if (pointerp(items)&&sizeof(items))
           {
             items=transpose_array(items)[0];
@@ -407,7 +407,7 @@
       env = environment(obj);
       if ( flags & UPD_C )
       {
-        pro = (mapping)(obj->QueryProperties());
+        pro = ({mapping})(obj->QueryProperties());
       }
     }
     else inv = ({});
@@ -461,7 +461,7 @@
         else if (restore_config)
         {
           int conf_res;
-          if (!catch(conf_res=(int)obj->Configure(configdata); publish)
+          if (!catch(conf_res=({int})obj->Configure(configdata); publish)
               && conf_res == 1)
           {
             msg += ", (re-)konfiguriert";
diff --git a/std/thing/commands.c b/std/thing/commands.c
index 5bfa386..c3eddf6 100644
--- a/std/thing/commands.c
+++ b/std/thing/commands.c
@@ -277,7 +277,7 @@
   // ggf. id in das ID-Mapping eintragen
   if(cmdid) {
    mixed *tmp;
-   j=sizeof((string*)added_cmds[str, CMDIDX_FUN]);
+   j=sizeof(added_cmds[str, CMDIDX_FUN]);
    tmp=added_cmds[str, CMDIDX_ID]||allocate(j);
    if(sizeof(tmp)<j) tmp+=allocate(j-sizeof(tmp));
    tmp[<1]=cmdid;
@@ -355,7 +355,8 @@
       cachecl[j..j] = allocate(0);
       if(ids) {
        ids[j..j] = allocate(0);
-       if(!sizeof(ids-allocate(1))) ids=(mixed*)0;
+       if(!sizeof(ids-allocate(1)))
+         ids=0;
       }
       ret++;
      }
@@ -378,7 +379,7 @@
 static int _execute(mixed fun, string str, mixed *parsed) {
   switch(typeof(fun)) {
     case T_CLOSURE:
-      return ((int)funcall(fun,str,&parsed));
+      return (({int})funcall(fun,str,&parsed));
     case T_STRING:
       int ret;
       if(!call_resolved(&ret, this_object(), fun, str, &parsed))
@@ -488,7 +489,7 @@
        else if(check_present&CHECK_ID && id(tmpstr))	// ID ?
         matchstr=this_object();
        else if((check_present&CHECK_PUTGET) &&	// PUT_GET_??? ?
-               (tmpobj=(object*)
+               (tmpobj=({object*})
                   this_player()->find_obs(tmpstr,
                       ([CHECK_PUTGETNONE:PUT_GET_NONE,
                         CHECK_PUTGETDROP:PUT_GET_TAKE,
@@ -669,7 +670,7 @@
 }
 
 static mapping _set_commands(mapping commands) {
-  if(!commands) added_cmds=(mapping)0;
+  if(!commands) added_cmds=0;
   else if(mappingp(commands)) {
     if(widthof(commands) != CMDS_WIDTH)
       raise_error("SetProp(P_COMMANDS): corrupt commands-mapping.\n");
diff --git a/std/thing/description.c b/std/thing/description.c
index 15d6afc..b2326da 100644
--- a/std/thing/description.c
+++ b/std/thing/description.c
@@ -88,7 +88,7 @@
   Set( P_CLONER, NOSETMETHOD|SECURED, F_MODE_AS );
 
   // Gibt es FPs ?
-  explore = (mixed *)EPMASTER->QueryExplore();
+  explore = ({<string*|int>*})EPMASTER->QueryExplore();
 
   return;
 }
@@ -121,7 +121,7 @@
 // Danach sollte der EPMASTER neu nach den Details befragt werden.
 visible void __reload_explore()
 {
-  explore = (mixed *)EPMASTER->QueryExplore();
+  explore = ({<string*|int>*})EPMASTER->QueryExplore();
   return;
 }
 
@@ -359,7 +359,7 @@
       case WEM:
       case WEN:
         if ( art && last=='e'&&QueryProp(P_GENDER) == MALE)
-          sh = (string)sh + "n";
+          sh = sh + "n";
         break;
 
       case WESSEN:
@@ -370,11 +370,11 @@
             case 'x':
             case 's':
             case 'z':
-              sh = (string)sh + "'";
+              sh = sh + "'";
               break;
 
           default:
-            sh = (string)sh + "s";
+            sh = sh + "s";
           }
         } 
         else
@@ -383,11 +383,11 @@
           {
             default:
               if (QueryProp(P_GENDER)!=FEMALE)
-                sh=(string)sh+"s";
+                sh=sh+"s";
               break;
             case 'e':
               if (QueryProp(P_GENDER)==MALE)
-                sh=(string)sh+"n";
+                sh=sh+"n";
             case 'x':
             case 's':
             case 'z':
@@ -398,7 +398,7 @@
   } /* pointerp(sh) */
 
   // RAW? Dann mal zurueck
-  if (demon == RAW) return (string)sh;
+  if (demon == RAW) return sh;
 
   // Selber Artikel suchen ...
   if (demon==2)
@@ -653,11 +653,11 @@
   if (!stringp(detail))
   {
     if (closurep(detail))
-      detail = (string)funcall(detail,key);
+      detail = ({string})funcall(detail,key);
     else if (mappingp(detail))
-      detail = (string)(detail[race]||detail[0]);
+      detail = detail[race] || detail[0];
     else if (pointerp(detail))
-      detail = (string)(detail[random(sizeof(detail))]);
+      detail = detail[random(sizeof(detail))];
   }
 
   // FP vergeben (so vorhanden ;-) )
@@ -722,7 +722,7 @@
   if (stringp(str)) 
       str = ({ str });
   // Aliase aufloesen und implizite Klassen addieren.
-  str = (string*)CLASSDB->AddImplicitClasses(str);
+  str = ({string*})CLASSDB->AddImplicitClasses(str);
   // Summe mit alten Klassen bilden und Doppelte eliminieren
   str = str + Query(P_CLASS, F_VALUE);
   Set( P_CLASS, m_indices(mkmapping(str)), F_VALUE);
@@ -737,7 +737,7 @@
       str = ({ str });
 
   // Aliase aufloesen und implizite Klassen addieren.
-  str = (string*)CLASSDB->AddImplicitClasses(str);
+  str = ({string*})CLASSDB->AddImplicitClasses(str);
 
   // Und alle - inklusive impliziter Klassen - entfernen
   // TODO: Pruefen, ob dies die richtige Entscheidung ist.
@@ -833,14 +833,14 @@
 // Anteil der Gruppe am Objekt
 public int QueryMaterialGroup( string matgroup )
 {
-  return (int)call_other( MATERIALDB, "MaterialGroup",
+  return ({int})call_other( MATERIALDB, "MaterialGroup",
                           QueryProp(P_MATERIAL), matgroup );
 }
 
 
 public string MaterialList( int casus, mixed idinf )
 {
-  return (string)call_other( MATERIALDB, "ConvMaterialList",
+  return ({string})call_other( MATERIALDB, "ConvMaterialList",
                              QueryProp(P_MATERIAL), casus, idinf );
 }
 
diff --git a/std/thing/moving.c b/std/thing/moving.c
index 978fe97..8845c10 100644
--- a/std/thing/moving.c
+++ b/std/thing/moving.c
@@ -41,11 +41,11 @@
       return ME_CANT_BE_TAKEN;
 
   // Gewicht ermitteln
-  if ( !(tmp = (int)QueryProp(P_TOTAL_WEIGHT)) )
-      tmp = (int)QueryProp(P_WEIGHT);
+  if ( !(tmp = ({int})QueryProp(P_TOTAL_WEIGHT)) )
+      tmp = ({int})QueryProp(P_WEIGHT);
         
   // Ist das Objekt nicht zu schwer?
-  if ( (tmp = (int)dest->MayAddWeight(tmp)) < 0) {
+  if ( (tmp = ({int})dest->MayAddWeight(tmp)) < 0) {
       if ( tmp == -2 ) return ME_TOO_HEAVY_FOR_ENV;
       return ME_TOO_HEAVY;
   }
@@ -87,7 +87,7 @@
   // Bewegung in Para-Welt-Raeume?
   // tmp ist die Ziel-Parallelweltnummer
   if (!environment()||!living(environment())||
-      !intp(tmp =(int)environment()->Query(P_PARA)))
+      !intp(tmp =({int})environment()->Query(P_PARA)))
     tmp=0;
     
   // Wenn das Objekt von einem in der Parawelt befindlichen Spieler
@@ -110,7 +110,7 @@
           if ( (find_object(fn) || ((file_size(fn+".c")>0||
                   (file_size(vc=implode(explode(fn,"/")[0..<2],"/")+
                   "/virtual_compiler.c")>0 &&
-                  !catch(tmp=(int)call_other(vc,"QueryValidObject",fn);
+                  !catch(tmp=({int})call_other(vc,"QueryValidObject",fn);
                     publish) && tmp>0)) &&
                   !catch(load_object( fn );publish))) &&
               (!fn->QueryProp(P_NO_PLAYERS) || QueryProp(P_TESTPLAYER)) )
diff --git a/std/unit.c b/std/unit.c
index 415c71e..3024714 100644
--- a/std/unit.c
+++ b/std/unit.c
@@ -109,12 +109,13 @@
 
 static int _query_weight()
 {
-  mixed gpu, req;
-  if ((req=QueryProp(U_REQ))<1) return 0;
-  gpu=Query(U_GPU);
-  if (intp(gpu)) return req * gpu;
-  if (!pointerp(gpu)) return 0;
-  return MAX(1,(req*gpu[0])/gpu[1]);
+  int req = QueryProp(U_REQ);
+  if (req<1)
+    return 0;
+  int|int* gpu=Query(U_GPU, F_VALUE);
+  if (pointerp(gpu))
+    return MAX(1,(req*gpu[0])/gpu[1]);
+  return req * gpu;
 }
 
 static int _set_weight(int num) {
@@ -125,19 +126,18 @@
 
 static int _query_total_weight()
 {
-  mixed gpu, amount;
-  if ((amount=Query(P_AMOUNT))<1) return 0;
-  gpu=Query(U_GPU);
-  if (intp(gpu))
-    return amount*(int)gpu;
-  if (!pointerp(gpu)) return 0;
-  return MAX(1,(amount*gpu[0])/gpu[1]);
+  int amount = Query(P_AMOUNT);
+  if (amount<1)
+    return 0;
+  int|int* gpu=Query(U_GPU, F_VALUE);
+  if (pointerp(gpu))
+    return MAX(1,(amount*gpu[0])/gpu[1]);
+  return amount*gpu;
 }
 
 static int _query_plural()
 {
-  int i;
-  i=QueryProp(U_REQ); // wichtig _nicht_ QueryProp
+  int i = QueryProp(U_REQ);
   return (i<=1 ? 0 : i);
 }
 
@@ -145,8 +145,8 @@
 static string|string* _query_name()
 {
   if (QueryProp(U_REQ)==1)
-    return "%s%s"+((string *)Query(P_NAME))[0];
-  return "%d %s"+((string *)Query(P_NAME))[1];
+    return "%s%s"+Query(P_NAME)[0];
+  return "%d %s"+Query(P_NAME)[1];
 }
 
 // gibt string | string* zurueck.
diff --git a/std/user_filter.c b/std/user_filter.c
index 111dfcb..edc3deb 100644
--- a/std/user_filter.c
+++ b/std/user_filter.c
@@ -3,8 +3,7 @@
 // user_filter.c -- Hilfsmodul fuer die wer-Liste
 //
 // $Id: user_filter.c 8755 2014-04-26 13:13:40Z Zesstra $
-#pragma strict_types
-#pragma save_types
+#pragma save_types,rtt_checks
 #pragma no_clone
 #pragma range_check
 
@@ -37,7 +36,7 @@
 
 static int is_prop_set( object ob, mixed x )
 {
-  return (mixed)ob->QueryProp(x) != 0;
+  return ob->QueryProp(x) != 0;
 }
 
 static int is_second( object ob, mixed x )
@@ -56,13 +55,14 @@
 
   // nur Magier koennen eine andere Gilde per P_VISIBLE_GUILD in werlisten
   // etc. vortaeuschen.
-  if (IS_LEARNER(ob)) {
+  if (IS_LEARNER(ob))
+  {
     // Querymethode von P_VISIBLE_GUILD fragt ggf. auch P_GUILD ab.
-    if ( !stringp(str = (string)ob->QueryProp(P_VISIBLE_GUILD)) )
-      return 0;
+    str = ob->QueryProp(P_VISIBLE_GUILD);
   }
-  else {
-      str = (string)ob->QueryProp(P_GUILD);
+  else
+  {
+      str = ob->QueryProp(P_GUILD);
   }
   if (!stringp(str)) return 0; // login hat z.B. keine Gilde.
   return strstr(lower_case(str),x) == 0;
@@ -70,12 +70,12 @@
 
 static int is_in_team( object ob, mixed x )
 {
-  object team;
-  
-  if ( !objectp(team = (object)ob->QueryProp(P_TEAM)) )
+  object team = ob->QueryProp(P_TEAM);
+
+  if ( !objectp(team) )
     return x == "";
-  
-  return lower_case((string)team->Name()) == x;
+
+  return lower_case(team->Name()) == x;
 }
 
 static int is_name_in( object ob, mixed x )
@@ -91,17 +91,17 @@
 
 static int is_region_member( object ob, mixed x )
 {
-  return (int)master()->domain_member( geteuid(ob), x );
+  return master()->domain_member( geteuid(ob), x );
 }
 
 static int is_region_master( object ob, mixed x )
 {
-  return (int)master()->domain_master( geteuid(ob), x );
+  return master()->domain_master( geteuid(ob), x );
 }
 
 static int is_guild_master(object ob, mixed x)
 {
-  return (int)master()->guild_master(geteuid(ob), x);
+  return master()->guild_master(geteuid(ob), x);
 }
 
 static int is_gender( object ob, mixed x )
@@ -131,7 +131,7 @@
 
 static int is_ghost( object ob)
 {
-  return (int)ob->QueryProp(P_GHOST);
+  return ob->QueryProp(P_GHOST);
 }
 
 static int uses_ssl(object ob)
@@ -146,7 +146,7 @@
 }
 
 protected int is_active_guide(object ob) {
-    int cic=(int)ob->QueryProp(P_NEWBIE_GUIDE);
+    int cic=({int})ob->QueryProp(P_NEWBIE_GUIDE);
     if (!intp(cic) || cic <= 0)
       return 0;
     else if (cic < 60)
@@ -389,16 +389,15 @@
     case "erwartete":
       if ( i < (sz-1) && words[i+1] == "wegen" ) {
         i++;
-
-        if ( !mappingp(x = (mixed)this_player()->QueryProp(P_WAITFOR_REASON)) ||
-             !pointerp(x = m_indices(x)) )
+        x = this_player()->QueryProp(P_WAITFOR_REASON);
+        if ( !mappingp(x) )
           break;
-        
+        x=m_indices(x);
         zwi = filter( orig, "is_name_in", ME, x );
         break;
       }
-      
-      if ( !pointerp(x = (mixed)this_player()->QueryProp(P_WAITFOR)) )
+      x = this_player()->QueryProp(P_WAITFOR);
+      if ( !pointerp(x) )
         break;
       zwi = filter( orig, "is_name_in", ME, x );
       break;
diff --git a/std/util/pager.c b/std/util/pager.c
index 54980c3..f3219fa 100644
--- a/std/util/pager.c
+++ b/std/util/pager.c
@@ -4,7 +4,7 @@
 //
 // $Id: pager.c 8755 2014-04-26 13:13:40Z Zesstra $
 
-#pragma strong_types
+#pragma strict_types
 #pragma save_types
 #pragma range_check
 #pragma no_clone
@@ -124,9 +124,9 @@
       pinfo[MAXL] += sizeof(explode(tmp, "\n"))+1;
   pinfo[PAGE] = PAGELENGTH;
   if(!pinfo[PAGE]) pinfo[FLAG] |= E_CAT;
-  if ((this_interactive() && (j=(int)this_interactive()->QueryProp(P_MORE_FLAGS))) ||
+  if ((this_interactive() && (j=({int})this_interactive()->QueryProp(P_MORE_FLAGS))) ||
       (this_player() && interactive(this_player()) &&
-       (j=(int)this_player()->QueryProp(P_MORE_FLAGS))))
+       (j=({int})this_player()->QueryProp(P_MORE_FLAGS))))
     pinfo[FLAG] |= j;
   
   pinfo[CURL] = 1;
diff --git a/std/util/path.c b/std/util/path.c
index 193a865..00ceaa6 100644
--- a/std/util/path.c
+++ b/std/util/path.c
@@ -40,7 +40,7 @@
       break;
     default:
       if(user && PL && getuid(PL) == user
-          && (cwd=(string)PL->QueryProp(P_CURRENTDIR)))
+          && (cwd=({string})PL->QueryProp(P_CURRENTDIR)))
         path=cwd + "/" + path;
   }
   return path;
