diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c
index 29d73307f9385804d98c9d75d80b0712a5d6fd31..0aba325f66d056c5d80910ea1b784682ee417bd5 100644
--- a/src/sbbs3/js_msgbase.c
+++ b/src/sbbs3/js_msgbase.c
@@ -403,8 +403,12 @@ static BOOL parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm
 			field=JSVAL_TO_OBJECT(val);
 			if(!JS_GetProperty(cx, field, "type", &val))
 				continue;
-			JS_ValueToInt32(cx,val,&i32);
-			type=(ushort)i32;
+			if(JSVAL_IS_STRING(val))
+				type=smb_hfieldtypelookup(JS_GetStringBytes(JS_ValueToString(cx,val)));
+			else {
+				JS_ValueToInt32(cx,val,&i32);
+				type=(ushort)i32;
+			}
 			if(!JS_GetProperty(cx, field, "data", &val))
 				continue;
 			if((cp=JS_GetStringBytes(JS_ValueToString(cx,val)))==NULL)
diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 4876bfe24b4a50e8d0258ed152b5b3a5107efec9..be9ae601866da09df9108f3ad52d5dc0b475110e 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -2171,58 +2171,58 @@ char* SMBCALL smb_hfieldtype(ushort type)
 	static char str[8];
 
 	switch(type) {
-		case SENDER:			return("SENDER");
-		case SENDERAGENT:		return("SENDERAGENT");
-		case SENDERNETTYPE:		return("SENDERNETTYPE");
-		case SENDERNETADDR:		return("SENDERNETADDR");
-		case SENDEREXT:			return("SENDEREXT");
-		case SENDERORG:			return("SENDERORG");
-
-		case REPLYTO:			return("REPLYTO");
-		case REPLYTOAGENT:		return("REPLYTOAGENT");
-		case REPLYTONETTYPE:	return("REPLYTONETTYPE");
-		case REPLYTONETADDR:	return("REPLYTONETADDR");
-		case REPLYTOEXT:		return("REPLYTOEXT");
+		case SENDER:			return("Sender");
+		case SENDERAGENT:		return("SenderAgent");
+		case SENDERNETTYPE:		return("SenderNetType");
+		case SENDERNETADDR:		return("SenderNetAddr");
+		case SENDEREXT:			return("SenderExt");
+		case SENDERORG:			return("SenderOrg");
+
+		case REPLYTO:			return("ReplyTo");
+		case REPLYTOAGENT:		return("ReplyToAgent");
+		case REPLYTONETTYPE:	return("ReplyToNetType");
+		case REPLYTONETADDR:	return("ReplyToNetAddr");
+		case REPLYTOEXT:		return("ReplyToExt");
 								
-		case RECIPIENT:			return("RECIPIENT");
-		case RECIPIENTAGENT:	return("RECIPIENTAGENT");
-		case RECIPIENTNETTYPE:	return("RECIPIENTNETTYPE");
-		case RECIPIENTNETADDR:	return("RECIPIENTNETADDR");
-		case RECIPIENTEXT:		return("RECIPIENTEXT");
-
-		case SUBJECT:			return("SUBJECT");
-		case SMB_SUMMARY:		return("SUMMARY");
-		case SMB_COMMENT:		return("COMMENT");
-		case SMB_CARBONCOPY:	return("CARBONCOPY");
-		case SMB_GROUP:			return("GROUP");
-		case SMB_EXPIRATION:	return("EXPIRATION");
-		case SMB_PRIORITY:		return("PRIORITY");
-		case SMB_COST:			return("COST");
-
-		case FIDOCTRL:			return("FIDOCTRL");
-		case FIDOAREA:			return("FIDOAREA");
-		case FIDOSEENBY:		return("FIDOSEENBY");
-		case FIDOPATH:			return("FIDOPATH");
-		case FIDOMSGID:			return("FIDOMSGID");
-		case FIDOREPLYID:		return("FIDOREPLYID");
-		case FIDOPID:			return("FIDOPID");
-		case FIDOFLAGS:			return("FIDOFLAGS");
-		case FIDOTID:			return("FIDOTID");
-
-		case RFC822HEADER:		return("RFC822HEADER");
-		case RFC822MSGID:		return("RFC822MSGID");
-		case RFC822REPLYID:		return("RFC822REPLYID");
-		case RFC822TO:			return("RFC822TO");
-		case RFC822FROM:		return("RFC822FROM");
-		case RFC822REPLYTO:		return("RFC822REPLYTO");
-
-		case USENETPATH:		return("USENETPATH");
-		case USENETNEWSGROUPS:	return("USENETNEWSGROUPS");
-
-		case SMTPCOMMAND:		return("SMTPCOMMAND");
-		case SMTPREVERSEPATH:	return("SMTPREVERSEPATH");
-
-		case SMTPSYSMSG:		return("SMTPSYSMSG");
+		case RECIPIENT:			return("Recipient");
+		case RECIPIENTAGENT:	return("RecipientAgent");
+		case RECIPIENTNETTYPE:	return("RecipientNetType");
+		case RECIPIENTNETADDR:	return("RecipientNetAddr");
+		case RECIPIENTEXT:		return("RecipientExt");
+
+		case SUBJECT:			return("Subject");
+		case SMB_SUMMARY:		return("Summary");
+		case SMB_COMMENT:		return("Comment");
+		case SMB_CARBONCOPY:	return("CarbonCopy");
+		case SMB_GROUP:			return("Group");
+		case SMB_EXPIRATION:	return("Expiration");
+		case SMB_PRIORITY:		return("Priority");
+		case SMB_COST:			return("Cost");
+
+		case FIDOCTRL:			return("FidoCtrl");
+		case FIDOAREA:			return("FidoArea");
+		case FIDOSEENBY:		return("FidoSeenBy");
+		case FIDOPATH:			return("FidoPath");
+		case FIDOMSGID:			return("FidoMsgID");
+		case FIDOREPLYID:		return("FidoReplyID");
+		case FIDOPID:			return("FidoPID");
+		case FIDOFLAGS:			return("FidoFlags");
+		case FIDOTID:			return("FidoTID");
+
+		case RFC822HEADER:		return("RFC822Header");
+		case RFC822MSGID:		return("RFC822MsgID");
+		case RFC822REPLYID:		return("RFC822ReplyID");
+		case RFC822TO:			return("RFC822To");
+		case RFC822FROM:		return("RFC822From");
+		case RFC822REPLYTO:		return("RFC822ReplyTo");
+
+		case USENETPATH:		return("UsenetPath");
+		case USENETNEWSGROUPS:	return("UsenetNewsgroups");
+
+		case SMTPCOMMAND:		return("SMTPCommand");
+		case SMTPREVERSEPATH:	return("SMTPReversePath");
+
+		case SMTPSYSMSG:		return("SMTPSysMsg");
 
 		case UNKNOWN:			return("UNKNOWN");
 		case UNKNOWNASCII:		return("UNKNOWNASCII");
@@ -2232,6 +2232,20 @@ char* SMBCALL smb_hfieldtype(ushort type)
 	return(str);
 }
 
