diff --git a/src/sbbs3/data_ovl.cpp b/src/sbbs3/data_ovl.cpp
index b50753cabab8f0187731179f4dc58c3a8732fcd7..ba775691904fb8d32ebbac77e35d41c2f24db696 100644
--- a/src/sbbs3/data_ovl.cpp
+++ b/src/sbbs3/data_ovl.cpp
@@ -61,35 +61,30 @@ extern "C" BOOL DLLCALL getmsgptrs(scfg_t* cfg, uint usernumber, subscan_t* subs
 
 	if(!usernumber)
 		return(FALSE);
+
+	/* Initialize to configured defaults */
+	for(i=0;i<cfg->total_subs;i++) {
+		subscan[i].ptr=subscan[i].sav_ptr=0;
+		subscan[i].last=subscan[i].sav_last=0;
+		subscan[i].cfg=0xff;
+		if(!(cfg->sub[i]->misc&SUB_NSDEF))
+			subscan[i].cfg&=~SUB_CFG_NSCAN;
+		if(!(cfg->sub[i]->misc&SUB_SSDEF))
+			subscan[i].cfg&=~SUB_CFG_SSCAN;
+		subscan[i].sav_cfg=subscan[i].cfg; 
+	}
+
 	sprintf(str,"%suser/ptrs/%4.4u.ixb", cfg->data_dir,usernumber);
-	if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-		for(i=0;i<cfg->total_subs;i++) {
-			subscan[i].ptr=subscan[i].sav_ptr=0;
-			subscan[i].last=subscan[i].sav_last=0;
-			subscan[i].cfg=0;
-			if(cfg->sub[i]->misc&SUB_NSDEF)
-				subscan[i].cfg|=SUB_CFG_NSCAN;
-			if(cfg->sub[i]->misc&SUB_SSDEF)
-				subscan[i].cfg|=SUB_CFG_SSCAN;
-			subscan[i].sav_cfg=subscan[i].cfg; 
-		}
+	if((stream=fnopen(&file,str,O_RDONLY))==NULL)
 		return(TRUE); 
-	}
+
 	length=filelength(file);
 	for(i=0;i<cfg->total_subs;i++) {
-		if(length<(cfg->sub[i]->ptridx+1)*10L) {
-			subscan[i].ptr=subscan[i].last=0L;
-			subscan[i].cfg=0;
-			if(cfg->sub[i]->misc&SUB_NSDEF)
-				subscan[i].cfg|=SUB_CFG_NSCAN;
-			if(cfg->sub[i]->misc&SUB_SSDEF)
-				subscan[i].cfg|=SUB_CFG_SSCAN; 
-		}
-		else {
+		if(length>=(cfg->sub[i]->ptridx+1)*10L) {
 			fseek(stream,(long)cfg->sub[i]->ptridx*10L,SEEK_SET);
-			fread(&subscan[i].ptr,sizeof(long),1,stream);
-			fread(&subscan[i].last,sizeof(long),1,stream);
-			fread(&subscan[i].cfg,sizeof(short),1,stream);
+			fread(&subscan[i].ptr,sizeof(subscan[i].ptr),1,stream);
+			fread(&subscan[i].last,sizeof(subscan[i].last),1,stream);
+			fread(&subscan[i].cfg,sizeof(subscan[i].cfg),1,stream);
 		}
 		subscan[i].sav_ptr=subscan[i].ptr;
 		subscan[i].sav_last=subscan[i].last;
@@ -111,7 +106,7 @@ void sbbs_t::putmsgptrs()
 extern "C" BOOL DLLCALL putmsgptrs(scfg_t* cfg, uint usernumber, subscan_t* subscan)
 {
 	char	str[256];
-	ushort	idx,ch;
+	ushort	idx,scancfg;
 	uint	i,j;
 	int 	file;
 	ulong	l=0L,length;
@@ -135,21 +130,22 @@ extern "C" BOOL DLLCALL putmsgptrs(scfg_t* cfg, uint usernumber, subscan_t* subs
 			for(j=0;j<cfg->total_subs;j++)
 				if(cfg->sub[j]->ptridx==idx)
 					break;
-			write(file,&l,sizeof(long));
-			write(file,&l,sizeof(long));
-			ch=0xff;					/* default to scan ON for new sub */
+			write(file,&l,sizeof(l));
+			write(file,&l,sizeof(l));
+			scancfg=0xff;					
 			if(j<cfg->total_subs) {
 				if(!(cfg->sub[j]->misc&SUB_NSDEF))
-					ch&=~SUB_CFG_NSCAN;
+					scancfg&=~SUB_CFG_NSCAN;
 				if(!(cfg->sub[j]->misc&SUB_SSDEF))
-					ch&=~SUB_CFG_SSCAN; 
-			}
-			write(file,&ch,sizeof(short)); 
+					scancfg&=~SUB_CFG_SSCAN; 
+			} else	/* default to scan OFF for unknown sub */
+				scancfg&=~(SUB_CFG_NSCAN|SUB_CFG_SSCAN);
+			write(file,&scancfg,sizeof(scancfg)); 
 		}
 		lseek(file,(long)((long)(cfg->sub[i]->ptridx)*10),SEEK_SET);
-		write(file,&(subscan[i].ptr),sizeof(long));
-		write(file,&(subscan[i].last),sizeof(long));
-		write(file,&(subscan[i].cfg),sizeof(short));
+		write(file,&(subscan[i].ptr),sizeof(subscan[i].ptr));
+		write(file,&(subscan[i].last),sizeof(subscan[i].last));
+		write(file,&(subscan[i].cfg),sizeof(subscan[i].cfg));
 	}
 	close(file);
 	if(!flength(str))				/* Don't leave 0 byte files */