diff --git a/secure/materialdb.c b/secure/materialdb.c
index 11d3554..94c57b6 100644
--- a/secure/materialdb.c
+++ b/secure/materialdb.c
@@ -147,10 +147,10 @@
     if (pointerp(dif=props[P_RECOC])
 && (!intp(idinf)||idinf<100) ) { // 100=exakte Erkennung
       int i, n, recval;
-      mixed *grps, tmp, x;
+      mixed tmp, x;
 
       recval=0;
-      grps=props[P_MG_FRACTIONS];
+      mapping grps=props[P_MG_FRACTIONS];
       if (!pointerp(idinf))
         idinf=({idinf});
 
diff --git a/secure/news.c b/secure/news.c
index 76e1ba1..2f9e6aa 100644
--- a/secure/news.c
+++ b/secure/news.c
@@ -297,7 +297,7 @@
 
 int WriteNote(mixed message,mixed keepname)
 {
-  mixed *group;
+  mixed group;
   int uidok,tmp;
   string name;
 
@@ -326,7 +326,7 @@
 int RemoveNote(string name, int note)
 {
   int num;
-  mixed *group;
+  mixed group;
 
   if ((note<0) && (name=="dwnews"))
   {
@@ -368,7 +368,7 @@
 
 mixed GetNotes(string name)
 {
-  mixed *group;
+  mixed group;
   
   if (!pointerp(group=load_group(name))) return -2;
   if (!allowed(name, F_READ)) return -2;
@@ -389,7 +389,7 @@
 // etime ist anfangs in Tagen und bezeichnet das max. Alter, was Artikel in
 // der Gruppe haben duerfen.
 {
-  mixed *group;
+  mixed group;
 
   if (!pointerp(group=load_group(grp))) return;
   if (etime)
@@ -430,7 +430,7 @@
 void dump_group(string grp)
 {
   int to_expire,size,last;
-  mixed *group;
+  mixed group;
 
   if (!ARCH_SECURITY || process_call()) return;
   if (!pointerp(group=load_group(grp))) return;
@@ -518,7 +518,7 @@
 
 int AskAllowedWrite(string n)
 {
-  mixed *group;
+  mixed group;
 
   if (!member(grouplist,n)) return -2;
   if (!pointerp(group=load_group(n))) return -2;
diff --git a/secure/udp/www.news.c b/secure/udp/www.news.c
index ce068db..1e4588b 100644
--- a/secure/udp/www.news.c
+++ b/secure/udp/www.news.c
@@ -115,11 +115,11 @@
 
 string ArticleList(string group)
 {
-  string *list, ret;
+  string ret;
   mapping t;
   int i;
 
-  list = NEWSD->GetNotes(group = old_explode(group, ":")[0]);
+  mixed list = NEWSD->GetNotes(group = old_explode(group, ":")[0]);
   if (!pointerp(list)) {
   return "<H2>Gruppe: "+group+"</H2>"
     "<H3>existiert nicht.</H3>"
diff --git a/secure/udp/www.who.c b/secure/udp/www.who.c
index 6646569..013e87b 100644
--- a/secure/udp/www.who.c
+++ b/secure/udp/www.who.c
@@ -11,7 +11,7 @@
 #include <properties.h>
 #include <www.h>
 
-string MakeLink(mixed entry)
+string MakeLink(<object|string>* entry)
 {
   string nm;
   int idx;
@@ -30,12 +30,18 @@
 
 string Request(mapping cmds)
 {
-  string *who, *list; int i, s;
-  if (!sizeof(cmds)) return ERROR("Anfrage ung&uuml;ltig!");
-  who = allocate(s = sizeof(list = WHO));
-  for(i = s; i--; i > 0) 
-    who[i] = MakeLink(list[s - i - 1]);
-  // who = map(WHO, #'MakeLink/*'*/);
+  if (!sizeof(cmds))
+    return ERROR("Anfrage ung&uuml;ltig!");
+  // Wer-Liste abfragen
+  <object|string>** list = WHO;
+  int size=sizeof(list);
+  string *who = allocate(size);
+
+  // Listenreihenfolge umkehren.
+  foreach(int i : size) {
+    who[i] = MakeLink(list[<i+1]);
+  }
+
   return "<H2>Wer ist gerade in "MUDNAME"?</H2><HR>"
        + "<OL><LI>"+implode(who, "\n<LI>")+"</OL>";
 }
