diff --git a/std/container/description.c b/std/container/description.c
index 1de834e..cf56803 100644
--- a/std/container/description.c
+++ b/std/container/description.c
@@ -47,16 +47,16 @@
   
   if ( (!(flags & 4) && (flags & 1))) {
     //wenn Magier und Magierinfos angehaengt werden sollen:
-    tmp = capitalize(obj->short()||"")[0..<2]
+    tmp = capitalize(({string})obj->short()||"")[0..<2]
         + " ["+object_name(obj)+"]";
   }
-  else if (obj->QueryProp(P_INVIS)) {
+  else if (({int})obj->QueryProp(P_INVIS)) {
     //keine Ausgabe bzw. leerer String, wird dann von collect rausgeschmissen
     tmp="";
   }
   else {
     //Spieler, Magier ohne P_WANTS_TO_LEARN etc.
-    tmp = capitalize(obj->short()||"")[0..<2];
+    tmp = capitalize(({string})obj->short()||"")[0..<2];
   }
   //wenn wizard und 'dont collect equal objects': id ist object_name()
   if(flags & 3 || living(obj)) 
@@ -90,7 +90,7 @@
   int iswiz;
   mixed objs, info;
 
-  iswiz = IS_LEARNER( viewer ) && viewer->QueryProp(P_WANTS_TO_LEARN);
+  iswiz = IS_LEARNER( viewer ) && ({int})viewer->QueryProp(P_WANTS_TO_LEARN);
   objs = ({}); info = ({});
   map(inv, #'stringenize/*'*/, iswiz | (flags & 2) | (flags & 4), &objs, &info);
   if(flags & 1) return info;
diff --git a/std/container/items.c b/std/container/items.c
index c27736f..d581425 100644
--- a/std/container/items.c
+++ b/std/container/items.c
@@ -44,7 +44,7 @@
   Set(P_ITEMS,({}));
   Set(P_ITEMS,SECURED,F_MODE_AS);
   
-  OBJECTD->QueryObject();  // querying general objects
+  ({void})OBJECTD->QueryObject();  // querying general objects
 }
 
 protected void create_super()
@@ -121,7 +121,7 @@
   
   if(objectp(ob))
   {
-    ob->move(ME,M_NOCHECK|M_NO_ATTACK);
+    ({int})ob->move(ME,M_NOCHECK|M_NO_ATTACK);
     // mit Absicht keine Pruefung aufs Move, wenns nicht geht, solls 2s
     // spaeter auf der Ebene buggen, weil praktisch niemand im create() das
     // Ergebnis vom AddItem() prueft.
@@ -160,14 +160,14 @@
 
     foreach(object o : inv)
     {
-      o->remove(1);
+      ({int})o->remove(1);
       if(objectp(o))
       {
         destruct(o);
       }
     }
 
-    ob->remove(1);
+    ({int})ob->remove(1);
 
     if(ob)
     {
@@ -212,12 +212,12 @@
   {
     foreach(string fn: &filename)
     {
-      fn=master()->make_path_absolute(fn);
+      fn=({string})master()->make_path_absolute(fn);
     }
   }
   else
   {
-    filename=master()->make_path_absolute( filename );
+    filename=({string})master()->make_path_absolute( filename );
   }
   
   SetProp(P_ITEMS,filter(items, #'ri_filter/*'*/,filename));
@@ -248,7 +248,7 @@
       if(objectp(item[RITEM_OBJECT]) &&
         environment(item[RITEM_OBJECT])!=ME)
       {
-        item[RITEM_OBJECT]->move(ME,M_GO|M_NO_ATTACK);
+        ({int})item[RITEM_OBJECT]->move(ME,M_GO|M_NO_ATTACK);
         break;
       }
       
@@ -272,7 +272,7 @@
         ob=clone_object(file);
       }
 
-      ob->move(ME,M_NOCHECK|M_NO_ATTACK);
+      ({int})ob->move(ME,M_NOCHECK|M_NO_ATTACK);
       break;
   }
   
diff --git a/std/container/light.c b/std/container/light.c
index 24a2bf4..2b34de8 100644
--- a/std/container/light.c
+++ b/std/container/light.c
@@ -78,7 +78,7 @@
 
   // eigenes P_LIGHT und P_TOTAL_LIGHT der enthaltenen Objekte verrechnen
   int intlight = add_light_sources(
-      all_inventory()->QueryProp(P_TOTAL_LIGHT) + ({QueryProp(P_LIGHT)}));
+      ({int*})all_inventory()->QueryProp(P_TOTAL_LIGHT) + ({QueryProp(P_LIGHT)}));
   // P_INT_LIGHT (gerundet) abspeichern
   Set(P_INT_LIGHT, intlight, F_VALUE);
 
diff --git a/std/container/restrictions.c b/std/container/restrictions.c
index 30b8df1..68329df 100644
--- a/std/container/restrictions.c
+++ b/std/container/restrictions.c
@@ -111,7 +111,7 @@
 public int MayAddObject( object ob )
 {
     if (ob) {
-        if ( !ob->short() )
+        if ( !({string})ob->short() )
             return 1; // invis-Objekte duerfen immer
         
         if ( ob == ME || environment(ob) == ME)
@@ -162,7 +162,7 @@
         // Container kann Gewicht nicht mehr aufnehmen
         return -1;
     
-    if ( aw && ENV()->MayAddWeight(aw) < 0 )
+    if ( aw && ({int})ENV()->MayAddWeight(aw) < 0 )
         // Umgebung des Containers kann Gewicht nicht mehr aufnehmen
         return -2;
     
@@ -290,7 +290,7 @@
            case "eigenes":
            case "meins":
                if (objectp(haufen=present("\nhaufen "+
-                     this_player()->name(WEM)))) {
+                     ({string})this_player()->name(WEM)))) {
                   obs = all_inventory(haufen);
                }
                // kein break;, Fall-through!
@@ -384,7 +384,7 @@
            case "meins":
            case "alles eigene":
                if (objectp(haufen=present("\nhaufen "+
-                       this_player()->name(WEM)))) {
+                       ({string})this_player()->name(WEM)))) {
                   obs = all_inventory(haufen);
                }
                // kein break;, Fall-through!
