diff --git a/src/sbbs3/scfg/Attic/scfgxfr2.c b/src/sbbs3/scfg/Attic/scfgxfr2.c
index b2b6c182e1d585cda31302277df49f682bdee1af..fb02adc7ea3310cb8707005cbcbf39ce69648165 100644
--- a/src/sbbs3/scfg/Attic/scfgxfr2.c
+++ b/src/sbbs3/scfg/Attic/scfgxfr2.c
@@ -151,7 +151,7 @@ library, select Yes.
 				if(cfg.dir[j]->lib==i) {
 					sprintf(str,"%s.*",cfg.dir[j]->code);
 					if(!cfg.dir[j]->data_dir[0])
-						sprintf(tmp,"%sDIRS\\",cfg.data_dir);
+						sprintf(tmp,"%sdirs/",cfg.data_dir);
 					else
 						strcpy(tmp,cfg.dir[j]->data_dir);
 					delfiles(tmp,str); }
@@ -621,7 +621,7 @@ contents, usually an abreviation of the directory's name.
 			umsg("Invalid Code");
 			helpbuf=0;
 			continue; }
-		sprintf(path,"%sDIRS\\%s",cfg.data_dir,code);
+		sprintf(path,"%sdirs/%s",cfg.data_dir,code);
 		SETHELP(WHERE);
 /*
 Directory File Path:
@@ -679,7 +679,7 @@ select Yes.
 		if(j==0) {
 				sprintf(str,"%s.*",cfg.dir[dirnum[i]]->code);
 				if(!cfg.dir[dirnum[i]]->data_dir[0])
-					sprintf(tmp,"%sDIRS\\",cfg.data_dir);
+					sprintf(tmp,"%sdirs/",cfg.data_dir);
 				else
 					strcpy(tmp,cfg.dir[dirnum[i]]->data_dir);
 				delfiles(tmp,str); }
@@ -1386,7 +1386,7 @@ appear in users' new-file scans again.
 				sprintf(opt[n++],"%-27.27s%s","Extensions Allowed"
 					,cfg.dir[i]->exts);
 				if(!cfg.dir[i]->data_dir[0])
-					sprintf(str,"%sDIRS\\",cfg.data_dir);
+					sprintf(str,"%sdirs/",cfg.data_dir);
 				else
 					strcpy(str,cfg.dir[i]->data_dir);
 				sprintf(opt[n++],"%-27.27s%.40s","Data Directory"
diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c
index 41c10dcc370e6f41bb144709fa58cb3517d8b7f0..833d78e5ff77531343b31e178c20fa74252c8365 100644
--- a/src/sbbs3/scfg/scfg.c
+++ b/src/sbbs3/scfg/scfg.c
@@ -37,12 +37,6 @@
 
 #include "scfg.h"
 
-#ifdef __FLAT__
-	unsigned _stklen=64000;
-#else
-	unsigned _stklen=32000;
-#endif
-
 extern char uifc_status;
 
 /********************/
@@ -50,7 +44,6 @@ extern char uifc_status;
 /********************/
 
 scfg_t	cfg;
-long freedosmem;
 int  no_dirchk=0,forcesave=0;
 extern int all_msghdr;
 extern int no_msghdr;
@@ -103,10 +96,6 @@ int main(int argc, char **argv)
 	long	l;
 	char 	str[129];
 	FILE	*instream;
-#ifndef __FLAT__
-    int     no_emsovl=0;
-	union	REGS reg;
-#endif
 
 printf("\r\nSynchronet Configuration Util (%s)  v%s  Copyright 2002 "
 	"Rob Swindell\r\n",PLATFORM_DESC,VERSION);
