diff --git a/std/player/base.c b/std/player/base.c
index 89684e6..42e6177 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -325,7 +325,7 @@
   int   m;
 
   if (pointerp(h=RaceDefault(P_HANDS)) && sizeof(h)>1)
-    m=(int)h[1];
+    m=h[1];
   else
     m=30;
   if((h=Query(P_HANDS))[1] > m && !IS_LEARNER(this_object())) {
@@ -1009,7 +1009,7 @@
 int self_delete2(string str)
 {
   int ret;
-  ret=(int)"secure/master"->delete_player(str, getuid(PL));
+  ret=({int})"secure/master"->delete_player(str, getuid(PL));
   if (!ret)
   {
     write("Das hat nicht hingehauen (Jof sei Dank ....)\n");
@@ -1459,7 +1459,7 @@
   else
   {
     // Eintragung in die Fehler-DB
-    string hashkey = (string)ERRORD->LogReportedError(err);
+    string hashkey = ({string})ERRORD->LogReportedError(err);
     ReceiveMsg(sprintf(
           "Ein kleiner Fehlerteufel hat D%s an %s unter der ID %s "
           "notiert.",
@@ -1594,7 +1594,7 @@
       printf("Du bist nicht ansprechbar: %O\n",ind);
   }
 
-  if(sizeof(enem1=((mixed)QueryEnemies())[0])) {
+  if(sizeof(enem1=(QueryEnemies())[0])) {
     enem2=({});
     inv=all_inventory(environment(ME));
     foreach(object en: enem1) {
@@ -2861,7 +2861,7 @@
   carried_value=0;
   foreach(object ob: deep_inventory(ME)) {
     if (!ob->QueryProp(P_AUTOLOADOBJ))
-      carried_value+=((value=(int)ob->QueryProp(P_VALUE)) > 1000 ? 1000 : value);
+      carried_value+=((value=({int})ob->QueryProp(P_VALUE)) > 1000 ? 1000 : value);
   }
   SetProp(P_CARRIED_VALUE, carried_value);
 }
diff --git a/std/player/comm.c b/std/player/comm.c
index c96314f..29d6f12 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -6,7 +6,7 @@
 #pragma strong_types
 #pragma save_types
 #pragma no_clone
-#pragma pedantic
+//#pragma pedantic
 //#pragma range_check
 
 inherit "/std/living/comm";
@@ -391,7 +391,7 @@
   if (!objectp(ob))
     return msg;
 
-  return (string)ob->permutate_string(msg)||"";
+  return ({string})ob->permutate_string(msg)||"";
 }
 
 // neue nachricht an den Kobold anhaengen
@@ -505,7 +505,7 @@
 
 private int comm_beep() {
   if (QueryProp(P_VISUALBELL)) return 0; // kein ton
-  int beep_interval=(int)QueryProp(P_MESSAGE_BEEP);
+  int beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
   if (!beep_interval || ((time()-last_beep_time) < beep_interval)) return 0;
   last_beep_time=time();
   return 1;
@@ -962,7 +962,7 @@
   }
 
   _notify("Senderwiederholung bei Mitteilungen: "+ 
-          ((int)QueryProp(P_MESSAGE_PREPEND) ?  "aus" : "ein")+".",
+          (({int})QueryProp(P_MESSAGE_PREPEND) ?  "aus" : "ein")+".",
           query_verb());
 
   return 1;
@@ -1111,7 +1111,7 @@
   {
     if ( QueryProp(P_QP) )
     {
-      if (ret=(string)INETD->_send_udp(xname[1],
+      if (ret=({string})INETD->_send_udp(xname[1],
                                     ([ REQUEST:   "tell",
                                        RECIPIENT: xname[0],
                                        SENDER:    getuid(ME),
@@ -1173,7 +1173,7 @@
   // oder irgendwas anderes an den Absender ausgeben...
   if (!visflag && interactive(ob))
       _notify("Kein solcher Spieler!",MA_TELL);
-  else if (away = (string)ob->QueryProp(P_AWAY))
+  else if (away = ({string})ob->QueryProp(P_AWAY))
       ReceiveMsg( break_string( away, 78, capitalize(it)
                            + " ist gerade nicht da: ", BS_INDENT_ONCE ),
           MT_NOTIFICATION|MSG_DONT_WRAP|MSG_DONT_IGNORE,
