diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index 50b7f2ef88a8c3c89c958374a517fe9f0a54f2fb..bb163766d4ea330235bfb6777969c92cf67e453b 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -391,6 +391,7 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define STRIPKLUDGE (1L<<15)		/* Strip FTN Kludge lines from msg		*/
 #define XTRN_CHKTIME (1<<16)		/* Check time online (EX_CHKTIME)		*/
 #define XTRN_LWRCASE (1<<17)		/* Use lowercase drop-file names		*/
+#define XTRN_SH		 (1<<18)		/* Use command shell to execute			*/
 
 									/* Bits in cfg.xtrn_misc				*/
 #define XTRN_NO_MUTEX	(1<<0)		/* Do not use exec_mutex for FOSSIL VXD	*/
diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp
index a3385dd477d7dbc90d8ee65f643bda638661dd3f..cb01921b7c0ead7692c4c535a30dc8fa0ae86e8e 100644
--- a/src/sbbs3/xtrn_sec.cpp
+++ b/src/sbbs3/xtrn_sec.cpp
@@ -1664,7 +1664,9 @@ bool sbbs_t::exec_xtrn(uint xtrnnum)
 	if(fexistcase(str))
 		remove(str);
 
-	mode=0; 	/* EX_SH */
+	mode=0; 	
+	if(cfg.xtrn[xtrnnum]->misc&XTRN_SH)
+		mode|=EX_SH;
 	if(cfg.xtrn[xtrnnum]->misc&IO_INTS)
 		mode|=(EX_OUTR|EX_INR|EX_OUTL);
 	if(cfg.xtrn[xtrnnum]->misc&WWIVCOLOR)