@@ -147,6 +136,7 @@ printf("\r\nSynchronet Configuration Util (%s)  v%s  Copyright 2002 "
                 case 'F':
                 	forcesave=!forcesave;
                     break;
+#if !defined(__unix__)
                 case 'V':
                     textmode(atoi(argv[i]+2));
                     break;
@@ -178,22 +168,19 @@ printf("\r\nSynchronet Configuration Util (%s)  v%s  Copyright 2002 "
                             break;
                     }
                     break;
+#endif                    
                 default:
-                    printf("\r\nusage: scfg [ctrl_dir] [-c] [-m] [-n] [-s] [-u] [-h] "
-                        "[-t#] [-b#]\r\n"
-                        "\r\n"
-                        "-c  =  force color mode\r\n"
+                    printf("\nusage: scfg [ctrl_dir] [options]"
+                        "\n\noptions:\n\n"
                         "-s  =  don't check directories\r\n"
                         "-f  =  force save of config files\r\n"
                         "-u  =  update all message base status headers\r\n"
                         "-h  =  don't update message base status headers\r\n"
+#if !defined(__unix__)
+                        "-c  =  force color mode\r\n"
                         "-v# =  set video mode to #\r\n"
                         "-l# =  set screen lines to #\r\n"
-#ifndef __FLAT__
-                        "-t# =  set supported time slice APIs to #\r\n"
-                        "-m  =  show free memory\r\n"
-                        "-n  =  don't use EMS\r\n"
-#endif
+#endif                        
                         "-b# =  set automatic back-up level (default=3 max=10)\r\n"
                         );
         			exit(0);
@@ -208,29 +195,9 @@ backslashcolon(cfg.ctrl_dir);
 
 scrn_len=uifcini();
 
-#if !defined(__FLAT__)
-if(!no_emsovl) {
-	cputs("\r\nEMS: ");
-	if((i=open("EMMXXXX0",O_RDONLY))==-1)
-		cputs("not installed.");
-	else {
-		close(i);
-		reg.h.ah=0x46;			/* Get EMS version */
-		int86(0x67,&reg,&reg);
-		if(reg.h.ah)
-			cputs("\7error getting version.");
-		else {
-			cprintf("Version %u.%u ",(reg.h.al&0xf0)>>4,reg.h.al&0xf);
-			if(_OvrInitEms(0,0,23))    /* use up to 360K */
-				cprintf("allocation failed."); } }
-	cputs("\r\n"); }
-#endif
-
-#ifdef __FLAT__
     if(putenv("TZ=UTC0"))
         printf("putenv() failed!\n");
     tzset();
-#endif
 
 if((l=checktime())!=0) {   /* Check binary time */
 	printf("Time problem (%08lx)\n",l);
@@ -251,15 +218,16 @@ for(i=0;i<14;i++)
 txt.reading=nulstr;
 txt.readit=nulstr;
 
-strcpy(str,argv[0]);
-p=strrchr(str,'\\');
-if(!p) {
-	sprintf(helpdatfile,"..\\EXEC\\SCFGHELP.DAT");
-	sprintf(helpixbfile,"..\\EXEC\\SCFGHELP.IXB"); }
-else {
-	*p=0;
-	sprintf(helpdatfile,"%s\\SCFGHELP.DAT",str);
-	sprintf(helpixbfile,"%s\\SCFGHELP.IXB",str); }
+sprintf(str,"%.*s",sizeof(str)-1,cfg.ctrl_dir);
+p=strrchr(str,'/');
+if(p==NULL)
+    p=strrchr(str,'\\');
+if(p!=NULL)
+    *p=0;
+else
+    strcpy(str,"../exec");
+sprintf(helpdatfile,"%s/scfghelp.dat",str);
+sprintf(helpixbfile,"%s/scfghelp.ixb",str);
 
 sprintf(str,"Synchronet Configuration for %s v%s",PLATFORM_DESC,VERSION);
 if(uscrn(str)) {
@@ -279,15 +247,7 @@ strcpy(mopt[i++],"Command Shells");
 strcpy(mopt[i++],"External Programs");
 strcpy(mopt[i++],"Text File Sections");
 mopt[i][0]=0;
-#ifndef __FLAT__
-freedosmem=farcoreleft();
-#endif
 while(1) {
-#if 0
-	if(freedosmem!=farcoreleft()) {
-		errormsg(WHERE,ERR_CHK,"lost memory",freedosmem-farcoreleft());
-		freedosmem=farcoreleft(); }
-#endif
 	SETHELP(WHERE);
 /*
 Main Configuration Menu:
@@ -872,8 +832,8 @@ int delfiles(char *inpath, char *spec)
 
 strcpy(path,inpath);
 c=strlen(path);
-if(path[c-1]!='\\' && path[c-1]!=':')
-    strcat(path,"\\");
+if(path[c-1]!='\\' && path[c-1]!='/' && path[c-1]!=':')
+    strcat(path,"/");
 sprintf(str,"%s%s",path,spec);
 done=findfirst(str,&ff,0);
 while(!done) {
diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c
index d25e0f9509d94aa1e6a3f091c8cb2842e20acd1b..fcfb441e60b68181fab919877395497808a1ae64 100644
--- a/src/sbbs3/scfg/scfgmsg.c
+++ b/src/sbbs3/scfg/scfgmsg.c
@@ -88,11 +88,11 @@ void clearptrs(int subnum)
 	struct ffblk ff;
 
 upop("Clearing Pointers...");
-sprintf(str,"%sUSER\\PTRS\\*.IXB",cfg.data_dir);
+sprintf(str,"%suser/ptrs/*.ixb",cfg.data_dir);
 last=findfirst(str,&ff,0);
 while(!last) {
 	if(ff.ff_fsize>=((long)cfg.sub[subnum]->ptridx+1L)*10L) {
-		sprintf(str,"%sUSER\\PTRS\\%s",cfg.data_dir,ff.ff_name);
+		sprintf(str,"%suser/ptrs/%s",cfg.data_dir,ff.ff_name);
 		if((file=nopen(str,O_WRONLY))==-1) {
 			errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
 			bail(1); }
@@ -243,7 +243,7 @@ select Yes.
 				if(cfg.sub[j]->grp==i) {
 					sprintf(str,"%s.s*",cfg.sub[j]->code);
 					if(!cfg.sub[j]->data_dir[0])
-						sprintf(tmp,"%sSUBS\\",cfg.data_dir);
+						sprintf(tmp,"%ssubs/",cfg.data_dir);
 					else
 						strcpy(tmp,cfg.sub[j]->data_dir);
 					delfiles(tmp,str);
@@ -440,13 +440,13 @@ export the current message group into.
 						continue;
 					ported++;
 					if(k==1) {		/* AREAS.BBS *.MSG */
-						sprintf(str,"%s%s\\",cfg.echomail_dir,cfg.sub[j]->code);
+						sprintf(str,"%s%s/",cfg.echomail_dir,cfg.sub[j]->code);
 						fprintf(stream,"%-30s %-20s %s\r\n"
 							,str,stou(cfg.sub[j]->sname),str2);
 						continue; }
 					if(k==2) {		/* AREAS.BBS SMB */
 						if(!cfg.sub[j]->data_dir[0])
-							sprintf(str,"%sSUBS\\%s",cfg.data_dir,cfg.sub[j]->code);
+							sprintf(str,"%ssubs/%s",cfg.data_dir,cfg.sub[j]->code);
 						else
 							sprintf(str,"%s%s",cfg.sub[j]->data_dir,cfg.sub[j]->code);
 						fprintf(stream,"%-30s %-20s %s\r\n"
@@ -546,6 +546,7 @@ import into the current message group.
 							(SUB_FIDO|SUB_NAME|SUB_TOUSER|SUB_QUOTE|SUB_HYPER);
 						if(k==1) {		/* AREAS.BBS *.MSG */
 							p=strrchr(str,'\\');
+                            if(p==NULL) p=strrchr(str,'/');
                             if(p) *p=0;
                             else p=str;
 							//sprintf(tmpsub.echopath,"%.*s",LEN_DIR,str);
@@ -563,6 +564,7 @@ import into the current message group.
 							}
 						if(k==2) {		/* AREAS.BBS SMB */
 							p=strrchr(str,'\\');
+                            if(p==NULL) p=strrchr(str,'/');                            
                             if(p) *p=0;
                             else p=str;
 							sprintf(tmpsub.data_dir,"%.*s",LEN_DIR,str);
diff --git a/src/sbbs3/scfg/scfgnode.c b/src/sbbs3/scfg/scfgnode.c
index 4873ea7f9708c02834a80d40680a560d6191e93f..45b6c2e4778f475025d97730991fe82436a9c131 100644
--- a/src/sbbs3/scfg/scfgnode.c
+++ b/src/sbbs3/scfg/scfgnode.c
@@ -190,7 +190,7 @@ select No or hit  ESC .
 		upop("Reading NODE.CNF...");
 		read_node_cfg(&cfg,&txt);
 		upop(0);
-		sprintf(str,"..\\NODE%d\\",i);
+		sprintf(str,"../node%d/",i);
 		sprintf(tmp,"Node %d Path",i);
 SETHELP(WHERE);
 /*
@@ -211,7 +211,7 @@ If you want to abort the creation of this new node, hit  ESC .
 			continue;
 		truncsp(str);
 		strcpy(cfg.node_path[i-1],str);
-		if(str[strlen(str)-1]=='\\')
+		if(str[strlen(str)-1]=='\\' || str[strlen(str)-1]=='/')
 			str[strlen(str)-1]=0;
 		mkdir(str);
 		cfg.node_num=++cfg.sys_nodes;
@@ -596,8 +596,8 @@ Remember: The %! command line specifier is an abreviation for your
 						break;
 					case 6:
 						strcpy(str,cfg.ctrl_dir);
-						if(strstr(str,"\\CTRL\\")!=NULL)
-							*strstr(str,"\\CTRL\\")=0;
+						if(strstr(str,"/ctrl/")!=NULL)
+							*strstr(str,"/ctrl/")=0;
 SETHELP(WHERE);
 /*
 Control Directory Parent:
@@ -611,15 +611,16 @@ The \CTRL\ suffix (sub-directory) cannot be changed or removed.
 */
 						if(uinput(WIN_MID|WIN_SAV,0,9,"Control Dir Parent"
 							,str,50,K_EDIT)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"CTRL\\");
+							if(str[strlen(str)-1]!='\\'
+                                && str[strlen(str)-1]!='/')
+								strcat(str,"/");
+							strcat(str,"ctrl/");
 							strcpy(cfg.ctrl_dir,str); }
 						break;
 					case 7:
 						strcpy(str,cfg.text_dir);
-						if(strstr(str,"\\TEXT\\")!=NULL)
-							*strstr(str,"\\TEXT\\")=0;
+						if(strstr(str,"/text/")!=NULL)
+							*strstr(str,"/text/")=0;
 SETHELP(WHERE);
 /*
 Text Directory Parent:
@@ -635,9 +636,9 @@ The \TEXT\ suffix (sub-directory) cannot be changed or removed.
 */
 						if(uinput(WIN_MID|WIN_SAV,0,10,"Text Dir Parent"
 							,str,50,K_EDIT)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"TEXT\\");
+							if(str[strlen(str)-1]!='\\' && str[strlen(str)-1]!='/')
+								strcat(str,"/");
+							strcat(str,"text/");
 							strcpy(cfg.text_dir,str); }
 						break; } }
 			break;
diff --git a/src/sbbs3/scfg/scfgsub.c b/src/sbbs3/scfg/scfgsub.c
index c59b26e0fac1c3abe193e6a9f71957244ecbc35d..fa0a9925c35431f5f5879bd2e344a100eed433ef 100644
--- a/src/sbbs3/scfg/scfgsub.c
+++ b/src/sbbs3/scfg/scfgsub.c
@@ -199,7 +199,7 @@ If you want to delete all the messages for this sub-board, select Yes.
 		if(j==0) {
 				sprintf(str,"%s.s*",cfg.sub[subnum[i]]->code);
 				if(!cfg.sub[subnum[i]]->data_dir[0])
-					sprintf(tmp,"%sSUBS\\",cfg.data_dir);
+					sprintf(tmp,"%ssubs/",cfg.data_dir);
 				else
 					strcpy(tmp,cfg.sub[subnum[i]]->data_dir);
 				delfiles(tmp,str);
@@ -1087,7 +1087,7 @@ should be re-scanned.
 						: cfg.sub[i]->misc&SUB_FAST ? "Fast Allocation"
 						: "Self-packing");
 					if(!cfg.sub[i]->data_dir[0])
-						sprintf(str,"%sSUBS\\",cfg.data_dir);
+						sprintf(str,"%ssubs/",cfg.data_dir);
 					else
 						strcpy(str,cfg.sub[i]->data_dir);
 					sprintf(opt[n++],"%-27.27s%.40s","Storage Directory",str);
@@ -1177,7 +1177,7 @@ by entering the conference number you want to use.
 								if(cfg.sub[i]->data_dir[0])
 									sprintf(str,"%s",cfg.sub[i]->data_dir);
 								else
-									sprintf(str,"%sSUBS\\",cfg.data_dir);
+									sprintf(str,"%ssubs/",cfg.data_dir);
 								sprintf(str2,"%s.*",cfg.sub[i]->code);
 								delfiles(str,str2); }
 
diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c
index 3d277523de457b3219e3e91babbcc98aadbd3fce..42bfcddf92d2396ccc4f1c8be2a5554af6f2bb4d 100644
--- a/src/sbbs3/scfg/scfgsys.c
+++ b/src/sbbs3/scfg/scfgsys.c
@@ -1082,13 +1082,13 @@ This option allows you to change the parent of your data directory.
 The \DATA\ suffix (sub-directory) cannot be changed or removed.
 */
 						strcpy(str,cfg.data_dir);
-						if(strstr(str,"\\DATA\\")!=NULL)
-							*strstr(str,"\\DATA\\")=0;
+						if(strstr(str,"/data/")!=NULL)
+							*strstr(str,"/data/")=0;
 						if(uinput(WIN_MID|WIN_SAV,0,9,"Data Dir Parent"
 							,str,50,K_EDIT)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"DATA\\");
+							if(str[strlen(str)-1]!='\\' && str[strlen(str)-1]!='/')
+								strcat(str,"/");
+							strcat(str,"data/");
 							strcpy(cfg.data_dir,str); }
                         break;
 					case 2:
@@ -1106,13 +1106,13 @@ This option allows you to change the parent of your exec directory.
 The \EXEC\ suffix (sub-directory) cannot be changed or removed.
 */
 						strcpy(str,cfg.exec_dir);
-						if(strstr(str,"\\EXEC\\")!=NULL)
-							*strstr(str,"\\EXEC\\")=0;
+						if(strstr(str,"/exec/")!=NULL)
+							*strstr(str,"/exec/")=0;
 						if(uinput(WIN_MID|WIN_SAV,0,9,"Exec Dir Parent"
 							,str,50,K_EDIT)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"EXEC\\");
+							if(str[strlen(str)-1]!='\\' && str[strlen(str)-1]!='/')
+								strcat(str,"/");
+							strcat(str,"exec/");
 							strcpy(cfg.exec_dir,str); }
                         break;
 					case 3:
