diff --git a/secure/master/destruct.c b/secure/master/destruct.c
index 7e76a11..1b7c19a 100644
--- a/secure/master/destruct.c
+++ b/secure/master/destruct.c
@@ -23,7 +23,7 @@
     // wenn Bewegung buggt oder nicht funktioniert und ob noch existiert,
     // rekursiv zerstoeren.
     object oldenv=environment(ob);
-    if ( (catch(res=(int)ob->move("/room/void",M_TPORT|M_NOCHECK,0,"faellt");
+    if ( (catch(res=({int})ob->move("/room/void",M_TPORT|M_NOCHECK,0,"faellt");
            publish) || (ob && environment(ob) == oldenv) )
           && ob) {
             // Spieler speichern, dann erst Inventar entleeren, dann remove() und
@@ -53,11 +53,11 @@
 protected mixed prepare_destruct(object ob)
 {
   object old_env,env,item;
-  mixed res;
+  int|string res;
 
   // zuerst das notify_destruct() rufen und ggf. abbrechen, falls ob
   // privilegiert ist.
-  catch(res = (mixed)ob->NotifyDestruct(previous_object()); publish);
+  catch(res = ({int|string})ob->NotifyDestruct(previous_object()); publish);
   if (res &&
       (getuid(ob) == ROOTID ||
        (IS_ARCH(ob)) ||
diff --git a/secure/master/file_access.c b/secure/master/file_access.c
index 8b1bbd5..d050c58 100644
--- a/secure/master/file_access.c
+++ b/secure/master/file_access.c
@@ -123,9 +123,7 @@
 
 int access_rights(string *p_arr, string euid)
 {
-  int i;
-
-  i = sizeof(p_arr) - 2;
+  int i = sizeof(p_arr) - 2;
 
   while ( i >= 0 &&
           file_size( implode(p_arr[0..i], "/") + "/access_rights.c" ) < 0 )
@@ -134,7 +132,7 @@
   if ( i < 0 )
       return 0;
 
-  if ( !catch(i = (int)call_other( 
+  if ( !catch(i = ({int})call_other( 
           implode(p_arr[0..i], "/") + "/access_rights",
           "access_rights", euid,
           implode(p_arr[i+1..], "/") ); publish) )
diff --git a/secure/master/misc.c b/secure/master/misc.c
index 9bb274f..d7d8eb5 100644
--- a/secure/master/misc.c
+++ b/secure/master/misc.c
@@ -417,9 +417,8 @@
     mixed *ginfo;
 
     // Lese- und Schreibberechtigungen fuer die Rubrik 'polizei' setzen
-    call_other( "/secure/news", "???" );
-    ob = find_object("secure/news");
-    ginfo = ((mixed)ob->GetGroup("polizei"))[5..6];
+    ob = load_object("secure/news");
+    ginfo = (({mixed*})ob->GetGroup("polizei"))[5..6];
     ob->RemoveAllowed( "polizei", 0, ginfo[0], ginfo[1] );
     ob->AddAllowed( "polizei", 0, deputies, deputies );
     LoadDeputyFileList();
@@ -565,7 +564,7 @@
   if (heart_beat) heart_beat->_restart_beat();
 }
 
-int renew_player_object(mixed who)
+int renew_player_object(string|object who)
 {
   object newob;
   object *obs, *obs2;
@@ -615,8 +614,8 @@
   }
   efun::configure_object(who, OC_COMMANDS_ENABLED, 0);
   efun::set_this_player(0);
-  armours=(object *)who->QueryProp(P_ARMOURS);
-  weapon=(object)who->QueryProp(P_WEAPON);
+  armours=({object*})who->QueryProp(P_ARMOURS);
+  weapon=({object})who->QueryProp(P_WEAPON);
 
   if ( previous_object() && object_name(previous_object()) == "/secure/merlin" )
       send_channel_msg("Debug",
@@ -630,7 +629,7 @@
   ob_name=explode(object_name(newob),"#")[0];
   if (sizeof(ob_name)>11 && ob_name[0..11]=="/std/shells/")
     ob_name=ob_name[11..];
-  ob_name=ob_name+":"+getuid((object)who);
+  ob_name=ob_name+":"+getuid(who);
   if (active)
     exec(newob,who);
   if (active && (interactive(who)||!interactive(newob)))
diff --git a/secure/master/network.c b/secure/master/network.c
index 3e7d0b1..26767a5 100644
--- a/secure/master/network.c
+++ b/secure/master/network.c
@@ -72,7 +72,7 @@
     switch ( mess[1] ){
     case "wholist":
     case "who":
-        data = (string *)"/obj/werliste"->QueryWhoListe();
+        data = ({string*})"/obj/werliste"->QueryWhoListe();
         break;
 
     case "uptime":
@@ -112,7 +112,14 @@
   // gewesen. Davon geht auch aller hier gerufener Code aus. Daher wird jetzt
   // hier zentral die Bytesequenz als ASCII interpretiert und in string
   // gewandelt, der dann wie bislang auch verarbeitet wird.
-  string msg_text = to_text(message, "ASCII");
+  string msg_text;
+  if (catch(msg_text = to_text(message, "ASCII");publish))
+  {
+    msg_text = to_text(message, "ISO8859-1");
+    log_file("UDP_INVALID",sprintf(
+      "Nachricht von %s mit nicht-ASCII-Zeichen: %s\n",
+      host, msg_text));
+  }
 
   UDP_DEBUG(sprintf("%s %s:%d: %s\n",strftime(),host,port,msg_text));
 
diff --git a/secure/master/userinfo.c b/secure/master/userinfo.c
index 83fdbf1..9e6a06b 100644
--- a/secure/master/userinfo.c
+++ b/secure/master/userinfo.c
@@ -832,7 +832,7 @@
   if (!PO || PO!=TP || PO!=TI || real_name != getuid(PO) ||
       !find_userinfo(real_name))
     return 0;
-  mixed erstie=(mixed)this_interactive()->QueryProp(P_SECOND);
+  string|int erstie=({string|int})this_interactive()->QueryProp(P_SECOND);
   password = userlist[real_name,USER_PASSWORD];
   wlevel = get_wiz_level(real_name);
   if (!update_password(passwd, passwd)) return 0;
@@ -977,7 +977,7 @@
   // entfernt werden, das uebernimmt RemoveWizardFromUID().
   if (pointerp(userlist[player, USER_DOMAIN])) {
     string *removeduids=
-      ((string*)userlist[player, USER_DOMAIN] | domains) - domains;
+      (userlist[player, USER_DOMAIN] | domains) - domains;
     foreach(string uid: removeduids)
       RemoveWizardFromUID(uid, player);
   }
@@ -996,7 +996,7 @@
   // entfernt werden, das uebernimmt RemoveWizardFromUID().
   if (pointerp(userlist[player, USER_GUILD])) {
     string *removeduids=
-      ((string*)userlist[player, USER_GUILD] | guilds) - guilds;
+      (userlist[player, USER_GUILD] | guilds) - guilds;
     foreach(string uid: removeduids)
       RemoveWizardFromUID(uid, player);
   }
@@ -1070,7 +1070,7 @@
       object guild;
       catch(guild=load_object(GUILDDIR"/"+alias));
       if (objectp(guild) 
-          && (sizeof(spbook=(string)
+          && (sizeof(spbook=({string})
                  guild->QueryProp(P_GUILD_DEFAULT_SPELLBOOK)))
                 && spbook!=alias)
           uids += ({GUILDID"."+spbook});
