diff --git a/src/sbbs3/echocfg.c b/src/sbbs3/echocfg.c
index 9aa2ff8c4300fe9d4faa266b1244b2eb7b48957c..e84ea79a4c89b59595143e5acb2bf431f135cae1 100644
--- a/src/sbbs3/echocfg.c
+++ b/src/sbbs3/echocfg.c
@@ -8,7 +8,7 @@
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
  * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
  *																			*
- * Copyright 2014 Rob Swindell - http://www.synchro.net/copyright.html		*
+ * Copyright 2015 Rob Swindell - http://www.synchro.net/copyright.html		*
  *																			*
  * This program is free software; you can redistribute it and/or			*
  * modify it under the terms of the GNU General Public License				*
@@ -772,18 +772,47 @@ int main(int argc, char **argv)
 	uifc.helpbuf=
 	"`Secure Operation` tells SBBSecho to check the AREAS.BBS file to insure\r\n"
 	"    that the packet origin exists there as well as check the password of\r\n"
-	"    that node (if configured).\r\n\r\n"
+	"    that node (if configured).\r\n"
+	"\r\n"
 	"`Convert Existing Tear Lines` tells SBBSecho to convert any tear lines\r\n"
-	"    (`---`) existing in the message text to to `===`.\r\n\r\n"
-	"`Fuzzy Zone Operation` when set to yes if SBBSecho receives an inbound\r\n"
+	"    (`---`) existing in the message text to to `===`.\r\n"
+	"\r\n"
+	"`Fuzzy Zone Operation` when set to `Yes`, if SBBSecho receives an inbound\r\n"
 	"    netmail with no international zone information, it will compare the\r\n"
 	"    net/node of the destination to the net/node information in your AKAs\r\n"
-	"    and assume the zone of a matching AKA.\r\n\r\n"
+	"    and assume the zone of a matching AKA.\r\n"
+	"\r\n"
 	"`Store PATH/SEEN-BY/Unkown Kludge Lines in Message Base` allows you to\r\n"
 	"    determine whether or not SBBSecho will store this information from\r\n"
-	"    incoming messages in the Synchronet message base.\r\n\r\n"
-	"`Allow Nodes to Add Areas in the AREAS.BBS List` when set to `YES` allows\r\n"
-	"    uplinks to add areas listed in the AREAS.BBS file\r\n";
+	"    incoming messages in the Synchronet message base (for debugging).\r\n"
+	"\r\n"
+	"`Allow Nodes to Add Areas in the AREAS.BBS List` when set to `Yes` allows\r\n"
+	"    uplinks to add areas listed in the AREAS.BBS file\r\n"
+	"\r\n"
+	"`Strip Line Feeds From Outgoing Messages` when set to `Yes` instructs\r\n"
+	"    SBBSecho to remove any line-feed (ASCII 10) characters from the body\r\n"
+	"    text of messages being exported to FidoNet EchoMail.\r\n"
+	"\r\n"
+	"`Kill/Ignore Empty NetMail Messages` will instruct SBBSecho to simply\r\n"
+	"    discard (not import or export) NetMail messages without any body.\r\n"
+	"\r\n"
+	"`Circular Path Detection` when `Enabled` will cause SBBSecho, during\r\n"
+	"    EchoMail import, to check the PATH kludge lines for any of the\r\n"
+	"    system's AKAs and if found (indicating a message loop), not import\r\n"
+	"    the message.\r\n"
+	"\r\n"
+	"`Forward Circular Messages To Links` is only valid when `Circular Path\r\n"
+	"    Detection` is enabled. When set to `No`, SBBSecho will discard\r\n"
+	"    the circular/looped message and not forward to any linked nodes.\r\n"
+	"\r\n"
+	"`Bundle Attachments` may be either `Killed` (deleted) or `Truncated` (set\r\n"
+	"    to 0-bytes in length).\r\n"
+	"\r\n"
+	"`Zone Blind SEEN-BY and PATH Lines` when `Enabled` will cause SBBSecho\r\n"
+	"    to assume that node numbers are not duplicated across zones and\r\n"
+	"    that a net/node combination in either of these Kludge lines should\r\n"
+	"    be used to identify a specific node regardless of which zone that\r\n"
+	"    node is located (thus breaking the rules of FidoNet 3D addressing).\r\n";
 				j=0;
 				while(1) {
 					i=0;
@@ -807,6 +836,8 @@ int main(int argc, char **argv)
 						"Messages",misc&KILL_EMPTY_MAIL ? "Yes":"No");
 					sprintf(opt[i++],"%-50.50s%s","Circular Path Detection"
 						,cfg.check_path ? "Enabled" : "Disabled");
