diff --git a/src/sbbs3/mail.cpp b/src/sbbs3/mail.cpp
index 1e01742823e0fba868c598488dea70259aa712db..1a922ed10c8878bbffa54f86c5700b2f2f1bb38a 100644
--- a/src/sbbs3/mail.cpp
+++ b/src/sbbs3/mail.cpp
@@ -42,7 +42,7 @@
 /* If sent is non-zero, it returns the number of mail sent by usernumber    */
 /* If usernumber is 0, it returns all mail on the system                    */
 /****************************************************************************/
-int getmail(scfg_t* cfg, int usernumber, BOOL sent)
+int DLLCALL getmail(scfg_t* cfg, int usernumber, BOOL sent)
 {
     char    str[128];
     int     i=0;
@@ -213,15 +213,21 @@ void sbbs_t::telluser(smbmsg_t* msg)
 /* of pointers to mail_t (message numbers and attributes)                   */
 /* smb_open(&smb) must be called prior										*/
 /****************************************************************************/
-mail_t* loadmail(smb_t* smb, long* msgs, uint usernumber
+mail_t* DLLCALL loadmail(smb_t* smb, ulong* msgs, uint usernumber
 			   ,int which, long mode)
 {
 	ulong		l=0;
     idxrec_t    idx;
 	mail_t*		mail=NULL;
 
+	if(msgs==NULL)
+		return(NULL);
+
 	*msgs=0;
 
+	if(smb==NULL)
+		return(NULL);
+
 	if(smb_locksmbhdr(smb)!=0)  				/* Be sure noone deletes or */
 		return(NULL);							/* adds while we're reading */
 
@@ -255,7 +261,7 @@ mail_t* loadmail(smb_t* smb, long* msgs, uint usernumber
 	return(mail);
 }
 
-extern "C" void freemail(mail_t* mail)
+extern "C" void DLLCALL freemail(mail_t* mail)
 {
 	FREE(mail);
 }
@@ -266,7 +272,7 @@ extern "C" void freemail(mail_t* mail)
 void sbbs_t::delallmail(uint usernumber)
 {
 	int 	i;
-	long	l,msgs,deleted=0;
+	ulong	l,msgs,deleted=0;
 	mail_t	*mail;
 	smbmsg_t msg;
 
diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp
index 8eaae51d27ef176f4c2ff2d9f34fbfe057e70469..4b03aa23204be267e92fd3a277c3482b1df8a4ed 100644
--- a/src/sbbs3/pack_qwk.cpp
+++ b/src/sbbs3/pack_qwk.cpp
@@ -48,7 +48,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 	int 	file,mode;
 	uint	i,j,k,conf;
 	long	l,size,msgndx,posts,ex;
-	long	mailmsgs=0;
+	ulong	mailmsgs=0;
 	ulong	totalcdt,totaltime,lastmsg
 			,files,submsgs,msgs,netfiles=0,preqwk=0;
 	float	f;	/* Sparky is responsible */
@@ -189,7 +189,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 		errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY|O_TRUNC);
 		return(false); }
 	l=filelength(file);
-	if(!l) {
+	if(l<1) {
 		fprintf(qwk,"%-128s",QWK_HEADER);
 		msgndx=1; }
 	else
@@ -231,7 +231,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 		/* Pack E-mail, if any */
 		/***********************/
 		qwkmail_time=time(NULL);
-		mail=loadmail(&smb, &mailmsgs,useron.number,0,useron.qwk&QWK_ALLMAIL ? 0
+		mail=loadmail(&smb,&mailmsgs,useron.number,0,useron.qwk&QWK_ALLMAIL ? 0
 			: LM_UNREAD);
 		if(mailmsgs && !(sys_status&SS_ABORT)) {
 			bputs(text[QWKPackingEmail]);
@@ -254,7 +254,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 			else
 				mode&=~TO_QNET;
 
-			for(l=0;l<mailmsgs;l++) {
+			for(l=0;(ulong)l<mailmsgs;l++) {
 				bprintf("\b\b\b\b\b\b\b\b\b\b\b\b%4lu of %-4lu"
 					,l+1,mailmsgs);
 
diff --git a/src/sbbs3/pack_rep.cpp b/src/sbbs3/pack_rep.cpp
index f40015c6df93b075c05fb0df1d65b7e8277ad622..7ec1394e1f33490cb4a6d3832306279112ad6ded 100644
--- a/src/sbbs3/pack_rep.cpp
+++ b/src/sbbs3/pack_rep.cpp
@@ -49,7 +49,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 	int 	file,mode;
 	uint	i,j,k;
 	long	l,msgcnt,submsgs,posts,packedmail,netfiles=0,deleted;
-	long	mailmsgs;
+	ulong	mailmsgs;
 	ulong	last,msgs;
 	post_t	HUGE16 *post;
 	mail_t	*mail;
@@ -73,7 +73,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 	if((rep=fnopen(&file,str,O_CREAT|O_WRONLY))==NULL) {
 		errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY);
 		return(false); }
-	if(!filelength(file)) { 						/* New REP packet */
+	if(filelength(file)<1) { 							/* New REP packet */
 		sprintf(str,"%-128s",cfg.qhub[hubnum]->id);     /* So write header */
 		fwrite(str,128,1,rep); }
 	fseek(rep,0L,SEEK_END);
@@ -97,7 +97,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 	packedmail=0;
 	if(mailmsgs) {
 		lprintf("Packing NetMail for %s", cfg.qhub[hubnum]->id);
-		for(l=0;l<mailmsgs;l++) {
+		for(l=0;(ulong)l<mailmsgs;l++) {
 	//		bprintf("\b\b\b\b\b%-5lu",l+1);
 
 			msg.idx.offset=mail[l].offset;
@@ -254,7 +254,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 
 		deleted=0;
 		/* Mark as READ and DELETE */
-		for(l=0;l<mailmsgs;l++) {
+		for(l=0;(ulong)l<mailmsgs;l++) {
 			if(mail[l].time>qwkmail_time)
 				continue;
 			msg.idx.offset=0;
diff --git a/src/sbbs3/qwk.cpp b/src/sbbs3/qwk.cpp
index 6ad8508a9d23f21bb31708488901dc64a0457382..000f73cf8179e6b8d371f4e1f996417707390cfb 100644
--- a/src/sbbs3/qwk.cpp
+++ b/src/sbbs3/qwk.cpp
@@ -318,7 +318,7 @@ void sbbs_t::qwk_success(ulong msgcnt, char bi, char prepack)
 {
 	char	str[128];
 	int 	i;
-	long	l,msgs,deleted=0;
+	ulong	l,msgs,deleted=0;
 	mail_t	*mail;
 	smbmsg_t msg;
 
diff --git a/src/sbbs3/readmail.cpp b/src/sbbs3/readmail.cpp
index b43d9c702264d7feb93e3b95f6b21d99239cf927..28bde7cc8a267681fe638f24633c49be6260c614 100644
--- a/src/sbbs3/readmail.cpp
+++ b/src/sbbs3/readmail.cpp
@@ -46,7 +46,7 @@ void sbbs_t::readmail(uint usernumber, int which)
 			,*p,*tp,*sp,ch;
 	int		i,j;
 	int		mismatches=0,act;
-	long 	msgs,curmsg;
+	ulong 	msgs,curmsg;
     long    length,l,lm_mode;
 	ulong	last;
 	bool	replied;
@@ -461,7 +461,7 @@ void sbbs_t::readmail(uint usernumber, int which)
 					bputs(text[MailOnSystemLstHdr]);
 				else
 					bputs(text[MailWaitingLstHdr]);
-				for(;i<msgs && !msgabort();i++) {
+				for(;(ulong)i<msgs && !msgabort();i++) {
 					if(msg.total_hfields)
 						smb_freemsgmem(&msg);
 					msg.total_hfields=0;
@@ -506,10 +506,10 @@ void sbbs_t::readmail(uint usernumber, int which)
 					smb_unlockmsghdr(&smb,&msg); }
 				break;
 			case '>':
-				for(i=curmsg+1;i<msgs;i++)
+				for(i=curmsg+1;(ulong)i<msgs;i++)
 					if(mail[i].subj==msg.idx.subj)
 						break;
-				if(i<msgs)
+				if((ulong)i<msgs)
 					curmsg=i;
 				else
 					domsg=0;
@@ -525,19 +525,19 @@ void sbbs_t::readmail(uint usernumber, int which)
 				break;
 			case '}':   /* Search Author forward */
 				strcpy(str,msg.from);
-				for(i=curmsg+1;i<msgs;i++)
+				for(i=curmsg+1;(ulong)i<msgs;i++)
 					if(mail[i].from==msg.idx.from)
 						break;
-				if(i<msgs)
+				if((ulong)i<msgs)
 					curmsg=i;
 				else
 					domsg=0;
 				break;
 			case 'N':   /* Got to next un-read message */
-				for(i=curmsg+1;i<msgs;i++)
+				for(i=curmsg+1;(ulong)i<msgs;i++)
 					if(!(mail[i].attr&MSG_READ))
 						break;
-				if(i<msgs)
+				if((ulong)i<msgs)
 					curmsg=i;
 				else
 					domsg=0;
@@ -554,20 +554,20 @@ void sbbs_t::readmail(uint usernumber, int which)
 				break;
 			case ']':   /* Search To User forward */
 				strcpy(str,msg.to);
-				for(i=curmsg+1;i<msgs;i++)
+				for(i=curmsg+1;(ulong)i<msgs;i++)
 					if(mail[i].to==msg.idx.to)
 						break;
-				if(i<msgs)
+				if((ulong)i<msgs)
 					curmsg=i;
 				else
 					domsg=0;
 				break;
 			case '[':   /* Search To User backward */
 				strcpy(str,msg.to);
-				for(i=curmsg-1;i>-1;i--)
+				for(i=curmsg-1;(ulong)i>-1;i--)
 					if(mail[i].to==msg.idx.to)
 						break;
-				if(i>-1)
+				if((ulong)i>-1)
 					curmsg=i;
 				else
 					domsg=0;
@@ -598,7 +598,7 @@ void sbbs_t::readmail(uint usernumber, int which)
 				i=curmsg;
 				if(i) i++;
 				j=i+10;
-				if(j>msgs)
+				if((ulong)j>msgs)
 					j=msgs;
 
 				if(which==MAIL_SENT)