diff --git a/secure/simul_efun/spare/comm.c b/secure/simul_efun/spare/comm.c
index ba6b2d5..4ef060f 100644
--- a/secure/simul_efun/spare/comm.c
+++ b/secure/simul_efun/spare/comm.c
@@ -30,8 +30,6 @@
 
 static int _shout_filter( object ob, string pat )
 {
-    string *ignore;
-
     if ( !environment(ob) )
        return 0;
 
diff --git a/secure/simul_efun/spare/debug_info.c b/secure/simul_efun/spare/debug_info.c
index 465e54c..860032f 100644
--- a/secure/simul_efun/spare/debug_info.c
+++ b/secure/simul_efun/spare/debug_info.c
@@ -114,7 +114,6 @@
             }
             else
                 return efun::objects(args[0], args[1]);
-            break;
         }
 
         case DINFO_MALLOC:
@@ -195,7 +194,6 @@
 
                 default:
                     raise_error(sprintf("Bad argument '%s' to debug_info(DINFO_DUMP).\n", args[0]));
-                    return 0;
             }
             // set object for valid_write() master apply...
             set_this_object(previous_object());
diff --git a/secure/simul_efun/spare/livings.c b/secure/simul_efun/spare/livings.c
index a2ec3cd..d8cb7ad 100644
--- a/secure/simul_efun/spare/livings.c
+++ b/secure/simul_efun/spare/livings.c
@@ -128,10 +128,9 @@
 
 object find_netdead(string uuid)
 {
-  int i;
   string uid;
   // Wenn sscanf() 2 liefert, ist uuid auch ne uuid.
-  int is_uuid = sscanf(uuid, "%s_%d", uid, i) == 2;
+  int is_uuid = sscanf(uuid, "%s_%~d", uid) == 2;
   if (!is_uuid)
     uid = uuid;
  
@@ -306,7 +305,6 @@
 // * regelmaessig Listen von Ballast befreien
 private void clean_name_living_m(string *keys, int left, int num)
 {
-  int i, j;
   mixed a;
 
   while (left && num--)
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index f4b69c0..99c9e49 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -1011,7 +1011,6 @@
   mixed save;
   mapping properties;
   int i;
-  closure cl;
 
   if (sizeof(name) < 1)
   {
@@ -1094,6 +1093,7 @@
 {
   if (objectp(ob))
     return funcall(bind_lambda(#'efun::configure_object,ob), ob, OC_HEART_BEAT, flag);
+  return 0;
 }
 
 // * Magierlevelgruppen ermitteln
@@ -1275,7 +1275,7 @@
 
 nomask varargs void call_out( varargs mixed *args )
 {
-    mixed tmp, *call_outs;
+    mixed *call_outs;
 
     // Bei >600 Callouts alle Objekte killen, die mehr als 30 Callouts laufen
     // haben.
@@ -1826,8 +1826,7 @@
 // erhoeht das Lichtlevel eines Objekts um i
 // result: das Lichtlevel innerhalb des Objekts
 {
-    object ob, *inv;
-    int lall, light, dark, tmp;
+    object ob;
 
     if (!(ob=previous_object())) return 0; // ohne das gehts nicht.
 
@@ -1898,9 +1897,8 @@
       int ob_nr = parts[i][<1]-'1';
       if (ob_nr<0 || ob_nr>=t) {
         set_this_object(previous_object());
-        raise_error(sprintf("replace_personal: using wrong object index %d\n",
-                    ob_nr));
-        return implode(parts, "");
+        raise_error(sprintf(
+              "replace_personal: using wrong object index %d\n", ob_nr));
       }
 
       // casus kann man schon hier entscheiden
