diff --git a/src/smblib/smbhash.c b/src/smblib/smbhash.c
index 449f87984c43a217cb961a63933749aaab04f8ea..b560707731c58bcc2217b1540c33ac63b9c9c77b 100644
--- a/src/smblib/smbhash.c
+++ b/src/smblib/smbhash.c
@@ -330,11 +330,14 @@ int SMBCALL smb_getmsghdr_by_hash(smb_t* smb, smbmsg_t* msg, unsigned source
 	return(retval);
 }
 
-ushort SMBCALL smb_subject_crc(const char *subj)
+ushort SMBCALL smb_subject_crc(const char* subj)
 {
 	char*	str;
 	ushort	crc;
 
+	if(subj==NULL)
+		return(0xffff);
+
 	while(!strnicmp(subj,"RE:",3)) {
 		subj+=3;
 		while(*subj==' ')
@@ -350,3 +353,41 @@ ushort SMBCALL smb_subject_crc(const char *subj)
 
 	return(crc);
 }
+
+ushort SMBCALL smb_name_crc(const char* name)
+{
+	char*	str;
+	ushort	crc;
+
+	if(name==NULL)
+		return(0xffff);
+
+	if((str=strdup(name))==NULL)
+		return(0xffff);
+
+	strlwr(str);
+	crc=crc16(str,0	/* auto-length */);
+	free(str);
+
+	return(crc);
+}
+
+int SMBCALL smb_init_idx(smb_t* smb, smbmsg_t* msg)
+{
+	msg->idx.subj=smb_subject_crc(msg->subj);
+	if(smb->status.attr&SMB_EMAIL) {
+		if(msg->to_ext)
+			msg->idx.to=atoi(msg->to_ext);
+		else
+			msg->idx.to=0;
+		if(msg->from_ext)
+			msg->idx.from=atoi(msg->from_ext);
+		else
+			msg->idx.from=0; 
+	} else {
+		msg->idx.to=smb_name_crc(msg->to);
+		msg->idx.from=smb_name_crc(msg->from);
+	}
+
+	return(SMB_SUCCESS);
+}
diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h
index 5fa63621b002ccf6d47e24389b1eafb04d810e5b..2df02993dc8f018579a264140b476c8c405fa0ea 100644
--- a/src/smblib/smblib.h
+++ b/src/smblib/smblib.h
@@ -181,7 +181,9 @@ SMBEXPORT hash_t*	SMBCALL	smb_hashstr(ulong msgnum, ulong time, unsigned source
 
 SMBEXPORT hash_t**	SMBCALL smb_msghashes(smbmsg_t* msg, const uchar* text);
 SMBEXPORT int		SMBCALL smb_addhashes(smb_t* smb, hash_t** hash_list, BOOL skip_marked);
+SMBEXPORT ushort	SMBCALL smb_name_crc(const char* name);
 SMBEXPORT ushort	SMBCALL smb_subject_crc(const char *subj);
+SMBEXPORT int		SMBCALL smb_init_idx(smb_t* smb, smbmsg_t* msg);
 
 /* Fast look-up functions (using hashes) */
 SMBEXPORT int 		SMBCALL smb_getmsgidx_by_hash(smb_t* smb, smbmsg_t* msg, unsigned source