diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp
index 06a7d51d377680c246f6eef3dfa811550ce11bd4..b0518765fbf925af44a59651859e30471ca087c9 100644
--- a/src/sbbs3/newuser.cpp
+++ b/src/sbbs3/newuser.cpp
@@ -200,6 +200,7 @@ BOOL sbbs_t::newuser()
 			getstr(useron.alias,LEN_ALIAS,kmode);
 			truncsp(useron.alias);
 			if (!check_name(&cfg,useron.alias)
+				|| userdatdupe(useron.number, U_NAME, LEN_NAME, useron.alias)
 				|| (!(cfg.uq&UQ_ALIASES) && !strchr(useron.alias,' '))) {
 				bputs(text[YouCantUseThatName]);
 				if(text[ContinueQ][0] && !yesno(text[ContinueQ]))
@@ -222,7 +223,7 @@ BOOL sbbs_t::newuser()
 					break; 
 				if(text[ContinueQ][0] && !yesno(text[ContinueQ]))
 					return(FALSE);
-			} 
+			}
 		}
 		else if(cfg.uq&UQ_COMPANY && text[EnterYourCompany][0]) {
 				bputs(text[EnterYourCompany]);
@@ -234,6 +235,8 @@ BOOL sbbs_t::newuser()
 		}
 		if(!useron.name[0])
 			SAFECOPY(useron.name,useron.alias);
+		else if(!(cfg.uq&UQ_DUPREAL) && userdatdupe(useron.number,U_NAME,LEN_NAME,useron.name) > 0)
+			useron.rest |= FLAG('O'); // Can't post using real name (it's a duplicate)
 		if(!online) return(FALSE);
 		if(!useron.handle[0])
 			SAFECOPY(useron.handle,useron.alias);
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index dbb60ec15734b4a3ced4e0c6712a719a46fa229c..c0b26373e9b1a54c705e7d543e3278707b954316 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -2974,6 +2974,9 @@ BOOL can_user_post(scfg_t* cfg, uint subnum, user_t* user, client_t* client, uin
 	if(cfg->sub[subnum]->misc&(SUB_QNET|SUB_FIDO|SUB_PNET|SUB_INET)
 		&& user->rest&FLAG('N'))		/* network restriction? */
 		return FALSE;
+	if((cfg->sub[subnum]->misc & SUB_NAME)
+		&& (user->rest & (FLAG('Q') | FLAG('O'))) == FLAG('O'))
+		return FALSE;
 	if(reason!=NULL)
 		*reason=R_Post;
 	if(user->rest&FLAG('P'))			/* post restriction? */