diff --git a/src/sbbs3/bulkmail.cpp b/src/sbbs3/bulkmail.cpp
index 39b6c538ef4de2e21ccea0e19c1bd88a7a217012..3c8d4ae0481c8b2b42f4835fceef55a0f21525ce 100644
--- a/src/sbbs3/bulkmail.cpp
+++ b/src/sbbs3/bulkmail.cpp
@@ -247,7 +247,7 @@ int sbbs_t::bulkmailhdr(uint usernum, smbmsg_t *msg, ushort msgattr, ulong offse
 		if(node.useron==usernum && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {   /* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);
diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp
index 4c2ea81f3b1fe92c8eeded248554d261539bcbee..d6c6e0388f51c8486ca0d548e9ae8bdf89461d12 100644
--- a/src/sbbs3/chat.cpp
+++ b/src/sbbs3/chat.cpp
@@ -332,7 +332,7 @@ void sbbs_t::multinodechat(int channel)
 						strcat(buf,crlf);
 						if(useron.chat&CHAT_ECHO)
 							bputs(buf);
-						putnmsg(j,buf);
+						putnmsg(&cfg,j,buf);
 						break;
 					case 'Q':	/* quit */
 						done=1;
@@ -454,7 +454,7 @@ void sbbs_t::multinodechat(int channel)
 									? text[UNKNOWN_USER] : useron.alias
 									,"you");
 								strcat(buf,crlf);
-								putnmsg(usr[j],buf); }
+								putnmsg(&cfg,usr[j],buf); }
 
 
 							/* Display to all other users */
@@ -468,10 +468,10 @@ void sbbs_t::multinodechat(int channel)
 								if(i==j)
 									continue;
 								getnodedat(usr[i],&node,0);
-								putnmsg(usr[i],buf); }
+								putnmsg(&cfg,usr[i],buf); }
 							for(i=0;i<qusrs;i++) {
 								getnodedat(qusr[i],&node,0);
-								putnmsg(qusr[i],buf); }
+								putnmsg(&cfg,qusr[i],buf); }
 							continue; } }
 
 					sprintf(buf,text[ChatLineFmt]
@@ -483,10 +483,10 @@ void sbbs_t::multinodechat(int channel)
 						bputs(buf);
 					for(i=0;i<usrs;i++) {
 						getnodedat(usr[i],&node,0);
-						putnmsg(usr[i],buf); }
+						putnmsg(&cfg,usr[i],buf); }
 					for(i=0;i<qusrs;i++) {
 						getnodedat(qusr[i],&node,0);
-						putnmsg(qusr[i],buf); }
+						putnmsg(&cfg,qusr[i],buf); }
 					if(!usrs && channel && gurubuf
 						&& cfg.chan[channel-1]->misc&CHAN_GURU)
 						guruchat(pgraph,gurubuf,cfg.chan[channel-1]->guru);
@@ -742,7 +742,7 @@ void sbbs_t::privchat(bool local)
 			sprintf(str,text[NodePChatPageMsg]
 				,cfg.node_num,thisnode.misc&NODE_ANON
 					? text[UNKNOWN_USER] : useron.alias);
-			putnmsg(n,str);
+			putnmsg(&cfg,n,str);
 			sprintf(str,"%s paged %s on node %d to private chat"
 				,useron.alias,username(&cfg,node.useron,tmp),n);
 			logline("C",str); }
@@ -1316,7 +1316,7 @@ void sbbs_t::nodemsg()
 						sprintf(buf,text[NodeMsgFmt],cfg.node_num
 							,thisnode.misc&NODE_ANON
 								? text[UNKNOWN_USER] : useron.alias,line);
-						putnmsg(i,buf);
+						putnmsg(&cfg,i,buf);
 						if(!(node.misc&NODE_ANON))
 							bprintf(text[MsgSentToUser],"Message"
 								,username(&cfg,usernumber,tmp),usernumber);
@@ -1338,7 +1338,7 @@ void sbbs_t::nodemsg()
 						if((node.status==NODE_INUSE
 							|| (SYSOP && node.status==NODE_QUIET))
 							&& (SYSOP || !(node.misc&NODE_POFF)))
-							putnmsg(i,buf); }
+							putnmsg(&cfg,i,buf); }
 					sprintf(str,"%s sent message to all nodes",useron.alias);
 					logline("C",str);
 					logline(nulstr,line); 
diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp
index 6a3fed9189c5bf369e9d5f1466918ffe6851ff00..aa0a2a78303793bc5895ab2b40518fb81704835e 100644
--- a/src/sbbs3/email.cpp
+++ b/src/sbbs3/email.cpp
@@ -307,7 +307,7 @@ bool sbbs_t::email(int usernumber, char *top, char *subj, long mode)
 		if(node.useron==usernumber && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {	/* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index f83fdd6f17bedebc9f80cae2e3d0ce631dcf449d..ce99a780429b0c39ba2d0b419ce5a8666f3cb072 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -1968,7 +1968,7 @@ js_put_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
 	if((msg=JS_GetStringBytes(js_msg))==NULL) 
 		return(JS_FALSE);
 
-	sbbs->putnmsg(node,msg);
+	putnmsg(&sbbs->cfg,node,msg);
 
 	*rval = JSVAL_VOID;
 	return(JS_TRUE);
diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp
index c2ef01f840ee61d27f880e8af2b1f66989a0aadd..a6201b007464d40e9da674581854273886a4a21d 100644
--- a/src/sbbs3/logon.cpp
+++ b/src/sbbs3/logon.cpp
@@ -524,7 +524,7 @@ bool sbbs_t::logon()
 					,cfg.node_num
 					,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
 					,connection);
-				putnmsg(i,str); 
+				putnmsg(&cfg,i,str); 
 			} 
 		}
 
diff --git a/src/sbbs3/logout.cpp b/src/sbbs3/logout.cpp
index 142ce5f2184bf73069b8ac4fdf36e3d4982d5983..df1580f8ce9834ffda13ca1345ee0fc52982bbf5 100644
--- a/src/sbbs3/logout.cpp
+++ b/src/sbbs3/logout.cpp
@@ -82,7 +82,7 @@ void sbbs_t::logout()
 					sprintf(str,text[NodeLoggedOff],cfg.node_num
 						,thisnode.misc&NODE_ANON
 						? text[UNKNOWN_USER] : useron.alias);
-					putnmsg(i,str); } }
+					putnmsg(&cfg,i,str); } }
 
 	if(!online) {		/* NOT re-login */
 
diff --git a/src/sbbs3/mail.cpp b/src/sbbs3/mail.cpp
index d7a126aabf7a4c62e40d9594ca7901ae232e59cc..7ccac4cff71d250cdcc8516914dc04d33ac2977c 100644
--- a/src/sbbs3/mail.cpp
+++ b/src/sbbs3/mail.cpp
@@ -214,7 +214,7 @@ void sbbs_t::telluser(smbmsg_t* msg)
 			sprintf(str
 				,text[UserReadYourMailNodeMsg]
 				,cfg.node_num,useron.alias);
-			putnmsg(n,str);
+			putnmsg(&cfg,n,str);
 			break; } }
 	if(n>cfg.sys_nodes) {
 		now=time(NULL);
diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp
index da8c1b042ce98c1ba63e209e663e9597d2b5ad7f..f98fb76eaa87eabdb29bdc51e4f6dab62e2dc874 100644
--- a/src/sbbs3/putnode.cpp
+++ b/src/sbbs3/putnode.cpp
@@ -112,39 +112,6 @@ int sbbs_t::putnodedat(uint number, node_t* node)
 	return(0);
 }
 
