diff -u spamass-milter-0.3.1/spamass-milter.cpp spamass-milter-0.3.1-precedence/spamass-milter.cpp
--- spamass-milter-0.3.1/spamass-milter.cpp	2007-10-02 00:06:23.000000000 +0200
+++ spamass-milter-0.3.1-precedence/spamass-milter.cpp	2008-12-27 16:20:04.000000000 +0100
@@ -455,10 +455,25 @@
 				do_reject = true;
 		}
 	}
+
 	if (do_reject)
 	{
-		debug(D_MISC, "Rejecting");
-		smfi_setreply(ctx, "550", "5.7.1", "Blocked by SpamAssassin");
+		// Change Reject into a DISCARD when the Precedence is List
+		// This stops us from bouncing towards mailing lists
+		// See bottom of http://lists.debian.org/debian-project/2008/12/msg00151.html
+		// Added by Jeroen Massar
+		if (cmp_nocase_partial("List", assassin->precedence()) == 0) do_reject = false;
+
+		if (do_reject)
+		{
+			debug(D_MISC, "Rejecting");
+			smfi_setreply(ctx, "550", "5.7.1", "Blocked by SpamAssassin");
+		}
+		else
+		{
+			debug(D_MISC, "Discarding");
+			/* No reply here, we just throw it out of the door */
+		}
 
 
 		if (flag_bucket)
@@ -521,7 +536,9 @@
 			free(buf);
 #endif 
 		}
-		return SMFIS_REJECT;
+
+		/* To Reject or To Discard, that is the question */
+		return do_reject ? SMFIS_REJECT : SMFIS_DISCARD;
 	}
   }
 
@@ -1085,6 +1102,12 @@
        };
      }
 
+  // Is it a Precedence header?
+  if ( cmp_nocase_partial("Precedence", headerf) == 0 )
+  {
+	assassin->set_precedence(headerv);
+  }
+
   // Is it a "X-Spam-" header field?
   if ( cmp_nocase_partial("X-Spam-", headerf) == 0 )
     {
@@ -1644,6 +1667,12 @@
 }
 
 string& 
+SpamAssassin::precedence()
+{
+  return x_precedence;
+}
+
+string& 
 SpamAssassin::spam_report()
 {
   return x_spam_report;
@@ -1776,6 +1805,14 @@
 }
 
 string::size_type
+SpamAssassin::set_precedence(const string& val)
+{
+  string::size_type old = x_precedence.size();
+  x_precedence = val;
+  return (old);
+}
+
+string::size_type
 SpamAssassin::set_spam_prev_content_type(const string& val)
 {
   string::size_type old = x_spam_prev_content_type.size();
diff -u spamass-milter-0.3.1/spamass-milter.h spamass-milter-0.3.1-precedence/spamass-milter.h
--- spamass-milter-0.3.1/spamass-milter.h	2007-08-22 06:14:58.000000000 +0200
+++ spamass-milter-0.3.1-precedence/spamass-milter.h	2008-12-27 15:13:08.000000000 +0100
@@ -99,6 +99,7 @@
   string& spam_checker_version();
   string& spam_level();
   string& content_type();
+  string& precedence();
   string& subject();
   string& rcpt();		/* first RCPT TO: recipient (raw) */
   string& from();		/* MAIL FROM: sender (raw) */
@@ -115,6 +116,7 @@
   string::size_type set_spam_checker_version(const string&);
   string::size_type set_spam_level(const string&);
   string::size_type set_content_type(const string&);
+  string::size_type set_precedence(const string&);
   string::size_type set_subject(const string&);
   string::size_type set_rcpt(const string&);
   string::size_type set_from(const string&);
@@ -138,7 +140,7 @@
   string outputbuffer;
 
   // Variables for SpamAssassin influenced fields
-  string x_spam_status, x_spam_flag, x_spam_report, x_spam_prev_content_type;
+  string x_spam_status, x_spam_flag, x_spam_report, x_spam_prev_content_type, x_precedence;
   string x_spam_checker_version, x_spam_level, _content_type, _subject;
   
   // Envelope info: MAIL FROM:, RCPT TO:, and IP address of remote host
