diff --git a/room/death/death_room.c b/room/death/death_room.c
index cb46a23..c37dcbe 100644
--- a/room/death/death_room.c
+++ b/room/death/death_room.c
@@ -267,7 +267,7 @@
           break;
 
       case 'n': /*** Name, normal geschrieben ***/
-          TOS(done) += (string) (({string})pl->name(RAW));
+          TOS(done) += ({string})pl->name(RAW);
           break;
 
       case 'N': /*** Name, in Grossbuchstaben ***/
@@ -329,7 +329,7 @@
             while ( plobj = present("\ndeath_mark", pl) )
                 plobj->remove();
             
-            if ( !(prayroom = (string) pl->QueryPrayRoom()) )
+            if ( !(prayroom = ({string}) pl->QueryPrayRoom()) )
                 prayroom="/room/pray_room";
 
             pl->Set( P_TMP_MOVE_HOOK, 0 );
@@ -340,7 +340,7 @@
             pl->Set( P_NEXT_DEATH_SEQUENCE, 0 );
             pl->Set( P_POISON, 0, F_QUERY_METHOD );
             
-            if ( catch( res = (int) pl->move(prayroom, M_GO|M_SILENT|M_NOCHECK) )
+            if ( catch( res = ({int}) pl->move(prayroom, M_GO|M_SILENT|M_NOCHECK) )
                  || res < 1 )
                 pl->move( "/room/pray_room", M_GO|M_NOCHECK );
 
@@ -430,8 +430,8 @@
 
         if( !(killer_name = pre->QueryProp(P_KILL_NAME)) ){
             killer_name = pre->QueryProp(P_NAME);
-            kart = (int) pre->QueryProp(P_ARTICLE);
-            kgen = (int) pre->QueryProp(P_GENDER);
+            kart = ({int}) pre->QueryProp(P_ARTICLE);
+            kgen = ({int}) pre->QueryProp(P_GENDER);
         }
 
         killer_msg = pre->QueryProp(P_KILL_MSG);  
@@ -442,8 +442,8 @@
 
         if( !(killer_name = kill_liv->QueryProp(P_KILL_NAME)) ){
             killer_name = kill_liv->QueryProp(P_NAME);
-            kart = (int) kill_liv->QueryProp(P_ARTICLE);
-            kgen = (int) kill_liv->QueryProp(P_GENDER);
+            kart = ({int}) kill_liv->QueryProp(P_ARTICLE);
+            kgen = ({int}) kill_liv->QueryProp(P_GENDER);
         }
 
         killer_msg = kill_liv->QueryProp(P_KILL_MSG);
@@ -455,8 +455,8 @@
 
         if( !(killer_name = kill_ob->QueryProp(P_KILL_NAME)) ){
             killer_name = kill_ob->QueryProp(P_NAME);
-            kart = (int) kill_ob->QueryProp(P_ARTICLE);
-            kgen = (int) kill_ob->QueryProp(P_GENDER);
+            kart = ({int}) kill_ob->QueryProp(P_ARTICLE);
+            kgen = ({int}) kill_ob->QueryProp(P_GENDER);
         }
 
         killer_msg = kill_ob->QueryProp(P_KILL_MSG);
@@ -508,11 +508,11 @@
             killer_name = "";
             killer_msg = upperstring(getuid(pl)) + " VERSUCHTE, MIR ZU "
                 "ENTKOMMEN - JETZT HABE ICH WIEDER EXTRA-ARBEIT MIT "+
-                ((int) pl->QueryProp(P_GENDER) != 2 ? "IHM" : "IHR") +
+                (({int}) pl->QueryProp(P_GENDER) != 2 ? "IHM" : "IHR") +
                 " ...";
         }
         else if ( !killer_name ) {
-                if ( (string) pl->QueryProp(P_KILLER) == "gift" ){
+                if ( ({string}) pl->QueryProp(P_KILLER) == "gift" ){
                     killer_name = "Vergiftung";
                     kgen = FEMALE;
                     kart = 1;
@@ -541,7 +541,7 @@
         SetProp( P_GENDER,MALE );
 
         int magiertestie;
-        string testplayer = (string) pl->QueryProp(P_TESTPLAYER);
+        string testplayer = ({string}) pl->QueryProp(P_TESTPLAYER);
         if (sizeof(testplayer))
         {
           if (testplayer[<5..<1]!="Gilde")
@@ -568,7 +568,7 @@
                                 capitalize(getuid(pl)) + " umgebracht." );
         }
 
-        i = (int) pl->QueryProp(P_DEADS);
+        i = ({int}) pl->QueryProp(P_DEADS);
         if ( i && (getuid(pl) == "key" || i%100 == 0 || i%250 == 0) ){
             SetProp( P_NAME, "Tod" );
             CHMASTER->send( kanal, this_object(),
diff --git a/room/death/death_room_vc.c b/room/death/death_room_vc.c
index 9cfd529..d820ab6 100644
--- a/room/death/death_room_vc.c
+++ b/room/death/death_room_vc.c
@@ -81,7 +81,7 @@
       return;
   }
 
-  if ( !(prayroom = (string) this_player()->QueryPrayRoom()) )
+  if ( !(prayroom = ({string}) this_player()->QueryPrayRoom()) )
       prayroom = "/room/pray_room";
   
   if ( !({int})this_player()->QueryProp(P_GHOST) )
@@ -92,7 +92,7 @@
           if ( !({int})this_player()->QueryProp(P_INVIS) )
               tell_room( this_object(),
                          "Der Tod sagt: WAS WILLST DU HIER, "+
-                         upperstring((string) this_player()->name())+"?\n"+
+                         upperstring(({string})this_player()->name())+"?\n"+
                          "Der Tod sagt: DU BIST UNSTERBLICH, DU HAST HIER "
                          "NICHTS ZU SUCHEN!\n\n" );
 	}
@@ -101,7 +101,7 @@
           write("Der Tod sagt: WAS TUST DU HIER? DEINE ZEIT IST NOCH "
                 "NICHT REIF!\n\n");
           
-	  if ( catch(res = (int) this_player()->move( prayroom,M_GO|M_SILENT|M_NOCHECK ))
+	  if ( catch(res = ({int}) this_player()->move( prayroom,M_GO|M_SILENT|M_NOCHECK ))
                || res < 1 && environment(this_player()) == this_object() )
               this_player()->move( "/room/pray_room", M_GO|M_SILENT|M_NOCHECK );
 	}
diff --git a/secure/udp/man.c b/secure/udp/man.c
index 88c4b57..a2cd649 100644
--- a/secure/udp/man.c
+++ b/secure/udp/man.c
@@ -51,7 +51,7 @@
       tmp=({});
   }
   else
-    tmp=(string *)call_other(MAND,"locate",data[DATA],0);
+    tmp=({string *})call_other(MAND,"locate",data[DATA],0);
   pages=([]);
   index=sizeof(tmp);
   while(index--)
@@ -90,9 +90,9 @@
 
 string send_request(string mudname, string pagename)
 {
-  return (INETD->_send_udp(mudname,
-                             ([REQUEST: "man",
-                               DATA: pagename,
-                               SENDER: getuid(previous_object())]),1)||
-          sprintf(INETD_MAN_REQUESTED,pagename,mudname));
+  return (({string})INETD->_send_udp(
+        mudname, 
+        ([REQUEST: "man", DATA: pagename, SENDER: getuid(previous_object())]),
+        1) ||
+        sprintf(INETD_MAN_REQUESTED,pagename,mudname));
 }
diff --git a/std/armourHG.c b/std/armourHG.c
index 0aad15b..7cc499d 100644
--- a/std/armourHG.c
+++ b/std/armourHG.c
@@ -31,7 +31,7 @@
   }
   if (objectp(environment()) && objectp(environment(environment())))
     tell_room(environment(environment()),
-	capitalize((string)PL->name(WER)) + " setzt " + name(WEN,0) + 
+	capitalize(({string})PL->name(WER)) + " setzt " + name(WEN,0) + 
 	" auf.\n");
 }
 
