diff --git a/obj/tools/MGtool/toolcmd.c b/obj/tools/MGtool/toolcmd.c
index 59bfbcb..ad6b3aa 100644
--- a/obj/tools/MGtool/toolcmd.c
+++ b/obj/tools/MGtool/toolcmd.c
@@ -60,7 +60,7 @@
     {
       obj=find_object(LPC_FILE);
       ru1=rusage();
-      error=catch(res=obj->eval(callobj, cloner, ENV(cloner)));
+      error=catch(res=({mixed})obj->eval(callobj, cloner, ENV(cloner)));
       ru2=rusage();
       if(error)
 	W("Error: "+error[1..]);
@@ -183,7 +183,7 @@
   TK("Xcd: str: "+(str?str:"(NULL)"));
   if(!str)
   {
-    if(!(path=cloner->QueryProp("start_home")))
+    if(!(path=({string})cloner->QueryProp("start_home")))
       path="/";
   }
   else if((dest=XFindObj(str,1)))
@@ -233,7 +233,7 @@
     m_add(variable, "clone", obj);
     if(!MoveObj(obj, ENV(cloner), TRUE))
       WDLN("Cannot move object into this room");
-    else if(!obj->QueryNoGet())
+    else if(!({mixed})obj->QueryNoGet())
     {
       if(!MoveObj(obj, cloner, TRUE))
 	WDLN("Cannot move object into your inventory");
@@ -265,7 +265,7 @@
     variable["clone"] = obj;
     if(!MoveObj(obj, ENV(cloner), TRUE))
       WDLN("Cannot move object into this room");
-    else if(!obj->QueryNoGet())
+    else if(!({mixed})obj->QueryNoGet())
     {
       if(!MoveObj(obj, cloner, TRUE))
 	WDLN("Cannot move object into your inventory");
@@ -487,7 +487,7 @@
   else
   {
     ru1=rusage();
-    error=catch(res=obj->eval(cloner, ENV(cloner)));
+    error=catch(res=({mixed})obj->eval(cloner, ENV(cloner)));
     ru2=rusage();
     if(error)
       W("Error: "+error[1..]);
@@ -928,7 +928,7 @@
     return FALSE;
   PIPE_DELETE(pipe_of);
   if(!(pipe_out&&pipe_of))
-    WLN(who->name(WESSEN)+" Inventory:"+(short?" (short)":""));
+    WLN(({string})who->name(WESSEN)+" Inventory:"+(short?" (short)":""));
   if(!short)
     if(pipe_out&&pipe_of)
       FORALL(item, who) PrintShort(ARIGHT(++i+". ", 4, " "), item, pipe_of);
@@ -952,7 +952,7 @@
   if(!(daemon=load_object(LAG_O_DAEMON)))
     lag=({-1.0,-1.0,-1.0});
   else
-    lag=daemon->read_lag_data();
+    lag=({float*})daemon->read_lag_data();
   lags="Letzte 60 min: ";
   if(lag[0]>=0.0)
   {
@@ -998,7 +998,7 @@
     cloner->AddIntLight(addlight);
   }
   WDLN("Current light levels: "+TOOL_NAME+"="+xlight+", room="+
-       ENV(cloner)->QueryIntLight());
+       ({int})ENV(cloner)->QueryIntLight());
   return TRUE;
 }
 
@@ -1102,7 +1102,7 @@
   else
   {
     ru1=rusage();
-    error=catch(res=obj->eval(cloner, ENV(cloner)));
+    error=catch(res=({mixed})obj->eval(cloner, ENV(cloner)));
     ru2=rusage();
     if(error)
       W("Error: "+error[1..]);
@@ -1266,12 +1266,12 @@
     opt="";
   else
     opt=implode(strs[0..s-3], " ");
-  if(!(dir="/"+MASTER->valid_read(strs[s-2], geteuid(),
+  if(!(dir="/"+({int})MASTER->valid_read(strs[s-2], geteuid(),
 					  "get_dir", ME))) {
     WDLN("No permission to open directory for reading");
     return TRUE;
   }
-  if(!(file="/"+MASTER->valid_write(strs[s-1], geteuid(),
+  if(!(file="/"+({int})MASTER->valid_write(strs[s-1], geteuid(),
 					    "write_file", ME))) {
     WDLN("No permission to open script file for writing");
     return TRUE;
@@ -1380,7 +1380,7 @@
   }
   else if(obj=XFindObj(str))
   {
-    if(xpr=obj->__query_xprof_data__())
+    if(xpr=({mixed})obj->__query_xprof_data__())
     {
       funcs=m_indices(xpr);
       data=m_values(xpr);
