diff --git a/secure/awmaster.c b/secure/awmaster.c
index cccdb1d..f1ce7d4 100644
--- a/secure/awmaster.c
+++ b/secure/awmaster.c
@@ -98,17 +98,17 @@
     if (!ob || !objectp(ob))
         return 0;
     re=0;
-    if (((object)ob->QueryProp(P_WEAR_FUNC))==ob  ||
-        ((object)ob->QueryProp(P_WIELD_FUNC))==ob )
+    if ((({object})ob->QueryProp(P_WEAR_FUNC))==ob  ||
+        (({object})ob->QueryProp(P_WIELD_FUNC))==ob )
         re += AWF_PUTON;
-    if (((object)ob->QueryProp(P_REMOVE_FUNC))==ob  ||
-        ((object)ob->QueryProp(P_UNWIELD_FUNC))==ob )
+    if ((({object})ob->QueryProp(P_REMOVE_FUNC))==ob  ||
+        (({object})ob->QueryProp(P_UNWIELD_FUNC))==ob )
         re += AWF_PUTOFF;
-    if (((object)ob->QueryProp(P_DEFEND_FUNC))==ob ||
-        ((object)ob->QueryProp(P_HIT_FUNC))==ob    )
+    if ((({object})ob->QueryProp(P_DEFEND_FUNC))==ob ||
+        (({object})ob->QueryProp(P_HIT_FUNC))==ob    )
         re += AWF_BOOST;
     // ists nen Mapping und nicht leer?
