diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index d032000c44336b5b308564528394a30acedde3ca..258727ea9c2d9c898ddf4ba3b7f329be3ce1c722 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -150,8 +150,12 @@ uint find_login_id(scfg_t* cfg, const char* user_id)
 {
 	int usernum;
 
-	if((cfg->sys_login & LOGIN_USERNUM) && IS_DIGIT(user_id[0]))
-		return atoi(user_id);
+	if((cfg->sys_login & LOGIN_USERNUM) && IS_DIGIT(user_id[0])) {
+		usernum = atoi(user_id);
+		if(usernum > lastuser(cfg))
+			usernum = 0;
+		return usernum;
+	}
 
 	usernum = matchuser(cfg, user_id, /* sysop_alias: */FALSE);
 	if(usernum < 1 && check_realname(cfg, user_id) && (cfg->sys_login & LOGIN_REALNAME))
@@ -162,9 +166,9 @@ uint find_login_id(scfg_t* cfg, const char* user_id)
 }
 
 /****************************************************************************/
-uint total_users(scfg_t* cfg)
+int total_users(scfg_t* cfg)
 {
-    uint	total_users=0;
+    int		total_users=0;
 	int		file;
 	bool	success = true;
 
@@ -192,7 +196,7 @@ uint total_users(scfg_t* cfg)
 /****************************************************************************/
 /* Returns the number of the last user in user.tab (deleted ones too)		*/
 /****************************************************************************/
-uint lastuser(scfg_t* cfg)
+int lastuser(scfg_t* cfg)
 {
 	char path[MAX_PATH + 1];
 	off_t length;
@@ -201,7 +205,7 @@ uint lastuser(scfg_t* cfg)
 		return(0);
 
 	if((length = flength(userdat_filename(cfg, path, sizeof(path)))) > 0)
-		return (uint)(length / USER_RECORD_LINE_LEN);
+		return (int)(length / USER_RECORD_LINE_LEN);
 	return 0;
 }
 
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index d41980ad785de6bb90a1518f6a888ad6812e64c7..64c17a3c9360eb3a237a9c54628dabad3154bd8e 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -55,8 +55,8 @@ DLLEXPORT uint	matchuser(scfg_t*, const char *str, BOOL sysop_alias); // Checks
 DLLEXPORT BOOL	matchusername(scfg_t*, const char* name, const char* compare);
 DLLEXPORT char* alias(scfg_t*, const char* name, char* buf);
 DLLEXPORT int	putusername(scfg_t*, int number, const char* name);
-DLLEXPORT uint	total_users(scfg_t*);
-DLLEXPORT uint	lastuser(scfg_t*);
+DLLEXPORT int	total_users(scfg_t*);
+DLLEXPORT int	lastuser(scfg_t*);
 DLLEXPORT BOOL	del_lastuser(scfg_t*);
 DLLEXPORT int	getage(scfg_t*, const char* birthdate);
 DLLEXPORT int	getbirthmonth(scfg_t*, const char* birthdate);