diff --git a/std/living/attributes.c b/std/living/attributes.c
index e1d88fc..eef675c 100644
--- a/std/living/attributes.c
+++ b/std/living/attributes.c
@@ -148,7 +148,7 @@
 
 nomask protected void attribute_hb()
 {
-  int now,i,k,update,outdated;
+  int now,i,k,outdated;
   string* keys;
   mapping tonotify;
 	
@@ -433,9 +433,6 @@
 }
 
 protected void add_offsets(mapping arr) {
-  mixed *ind;
-  int i;
-  
   if ( !mappingp(arr) )
     return;
 
@@ -504,7 +501,6 @@
 }
 
 static mixed _query_timed_attr_mod() {
-  mixed ret;
   return Set(P_TIMED_ATTR_MOD,	    
       ({attributes_timed_mods[0],
 	deep_copy(attributes_timed_mods[1]),
diff --git a/std/living/description.c b/std/living/description.c
index 113f3c4..034b7cb 100644
--- a/std/living/description.c
+++ b/std/living/description.c
@@ -100,7 +100,7 @@
 public varargs int AddExtraLook(string look, int duration, string key, 
                                 string lookende, object ob) {
   mapping xl;
-  string oname;
+
   if (!stringp(key) || !sizeof(key)) {
     // Automatisch erzeugen, wenn moeglich
     if (!objectp(previous_object()) || 
@@ -243,10 +243,8 @@
 }
 
 varargs string long() {
-  string str, cap_pronoun;
-  string descr, invl,tmp,exl;
-  int hpnt, max_hpnt;
-  mixed filter_ldfied;
+  string str;
+  string invl,tmp,exl;
   object ob;
 
   str = process_string( QueryProp(P_LONG) );
@@ -286,7 +284,7 @@
     }
   }
   
-  if(filter_ldfied = QueryProp(P_TRANSPARENT))
+  if(QueryProp(P_TRANSPARENT))
   {
     invl = make_invlist(PL, all_inventory(ME));
     if(invl != "")
diff --git a/std/living/light.c b/std/living/light.c
index 90c3aef..ecbc926 100644
--- a/std/living/light.c
+++ b/std/living/light.c
@@ -30,6 +30,7 @@
 {
   if (environment())
     return environment()->QueryProp(P_INT_LIGHT) + QueryProp(P_LIGHT_MODIFIER);
+  return 0;
 }
 
 varargs int CannotSee(int silent)
diff --git a/std/living/put_and_get.c b/std/living/put_and_get.c
index 936fad0..e44e4da 100644
--- a/std/living/put_and_get.c
+++ b/std/living/put_and_get.c
@@ -280,7 +280,6 @@
 
             return capitalize(wen0 + " kannst Du dort nicht hineinstecken.");
     }
-    return 0; // NOT REACHED
 }
 
 
@@ -1186,7 +1185,6 @@
      else obs=(inv->present_objects(str) || ({}));
      return obs-({ ME });
    }
-   return(0);
 }
 
 int pick_obj(object ob)
@@ -1243,8 +1241,6 @@
 
 int give_obj(object ob, object where)
 {
-  object env;
-
   if (environment(ob)!=this_object()) {
     TME("Das solltest Du erstmal nehmen.");
     return 1;
diff --git a/std/living/skill_attributes.c b/std/living/skill_attributes.c
index c88b4f4..43206e0 100644
--- a/std/living/skill_attributes.c
+++ b/std/living/skill_attributes.c
@@ -110,9 +110,6 @@
 
 private int InternalModifySkillAttribute(object caster, string atrname,
                                 mixed value, int duration) {
-  int zeit = utime()[1];
-  int ticks = get_eval_cost();
-
   // nur existierende SAs...
   if (!stringp(atrname)
       || member(VALID_SKILL_ATTRIBUTES, atrname) == -1)
