diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c
index 6fecd6a..541d000 100644
--- a/camel/camel-folder-summary.c
+++ b/camel/camel-folder-summary.c
@@ -3374,7 +3374,9 @@ message_info_free(CamelFolderSummary *s, CamelMessageInfo *info)
 	CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
 	
 	if (mi->uid) {
-		g_hash_table_remove (s->loaded_infos, mi->uid);
+		if (g_hash_table_lookup (s->loaded_infos, mi->uid) == mi) {
+			g_hash_table_remove (s->loaded_infos, mi->uid);
+		}
 		camel_pstring_free(mi->uid);
 	} 
 	camel_pstring_free(mi->subject);
diff --git a/camel/camel-vee-summary.c b/camel/camel-vee-summary.c
index 5a02fb3..0921b6d 100644
--- a/camel/camel-vee-summary.c
+++ b/camel/camel-vee-summary.c
@@ -336,14 +336,12 @@ message_info_from_uid (CamelFolderSummary *s, const char *uid)
 	/* FIXME[disk-summary] too bad design. Need to peek it from cfs
 	 * instead of hacking ugly like this */
 	CAMEL_SUMMARY_LOCK(s, summary_lock);
-	CAMEL_SUMMARY_LOCK(s, ref_lock);
 
 	info = g_hash_table_lookup (s->loaded_infos, uid);
 
 	if (info)
-		info->refcount++;
+		camel_message_info_ref (info);
 
-	CAMEL_SUMMARY_UNLOCK(s, ref_lock);
 	CAMEL_SUMMARY_UNLOCK(s, summary_lock);
 	
 	if (!info) {
@@ -498,6 +496,7 @@ camel_vee_summary_add(CamelVeeSummary *s, CamelFolderSummary *summary, const cha
 			camel_object_ref(summary);
 		}
 
+		camel_message_info_ref (mi);
 		return mi;
 	}
 
