diff --git a/doc/sphinx/lfun/query_userlist.rst b/doc/sphinx/lfun/query_userlist.rst
new file mode 100644
index 0000000..58f1f14
--- /dev/null
+++ b/doc/sphinx/lfun/query_userlist.rst
@@ -0,0 +1,60 @@
+query_userlist()
+================
+
+FUNKTION
+--------
+
+  public mixed query_userlist(string user, int prop)
+
+DEFINIERT IN
+------------
+
+  /secure/master/userinfo.c
+
+ARGUMENTE
+---------
+
+  user
+    UID des abzufragenden Users
+  prop
+    Datum aus der Userliste, welches abgefragt werden soll
+
+BESCHREIBUNG
+------------
+
+  Aus der Userliste des MG wird eine der folgenden Informationen ueber den
+  Spieler <user> abgefragt:
+
+  USER_LEVEL (int)
+    Magierlevel (1 fuer Seher)
+  USER_DOMAIN (string*)
+    Liste der Regionen, in der der Magier RM ist
+  USER_OBJECT (string)
+    Shell des Spielers
+  USER_CREATION_DATE (int)
+    Zeit des ersten Logins
+  USER_GUILD (string*)
+    Gilden, fuer welche die Spielerin Gildenmagierin ist
+  USER_EKTIPS (string)
+    Fuer welche EKs hat der Spieler einen Tip erhalten? Rueckgabe als
+    Bitstring, in welchem die entsprechenden Bits gesetzt sind.
+  USER_FPTIPS (string)
+    Fuer welche FPs hat der Spieler einen Tip erhalten? Rueckgabe als
+    Bitstring, in welchem die entsprechenden Bits gesetzt sind.
+  USER_UIDS_TO_TAKE_CARE (string*)
+    UIDs, fuer welche die Magierin zustaendig ist. Hierbei sind nur explizit
+    eingetragene in diesem Array, nicht welche, fuer sie implizit kraft ihres
+    Amtes zustaendig ist (z.B. als GM oder RM).
+
+  Die o.a. Konstanten sind in <userinfo.h> definiert.
+
+  Wenn der Spieler nicht existiert, wird 0 zurueckgegeben. Ein nicht
+  unterstuetztes <prop> loest einen Laufzeitfehler aus.
+
+SIEHE AUCH
+----------
+
+  :doc:`find_userinfo`
+
+Last modified: 21.01.2020, Zesstra
+
diff --git a/obj/tools/teller/t_player.c b/obj/tools/teller/t_player.c
index d457038..b9ced9d 100644
--- a/obj/tools/teller/t_player.c
+++ b/obj/tools/teller/t_player.c
@@ -21,11 +21,12 @@
 
 _query_race()
 {
-	if( race ) return race;
-		
-	return "/secure/master"
-		->query_player_object(lower_case(name))
-		->QueryProp(P_RACE);
+  if( race )
+    return race;
+  string shell = master()->query_userlist(lower_case(name), USER_OBJECT);
+  if (shell)
+    race = shell->QueryProp(P_RACE);
+  return race;
 }
 
 _query_hands()
diff --git a/secure/master.h b/secure/master.h
index 14c9fab..958043c 100644
--- a/secure/master.h
+++ b/secure/master.h
@@ -99,7 +99,7 @@
 protected mixed *get_full_userinfo(string user);
 public mixed    *get_userinfo(string user);
 public int       get_wiz_level(string user);
-public string    query_player_object( string name );
+public mixed     query_userlist(string user, int prop);
 public int       query_wiz_level(mixed player);
 int              update_wiz_level(string user,int lev);
 protected void   set_guilds(string player, string *guilds);
diff --git a/secure/master/misc.c b/secure/master/misc.c
index 087bdf6..b113ad6 100644
--- a/secure/master/misc.c
+++ b/secure/master/misc.c
@@ -590,7 +590,8 @@
   active=interactive(who);
   printf("OK, renewing %O\n",who);
   efun::configure_object(this_object(), OC_EUID, geteuid(who));
-  err=catch(newob=clone_object(query_player_object(getuid(who))); publish);
+  err=catch(newob=clone_object(query_userlist(getuid(who),USER_OBJECT));
+            publish);
   efun::configure_object(this_object(), OC_EUID, getuid(TO));
   if (err)
   {
diff --git a/secure/master/userinfo.c b/secure/master/userinfo.c
index af7ec8a..fba781f 100644
--- a/secure/master/userinfo.c
+++ b/secure/master/userinfo.c
@@ -467,12 +467,38 @@
       userlist[user,USER_UIDS_TO_TAKE_CARE]});
 }
 
-// liefert das Objekt des users aus der Userlist zurueck.
-public string query_player_object( string name )
-{
-  mixed *userentry;
-  if( !find_userinfo(name) ) return "";
-  return userlist[name,USER_OBJECT];
+public mixed query_userlist(string user, int prop) {
+  if(!sizeof(user))
+    return 0;
+  user=explode(user,".")[0];
+  if (!member(userlist,user) && !find_userinfo(user))
+    return 0;
+  if (userlist[user,USER_LEVEL]==-1)
+    return 0;
+
+  switch(prop)
+  {
+    case USER_LEVEL:
+      return userlist[user,USER_LEVEL];
+    case USER_DOMAIN:
+      return userlist[user,USER_DOMAIN];
+    case USER_OBJECT:
+      return userlist[user,USER_OBJECT];
+    case USER_CREATION_DATE:
+      return userlist[user,USER_CREATION_DATE];
+    case USER_GUILD:
+      return userlist[user,USER_GUILD];
+    case USER_EKTIPS:
+      return userlist[user,USER_EKTIPS];
+    case USER_FPTIPS:
+      return userlist[user,USER_FPTIPS];
+    case USER_UIDS_TO_TAKE_CARE:
+      return userlist[user,USER_UIDS_TO_TAKE_CARE];
+    default:
+      raise_error(sprintf(
+        "Querying property %d in userlist is illegal.\n", prop));
+  }
+  return 0;
 }
 
 // Passwort ok?
