diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index d4a7d1b0c49fc9a972397f8a30079f540ee7c0b9..177a375246d203695ad20f805930a5e0d9641357 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -53,7 +53,7 @@
 #include "filewrap.h"
 
 /* Use smb_ver() and smb_lib_ver() to obtain these values */
-#define SMBLIB_VERSION		"2.30"      /* SMB library version */
+#define SMBLIB_VERSION		"2.31"      /* SMB library version */
 #define SMB_VERSION 		0x0121		/* SMB format version */
 										/* High byte major, low byte minor */
 
@@ -2339,5 +2339,49 @@ char* SMBCALL smb_dfieldtype(ushort type)
 	return(str);
 }
 
-/* End of SMBLIB.C */
+int SMBCALL smb_updatethread(smb_t* smb, smbmsg_t* msg, ulong newmsgnum)
+{
+	int			retval=SMB_ERR_NOT_FOUND;
+	ulong		nextmsgnum;
+	smbmsg_t	nextmsg;
+
+	if(!msg->hdr.thread_first) {	/* New msg is first reply */
+		msg->hdr.thread_first=newmsgnum;
+		if((retval=smb_lockmsghdr(smb,msg))!=SMB_SUCCESS)
+			return(retval);
+		retval=smb_putmsghdr(smb,msg);
+		smb_unlockmsghdr(smb,msg);
+		return(retval);
+	}
+	
+	/* Search for last reply and extend chain */
+	memset(&nextmsg,0,sizeof(nextmsg));
+	nextmsgnum=msg->hdr.thread_first;	/* start with first reply */
+	while(1) {
+		nextmsg.idx.offset=0;
+		nextmsg.hdr.number=nextmsgnum;
+		if(smb_getmsgidx(smb, &nextmsg)!=SMB_SUCCESS) /* invalid thread origin */
+			break;
+		if(smb_lockmsghdr(smb,msg)!=SMB_SUCCESS)
+			break;
+		if(smb_getmsghdr(smb, msg)!=SMB_SUCCESS) {
+			smb_unlockmsghdr(smb,msg); 
+			break;
+		}
+		if(nextmsg.hdr.thread_next && nextmsg.hdr.thread_next!=nextmsgnum) {
+			nextmsgnum=nextmsg.hdr.thread_next;
+			smb_unlockmsghdr(smb,&nextmsg);
+			smb_freemsgmem(&nextmsg);
+			continue; 
+		}
+		nextmsg.hdr.thread_next=newmsgnum;
+		retval=smb_putmsghdr(smb,&nextmsg);
+		smb_unlockmsghdr(smb,&nextmsg);
+		smb_freemsgmem(&nextmsg);
+		break; 
+	}
 
+	return(retval);
+}
+
+/* End of SMBLIB.C */
diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h
index dc3e09149f0bb6e700d807e448c52372f5505efa..6d8f110fdd0f00d0170a4fa997c3a6180b28ff23 100644
--- a/src/smblib/smblib.h
+++ b/src/smblib/smblib.h
@@ -153,6 +153,7 @@ 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 int		SMBCALL smb_tzutc(short timezone);
+SMBEXPORT int		SMBCALL smb_updatethread(smb_t* smb, smbmsg_t* remsg, ulong newmsgnum);
 
 /* smbtxt.c */
 SMBEXPORT char*		SMBCALL smb_getmsgtxt(smb_t* smb, smbmsg_t* msg, ulong mode);