I would really appreciate it if anyone looked over the attached patch, which adds some significant fixes to spam.el, namely: - unregistering of articles (when they've already been registered with a particular spam/ham processor) - unregistering of articles when they change from spam to ham or vice versa during the usage of a group summary buffer (so if you mark a spam message as ham or vice versa, it will be unregistered from its original registration) - I think I've got the algorithm right but any opinions are welcome - consistent registration of articles with all the spam-use-* backends - mass registration/unregistration, meaning that when possible a batch of articles will be sent to a ham/spam processor. For tools like bogofilter the speed benefit should be huge, because the program will be invoked only once. This will allow mass training and remote training eventually. - the code is simpler, because now it's based on a few lookup tables instead of hand-coding all the processors. Also, I have learned to abuse funcall, apply, and the ` form sometimes. - gnus.el customizations now accept compound (list) names for spam/ham processors - the best way to explain it is to look at the gnus.el changes; the old spam/ham processors are still usable but marked obsolete The fixes affect almost every part of spam.el so please look at the patch and let me know if you see anything wrong. I'll be using the code in my own setup, but of course any testing you can do is much appreciated. I don't think the code will be bug-free because of the scope of the fixes, that's why I'm leaving it for review before I make a CVS commit. Thanks Ted