-    if (mappingp(m=(mapping)ob->QueryProp(P_RESISTANCE_STRENGTHS))
+    if (mappingp(m=({mapping})ob->QueryProp(P_RESISTANCE_STRENGTHS))
         && sizeof(m))
         re += AWF_RESIST;
     return re;
@@ -127,17 +127,17 @@
     {
         armours[id][AWM_TIME]=time();
         flag=0;
-        if ((h=(int)ob->QueryProp(P_AC)) > armours[id][AWM_CLASS])
+        if ((h=({int})ob->QueryProp(P_AC)) > armours[id][AWM_CLASS])
         {
             armours[id][AWM_CLASS]=h;
             flag=1;
         }
-        if ((h=(int)ob->QueryProp(P_EFFECTIVE_AC)) > armours[id][AWM_EFF_CLASS])
+        if ((h=({int})ob->QueryProp(P_EFFECTIVE_AC)) > armours[id][AWM_EFF_CLASS])
         {
             armours[id][AWM_EFF_CLASS]=h;
             flag=1;
         }
-        if ((h=(int)ob->QueryProp(P_NR_HANDS)) < armours[id][AWM_HANDS])
+        if ((h=({int})ob->QueryProp(P_NR_HANDS)) < armours[id][AWM_HANDS])
         {
             armours[id][AWM_HANDS]=h;
             flag=1;
@@ -181,17 +181,17 @@
     {
         weapons[id][AWM_TIME] = time();
         flag=0;
-        if ((h=(int)ob->QueryProp(P_WC)) > weapons[id][AWM_CLASS])
+        if ((h=({int})ob->QueryProp(P_WC)) > weapons[id][AWM_CLASS])
         {
             weapons[id][AWM_CLASS]=h;
             flag=1;
         }
-        if ((h=(int)ob->QueryProp(P_EFFECTIVE_WC)) > weapons[id][AWM_EFF_CLASS])
+        if ((h=({int})ob->QueryProp(P_EFFECTIVE_WC)) > weapons[id][AWM_EFF_CLASS])
         {
             weapons[id][AWM_EFF_CLASS]=h;
             flag=1;
         }
-        if ((h=(int)ob->QueryProp(P_NR_HANDS)) < weapons[id][AWM_HANDS])
+        if ((h=({int})ob->QueryProp(P_NR_HANDS)) < weapons[id][AWM_HANDS])
         {
             weapons[id][AWM_HANDS]=h;
             flag=1;
diff --git a/secure/login.c b/secure/login.c
index 2da60cc..ab6ee16 100644
--- a/secure/login.c
+++ b/secure/login.c
@@ -260,7 +260,7 @@
 {
     string res;
 
-    res = (string)master()->QuerySBanished(query_ip_number(this_object()));
+    res = ({string})master()->QuerySBanished(query_ip_number(this_object()));
     if (!res)
     {
       // check connection from Tor exit node
@@ -411,7 +411,7 @@
 
         for ( i = sizeof(user = users() - ({ 0, this_object() })); i--; )
             if ( object_name(user[i])[0..12] == "/secure/login" &&
-                 ((string)user[i]->loginname()) == loginname ){
+                 (({string})user[i]->loginname()) == loginname ){
                 write( "Eine Anmeldung fuer diesen Namen laeuft bereits.\n" );
                 destruct( this_object() );
                 return;
@@ -434,7 +434,7 @@
         }
 
         
-        if ( (txt = (string)master()->QueryBanished(loginname)) ){
+        if ( (txt = ({string})master()->QueryBanished(loginname)) ){
             if ( txt != "Dieser Name ist gesperrt." )
                 txt = sprintf("Hoppla - dieser Name ist reserviert oder gesperrt "
                     "(\"gebanisht\")!\nGrund: %s\n",txt);
@@ -483,7 +483,7 @@
             return;
         }
 
-        if ( (int)master()->check_late_player(loginname) )
+        if ( ({int})master()->check_late_player(loginname) )
         {
             write( "Dieser Spieler hat uns leider fuer immer verlassen.\n" );
             loginname = "logon";
@@ -492,7 +492,7 @@
             return;
         }
 
-        if ( txt = (string)master()->QueryTBanished(loginname) ){
+        if ( txt = ({string})master()->QueryTBanished(loginname) ){
             write( txt );
             loginname = "logon";
             input_to( "logon2", INPUT_PROMPT,
@@ -826,7 +826,7 @@
     }
 
     if ( guestflag ){
-        if ( catch(guestflag = (int)GUESTMASTER->new_guest();publish) 
+        if ( catch(guestflag = ({int})GUESTMASTER->new_guest();publish) 
              || !guestflag ){
             write( "Derzeit ist kein Gastlogin moeglich!\n" );
             destruct( this_object() );
@@ -891,7 +891,7 @@
             /* Now reconnect to the old body */
             exec( ob, this_object() );
             ob->set_realip(realip);
-            if ( ((int)ob->QueryProp(P_LEVEL)) == -1 )
+            if ( (({int})ob->QueryProp(P_LEVEL)) == -1 )
                 ob->start_player( cap_name );
             else
                 ob->Reconnect( was_interactive );
diff --git a/secure/merlin.c b/secure/merlin.c
index 53b90c4..21a4333 100644
--- a/secure/merlin.c
+++ b/secure/merlin.c
@@ -919,7 +919,7 @@
     ((player->QueryProp(P_GENDER))==2?"in":""));
   write("Merlin ruft: "+capitalize(playername)+text);
   shout("Merlin ruft: "+capitalize(playername)+text);
-  PostSeher(capitalize(playername),(int)player->QueryProp(P_GENDER));
+  PostSeher(capitalize(playername),({int})player->QueryProp(P_GENDER));
   if(!catch(
         faq=clone_object("/d/seher/haeuser/special/seherfaqmobil") ;publish))
   {
diff --git a/secure/potionmaster.c b/secure/potionmaster.c
index cc80302..e2aa300 100644
--- a/secure/potionmaster.c
+++ b/secure/potionmaster.c
@@ -155,7 +155,7 @@
   // Pfad normalisieren - Expansion von Platzhaltern ist hier ziemlich
   // sinnloss und faellt daher weg (Neue ZTs in /players/ gibts eh nicht
   // mehr.)
-  room=(string)master()->make_path_absolute(room);
+  room=({string})master()->make_path_absolute(room);
 
   // Datei mit dem ZT-Spruch muss existieren.
   if ( file_size( TIPS(to_string(nextroom)+".zt") ) < 0 ) {
@@ -192,8 +192,8 @@
   // Pfad normalisieren - Expansion von Platzhaltern ist hier ziemlich
   // sinnloss und faellt daher weg (Neue ZTs in /players/ gibts eh nicht
   // mehr.)
-  old=(string)master()->make_path_absolute(old);
-  new=(string)master()->make_path_absolute(new);
+  old=({string})master()->make_path_absolute(old);
+  new=({string})master()->make_path_absolute(new);
 
   // Der neue Raum darf nicht bereits eingetragen sein, ...
   if ( member(reverse_table,new) )
diff --git a/secure/questmaster.c b/secure/questmaster.c
index 6a7d952..d6f2fb4 100644
--- a/secure/questmaster.c
+++ b/secure/questmaster.c
@@ -207,7 +207,7 @@
   for (i=sizeof(allowedobj)-1;i>=0;i--)
     {
       if (!stringp(allowedobj[i]) || allowedobj[i]=="") return -4;
-      allowedobj[i]=(string)master()->make_path_absolute(allowedobj[i]);
+      allowedobj[i]=({string})master()->make_path_absolute(allowedobj[i]);
     }
   if (!stringp(hint) || hint=="") return -5;
   if (difficulty<-1 || difficulty>100) return -6;
@@ -555,7 +555,7 @@
       || trigob->QueryProp(P_TESTPLAYER) || IS_LEARNER(trigob))
     return;
 
-  int lvl = (int)trigob->QueryProp(P_LEVEL);
+  int lvl = ({int})trigob->QueryProp(P_LEVEL);
 
   if (lvl <= 0)
     return;
@@ -690,7 +690,7 @@
   if (allowedobj[<2..] == ".c")
     allowedobj = allowedobj[0..<3];
   allowedobj = explode(allowedobj, "#")[0];
-  allowedobj = (string)master()->make_path_absolute(allowedobj);
+  allowedobj = ({string})master()->make_path_absolute(allowedobj);
   if (file_size(allowedobj+".c") <=0)
     return -3;
 
@@ -1043,7 +1043,7 @@
   if (new_mqob[<2..] == ".c")
     new_mqob = new_mqob[0..<3];
   new_mqob = explode(new_mqob, "#")[0];
-  new_mqob = (string)master()->make_path_absolute(new_mqob);
+  new_mqob = ({string})master()->make_path_absolute(new_mqob);
   if (file_size(new_mqob+".c") <= 0)
     return -3;
   // Wenn das neue Objekt schon eine MQ vergibt, kann es keine weitere
diff --git a/secure/scoremaster.c b/secure/scoremaster.c
index af40a93..6a08eff 100644
--- a/secure/scoremaster.c
+++ b/secure/scoremaster.c
@@ -397,7 +397,7 @@
   int score = by_num[bit,BYNUM_SCORE];
   
   foreach(string pl: unconfirmed_scores[bit]) {
-      string eks = (string)master()->query_ek(pl);
+      string eks = ({string})master()->query_ek(pl);
       eks = set_bit(eks, bit);
       master()->update_ek(pl, eks);
       write_file(SCOREAUTOLOG, sprintf(
diff --git a/secure/telnetneg.c b/secure/telnetneg.c
index 6f4b3e0..707bc7b 100644
--- a/secure/telnetneg.c
+++ b/secure/telnetneg.c
@@ -981,13 +981,13 @@
   Set( P_TTY_TYPE, 0 );  //avoid ANY mistakes... Wird unten neu gesetzt.
   // Daten aus dem Loginobjekt uebertragen. Das ist wichtig! (Dabei wird dann
   // auch der Status von der letzten Session ueberschrieben.)
-  TN = (mapping) previous_object()->query_telnet_neg();
+  TN = ({mapping}) previous_object()->query_telnet_neg();
   // bevor irgendwas anderes gemacht wird, werden erstmal die Standardhandler
   // gesetzt. Die sind naemlich in diesem Objekt jetzt erstmal kaputt, weil
   // sie im Loginobjekt gerufen werden.
   _bind_telneg_std_handlers();
   // dann restliche Daten aus dem Loginobjekt holen.
-  Terminals = (string *) previous_object()->query_terminals();
+  Terminals = ({string *}) previous_object()->query_terminals();
   Set( P_TTY_COLS, previous_object()->Query(P_TTY_COLS) );
   Set( P_TTY_ROWS, previous_object()->Query(P_TTY_ROWS) );
 
@@ -1117,8 +1117,8 @@
           l = 24;
       }
 
-      if ( ((int) Query(P_TTY_ROWS) != l) ||
-           ((int) Query(P_TTY_COLS) != c) ){
+      if ( (({int}) Query(P_TTY_ROWS) != l) ||
+           (({int}) Query(P_TTY_COLS) != c) ){
           Set( P_TTY_ROWS, l );
           Set( P_TTY_COLS, c );
 
diff --git a/secure/udp_mail.c b/secure/udp_mail.c
index 3203fb9..4bd8d74 100644
--- a/secure/udp_mail.c
+++ b/secure/udp_mail.c
@@ -200,7 +200,7 @@
 {
   string *match;
 
-  match=filter(m_indices((mapping)INETD->query("hosts")),
+  match=filter(m_indices(({mapping})INETD->query("hosts")),
 		#'match_mud_name,lower_case(hostname));
 
   return (sizeof(match)==1);
