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,
diff --git a/sys/player/fao.h b/sys/player/fao.h
index c773cf1..8341a84 100644
--- a/sys/player/fao.h
+++ b/sys/player/fao.h
@@ -28,11 +28,11 @@
 
 // hilfreiche makros
 #define FAO_HAS_TITLE_GIFT(x)   (x!=0 && query_once_interactive(x) \
-    && ((int)x->QueryProp(P_FAO)&FAO_TITLE)!=0)
+    && (({int})x->QueryProp(P_FAO)&FAO_TITLE)!=0)
 #define FAO_HAS_PORTALS1_GIFT(x)  (x!=0 && query_once_interactive(x) \
-    && ((int)x->QueryProp(P_FAO)&FAO_PORTALS1)!=0)
+    && (({int})x->QueryProp(P_FAO)&FAO_PORTALS1)!=0)
 #define FAO_HAS_PORTALS2_GIFT(x)  (x!=0 && query_once_interactive(x) \
-    && ((int)x->QueryProp(P_FAO)&FAO_PORTALS2)!=0)
+    && (({int})x->QueryProp(P_FAO)&FAO_PORTALS2)!=0)
 #define FAO_HAS_PORTALS_GIFT(x)   (FAO_HAS_PORTALS1_GIFT(x) || FAO_HAS_PORTALS2_GIFT(x))
 #define FAO_MAY_USE_PORTAL(x,p)   (intp(p) && ((FAO_HAS_PORTALS1_GIFT(x) && \
         member(FAO_PORTALS1_LIST,p)!=-1 )||(FAO_HAS_PORTALS2_GIFT(x) && \
