diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c
index 290bc266ebeebc9407f1bd89fcf2222dac99c32a..2c41df4269a04b9fbf22e0eb918abf7d68de7804 100644
--- a/src/sbbs3/scfg/scfgmsg.c
+++ b/src/sbbs3/scfg/scfgmsg.c
@@ -126,6 +126,7 @@ void msgs_cfg()
 	char	tmp_code[16];
 	int		j,k,l,q,s;
 	int		i,file,ptridx,n;
+	unsigned total_subs;
 	long	ported;
 	sub_t	tmpsub;
 	static grp_t savgrp;
@@ -538,6 +539,8 @@ import into the current message group.
 					uifc.msg("Open Failure");
                     break; }
 				uifc.pop("Importing Areas...");
+				total_subs = cfg.total_subs;	 /* Save original number of subs */
+				ptridx = 0;
 				while(!feof(stream)) {
 					if(!fgets(str,sizeof(str),stream)) break;
 					truncsp(str);
@@ -676,13 +679,13 @@ import into the current message group.
 						|| tmpsub.qwkname[0]==0)
 						continue;
 
-					for(j=0;j<cfg.total_subs;j++) {
+					for(j=0;j<total_subs;j++) {
 						if(cfg.sub[j]->grp!=i)
 							continue;
 						if(!stricmp(cfg.sub[j]->code_suffix,tmpsub.code_suffix))
 							break; }
-					if(j==cfg.total_subs) {
-
+					if(j==total_subs) {
+						j=cfg.total_subs;
 						if((cfg.sub=(sub_t **)realloc(cfg.sub
 							,sizeof(sub_t *)*(cfg.total_subs+1)))==NULL) {
 							errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_subs+1);
@@ -698,9 +701,9 @@ import into the current message group.
 						}
 						memset(cfg.sub[j],0,sizeof(sub_t)); }
 					if(!k) {
-						ptridx=cfg.sub[j]->ptridx;	/* save original ptridx */
+						n=cfg.sub[j]->ptridx;	/* save original ptridx */
 						memcpy(cfg.sub[j],&tmpsub,sizeof(sub_t));
-						cfg.sub[j]->ptridx=ptridx;	/* restore original ptridx */
+						cfg.sub[j]->ptridx=n;	/* restore original ptridx */
 					} else {
                         cfg.sub[j]->grp=i;
 						if(cfg.total_faddrs)
@@ -714,16 +717,17 @@ import into the current message group.
 							cfg.sub[j]->maxmsgs=1000;
 					}
 					if(j==cfg.total_subs) {	/* adding new sub-board */
-						for(ptridx=0;ptridx<USHRT_MAX;ptridx++) {
-							for(n=0;n<cfg.total_subs;n++)
+						for(;ptridx<USHRT_MAX;ptridx++) {
+							for(n=0;n<total_subs;n++)
 								if(cfg.sub[n]->ptridx==ptridx)
 									break;
-							if(n==cfg.total_subs)
+							if(n==total_subs)
 								break; 
 						}
 						cfg.sub[j]->ptridx=ptridx;	/* use new ptridx */
 						cfg.sub[j]->misc=tmpsub.misc;
 						cfg.total_subs++; 
+						ptridx++;	/* don't use the same ptridx for next sub */
 					}
 					uifc.changes=1; 
 					ported++;