-/****************************************************************************/
-/* Creates a short message for node 'num' than contains 'strin'             */
-/****************************************************************************/
-int sbbs_t::putnmsg(int num, char *strin)
-{
-    char str[256];
-    int file,i;
-    node_t node;
-
-	sprintf(str,"%smsgs/n%3.3u.msg",cfg.data_dir,num);
-	if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-		return(errno); 
-	}
-	lseek(file,0L,SEEK_END);	// Instead of opening with O_APPEND
-	i=strlen(strin);
-	if(write(file,strin,i)!=i) {
-		close(file);
-		errormsg(WHERE,ERR_WRITE,str,i);
-		return(errno); 
-	}
-	close(file);
-	getnodedat(num,&node,0);
-	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& !(node.misc&NODE_NMSG)) {
-		getnodedat(num,&node,1);
-		node.misc|=NODE_NMSG;
-		putnodedat(num,&node); 
-	}
-
-	return(0);
-}
-
 int sbbs_t::putnodeext(uint number, char *ext)
 {
     char	str[MAX_PATH+1];
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index be9fc3a09a5f473a504699b1b4cae5a37031a5e8..34c9de8eb0caade43066963efa7d551961201fae 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -508,7 +508,6 @@ public:
 	/* putnode.cpp */
 	int		putnodedat(uint number, node_t * node);
 	int		putnodeext(uint number, char * str);
-	int		putnmsg(int num, char *strin);
 
 	/* logonoff.cpp */
 	bool	answer();
diff --git a/src/sbbs3/un_rep.cpp b/src/sbbs3/un_rep.cpp
index 4a7d47de46890e535565e7d27e56beccc73187b8..a6a2bfa9b6049523c8a81b1f1fb1b10ad4536e9d 100644
--- a/src/sbbs3/un_rep.cpp
+++ b/src/sbbs3/un_rep.cpp
@@ -235,7 +235,7 @@ bool sbbs_t::unpack_rep(char* repfile)
 					|| node.status==NODE_QUIET)) {
 					sprintf(str,text[EmailNodeMsg]
 						,cfg.node_num,tmp);
-					putnmsg(k,str);
+					putnmsg(&cfg,k,str);
 					break; } }
 			if(k>cfg.sys_nodes) {
 				sprintf(str,text[UserSentYouMail],tmp);
diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index 60793ab078d11bcfd2fa43f1e682f20cecc23c27..fb172b0dae19393a7a0557f83dc7dc6d4beeb976 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -477,7 +477,7 @@ bool sbbs_t::upload(uint dirnum)
 				if(node.useron==destuser[j] && !(node.misc&NODE_POFF)
 					&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 					sprintf(str,text[UserToUserXferNodeMsg],cfg.node_num,useron.alias);
-					putnmsg(i,str);
+					putnmsg(&cfg,i,str);
 					break; } }
 			if(i>cfg.sys_nodes) {   /* User not online */
 				sprintf(str,text[UserSentYouFile],useron.alias);
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index 6ec15eb6339018731d8f92d0b25cca2743d86423..075f7b8803ed3d36f5d350641905a904757ba4ac 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -967,7 +967,7 @@ uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen,
 }
 
 /****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'           */
+/* Creates a short message for 'usernumber' that contains 'strin'           */
 /****************************************************************************/
 int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin)
 {
@@ -998,6 +998,36 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin)
 	return(0);
 }
 
+/****************************************************************************/
+/* Creates a short message for node 'num' that contains 'strin'             */
+/****************************************************************************/
+int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin)
+{
+    char str[256];
+    int file,i;
+    node_t node;
+
+	sprintf(str,"%smsgs/n%3.3u.msg",cfg->data_dir,num);
+	if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
+		return(errno); 
+	lseek(file,0L,SEEK_END);	// Instead of opening with O_APPEND
+	i=strlen(strin);
+	if(write(file,strin,i)!=i) {
+		close(file);
+		return(errno); 
+	}
+	close(file);
+	getnodedat(cfg,num,&node,NULL);
+	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
+		&& !(node.misc&NODE_NMSG)) {
+		getnodedat(cfg,num,&node,&file);
+		node.misc|=NODE_NMSG;
+		putnodedat(cfg,num,&node,file); 
+	}
+
+	return(0);
+}
+
 static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user)
 {
 	BOOL	result,not,or,equal;
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index b538874a1b09114b806d76c59f680ff6b999ccce..aeec2f7114a659ff2d3a2e62adaecde3777ab2c5 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -88,6 +88,8 @@ DLLEXPORT void	DLLCALL packchatpass(char *pass, node_t* node);
 DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node);
 
 DLLEXPORT int	DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin);
+DLLEXPORT int	DLLCALL putnmsg(scfg_t* cfg, int num, char *strin);
+
 DLLEXPORT uint	DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat
 							,BOOL del);
 
diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp
index ab04b431eaffb5a418231daae32b376386f1237a..67cd052ef7a4f4cb66af8384b37c2126a4f99663 100644
--- a/src/sbbs3/writemsg.cpp
+++ b/src/sbbs3/writemsg.cpp
@@ -964,7 +964,7 @@ void sbbs_t::forwardmail(smbmsg_t *msg, int usernumber)
 		if(node.useron==usernumber && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {	/* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);