diff --git a/src/sbbs3/makeuser.c b/src/sbbs3/makeuser.c
index c8362235ce557e8e50622d9845fafcbfa32969a0..b7017a8bcfb3254ba9de0ea54d17943e85410062 100644
--- a/src/sbbs3/makeuser.c
+++ b/src/sbbs3/makeuser.c
@@ -57,7 +57,7 @@ int lprintf(char *fmat, ...)
 }
 
 
-char *usage="\nusage: makeuser name [-param value] [...]\n"
+char *usage="\nusage: makeuser [ctrl_dir] name [-param value] [...]\n"
 	"\nparams:\n"
 	"\t-P\tPassword\n"
 	"\t-R\tReal name\n"
@@ -70,6 +70,9 @@ char *usage="\nusage: makeuser name [-param value] [...]\n"
 	"\t-L\tLocation (city, state)\n"
 	"\t-Z\tZip/Postal code\n"
 	"\t-S\tSecurity level\n"
+	"\t-F#\tFlag set #\n"
+	"\t-FE\tExemption flags\n"
+	"\t-FR\tRestriction flags\n"
 	"\t-E\tExpiration days\n"
 	"\t-C\tComment\n"
 	"\nNOTE: multi-word user name and param values must be enclosed in \"quotes\"\n"
@@ -84,6 +87,7 @@ int main(int argc, char **argv)
 	char	error[512];
 	char	revision[16];
 	int		i;
+	int		first_arg=1;
 	time_t	now;
 	user_t	user;
 
@@ -99,7 +103,10 @@ int main(int argc, char **argv)
 		return(1); 
 	}
 
-	p=getenv("SBBSCTRL");
+	if(strcspn(argv[first_arg],"/\\")!=strlen(argv[first_arg]))
+		p=argv[first_arg++];
+	else
+		p=getenv("SBBSCTRL");
 	if(p==NULL) {
 		printf("\nSBBSCTRL environment variable not set.\n");
 		printf("\nExample: SET SBBSCTRL=/sbbs/ctrl\n");
@@ -165,7 +172,7 @@ int main(int argc, char **argv)
 	if(scfg.new_expire)
 		user.expire=now+((long)scfg.new_expire*24L*60L*60L); 
 
-	for(i=1;i<argc;i++) {
+	for(i=first_arg;i<argc;i++) {
 		if(argv[i][0]=='-') {
 			switch(toupper(argv[i++][1])) {
 			case 'A':
@@ -183,6 +190,31 @@ int main(int argc, char **argv)
 			case 'E':
 				user.expire=now+((long)atoi(argv[i])*24L*60L*60L); 
 				break;
+			case 'F':
+				switch(toupper(argv[i-1][2])) {
+					case '1':
+						user.flags1=aftol(argv[i]);
+						break;
+					case '2':
+						user.flags2=aftol(argv[i]);
+						break;
+					case '3':
+						user.flags3=aftol(argv[i]);
+						break;
+					case '4':
+						user.flags4=aftol(argv[i]);
+						break;
+					case 'E':
+						user.exempt=aftol(argv[i]);
+						break;
+					case 'R':
+						user.rest=aftol(argv[i]);
+						break;
+					default:
+						printf("%s",usage);
+						return(1);
+				}
+				break;
 			case 'G':
 				user.sex=toupper(argv[i][0]);
 				break;
@@ -222,6 +254,11 @@ int main(int argc, char **argv)
 		return(1);
 	}
 
+	if((i=matchuser(&scfg,user.alias,FALSE))!=0) {
+		printf("!User (%s #%d) already exists\n",user.alias,i);
+		return(2);
+	}
+
 	if(user.handle[0]==0)
 		SAFECOPY(user.handle,user.alias);
 	if(user.name[0]==0)