diff -ruN mutt-1.4.2.1.orig/flags.c mutt-1.4.2.1/flags.c
--- mutt-1.4.2.1.orig/flags.c	Tue Jan 15 21:18:11 2002
+++ mutt-1.4.2.1/flags.c	Mon Jun 21 11:27:03 2004
@@ -21,7 +21,7 @@
 #include "sort.h"
 #include "mx.h"
 
-void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx)
+void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx, int recompute_score)
 {
   int changed = h->changed;
   int deleted = ctx->deleted;
@@ -209,6 +209,11 @@
       }
       break;
   }
+
+  /* Recompute the message's score to take account of any flag changes.
+   * James Raftery <james@now.ie> 17 June 2004.
+   */
+  if (recompute_score) mutt_score_message (ctx, h, 1);
 
   mutt_set_header_color(ctx, h);
 
diff -ruN mutt-1.4.2.1.orig/protos.h mutt-1.4.2.1/protos.h
--- mutt-1.4.2.1.orig/protos.h	Mon Apr 29 18:12:18 2002
+++ mutt-1.4.2.1/protos.h	Fri Jun 18 18:48:05 2004
@@ -213,8 +213,8 @@
 #define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)
 void _mutt_select_file (char *, size_t, int, char ***, int *);
 void mutt_message_hook (CONTEXT *, HEADER *, int);
-void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int);
-#define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1)
+void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int, int);
+#define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1,1)
 void mutt_set_followup_to (ENVELOPE *);
 void mutt_shell_escape (void);
 void mutt_show_error (void);
diff -ruN mutt-1.4.2.1.orig/score.c mutt-1.4.2.1/score.c
--- mutt-1.4.2.1.orig/score.c	Fri Mar  3 10:10:14 2000
+++ mutt-1.4.2.1/score.c	Fri Jun 18 18:54:47 2004
@@ -133,11 +133,11 @@
     hdr->score = 0;
   
   if (hdr->score <= ScoreThresholdDelete)
-    _mutt_set_flag (ctx, hdr, M_DELETE, 1, upd_ctx);
+    _mutt_set_flag (ctx, hdr, M_DELETE, 1, upd_ctx, 0);
   if (hdr->score <= ScoreThresholdRead)
-    _mutt_set_flag (ctx, hdr, M_READ, 1, upd_ctx);
+    _mutt_set_flag (ctx, hdr, M_READ, 1, upd_ctx, 0);
   if (hdr->score >= ScoreThresholdFlag)
-    _mutt_set_flag (ctx, hdr, M_FLAG, 1, upd_ctx);
+    _mutt_set_flag (ctx, hdr, M_FLAG, 1, upd_ctx, 0);
 }
 
 int mutt_parse_unscore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
