diff --git a/exec/imapservice.js b/exec/imapservice.js
index dc0df24dfa7511282036ee2d62c92cb8530ec84d..3e946a3502a1019fbe4fc4b24a872f0c28c5ce03 100644
--- a/exec/imapservice.js
+++ b/exec/imapservice.js
@@ -296,7 +296,7 @@ function send_fetch_response(msgnum, fmat, uid)
 				seen_changed=true;
 			saved_config[index.code].Seen[msgnum]=1;
 			save_cfg(false);
-			apply_seen();
+			apply_seen(index);
 			unlock_cfg();
 			idx.attr |= MSG_READ;
 		}
@@ -1269,7 +1269,7 @@ function read_index(base)
 	return(index);
 }
 
-function apply_seen()
+function apply_seen(index)
 {
 	var i;
 
@@ -1543,7 +1543,8 @@ var authenticated_command_handlers = {
 			if (saved_config[base_code] != undefined)
 				old_saved = saved_config[base_code];
 			read_cfg(base_code, true);
-			apply_seen();
+			index = read_index(base_code);
+			apply_seen(index);
 			delete saved_config[base_code];
 			if (old_saved != undefined)
 				saved_config[base_code] = old_saved;
@@ -1649,7 +1650,7 @@ function do_store(seq, uid, item, data)
 			}
 			saved_config[base.cfg.code].Seen[seq[i]] ^= 1;
 			save_cfg(false);
-			apply_seen();
+			apply_seen(index);
 			unlock_cfg();
 		}
 		if(!silent)
@@ -2012,7 +2013,7 @@ var selected_command_handlers = {
 			var i;
 
 			read_cfg(get_base_code(base), true);
-			apply_seen();
+			apply_seen(index);
 			for(i in seq) {
 				send_fetch_response(seq[i], data_items, false);
 			}
@@ -2063,7 +2064,7 @@ var selected_command_handlers = {
 					seq=parse_seq_set(args[2],true);
 					data_items=parse_data_items(args[3]);
 					read_cfg(get_base_code(base), true);
-					apply_seen();
+					apply_seen(index);
 					for(i in seq) {
 						send_fetch_response(seq[i], data_items, true);
 					}