diff --git a/src/sbbs3/makeuser.c b/src/sbbs3/makeuser.c
index 75ac6d02d67e237d1d177b0f9307e34e183247b5..189bc4cd3a5cdd06bcd5e811b8eb98e7b456438a 100644
--- a/src/sbbs3/makeuser.c
+++ b/src/sbbs3/makeuser.c
@@ -116,41 +116,7 @@ int main(int argc, char **argv)
 	/* Set Defaults */
 	/****************/
 
-	/* security */
-	user.level=scfg.new_level;
-	user.flags1=scfg.new_flags1;
-	user.flags2=scfg.new_flags2;
-	user.flags3=scfg.new_flags3;
-	user.flags4=scfg.new_flags4;
-	user.rest=scfg.new_rest;
-	user.exempt=scfg.new_exempt; 
-
-	user.cdt=scfg.new_cdt;
-	user.min=scfg.new_min;
-	user.freecdt=scfg.level_freecdtperday[user.level];
-
-	if(scfg.total_fcomps)
-		SAFECOPY(user.tmpext,scfg.fcomp[0]->ext);
-	else
-		SAFECOPY(user.tmpext,"ZIP");
-	for(i=0;i<scfg.total_xedits;i++)
-		if(!stricmp(scfg.xedit[i]->code,scfg.new_xedit))
-			break;
-	if(i<scfg.total_xedits)
-		user.xedit=i+1;
-
-	user.shell=scfg.new_shell;
-	user.misc=(scfg.new_misc&~(DELETED|INACTIVE|QUIET|NETMAIL));
-	user.misc|=AUTOTERM;	/* No way to frob the default value... */
-	user.qwk=QWK_DEFAULT;
-	user.firston=(time32_t)now;
-	user.laston=(time32_t)now;	/* must set this or user may be purged prematurely */
-	user.pwmod=(time32_t)now;
-	user.sex=' ';
-	user.prot=scfg.new_prot;
-
-	if(scfg.new_expire)
-		user.expire=(time32_t)(now+((long)scfg.new_expire*24L*60L*60L)); 
+	newuserdefaults(&scfg, &user);
 
 	for(i=first_arg;i<argc;i++) {
 		if(argv[i][0]=='-') {
diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp
index 1cfc54ce9849b71932dc53dc52fb8d3b02ace92e..aa15a7b7cd89e4fac685da3d4385b513702ea3fb 100644
--- a/src/sbbs3/newuser.cpp
+++ b/src/sbbs3/newuser.cpp
@@ -56,6 +56,7 @@ BOOL sbbs_t::newuser()
 	thisnode.connection=node_connection;
 	putnodedat(cfg.node_num,&thisnode);
 	memset(&useron,0,sizeof(user_t));	  /* Initialize user info to null */
+	newuserdefaults(&cfg, &useron);
 	if(cfg.new_pass[0] && online==ON_REMOTE) {
 		c=0;
 		while(++c<4) {
@@ -74,17 +75,6 @@ BOOL sbbs_t::newuser()
 	}
 
 	/* Sets defaults per sysop config */
-	useron.misc|=(cfg.new_misc&~(DELETED|INACTIVE|QUIET|NETMAIL));
-	useron.qwk = cfg.new_qwk;
-	useron.chat = cfg.new_chat;
-	useron.firston=useron.laston=useron.pwmod=time32(NULL);
-	if(cfg.new_expire) {
-		now=time(NULL);
-		useron.expire=(time32_t)(now+((long)cfg.new_expire*24L*60L*60L)); 
-	} else
-		useron.expire=0;
-	useron.sex=' ';
-	useron.prot=cfg.new_prot;
 	SAFECOPY(useron.comp,client_name);	/* hostname or CID name */
 	SAFECOPY(useron.ipaddr,cid);			/* IP address or CID number */
 	if((i=finduserstr(0, USER_IPADDR, cid, /* del */true))!=0) {	/* Duplicate IP address */
@@ -93,7 +83,6 @@ BOOL sbbs_t::newuser()
 		logline(LOG_NOTICE,"N!",useron.comment); 
 	}
 
-	SAFECOPY(useron.alias,"New");     /* just for status line */
 	SAFECOPY(useron.modem,connection);
 	if(!lastuser(&cfg)) {	/* Automatic sysop access for first user */
 		bprintf("Creating sysop account... System password required.\r\n");
@@ -103,29 +92,8 @@ BOOL sbbs_t::newuser()
 		useron.exempt=useron.flags1=useron.flags2=0xffffffffUL;
 		useron.flags3=useron.flags4=0xffffffffUL;
 		useron.rest=0L; 
-	} else {
-		useron.level=cfg.new_level;
-		useron.flags1=cfg.new_flags1;
-		useron.flags2=cfg.new_flags2;
-		useron.flags3=cfg.new_flags3;
-		useron.flags4=cfg.new_flags4;
-		useron.rest=cfg.new_rest;
-		useron.exempt=cfg.new_exempt; 
 	}
 
-	useron.cdt=cfg.new_cdt;
-	useron.min=cfg.new_min;
-	useron.freecdt=cfg.level_freecdtperday[useron.level];
-
-	if(cfg.total_fcomps)
-		SAFECOPY(useron.tmpext,cfg.fcomp[0]->ext);
-	else
-		SAFECOPY(useron.tmpext,supported_archive_formats[0]);
-
-	useron.shell=cfg.new_shell;
-
-	useron.alias[0]=0;
-
 	kmode=(cfg.uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL|K_TRIM;
 	if(!(cfg.uq&UQ_NOUPRLWR))
 		kmode|=K_UPRLWR;
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index b0ae2029193770673a35f78f44b35bbd28f82c11..7cbab21019c19d8d00d47541442b6f75b38a2955 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -2943,10 +2943,12 @@ int newuserdefaults(scfg_t* cfg, user_t* user)
 	else
 		SAFECOPY(user->tmpext,"zip");
 
-	user->shell=cfg->new_shell;
-	user->misc=cfg->new_misc|(AUTOTERM|COLOR);
-	user->prot=cfg->new_prot;
-	user->qwk=QWK_DEFAULT;
+	user->shell = cfg->new_shell;
+	user->misc = cfg->new_misc|(AUTOTERM|COLOR);
+	user->misc &= ~(DELETED|INACTIVE|QUIET|NETMAIL);
+	user->prot = cfg->new_prot;
+	user->qwk = cfg->new_qwk;
+	user->chat = cfg->new_chat;
 
 	for(i=0;i<cfg->total_xedits;i++)
 		if(!stricmp(cfg->xedit[i]->code,cfg->new_xedit) && chk_ar(cfg,cfg->xedit[i]->ar, user, /* client: */NULL))