diff --git a/exec/load/msgutils.js b/exec/load/msgutils.js
index 0e77f5cb03e461b16a60a0ef1e3bdfe20b8682b3..9ee28e1025404f101db71b741487fa6bc5f93168 100644
--- a/exec/load/msgutils.js
+++ b/exec/load/msgutils.js
@@ -370,19 +370,32 @@ function getMessageThreads(sub) {
 	var msgBase = new MsgBase(sub);
 	msgBase.open();
 	for(var m = msgBase.first_msg; m <= msgBase.last_msg; m++) {
-		if(threadedMessages.indexOf(m) >= 0)
-			continue;
 		header = msgBase.get_msg_header(m);
-		if(header === null || header.attr&MSG_DELETE)
+		if(
+			header === null
+			||
+			header.attr&MSG_DELETE
+			||
+			(sub == 'mail'
+				&&
+				header.to != user.alias
+				&&
+				header.to != user.name
+				&&
+				header.to_ext != user.number
+			)
+			||
+			threadedMessages.indexOf(header.number) >= 0
+		)
 			continue;
-		md5subject = md5_calc(header.subject.toUpperCase().replace(/^\s*|\s*RE:|^\s*|\s*$/g, ''), hex=true);
+		md5subject = md5_calc(header.subject.toUpperCase().replace(/\s*RE:\s*/g, ''), hex=true);
 		if(header.thread_back !== null && threadedMessages.indexOf(header.thread_back) >= 0) {
 			if(threads.thread.hasOwnProperty(header.thread_back)) {
 				// This is a reply to the first message in a thread
 				threads.thread[header.thread_back].newest = header.when_written_time;
 				threads.dates[threads.thread[header.thread_back].dateIndex] = header.when_written_time;
 				threads.thread[header.thread_back].messages.push(header);
-				threadedMessages.push(m);
+				threadedMessages.push(header.number);
 			} else {
 				tbHeader = msgBase.get_msg_header(header.thread_back);
 				if(tbHeader !== null) {
@@ -395,7 +408,7 @@ function getMessageThreads(sub) {
 							threads.thread[t].newest = header.when_written_time;
 							threads.dates[threads.thread[t].dateIndex] = header.when_written_time;
 							threads.thread[t].messages.push(header);
-							threadedMessages.push(m);
+							threadedMessages.push(header.number);
 							break outer;
 						}
 					}
@@ -406,20 +419,20 @@ function getMessageThreads(sub) {
 			threads.thread[subjects[md5subject]].newest = header.when_written_time;
 			threads.dates[threads.thread[subjects[md5subject]].dateIndex] = header.when_written_time;
 			threads.thread[subjects[md5subject]].messages.push(header);
-			threadedMessages.push(m);
+			threadedMessages.push(header.number);
 		}
-		if(threadedMessages.indexOf(m) >= 0)
+		if(threadedMessages.indexOf(header.number) >= 0)
 			continue;
 		
 		// This is a new thread
 		threads.dates.push(header.when_written_time);
-		threads.thread[m] = {
+		threads.thread[header.number] = {
 			newest : header.when_written_time,
 			dateIndex : threads.dates.length - 1,
 			messages : [header]
 		}
-		subjects[md5subject] = m;
-		threadedMessages.push(m);
+		subjects[md5subject] = header.number;
+		threadedMessages.push(header.number);
 	}
 	msgBase.close();