+					sprintf(opt[i++],"%-50.50s%s","Forward Circular Messages to Links"
+						,cfg.check_path ? (cfg.fwd_circular ? "Yes" : "No") : "N/A");
 					sprintf(opt[i++],"%-50.50s%s","Bundle Attachments"
 						,misc&TRUNC_BUNDLES ? "Truncate" : "Kill");
 					sprintf(opt[i++],"%-50.50s%s","Zone Blind SEEN-BY and PATH Lines"
@@ -847,12 +878,14 @@ int main(int argc, char **argv)
 							cfg.check_path=!cfg.check_path;
 							break;
 						case 10:
-							misc^=TRUNC_BUNDLES;
+							cfg.fwd_circular=!cfg.fwd_circular;
 							break;
 						case 11:
+							misc^=TRUNC_BUNDLES;
+							break;
+						case 12:
 							cfg.zone_blind=!cfg.zone_blind;
 							break;
-
 					} 
 				}
 				break;
@@ -1161,6 +1194,8 @@ int main(int argc, char **argv)
 				}
 				if(!cfg.check_path)
 					fprintf(stream,"NOPATHCHECK\n");
+				if(!cfg.fwd_circular)
+					fprintf(stream,"NOCIRCULARFWD\n");
 				if(cfg.zone_blind) {
 					fprintf(stream,"ZONE_BLIND");
 					if(cfg.zone_blind_threshold != 0xffff)
diff --git a/src/sbbs3/rechocfg.c b/src/sbbs3/rechocfg.c
index b506da54f97c3bd4a69d7e66706bcef75406135b..4fd98392687db0e82555eae14130472187f3455c 100644
--- a/src/sbbs3/rechocfg.c
+++ b/src/sbbs3/rechocfg.c
@@ -8,7 +8,7 @@
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
  * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
  *																			*
- * Copyright 2014 Rob Swindell - http://www.synchro.net/copyright.html		*
+ * Copyright 2015 Rob Swindell - http://www.synchro.net/copyright.html		*
  *																			*
  * This program is free software; you can redistribute it and/or			*
  * modify it under the terms of the GNU General Public License				*
@@ -202,6 +202,7 @@ void read_echo_cfg()
 	cfg.log=LOG_DEFAULTS;
 	cfg.log_level=LOG_INFO;
 	cfg.check_path=TRUE;
+	cfg.fwd_circular=TRUE;
 	cfg.zone_blind=FALSE;
 	cfg.zone_blind_threshold=0xffff;
 	SAFECOPY(cfg.sysop_alias,"SYSOP");
@@ -271,6 +272,10 @@ void read_echo_cfg()
 			cfg.check_path=FALSE;
 			continue;
 		}
+		if(!stricmp(tmp,"NOCIRCULARFWD")) {
+			cfg.fwd_circular=FALSE;
+			continue;
+		}
 
 		if(!stricmp(tmp,"ZONE_BLIND")) {
 			cfg.zone_blind=TRUE;
diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c
index 6241fec34bcf71d89c626562c45f04b523fdd1f7..07355ec666f89616d85ea9dc9dbf6a54de205eac 100644
--- a/src/sbbs3/sbbsecho.c
+++ b/src/sbbs3/sbbsecho.c
@@ -4756,7 +4756,7 @@ int main(int argc, char **argv)
 					continue; 
 				} 						/* On to the next message */
 
-
+				/* TODO: Should circular path detection occur before processing pass-through areas? */
 				if(cfg.check_path) {
 					for(j=0;j<scfg.total_faddrs;j++)
 						if(check_psb(&msg_path,scfg.faddr[j]))
@@ -4768,8 +4768,10 @@ int main(int argc, char **argv)
 						if(cfg.log&LOG_CIRCULAR)
 							logprintf("%s: Circular path detected for %s"
 								,areatagstr,smb_faddrtoa(&scfg.faddr[j],NULL));
-						strip_psb(fmsgbuf);
-						pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen,msg_path,0);
+						if(cfg.fwd_circular) {
+							strip_psb(fmsgbuf);
+							pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen,msg_path,0);
+						}
 						printf("\n");
 						continue; 
 					}
diff --git a/src/sbbs3/sbbsecho.h b/src/sbbs3/sbbsecho.h
index e76a93caf59a0fa4c76248efe32ce378f7e9e050..4d131780e94c6807cf89981053a90731552a3277 100644
--- a/src/sbbs3/sbbsecho.h
+++ b/src/sbbs3/sbbsecho.h
@@ -8,7 +8,7 @@
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
  * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
  *																			*
- * Copyright 2014 Rob Swindell - http://www.synchro.net/copyright.html		*
+ * Copyright 2015 Rob Swindell - http://www.synchro.net/copyright.html		*
  *																			*
  * This program is free software; you can redistribute it and/or			*
  * modify it under the terms of the GNU General Public License				*
@@ -236,6 +236,7 @@ typedef struct {
 	echolist_t *listcfg;			/* Each echolist configuration */
 	areasbbs_t *area;				/* Each area configuration */
 	BOOL		check_path;			/* Enable circular path detection */
+	BOOL		fwd_circular;		/* Allow the forwrarding of circular messages to links (defaults to true, only applicable if check_path is also true) */
 	BOOL		zone_blind;			/* Pretend zones don't matter when parsing and constructing PATH and SEEN-BY lines (per Wilfred van Velzen, 2:280/464) */
 	uint16_t	zone_blind_threshold;	/* Zones below this number (e.g. 4) will be treated as the same zone when zone_blind is enabled */
 	} config_t;