diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c
index d9916fe44aa988420d3894b991fe84f6921bc379..04d3f531802ae1e649f3454d5bc88505c4d39d3c 100644
--- a/src/sbbs3/js_msgbase.c
+++ b/src/sbbs3/js_msgbase.c
@@ -176,86 +176,86 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
 		return(JS_TRUE);
 
 	JS_DefineProperty(cx, hdrobj, "number", INT_TO_JSVAL(msg.hdr.number)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "to",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.to))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "from",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.from))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "subject",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.subj))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "to_ext",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.to_ext))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "from_ext",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.from_ext))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "replyto",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.replyto))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "replyto_ext",STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.replyto_ext))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "to_agent",INT_TO_JSVAL(msg.to_agent)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "from_agent",INT_TO_JSVAL(msg.from_agent)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "replyto_agent",INT_TO_JSVAL(msg.replyto_agent)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "to_net_type",INT_TO_JSVAL(msg.to_net.type)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "to_net_addr"
 		,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.to_net.addr))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "from_net_type",INT_TO_JSVAL(msg.from_net.type)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "from_net_addr"
 		,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.from_net.addr))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "replyto_net_type",INT_TO_JSVAL(msg.replyto_net.type)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "replyto_net_addr"
 		,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.replyto_net.addr))
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "forwarded",INT_TO_JSVAL(msg.forwarded)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "expiration_time",INT_TO_JSVAL(msg.expiration.time)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "expiration_zone",INT_TO_JSVAL(msg.expiration.zone)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "type", INT_TO_JSVAL(msg.hdr.type)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "version", INT_TO_JSVAL(msg.hdr.version)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "attr", INT_TO_JSVAL(msg.hdr.attr)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "auxattr", INT_TO_JSVAL(msg.hdr.auxattr)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "netattr", INT_TO_JSVAL(msg.hdr.netattr)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "when_written_time", INT_TO_JSVAL(msg.hdr.when_written.time)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "when_written_zone", INT_TO_JSVAL(msg.hdr.when_written.zone)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "when_imported_time", INT_TO_JSVAL(msg.hdr.when_imported.time)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "when_imported_zone", INT_TO_JSVAL(msg.hdr.when_imported.zone)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "thread_orig", INT_TO_JSVAL(msg.hdr.thread_orig)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "thread_next", INT_TO_JSVAL(msg.hdr.thread_next)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 	JS_DefineProperty(cx, hdrobj, "thread_first", INT_TO_JSVAL(msg.hdr.thread_first)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	JS_DefineProperty(cx, hdrobj, "delivery_attempts", INT_TO_JSVAL(msg.hdr.delivery_attempts)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	l=smb_getmsgdatlen(&msg);
 	JS_DefineProperty(cx, hdrobj, "data_length", INT_TO_JSVAL(l)
-		,NULL,NULL,JSPROP_READONLY);
+		,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
 	*rval = OBJECT_TO_JSVAL(hdrobj);