+ushort SMBCALL smb_hfieldtypelookup(const char* str)
+{
+	ushort type;
+
+	if(isdigit(*str))
+		return(strtol(str,NULL,0));
+
+	for(type=0;type<=UNUSED;type++)
+		if(stricmp(str,smb_hfieldtype(type))==0)
+			return(type);
+
+	return(UNKNOWN);
+}
+
 char* SMBCALL smb_dfieldtype(ushort type)
 {
 	static char str[8];
diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h
index 54a7d72fe48f97bbbfa56c2fd1cd6a4cfbad4832..02fedaf0bb4bdfb2977b0ff0ba5ad1ffb8158de1 100644
--- a/src/smblib/smblib.h
+++ b/src/smblib/smblib.h
@@ -93,80 +93,81 @@
 extern "C" {
 #endif
 
-SMBEXPORT int 	SMBCALL smb_ver(void);
-SMBEXPORT char*	SMBCALL smb_lib_ver(void);
-SMBEXPORT int 	SMBCALL smb_open(smb_t* smb);
-SMBEXPORT void	SMBCALL smb_close(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_open_da(smb_t* smb);
-SMBEXPORT void	SMBCALL smb_close_da(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_open_ha(smb_t* smb);
-SMBEXPORT void	SMBCALL smb_close_ha(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_create(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_stack(smb_t* smb, int op);
-SMBEXPORT int 	SMBCALL smb_trunchdr(smb_t* smb);
-SMBEXPORT int	SMBCALL smb_lock(smb_t* smb);
-SMBEXPORT int	SMBCALL smb_unlock(smb_t* smb);
-SMBEXPORT int	SMBCALL smb_islocked(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_locksmbhdr(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_getstatus(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_putstatus(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_unlocksmbhdr(smb_t* smb);
-SMBEXPORT int 	SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_getfirstidx(smb_t* smb, idxrec_t *idx);
-SMBEXPORT int 	SMBCALL smb_getlastidx(smb_t* smb, idxrec_t *idx);
-SMBEXPORT ulong	SMBCALL smb_getmsghdrlen(smbmsg_t* msg);
-SMBEXPORT ulong	SMBCALL smb_getmsgdatlen(smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_lockmsghdr(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_unlockmsghdr(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_addcrc(smb_t* smb, ulong crc);
-SMBEXPORT int 	SMBCALL smb_hfield(smbmsg_t* msg, ushort type, size_t length, void* data);
-SMBEXPORT int	SMBCALL smb_hfield_append(smbmsg_t* msg, ushort type, size_t length, void* data);
-SMBEXPORT int 	SMBCALL smb_dfield(smbmsg_t* msg, ushort type, ulong length);
-SMBEXPORT void* SMBCALL smb_get_hfield(smbmsg_t* msg, ushort type, hfield_t* hfield);
-SMBEXPORT char* SMBCALL smb_hfieldtype(ushort type);
-SMBEXPORT char* SMBCALL smb_dfieldtype(ushort type);
-SMBEXPORT int 	SMBCALL smb_addmsghdr(smb_t* smb, smbmsg_t* msg,int storage);
-SMBEXPORT int 	SMBCALL smb_putmsg(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int 	SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT void	SMBCALL smb_freemsgmem(smbmsg_t* msg);
-SMBEXPORT void	SMBCALL smb_freemsghdrmem(smbmsg_t* msg);
-SMBEXPORT ulong	SMBCALL smb_hdrblocks(ulong length);
-SMBEXPORT ulong	SMBCALL smb_datblocks(ulong length);
-SMBEXPORT long	SMBCALL smb_allochdr(smb_t* smb, ulong length);
-SMBEXPORT long	SMBCALL smb_fallochdr(smb_t* smb, ulong length);
-SMBEXPORT long	SMBCALL smb_hallochdr(smb_t* smb);
-SMBEXPORT long	SMBCALL smb_allocdat(smb_t* smb, ulong length, ushort refs);
-SMBEXPORT long	SMBCALL smb_fallocdat(smb_t* smb, ulong length, ushort refs);
-SMBEXPORT long	SMBCALL smb_hallocdat(smb_t* smb);
-SMBEXPORT int	SMBCALL smb_incmsg_dfields(smb_t* smb, smbmsg_t* msg, ushort refs);
-SMBEXPORT int 	SMBCALL smb_incmsgdat(smb_t* smb, ulong offset, ulong length, ushort refs);
-SMBEXPORT int 	SMBCALL smb_freemsg(smb_t* smb, smbmsg_t* msg);
-SMBEXPORT int	SMBCALL smb_freemsg_dfields(smb_t* smb, smbmsg_t* msg, ushort refs);
-SMBEXPORT int 	SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length, ushort refs);
-SMBEXPORT int 	SMBCALL smb_freemsghdr(smb_t* smb, ulong offset, ulong length);
-SMBEXPORT void	SMBCALL smb_freemsgtxt(char* buf);
-SMBEXPORT int	SMBCALL	smb_copymsgmem(smb_t* smb, smbmsg_t* destmsg, smbmsg_t* srcmsg);
-SMBEXPORT char* SMBCALL smb_getmsgtxt(smb_t* smb, smbmsg_t* msg, ulong mode);
-SMBEXPORT int	SMBCALL smb_tzutc(short timezone);
+SMBEXPORT int 		SMBCALL smb_ver(void);
+SMBEXPORT char*		SMBCALL smb_lib_ver(void);
+SMBEXPORT int 		SMBCALL smb_open(smb_t* smb);
+SMBEXPORT void		SMBCALL smb_close(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_open_da(smb_t* smb);
+SMBEXPORT void		SMBCALL smb_close_da(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_open_ha(smb_t* smb);
+SMBEXPORT void		SMBCALL smb_close_ha(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_create(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_stack(smb_t* smb, int op);
+SMBEXPORT int 		SMBCALL smb_trunchdr(smb_t* smb);
+SMBEXPORT int		SMBCALL smb_lock(smb_t* smb);
+SMBEXPORT int		SMBCALL smb_unlock(smb_t* smb);
+SMBEXPORT int		SMBCALL smb_islocked(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_locksmbhdr(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_getstatus(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_putstatus(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_unlocksmbhdr(smb_t* smb);
+SMBEXPORT int 		SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_getfirstidx(smb_t* smb, idxrec_t *idx);
+SMBEXPORT int 		SMBCALL smb_getlastidx(smb_t* smb, idxrec_t *idx);
+SMBEXPORT ulong		SMBCALL smb_getmsghdrlen(smbmsg_t* msg);
+SMBEXPORT ulong		SMBCALL smb_getmsgdatlen(smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_lockmsghdr(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_unlockmsghdr(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_addcrc(smb_t* smb, ulong crc);
+SMBEXPORT int 		SMBCALL smb_hfield(smbmsg_t* msg, ushort type, size_t length, void* data);
+SMBEXPORT int		SMBCALL smb_hfield_append(smbmsg_t* msg, ushort type, size_t length, void* data);
+SMBEXPORT int 		SMBCALL smb_dfield(smbmsg_t* msg, ushort type, ulong length);
+SMBEXPORT void*		SMBCALL smb_get_hfield(smbmsg_t* msg, ushort type, hfield_t* hfield);
+SMBEXPORT char*		SMBCALL smb_hfieldtype(ushort type);
+SMBEXPORT ushort	SMBCALL smb_hfieldtypelookup(const char*);
+SMBEXPORT char*		SMBCALL smb_dfieldtype(ushort type);
+SMBEXPORT int 		SMBCALL smb_addmsghdr(smb_t* smb, smbmsg_t* msg,int storage);
+SMBEXPORT int 		SMBCALL smb_putmsg(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int 		SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT void		SMBCALL smb_freemsgmem(smbmsg_t* msg);
+SMBEXPORT void		SMBCALL smb_freemsghdrmem(smbmsg_t* msg);
+SMBEXPORT ulong		SMBCALL smb_hdrblocks(ulong length);
+SMBEXPORT ulong		SMBCALL smb_datblocks(ulong length);
+SMBEXPORT long		SMBCALL smb_allochdr(smb_t* smb, ulong length);
+SMBEXPORT long		SMBCALL smb_fallochdr(smb_t* smb, ulong length);
+SMBEXPORT long		SMBCALL smb_hallochdr(smb_t* smb);
+SMBEXPORT long		SMBCALL smb_allocdat(smb_t* smb, ulong length, ushort refs);
+SMBEXPORT long		SMBCALL smb_fallocdat(smb_t* smb, ulong length, ushort refs);
+SMBEXPORT long		SMBCALL smb_hallocdat(smb_t* smb);
+SMBEXPORT int		SMBCALL smb_incmsg_dfields(smb_t* smb, smbmsg_t* msg, ushort refs);
+SMBEXPORT int 		SMBCALL smb_incmsgdat(smb_t* smb, ulong offset, ulong length, ushort refs);
+SMBEXPORT int 		SMBCALL smb_freemsg(smb_t* smb, smbmsg_t* msg);
+SMBEXPORT int		SMBCALL smb_freemsg_dfields(smb_t* smb, smbmsg_t* msg, ushort refs);
+SMBEXPORT int 		SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length, ushort refs);
+SMBEXPORT int 		SMBCALL smb_freemsghdr(smb_t* smb, ulong offset, ulong length);
+SMBEXPORT void		SMBCALL smb_freemsgtxt(char* buf);
+SMBEXPORT int		SMBCALL	smb_copymsgmem(smb_t* smb, smbmsg_t* destmsg, smbmsg_t* srcmsg);
+SMBEXPORT char*		SMBCALL smb_getmsgtxt(smb_t* smb, smbmsg_t* msg, ulong mode);
+SMBEXPORT int		SMBCALL smb_tzutc(short timezone);
 
 /* FILE pointer I/O functions */
 
-SMBEXPORT int 	SMBCALL smb_feof(FILE* fp);
-SMBEXPORT int 	SMBCALL smb_ferror(FILE* fp);
-SMBEXPORT int 	SMBCALL smb_fflush(FILE* fp);
-SMBEXPORT int 	SMBCALL smb_fgetc(FILE* fp);
-SMBEXPORT int 	SMBCALL smb_fputc(int ch, FILE* fp);
-SMBEXPORT int 	SMBCALL smb_fseek(FILE* fp, long offset, int whence);
-SMBEXPORT long	SMBCALL smb_ftell(FILE* fp);
-SMBEXPORT long	SMBCALL smb_fread(void HUGE16* buf, long bytes, FILE* fp);
-SMBEXPORT long	SMBCALL smb_fwrite(void HUGE16* buf, long bytes, FILE* fp);
-SMBEXPORT long	SMBCALL smb_fgetlength(FILE* fp);
-SMBEXPORT int 	SMBCALL smb_fsetlength(FILE* fp, long length);
-SMBEXPORT void	SMBCALL smb_rewind(FILE* fp);
-SMBEXPORT void	SMBCALL smb_clearerr(FILE* fp);
-
+SMBEXPORT int 		SMBCALL smb_feof(FILE* fp);
+SMBEXPORT int 		SMBCALL smb_ferror(FILE* fp);
+SMBEXPORT int 		SMBCALL smb_fflush(FILE* fp);
+SMBEXPORT int 		SMBCALL smb_fgetc(FILE* fp);
+SMBEXPORT int 		SMBCALL smb_fputc(int ch, FILE* fp);
+SMBEXPORT int 		SMBCALL smb_fseek(FILE* fp, long offset, int whence);
+SMBEXPORT long		SMBCALL smb_ftell(FILE* fp);
+SMBEXPORT long		SMBCALL smb_fread(void HUGE16* buf, long bytes, FILE* fp);
+SMBEXPORT long		SMBCALL smb_fwrite(void HUGE16* buf, long bytes, FILE* fp);
+SMBEXPORT long		SMBCALL smb_fgetlength(FILE* fp);
+SMBEXPORT int 		SMBCALL smb_fsetlength(FILE* fp, long length);
+SMBEXPORT void		SMBCALL smb_rewind(FILE* fp);
+SMBEXPORT void		SMBCALL smb_clearerr(FILE* fp);
+					
 #ifdef __cplusplus
 }
 #endif