@@ -449,7 +449,7 @@
                // bestimmten ID (im Gegensatz zu "alles", "jede waffe" etc.)
                // soll ein Item gefunden werden, auch wenn die Short 0 ist
                // (unsichtbar, aber interagierbar).
-               else if ( ob && ob != ME && !ob->QueryProp(P_INVIS) )
+               else if ( ob && ob != ME && !({int})ob->QueryProp(P_INVIS) )
                    erg += ({ ob });   //Normalfall: einzelne ID
 
                continue;
diff --git a/std/container/vitems.c b/std/container/vitems.c
index ad86d52..ca50dc2 100644
--- a/std/container/vitems.c
+++ b/std/container/vitems.c
@@ -57,10 +57,10 @@
     // Es wird auch zerstoert, wenn das genommene Objekt gerade im Raum
     // rumliegt (weil Spieler es hat fallen lassen etc.)
     if (vitems[key, VI_OBJECT])
-        vitems[key, VI_OBJECT]->remove(1);
+        ({int})vitems[key, VI_OBJECT]->remove(1);
     if (vitems[key, VI_LAST_OBJ]
         && environment(vitems[key, VI_LAST_OBJ]) == this_object())
-        vitems[key, VI_LAST_OBJ]->remove(1);
+        ({int})vitems[key, VI_LAST_OBJ]->remove(1);
 
     m_delete(vitems, key);
     SetProp(P_VITEMS, vitems);
@@ -123,39 +123,39 @@
     switch(k)
     {
       case P_READ_DETAILS:
-        if (reset_prop) ob->RemoveReadDetail(0);
+        if (reset_prop) ({void})ob->RemoveReadDetail(0);
         walk_mapping(v, "AddReadDetail", ob);
         break;
       case P_DETAILS:
-        if (reset_prop) ob->RemoveDetail(0);
+        if (reset_prop) ({void})ob->RemoveDetail(0);
         walk_mapping(v, "AddDetail", ob);
         break;
       case P_SMELLS:
-        if (reset_prop) ob->RemoveSmells(0);
+        if (reset_prop) ({void})ob->RemoveSmells(0);
         walk_mapping(v, "AddSmells", ob);
         break;
       case P_SOUNDS:
-        if (reset_prop) ob->RemoveSounds(0);
+        if (reset_prop) ({void})ob->RemoveSounds(0);
         walk_mapping(v, "AddSounds", ob);
         break;
       case P_TOUCH_DETAILS:
-        if (reset_prop) ob->RemoveTouchDetail(0);
+        if (reset_prop) ({void})ob->RemoveTouchDetail(0);
         walk_mapping(v, "AddTouchDetail", ob);
         break;
       case P_IDS:
-        if (reset_prop) ob->SetProp(P_IDS, v);
-        else ob->AddId(v);
+        if (reset_prop) ({string*})ob->SetProp(P_IDS, v);
+        else ({void})ob->AddId(v);
       case P_CLASS:
-        if (reset_prop) ob->SetProp(P_CLASS, v);
-        else ob->AddClass(v);
+        if (reset_prop) ({string*})ob->SetProp(P_CLASS, v);
+        else ({void})ob->AddClass(v);
       case P_ADJECTIVES:
-        if (reset_prop) ob->SetProp(P_ADJECTIVES, v);
-        else ob->AddAdjective(v);
+        if (reset_prop) ({string*})ob->SetProp(P_ADJECTIVES, v);
+        else ({void})ob->AddAdjective(v);
         break;
 
       // Alle anderen Properties stumpf setzen.
       default:
-        ob->SetProp(k, v);
+        ({mixed})ob->SetProp(k, v);
     }
   }
 }
@@ -188,13 +188,13 @@
     if (path)
     {
       obj=clone_object(path);
-      obj->SetAutoObject(1);
+      ({int})obj->SetAutoObject(1);
       if (mappingp(props))
         configure_object(obj, props);
       // Schatten erzeugen, welcher die Beschreibung des Objekts im Container nach
       // den Props in shadow_props abaendert.
       sh = clone_object("/obj/vitem_shadow");
-      sh->set_shadow(obj, shadow_props);
+      ({void})sh->set_shadow(obj, shadow_props);
     }
     else
     {
@@ -227,7 +227,7 @@
 {
   foreach(object o : GetVItemClones())
   {
-    if (o->id(complex_desc))
+    if (({int})o->id(complex_desc))
       return o;
   }
   return 0;
@@ -297,7 +297,7 @@
         // wird es immer refresht...
         // Zu beachten: es soll auch nicht hier in diesem Container rumliegen
         // nach dem Heimbewegen, also zerstoeren!
-        last_obj->remove(1);
+        ({int})last_obj->remove(1);
         // Fallthrough
       case VI_REFRESH_REMOVE:
         // wenn nicht mehr als vItem hier ist (d.h. auch wenn es hier im Raum
