diff -ur MailScanner-4.31.6/lib/MailScanner/Exim.pm MailScanner-4.31.6-patched/lib/MailScanner/Exim.pm
--- MailScanner-4.31.6/lib/MailScanner/Exim.pm	Wed Mar 24 09:26:56 2004
+++ MailScanner-4.31.6-patched/lib/MailScanner/Exim.pm	Tue Jun 29 12:01:49 2004
@@ -1310,8 +1310,11 @@
     $HitLimit4  = 0;
     $invalidfiles = "";
 
+    my @aux_queuedirnames=@queuedirnames;
+
     # Loop through each of the inq directories
-    foreach $queuedirname (@queuedirnames) {
+    while( defined($queuedirname=splice(@aux_queuedirnames,
+                  ($UnsortedBatchesLeft<=0 ? 0 : int(rand(@aux_queuedirnames))),1))) {
       
       # FIXME: Probably as a result of in-queue spec being
       # tainted, $queuedirname is tainted... work out exactly why!
diff -ur MailScanner-4.31.6/lib/MailScanner/Postfix.pm MailScanner-4.31.6-patched/lib/MailScanner/Postfix.pm
--- MailScanner-4.31.6/lib/MailScanner/Postfix.pm	Mon May 31 09:37:29 2004
+++ MailScanner-4.31.6-patched/lib/MailScanner/Postfix.pm	Tue Jun 29 12:01:58 2004
@@ -1104,8 +1104,11 @@
       $HitLimit4  = 0;
       $invalidfiles = "";
 
+      my @aux_queuedirnames=@queuedirnames;
+
       # Loop through each of the inq directories
-      foreach $queuedirname (@queuedirnames) {
+      while( defined($queuedirname=splice(@aux_queuedirnames,
+                    ($UnsortedBatchesLeft<=0 ? 0 : int(rand(@aux_queuedirnames))),1))) {
         #print STDERR "Scanning dir $queuedirname\n";
         unless (chdir $queuedirname) {
           MailScanner::Log::WarnLog("Cannot cd to dir %s to read messages, %s",
diff -ur MailScanner-4.31.6/lib/MailScanner/Qmail.pm MailScanner-4.31.6-patched/lib/MailScanner/Qmail.pm
--- MailScanner-4.31.6/lib/MailScanner/Qmail.pm	Sun Apr 25 11:23:42 2004
+++ MailScanner-4.31.6-patched/lib/MailScanner/Qmail.pm	Tue Jun 29 12:01:56 2004
@@ -527,9 +527,12 @@
       $HitLimit3  = 0;
       $HitLimit4  = 0;
       $invalidfiles = "";
+
+      my @aux_queuedirnames=@queuedirnames;
         
       # Loop through each of the inq directories
-      foreach $queuedirname (@queuedirnames) {
+      while( defined($queuedirname=splice(@aux_queuedirnames,
+                    ($UnsortedBatchesLeft<=0 ? 0 : int(rand(@aux_queuedirnames))),1))) {
         #print STDERR "Qmail.pm: Scanning dir $queuedirname\n";
         unless (chdir $queuedirname) {
           MailScanner::Log::WarnLog("Cannot cd to dir %s to read messages, %s",
diff -ur MailScanner-4.31.6/lib/MailScanner/Sendmail.pm MailScanner-4.31.6-patched/lib/MailScanner/Sendmail.pm
--- MailScanner-4.31.6/lib/MailScanner/Sendmail.pm	Tue Jun  1 12:12:39 2004
+++ MailScanner-4.31.6-patched/lib/MailScanner/Sendmail.pm	Tue Jun 29 12:01:53 2004
@@ -762,8 +762,11 @@
       $HitLimit4  = 0;
       $invalidfiles = "";
 
+      my @aux_queuedirnames=@queuedirnames;
+
       # Loop through each of the inq directories
-      foreach $queuedirname (@queuedirnames) {
+      while( defined($queuedirname=splice(@aux_queuedirnames,
+                    ($UnsortedBatchesLeft<=0 ? 0 : int(rand(@aux_queuedirnames))),1))) {
         #print STDERR "Scanning dir $queuedirname\n";
         unless (chdir $queuedirname) {
           MailScanner::Log::WarnLog("Cannot cd to dir %s to read messages, %s",
diff -ur MailScanner-4.31.6/lib/MailScanner/ZMailer.pm MailScanner-4.31.6-patched/lib/MailScanner/ZMailer.pm
--- MailScanner-4.31.6/lib/MailScanner/ZMailer.pm	Sat May 22 09:12:30 2004
+++ MailScanner-4.31.6-patched/lib/MailScanner/ZMailer.pm	Tue Jun 29 12:01:42 2004
@@ -715,8 +715,11 @@
     $HitLimit4  = 0;
     $invalidfiles = "";
 
+    my @aux_queuedirnames=@queuedirnames;
+
     # Loop through each of the inq directories
-    foreach $queuedirname (@queuedirnames) {
+    while( defined($queuedirname=splice(@aux_queuedirnames,
+                  ($UnsortedBatchesLeft<=0 ? 0 : int(rand(@aux_queuedirnames))),1))) {
       #print STDERR "Scanning dir $queuedirname\n";
       unless (chdir $queuedirname) {
         MailScanner::Log::WarnLog("Cannot cd to dir %s to read messages, %s",
