diff --git a/src/sbbs3/baja.c b/src/sbbs3/baja.c
index caf82095e781ba29be6bfca38ce2e2f3554dd8bf..ba03b0aaa9a164ba5bf6004f548d87f0a07dd2e6 100644
--- a/src/sbbs3/baja.c
+++ b/src/sbbs3/baja.c
@@ -3107,113 +3107,123 @@ free(str);
 free(save);
 }
 
-char *usage="\n"
-			"usage: baja [/opts] file[.src]\n"
-			"\n"
-			" opts: /d display debug during compile\n"
-			"       /c case sensitive variables, labels, and macros\n"
-			"       /o set output directory (e.g. /o\\sbbs\\exec)\n"
-			;
+char *banner=	"\n"
+				"BAJA v2.20 - Synchronet Shell/Module Compiler - "
+				"Copyright 2000 Rob Swindell\n";
+
+char *usage=	"\n"
+				"usage: baja [/opts] file[.src]\n"
+				"\n"
+				" opts: /d display debug during compile\n"
+				"       /c case sensitive variables, labels, and macros\n"
+				"       /o set output directory (e.g. /o\\sbbs\\exec)\n"
+				"       /q quiet mode (no banner)\n"
+				;
+
 int main(int argc, char **argv)
 {
 	uchar str[128],src[128]="",*p,outdir[128]="",outfname[128]="";
 	int i,j;
+	int show_banner=1;
+
+	for(i=1;i<argc;i++)
+		if(argv[i][0]=='/')
+			switch(toupper(argv[i][1])) {
+				case 'D':
+					display=1;
+					break;
+				case 'C':
+					case_sens=1;
+					break;
+				case 'O':
+					strcpy(outdir,argv[i]+2);
+					break;
+				case 'Q':
+					show_banner=0;
+					break;
+				default:
+					printf(banner);
+					printf(usage);
+					exit(1); }
+		else
+			strcpy(src,argv[i]);
 
-printf("\nBAJA v2.10 ú Synchronet Shell/Module Compiler ú "
-	"Copyright 2000 Rob Swindell\n");
-
-for(i=1;i<argc;i++)
-	if(argv[i][0]=='/')
-		switch(toupper(argv[i][1])) {
-			case 'D':
-				display=1;
-				break;
-			case 'C':
-				case_sens=1;
-				break;
-			case 'O':
-				strcpy(outdir,argv[i]+2);
-				break;
-			default:
-				printf(usage);
-				exit(1); }
-	else
-		strcpy(src,argv[i]);
-
-if(!src[0]) {
-	printf(usage);
-	exit(1); }
+	if(show_banner)
+		printf(banner);
 
-strupr(src);
-strcpy(str,src);
-if(!strchr(str,'.'))
-	sprintf(src,"%s.SRC",str);
+	if(!src[0]) {
+		printf(usage);
+		exit(1); }
 
-strcpy(str,src);
-p=strrchr(str,'.');
-if(p)
-	*p=0;
-strcat(str,".BIN");
+	strcpy(str,src);
+	if(!strchr(str,'.'))
+		sprintf(src,"%s.SRC",str);
 
-if(outdir[0]) {
-	p=strrchr(str,'\\');
-	if(!p)
-		p=strrchr(str,':');
+	strcpy(str,src);
+	p=strrchr(str,'.');
 	if(p)
-		strcpy(outfname,p+1);
-	else
-		strcpy(outfname,str);
-	if(outdir[strlen(outdir)-1]!='\\'
-		&& outdir[strlen(outdir)-1]!=':')
-		strcat(outdir,"\\");
-	sprintf(str,"%s%s",outdir,outfname); }
-
-if((out=fopen(str,"wb"))==NULL) {
-	printf("error opening %s for write\n",str);
-	exit(1); }
+		*p=0;
+	strcat(str,".BIN");
+
+	if(outdir[0]) {
+		p=strrchr(str,'\\');
+		if(!p)
+			p=strrchr(str,':');
+		if(p)
+			strcpy(outfname,p+1);
+		else
+			strcpy(outfname,str);
+		if(outdir[strlen(outdir)-1]!='\\'
+			&& outdir[strlen(outdir)-1]!=':')
+			strcat(outdir,"\\");
+		sprintf(str,"%s%s",outdir,outfname); }
+
+	if((out=fopen(str,"wb"))==NULL) {
+		printf("error opening %s for write\n",str);
+		exit(1); }
 
-atexit(bail);
+	atexit(bail);
 
-printf("\nCompiling %s...\n",src);
+	printf("\nCompiling %s...\n",src);
 
-compile(src);
+	compile(src);
 
-/****************************/
-/* Resolve GOTOS and CALLS */
-/****************************/
+	/****************************/
+	/* Resolve GOTOS and CALLS */
+	/****************************/
 
-printf("Resolving labels...\n");
+	printf("Resolving labels...\n");
 
-for(i=0;i<gotos;i++) {
-	for(j=0;j<labels;j++)
-		if(!stricmp(goto_label[i],label_name[j]))
-			break;
-	if(j>=labels) {
-		printf("%s line %d: label (%s) not found.\n"
-			,goto_file[i],goto_line[i],goto_label[i]);
-		exit(1); }
-	fseek(out,(long)(goto_indx[i]+1),SEEK_SET);
-	fwrite(&label_indx[j],2,1,out); }
-
-for(i=0;i<calls;i++) {
-	for(j=0;j<labels;j++)
-		if((!case_sens
-			&& !strnicmp(call_label[i],label_name[j],strlen(call_label[i])))
-		|| (case_sens
-			&& !strncmp(call_label[i],label_name[j],strlen(call_label[i]))))
-			break;
-	if(j>=labels) {
-		printf("%s line %d: label (%s) not found.\n"
-			,call_file[i],call_line[i],call_label[i]);
-		exit(1); }
-	fseek(out,(long)(call_indx[i]+1),SEEK_SET);
-	fwrite(&label_indx[j],2,1,out); }
+	for(i=0;i<gotos;i++) {
+		for(j=0;j<labels;j++)
+			if(!stricmp(goto_label[i],label_name[j]))
+				break;
+		if(j>=labels) {
+			printf("%s line %d: label (%s) not found.\n"
+				,goto_file[i],goto_line[i],goto_label[i]);
+			exit(1); }
+		fseek(out,(long)(goto_indx[i]+1),SEEK_SET);
+		fwrite(&label_indx[j],2,1,out); }
+
+	for(i=0;i<calls;i++) {
+		for(j=0;j<labels;j++)
+			if((!case_sens
+				&& !strnicmp(call_label[i],label_name[j],strlen(call_label[i])))
+			|| (case_sens
+				&& !strncmp(call_label[i],label_name[j],strlen(call_label[i]))))
+				break;
+		if(j>=labels) {
+			printf("%s line %d: label (%s) not found.\n"
+				,call_file[i],call_line[i],call_label[i]);
+			exit(1); }
+		fseek(out,(long)(call_indx[i]+1),SEEK_SET);
+		fwrite(&label_indx[j],2,1,out); }
 
-fclose(out);
-out=NULL; /* so bail() won't truncate */
+	fclose(out);
+	out=NULL; /* so bail() won't truncate */
 
-printf("\nDone.\n");
-return(0);
+	printf("\nDone.\n");
+	return(0);
 }