@@ -40,7 +40,7 @@
     tell_object(worn_by,  "Du setzt " + name(WEN,1) + " ab.\n" );
   }
   tell_room(environment(worn_by), 
-	    (capitalize((string)worn_by->name(WER))) + " setzt " +
+	    (capitalize(({string})worn_by->name(WER))) + " setzt " +
 	    name(WEN,0) + " ab.\n", ({worn_by}));
 }
 
diff --git a/std/pile.c b/std/pile.c
index 7464f5a..2c1338e 100644
--- a/std/pile.c
+++ b/std/pile.c
@@ -23,7 +23,7 @@
 	}   
 	if( !clonep(this_object()) ) return;
 	::create();
-	von = (string)previous_object()->QueryProp(P_PILE_NAME);
+	von = ({string})previous_object()->QueryProp(P_PILE_NAME);
 	SetProp( P_PILE_NAME, "\nhaufen "+von );
 	spielerhaufen = (int)previous_object()->IsPlayerCorpse();
 
diff --git a/std/store.c b/std/store.c
index a1dc82a..4bd05f9 100644
--- a/std/store.c
+++ b/std/store.c
@@ -63,7 +63,7 @@
 static int _set_store_consume(int consum)     /* 1 <= consum <= 100 */
 {
   if (consum<1 || consum>100) return -1;
-  return (100-(int)Set(P_STORE_CONSUME, consum));
+  return (100-Set(P_STORE_CONSUME, consum));
 }
 
 static int _query_min_stock()
