diff --git a/std/player/channel.c b/std/player/channel.c
index cf8d85a..0ecefc2 100644
--- a/std/player/channel.c
+++ b/std/player/channel.c
@@ -349,7 +349,7 @@
 int ChannelParser(string args)
 {
   string|string* ch;
-  int pos, type, err;
+  int type, err;
   string tmp;
   notify_fail("Benutzung: -<Ebene>[ ]['|:|;]<Text>\n"
               "           -<Ebene>[+|-|?|!|*]\n"
diff --git a/std/player/comm.c b/std/player/comm.c
index 87dd6a0..36aaff4 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -81,8 +81,6 @@
 // erzeugt sortierte Liste an Kommunikationspartnern
 private string *sorted_commpartners(int reversed);
 
-private nosave string *buffer = ({});
-
 void create()
 {
   ::create();
@@ -989,7 +987,6 @@
 }
 
 static int _msg_prepend(string str) {
-  int beep_interval;
   notify_fail("Syntax: senderwiederholung ein/aus\n");
   if (stringp(str)) {
     if (str=="aus")  
@@ -1109,7 +1106,7 @@
 {
   object    ob;
   string    away,myname,ret;
-  mixed     ignore,it;
+  mixed     it;
   string    *xname;
   int       i,visflag;
 
@@ -1389,9 +1386,7 @@
 
 static int _shout_to_wizards(mixed str)
 {
-  int     i, j;
   string    myname;
-  object   *u;
 
   str = _unparsed_args();
   if (!str||!sizeof(str)) {
@@ -1744,7 +1739,6 @@
         default: // mehr als 3 Teile...
           raise_error(sprintf("TestIgnoreExt(): too many qualifiers, only 1 "
                 "is supported. Got: %s\n",srcname));
-          break;
       }
     }
   }
diff --git a/std/player/command.c b/std/player/command.c
index beea800..d342e90 100644
--- a/std/player/command.c
+++ b/std/player/command.c
@@ -208,6 +208,8 @@
   }
   else if (!s||s=="")
     return (default_notify_fail=0);
+
+  return 0;
 }
 
 static mixed _query_default_notify_fail()
diff --git a/std/player/description.c b/std/player/description.c
index acd4200..91980f5 100644
--- a/std/player/description.c
+++ b/std/player/description.c
@@ -115,8 +115,7 @@
 
 varargs string long()
 {
-  string exl, descr, tmp, size_descr;
-  object ob;
+  string descr, size_descr;
   mixed trans, w, a, r;
   int per;
   string fill, fill2;
diff --git a/std/player/exploration.c b/std/player/exploration.c
index 3990e54..e45637e 100644
--- a/std/player/exploration.c
+++ b/std/player/exploration.c
@@ -21,8 +21,6 @@
 
 private string given_scores;
 
-private nosave mixed epnum;
-
 void create() {
   Set(P_LEP, SECURED|SAVE, F_MODE_AS);
 
diff --git a/std/player/invmaster/invmaster.c b/std/player/invmaster/invmaster.c
index 49c3c38..2ac7bd2 100644
--- a/std/player/invmaster/invmaster.c
+++ b/std/player/invmaster/invmaster.c
@@ -132,10 +132,7 @@
 // where possible
 static string ComposeDesc(object item)
 {
-  int i;
-  string text, *buff;
-  
-  text=regreplace(item->QueryProp(P_SHORT)
+  string text=regreplace(item->QueryProp(P_SHORT)
                 ||item->name(RAW)
                 ||"<?>",
                 "^(Ein Paar|Ein|Eine|Der|Die|Das) ","",0);
diff --git a/std/player/life.c b/std/player/life.c
index 3a52dee..ca295fd 100644
--- a/std/player/life.c
+++ b/std/player/life.c
@@ -505,7 +505,7 @@
 static int _set_hp( int hp )
 {
     object *hooks;
-    int ret, i, old;
+    int ret, old;
 
     if ( (old = Query(P_HP, F_VALUE)) == hp )
         return old;
@@ -532,7 +532,7 @@
 static int _set_sp( int sp )
 {
     object *hooks;
-    int ret, i, old;
+    int ret, old;
 
     if ( (old = Query(P_SP,F_VALUE)) == sp )
         return old;
diff --git a/std/player/protocols/gmcp.c b/std/player/protocols/gmcp.c
index e3e6d6c..905fdc9 100644
--- a/std/player/protocols/gmcp.c
+++ b/std/player/protocols/gmcp.c
@@ -156,9 +156,8 @@
 
 private void GMCP_unregister_module(string mod)
 {
-  int version;
   // Wenn nicht "mod version" Schema, ignorieren
-  if (sscanf(mod, "%s %d", mod, version) != 2)
+  if (sscanf(mod, "%s %~d", mod) != 2)
       return;
 
   if (mod=="Core") // darf nicht abgeschaltet werden.
diff --git a/std/player/reputation.c b/std/player/reputation.c
index 792c386..f32b75d 100644
--- a/std/player/reputation.c
+++ b/std/player/reputation.c
@@ -27,7 +27,9 @@
  */
 public varargs int ChangeReputation(string repid, int value, 
                                           int silent) {
-  string uid, changemsg; int newval; mapping rep;
+  string changemsg;
+  int newval;
+  mapping rep;
   
   if(!intp(value) || !value || !stringp(repid) || !sizeof(repid)) 
     return REP_RET_WRONGARGS;
diff --git a/std/player/shadows/ark_hunger_shadow.c b/std/player/shadows/ark_hunger_shadow.c
index 42d6dff..2559f01 100644
--- a/std/player/shadows/ark_hunger_shadow.c
+++ b/std/player/shadows/ark_hunger_shadow.c
@@ -46,6 +46,7 @@
   }
   return 0;
  }
+ return 0;
 }
 
 void Loeschen() {
diff --git a/std/player/soul.c b/std/player/soul.c
index 9ea7bba..5368d1d 100644
--- a/std/player/soul.c
+++ b/std/player/soul.c
@@ -633,7 +633,7 @@
 varargs static int
 SoulComm(string str, string _verb)  {
   int t_g,t_n,flag;
-  string str1,str2,str3,*taenze,vb;
+  string str1,str2,*taenze,vb;
   out_sel=out_vic=out_oth=who=0;
 //  if (this_interactive()!=ME) return 0;
   if (interactive(ME)) str=_unparsed_args(); // NPCs haben das nicht :(
diff --git a/std/player/travel.c b/std/player/travel.c
index 1b41d59..cca6a54 100644
--- a/std/player/travel.c
+++ b/std/player/travel.c
@@ -43,7 +43,7 @@
 static int reise(string str)
 {
   mixed  t, ship, dstr;
-  string mit, nach, s1, s2;
+  string mit, nach;
   int    i;
 
   _notify_fail("Syntax: reise mit <transportmittel> nach <zielort>\n\n"
diff --git a/std/player/util.c b/std/player/util.c
index 0d7ca18..40d3729 100644
--- a/std/player/util.c
+++ b/std/player/util.c
@@ -96,7 +96,7 @@
 // Lacht nicht ueber den Namen!!! -Boing
 // Nein, ueber den Namen lache ich nicht ... -Paracelsus
 static void DumpKeyValPair(mapping x, mixed key, int size)
-{ int j, vc;
+{ int j;
 
   PrettyDump(key);
   write(" : ");
diff --git a/std/player/viewcmd.c b/std/player/viewcmd.c
index 718db88..ab528c5 100644
--- a/std/player/viewcmd.c
+++ b/std/player/viewcmd.c
@@ -109,7 +109,7 @@
 int _inventory(string str)
 {
   mixed *args, output;
-  int ansi, i, flags, minv;
+  int ansi, flags, minv;
   mixed inventory, weapons, armours, misc;
   string format;
 
@@ -681,8 +681,6 @@
       return 0;
     }
   }
-  // Nie erreicht.
-  return 0;
 }
 
 varargs int _examine(string str, int mode)
@@ -768,7 +766,6 @@
 varargs string env_descr(int allow_short,int flags, int force_short )
 {
   object env;
-  int brief;
 
   env = environment(ME);
 
@@ -778,7 +775,7 @@
   if (!force_short && (!allow_short || !QueryProp(P_BRIEF)))
       return env->int_long(ME,ME,flags);
 
-  if (!flags && ((brief=QueryProp(P_BRIEF))>=2))
+  if (!flags && QueryProp(P_BRIEF)>=2)
       return "";
 
   return env->int_short(ME,ME);