diff --git a/src/sbbs3/scfg/scfgxfr2.c b/src/sbbs3/scfg/scfgxfr2.c
index b2b6c182e1d585cda31302277df49f682bdee1af..fb02adc7ea3310cb8707005cbcbf39ce69648165 100644
--- a/src/sbbs3/scfg/scfgxfr2.c
+++ b/src/sbbs3/scfg/scfgxfr2.c
@@ -151,7 +151,7 @@ library, select Yes.
 				if(cfg.dir[j]->lib==i) {
 					sprintf(str,"%s.*",cfg.dir[j]->code);
 					if(!cfg.dir[j]->data_dir[0])
-						sprintf(tmp,"%sDIRS\\",cfg.data_dir);
+						sprintf(tmp,"%sdirs/",cfg.data_dir);
 					else
 						strcpy(tmp,cfg.dir[j]->data_dir);
 					delfiles(tmp,str); }
@@ -621,7 +621,7 @@ contents, usually an abreviation of the directory's name.
 			umsg("Invalid Code");
 			helpbuf=0;
 			continue; }
-		sprintf(path,"%sDIRS\\%s",cfg.data_dir,code);
+		sprintf(path,"%sdirs/%s",cfg.data_dir,code);
 		SETHELP(WHERE);
 /*
 Directory File Path:
@@ -679,7 +679,7 @@ select Yes.
 		if(j==0) {
 				sprintf(str,"%s.*",cfg.dir[dirnum[i]]->code);
 				if(!cfg.dir[dirnum[i]]->data_dir[0])
-					sprintf(tmp,"%sDIRS\\",cfg.data_dir);
+					sprintf(tmp,"%sdirs/",cfg.data_dir);
 				else
 					strcpy(tmp,cfg.dir[dirnum[i]]->data_dir);
 				delfiles(tmp,str); }
@@ -1386,7 +1386,7 @@ appear in users' new-file scans again.
 				sprintf(opt[n++],"%-27.27s%s","Extensions Allowed"
 					,cfg.dir[i]->exts);
 				if(!cfg.dir[i]->data_dir[0])
-					sprintf(str,"%sDIRS\\",cfg.data_dir);
+					sprintf(str,"%sdirs/",cfg.data_dir);
 				else
 					strcpy(str,cfg.dir[i]->data_dir);
 				sprintf(opt[n++],"%-27.27s%.40s","Data Directory"