diff --git a/src/sbbs3/download.cpp b/src/sbbs3/download.cpp
index 0e4332285cb2b139f0651102ae8f4e3342a869e4..093e60c6dff4275d0230b3916101246c91cce395 100644
--- a/src/sbbs3/download.cpp
+++ b/src/sbbs3/download.cpp
@@ -83,8 +83,6 @@ const char* sbbs_t::protcmdline(prot_t* prot, enum XFER_TYPE type)
 			return(prot->batulcmd);
 		case XFER_BATCH_DOWNLOAD:
 			return(prot->batdlcmd);
-		case XFER_BIDIR:
-			return(prot->bicmd);
 	}
 
 	return("invalid transfer type");
diff --git a/src/sbbs3/qwk.cpp b/src/sbbs3/qwk.cpp
index ce8c1ff4306042d8085f465f099aea4b7f2aaaea..6469c2f2e07a03bd3ec9548258423aad416ecc01 100644
--- a/src/sbbs3/qwk.cpp
+++ b/src/sbbs3/qwk.cpp
@@ -375,7 +375,7 @@ void sbbs_t::qwk_success(ulong msgcnt, char bi, char prepack)
 /****************************************************************************/
 void sbbs_t::qwk_sec()
 {
-	char	str[256],tmp2[256],ch,bi=0;
+	char	str[256],tmp2[256],ch;
 	char 	tmp[512];
 	int		error;
 	int 	s;
@@ -390,9 +390,6 @@ void sbbs_t::qwk_sec()
 	}
 	for(i=0;i<cfg.total_subs;i++)
 		sav_ptr[i]=subscan[i].ptr;
-	for(i=0;i<cfg.total_prots;i++)
-		if(cfg.prot[i]->bicmd[0] && chk_ar(cfg.prot[i]->ar,&useron,&client))
-			bi++;				/* number of bidirectional protocols configured */
 	if(useron.rest&FLAG('Q'))
 		getusrsubs();
 	delfiles(cfg.temp_dir,ALLFILES);
@@ -404,8 +401,6 @@ void sbbs_t::qwk_sec()
 		ASYNC;
 		bputs(text[QWKPrompt]);
 		sprintf(str,"?UDCSP\r%c",text[YNQP][2]);
-		if(bi)
-			strcat(str,"B");
 		ch=(char)getkeys(str,0);
 		if(ch>' ')
 			logch(ch,0);
diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index b270f1cbc0e0bfe96787053d1cda91f88ed20469..f0c8702fd8e3f34390bd024be280c69f422a3f37 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -884,7 +884,6 @@ enum XFER_TYPE {				/* Values for type in xfer_prot_select()	*/
 	,XFER_DOWNLOAD
 	,XFER_BATCH_UPLOAD
 	,XFER_BATCH_DOWNLOAD
-	,XFER_BIDIR
 };
 
 #define L_LOGON     1			/* Logon List maintenance                   */
diff --git a/src/sbbs3/scfg/scfgxfr1.c b/src/sbbs3/scfg/scfgxfr1.c
index ea2916e2cb99fe98a4f4f2a2709476cb837dda01..b46a6734408147955bf000e797272e69940b1199 100644
--- a/src/sbbs3/scfg/scfgxfr1.c
+++ b/src/sbbs3/scfg/scfgxfr1.c
@@ -830,8 +830,8 @@ void xfer_opts()
 						"files either to or from a remote user. For each protocol, you can\n"
 						"specify the mnemonic (hot-key) to use to specify that protocol, the\n"
 						"command line to use for uploads, downloads, batch uploads, batch\n"
-						"downloads, bi-directional file transfers, support of DSZLOG, and (for\n"
-						"*nix only) if it uses socket I/O or the more common stdio.\n"
+						"downloads, support of DSZLOG, and (for *nix only) if it uses socket\n"
+						"I/O or the more common stdio.\n"
 						"\n"
 						"If the protocol doesn't support a certain method of transfer, or you\n"
 						"don't wish it to be available for a certain method of transfer, leave\n"
@@ -916,8 +916,6 @@ void xfer_opts()
 							,cfg.prot[i]->batulcmd);
 						sprintf(opt[j++],"%-30.30s%-40s","Batch Download Command Line"
 							,cfg.prot[i]->batdlcmd);
-						sprintf(opt[j++],"%-30.30s%-40s","Bi-dir Command Line"
-							,cfg.prot[i]->bicmd);
 						sprintf(opt[j++],"%-30.30s%s",   "Native Executable/Script"
 							,cfg.prot[i]->misc&PROT_NATIVE ? "Yes" : "No");
 						sprintf(opt[j++],"%-30.30s%s",	 "Supports DSZLOG"
@@ -973,12 +971,6 @@ void xfer_opts()
 									,cfg.prot[i]->batdlcmd,sizeof(cfg.prot[i]->batdlcmd)-1,K_EDIT);
 								break;
 							case 7:
-								uifc.helpbuf = SCFG_CMDLINE_PREFIX_HELP SCFG_CMDLINE_SPEC_HELP;
-								uifc.input(WIN_MID|WIN_SAV,0,0
-									,"Command"
-									,cfg.prot[i]->bicmd,sizeof(cfg.prot[i]->bicmd)-1,K_EDIT);
-								break;
-							case 8:
 								l=cfg.prot[i]->misc&PROT_NATIVE ? 0:1;
 								l=uifc.list(WIN_MID|WIN_SAV,0,0,0,&l,0
 									,"Native Executable/Script",uifcYesNoOpts);
@@ -988,7 +980,7 @@ void xfer_opts()
 									uifc.changes=1; 
 								}
 								break; 
-							case 9:
+							case 8:
 								l=cfg.prot[i]->misc&PROT_DSZLOG ? 0:1;
 								l=uifc.list(WIN_MID|WIN_SAV,0,0,0,&l,0
 									,"Uses DSZLOG",uifcYesNoOpts);
@@ -998,7 +990,7 @@ void xfer_opts()
 									uifc.changes=1; 
 								}
 								break; 
-							case 10:
+							case 9:
 								l=cfg.prot[i]->misc&PROT_SOCKET ? 0:1l;
 								l=uifc.list(WIN_MID|WIN_SAV,0,0,0,&l,0
 									,"Uses Socket I/O",uifcYesNoOpts);
diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp
index ac9a462dfac5f6f7c4cf4511826d5b2990b27f0f..d9b29a8598908369d22c5d8590deaf2ecb803c9a 100644
--- a/src/sbbs3/str.cpp
+++ b/src/sbbs3/str.cpp
@@ -965,8 +965,6 @@ void sbbs_t::xfer_prot_menu(enum XFER_TYPE type)
 			continue;
 		if(type==XFER_BATCH_DOWNLOAD && cfg.prot[i]->batdlcmd[0]==0)
 			continue;
-		if(type==XFER_BIDIR && cfg.prot[i]->bicmd[0]==0)
-			continue;
 		if(printed && (cols < 80 || (printed%2)==0))
 			CRLF;
 		bprintf(text[TransferProtLstFmt],cfg.prot[i]->mnemonic,cfg.prot[i]->name);