diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c
index 328e84f26f6c151d563565aba7141eab237739ed..458c7d5744b761db280d051fa4bbddcdd55bd1c0 100644
--- a/src/sbbs3/sbbsecho.c
+++ b/src/sbbs3/sbbsecho.c
@@ -323,6 +323,25 @@ faddr_t getsysfaddr(short zone)
 	return(sys_faddr);
 }
 
+int get_flo_outbound(faddr_t dest, char* outbound, size_t maxlen)
+{
+	char* last;
+	if(dest.zone==sys_faddr.zone)		/* Default zone, use default outbound */
+		strncpy(outbound,cfg.outbound,maxlen);
+	else {								/* Inter-zone outbound is OUTBOUND.XXX */
+		safe_snprnitf(outbound,maxlen,"%.*s.%03x"
+			,(int)strlen(cfg.outbound)-1,cfg.outbound,dest.zone);
+	}
+	if(dest.point) {					/* Point destination is OUTBOUND\*.PNT */
+		char point[128];
+		SAFEPRINTF2(point,"%04x%04x.pnt"
+			,dest.net,dest.node);
+		strncat(outbound,point,maxlen); 
+	}
+	backslash(outbound);
+	return mkpath(outbound);
+}
+
 /******************************************************************************
  This function creates or appends on existing Binkley compatible .?LO file
  attach file.
@@ -347,24 +366,8 @@ int write_flofile(char *attachment, faddr_t dest, BOOL bundle)
 	else if(attr&ATTR_HOLD) ch='h';
 	else if(attr&ATTR_DIRECT) ch='d';
 	else ch='f';
-	if(dest.zone==sys_faddr.zone)		/* Default zone, use default outbound */
-		SAFECOPY(outbound,cfg.outbound);
-	else {								/* Inter-zone outbound is OUTBOUND.XXX */
-		SAFEPRINTF3(outbound,"%.*s.%03x"
-			,(int)strlen(cfg.outbound)-1,cfg.outbound,dest.zone);
-		MKDIR(outbound);
-		backslash(outbound);
-	}
-	if(dest.point) {					/* Point destination is OUTBOUND\*.PNT */
-		sprintf(str,"%04x%04x.pnt"
-			,dest.net,dest.node);
-		strcat(outbound,str); 
-	}
-	if(outbound[strlen(outbound)-1]=='\\'
-		|| outbound[strlen(outbound)-1]=='/')
-		outbound[strlen(outbound)-1]=0;
-	MKDIR(outbound);
-	backslash(outbound);
+
+	get_flo_outbound(dest, outbound, sizeof(outbound)-2);
 	if(dest.point)
 		sprintf(fname,"%s%08x.%clo",outbound,dest.point,ch);
 	else
@@ -1691,7 +1694,7 @@ int attachment(char *bundlename,faddr_t dest, int mode)
 ******************************************************************************/
 void pack_bundle(char *infile,faddr_t dest)
 {
-	char str[256],fname[256],outbound[128],day[3],*p;
+	char str[MAX_PATH+1],fname[MAX_PATH+1],outbound[MAX_PATH+1],day[3],*p;
 	int i,j,file,node;
 	time_t now;
 
@@ -1716,28 +1719,10 @@ void pack_bundle(char *infile,faddr_t dest)
 			if(cfg.log&LOG_ROUTING)
 				lprintf(LOG_NOTICE,"Routing %s to %s",infile,smb_faddrtoa(&dest,NULL));
 		}
-
-		if(dest.zone==sys_faddr.zone)	/* Default zone, use default outbound */
-			SAFECOPY(outbound,cfg.outbound);
-		else {							/* Inter-zone outbound is OUTBOUND.XXX */
-			SAFEPRINTF3(outbound,"%.*s.%03x"
-				,(int)strlen(cfg.outbound)-1,cfg.outbound,dest.zone);
-			MKDIR(outbound);
-			backslash(outbound);
-		}
-		if(dest.point) {				/* Point destination is OUTBOUND\*.PNT */
-			sprintf(str,"%04x%04x.pnt"
-				,dest.net,dest.node);
-			strcat(outbound,str); 
-		}
-		}
+		get_flo_outbound(dest, outbound, sizeof(outbound));
+	}
 	else
 		strcpy(outbound,cfg.outbound);
-	if(outbound[strlen(outbound)-1]=='\\'
-		|| outbound[strlen(outbound)-1]=='/')
-		outbound[strlen(outbound)-1]=0;
-	MKDIR(outbound);
-	backslash(outbound);
 
 	if(node<cfg.nodecfgs)
 		if(cfg.nodecfg[node].arctype==0xffff) {    /* Uncompressed! */
@@ -5063,6 +5048,28 @@ int main(int argc, char **argv)
 				fwrite(&hdr.attr,sizeof(hdr.attr),1,fidomsg);
 				fseek(fidomsg,sizeof(fmsghdr_t),SEEK_SET);
 			}
+			if((misc&FLO_MAILER) && (hdr.attr&FIDO_FREQ)) {
+				char req[MAX_PATH+1];
+				FILE* fp;
+
+				printf("file request: %s\n", hdr.subj);
+				fclose(fidomsg);
+
+				get_flo_outbound(addr, outbound, sizeof(outbound));
+				if(addr.point)
+					SAFEPRINTF2(req,"%s%08x.req",outbound,addr.point);
+				else
+					SAFEPRINTF3(req,"%s%04x%04x.req",outbound,addr.net,addr.node);
+				if((fp=fopen(req,"w")) == NULL)
+					lprintf(LOG_ERR,"ERROR %d creating/opening %s", errno, req);
+				else {
+					fprintf(fp,"%s",getfname(hdr.subj));
+					fclose(fp);
+					if(write_flofile(req, addr, /* bundle: */FALSE))
+						bail(1);
+				}
+				continue;
+			}
 
 			if(cfg.log&LOG_PACKING)
 				logprintf("Packing %s (%s) attr=%04hX",path,smb_faddrtoa(&addr,NULL),hdr.attr);
@@ -5096,24 +5103,7 @@ int main(int argc, char **argv)
 				else if(attr&ATTR_HOLD) ch='h';
 				else if(attr&ATTR_DIRECT) ch='d';
 				else ch='o';
-				if(addr.zone==sys_faddr.zone) { /* Default zone, use default outbound */
-					SAFECOPY(outbound,cfg.outbound);
-				} else {						 /* Inter-zone outbound is OUTBOUND.XXX */
-					SAFEPRINTF3(outbound,"%.*s.%03x"
-						,(int)strlen(cfg.outbound)-1,cfg.outbound,addr.zone);
-					MKDIR(outbound);
-					backslash(outbound);
-				}
-				if(addr.point) {			/* Point destination is OUTBOUND.PNT */
-					sprintf(str,"%04x%04x.pnt"
-						,addr.net,addr.node);
-					strcat(outbound,str); 
-				}
-				if(outbound[strlen(outbound)-1]=='\\'
-					|| outbound[strlen(outbound)-1]=='/')
-					outbound[strlen(outbound)-1]=0;
-				MKDIR(outbound);
-				backslash(outbound);
+				get_flo_outbound(addr, outbound, sizeof(outbound));
 				if(addr.point)
 					SAFEPRINTF3(packet,"%s%08x.%cut",outbound,addr.point,ch);
 				else