diff --git a/d/seher/haeuser/moebel/swift_std_container.c b/d/seher/haeuser/moebel/swift_std_container.c
index 90f4986..6d0a456 100644
--- a/d/seher/haeuser/moebel/swift_std_container.c
+++ b/d/seher/haeuser/moebel/swift_std_container.c
@@ -319,9 +319,9 @@
         +(zweitieerlaubnis==""?"nicht mehr ":"")+"oeffnen/schliessen."));
     return 1;
   }
-  wen=CAP(wen);
-  if( file_size("//save//"+LOWER(wen[0..0])+"//"+LOWER(wen)+".o") != -1 ) // Spieler gibt es auch!
+  if( master()->find_userinfo(wen)) // Spieler gibt es auch!
   {
+    wen=CAP(wen);
     if( member(erlaubnis, wen) != -1 )  // Spieler hat Erlaubnis -> verbieten!
     {
       erlaubnis-=({wen});
@@ -336,7 +336,7 @@
     return 1;
   }
   else
-    write("Es gibt keinen Spieler namens "+wen+"!\n");
+    write("Es gibt keinen Spieler namens "+CAP(wen)+"!\n");
   return 1;
 }
 
diff --git a/obj/tools/teller/t_cmds.c b/obj/tools/teller/t_cmds.c
index 68fa5d3..62f431d 100644
--- a/obj/tools/teller/t_cmds.c
+++ b/obj/tools/teller/t_cmds.c
@@ -136,7 +136,7 @@
 
 	if( !becomes_pl() && ( !objectp(top()) || !living(top()) ) )
 	{
-		if( stringp(top()) && file_size( "/save/"+top()[0..0]+"/"+top()+".o") > 0 )
+		if( stringp(top()) && master()->find_userinfo(top()))
 		{
 			obj = clone_object( T_PLAYER );
 			obj->Load( top() );
diff --git a/secure/bbmaster.c b/secure/bbmaster.c
index 9677f7f..4e5c784 100644
--- a/secure/bbmaster.c
+++ b/secure/bbmaster.c
@@ -338,10 +338,7 @@
 // Alles ab hier nur zum Ueberwachen von FTP-Aktivitaeten.
 private int player_exists( string user )
 {
-    if ( !stringp( user ) || sizeof( user ) < 2 )
-        return 0;
-    
-  return file_size( "/save/" + user[0..0] + "/" + user + ".o" ) > 0;
+  return master()->find_userinfo(user);
 }
 
 public int add( string user, int timeout )
diff --git a/secure/ftpd.c b/secure/ftpd.c
index 749cf03..3aaa5e6 100644
--- a/secure/ftpd.c
+++ b/secure/ftpd.c
@@ -58,7 +58,7 @@
 nomask int player_exists( string user ) {
   user = lower_case(user);
   if( !stringp( user ) || sizeof( user ) < 1 ) return 0;
-  return file_size( "/save/"+user[0..0]+"/"+user+".o" ) > 0;
+  return master()->find_userinfo(user);
 }
 
 nomask varargs int add( string user, int timeout ) {
diff --git a/secure/mailer.c b/secure/mailer.c
index 1c0d575..c4f7665 100644
--- a/secure/mailer.c
+++ b/secure/mailer.c
@@ -384,8 +384,8 @@
 
         }
         else
-            if ( file_size( SAVEPATH + recipients[i][0..0] + "/" +
-                            recipients[i] + ".o" ) >=0 ){
+            if (master()->find_userinfo(recipients[i]) )
+            {
                 save_msg( newmsg, recipients[i] );
                 recok += ({ recipients[i] });
             }
@@ -595,15 +595,15 @@
 public int query_recipient_ok( string name )
 {
 #if INTERNET_MAIL_ENABLED
-    return  (file_size( "secure/save/" + name[0..0] + "/" + name + ".o" ) > 0
-        || member( name, '%' ) > 0 || member( name, '@' ) > 0 );
+    return  (master()->find_userinfo(name)
+             || member( name, '%' ) > 0 || member( name, '@' ) > 0 );
 #else
     // es darf zwar ein @ in der Adresse vorkommen, dahinter aber kein . mehr
     // (dann ist es ne Mail via Intermud-Mail, nicht ins Internet).
     string *tmp;
-    return  (file_size( "secure/save/" + name[0..0] + "/" + name + ".o" ) > 0
-        || member( name, '%' ) > 0
-        || (sizeof(tmp=explode(name,"@")) == 2 && strstr(tmp[1],".") == -1));
+    return  (master()->find_userinfo(name)
+             || member( name, '%' ) > 0
+             || (sizeof(tmp=explode(name,"@")) == 2 && strstr(tmp[1],".") == -1));
 #endif
 }
 
diff --git a/secure/master/misc.c b/secure/master/misc.c
index 40915c7..a831d46 100644
--- a/secure/master/misc.c
+++ b/secure/master/misc.c
@@ -176,7 +176,8 @@
       return;
   }
 
-  if ( !force && file_size(SAVEPATH+name[0..0]+"/"+name+".o") > 0 ){
+  if ( !force && find_userinfo(name))
+  {
       write("Es existiert bereits ein Spieler dieses Namens.\n");
       return;
   }
@@ -243,7 +244,8 @@
     return 0;
   }
 
-  if (file_size(SAVEPATH+name[0..0]+"/"+name+".o")<=0){
+  if (!find_userinfo(name))
+  {
     write("Es existiert kein Spieler dieses Namens!\n");
     return 0;
   }
diff --git a/secure/news.c b/secure/news.c
index 751c887..25931b7 100644
--- a/secure/news.c
+++ b/secure/news.c
@@ -131,7 +131,7 @@
 
   if (member(grouplist, name)) return -2; // Gibt es schon
 
-  if (file_size("/"+SAVEPATH+owner[0..0]+"/"+owner+".o")<0) return -3;
+  if (!master()->find_userinfo(owner)) return -3;
 
   savefilea = old_explode(name,".");
   savefile = implode(savefilea,"/");
diff --git a/secure/sinmaster.c b/secure/sinmaster.c
index 14b8f94..1559c75 100644
--- a/secure/sinmaster.c
+++ b/secure/sinmaster.c
@@ -108,7 +108,7 @@
 
     if ( text[0..2]=="-f " )
       text=text[3..];
-    else if ( file_size(sprintf("/save/%s/%s.o",who[0..0],who))<1)
+    else if ( !master()->find_userinfo(who))
       return sprintf("Es gibt keinen Spieler namens '%s'\n",who);
 
     text = dtime(time()) + " ("+CAP(getuid(RPL))+")\n" 
diff --git a/secure/testmud.c b/secure/testmud.c
index 42c255a..2b0cee7 100644
--- a/secure/testmud.c
+++ b/secure/testmud.c
@@ -33,7 +33,7 @@
   {
     copy_file("/std/def_workroom.c","/players/jof/workroom.c");
   }
-  if(file_size("/secure/save/j/jof.o") == FSIZE_NOFILE)
+  if (!master()->find_userinfo("jof"))
   {
     save_object("/secure/save/j/jof");
   }
diff --git a/secure/wahlmaschine.c b/secure/wahlmaschine.c
index 8705f87..899fe1e 100644
--- a/secure/wahlmaschine.c
+++ b/secure/wahlmaschine.c
@@ -125,7 +125,9 @@
     return 0;
   }
   if ((second=RPL->QueryProp(P_SECOND)) &&
-      (!stringp(second) || (file_size("/save/"+lower_case(second[0..0])+"/"+lower_case(second)+".o")<=0))) {
+      (!stringp(second)
+       || !master()->find_userinfo(second)))
+  {
     notify_fail("Nicht richtig markierte Zweities sind von der Wahl ausgeschlossen.\n");
     return 0;
   }
diff --git a/std/player/base.c b/std/player/base.c
index 6d7af19..1078454 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -2277,17 +2277,22 @@
     InitPlayer();
 
     // Padreic 01.02.1999
-    if ( !IS_LEARNER(ME) && second = QueryProp(P_SECOND) ) {
-        if ( stringp(second) && lower_case(second)[0..3] == "von " ) {
+    if ( !IS_LEARNER(ME) && (second = QueryProp(P_SECOND)) )
+    {
+        if ( stringp(second) && lower_case(second)[0..3] == "von " )
+        {
             second = lower_case(second[4..]);
             SetProp( P_SECOND, second );
         }
 
         if ( !stringp(second ) ||
-             file_size( "/save/" + second[0..0] + "/" + second + ".o" ) <= 0 ){
+             !master()->find_userinfo(second))
+        {
+            // Wenns nur an Gross-/Kleinschreibung liegt, wird automatisch
+            // korrigiert.
             if ( stringp(second) &&
-                 file_size( "/save/" + lower_case(second[0..0]) + "/" +
-                            lower_case(second) + ".o" ) >0 ){
+                 master()->find_userinfo(lower_case(second)))
+            {
                 SetProp( P_SECOND, lower_case(second) );
                 log_file( "WRONG_SECOND",
                           sprintf( "%s: %s: P_SECOND = %O -> Automatisch "
