Index: trunk/MagicSoft/Mars/mfileio/MReadReports.cc
===================================================================
--- trunk/MagicSoft/Mars/mfileio/MReadReports.cc	(revision 4182)
+++ trunk/MagicSoft/Mars/mfileio/MReadReports.cc	(revision 4183)
@@ -342,13 +342,14 @@
         TChain *chain = (TChain*)fChains->At(nmin);
 
+        MTask *task = (MTask*)fTrees->GetList()->At(nmin);
+
         //Int_t before = chain->GetTreeNumber();
         if (chain->GetEntry(++fPosEntry[nmin])>0)
         {
-            MTask *task = (MTask*)fTrees->GetList()->At(nmin);
-
-            if (task->CallProcess())
+            const Int_t rc = task->CallProcess();
+            if (rc)
             {
                 fList->SetStreamId(task->GetName());
-                return kTRUE;
+                return rc;
             }
         }
@@ -356,10 +357,18 @@
         *fLog << dbg << "Removing chain " << chain->GetName() << " from list." << endl;
 
-        delete *GetTime(chain);
-        delete  GetTime(chain);
-        delete fChains->Remove(chain);
-    }
-
-    return kFALSE;
+        delete *GetTime(chain);        // Delete MTime*
+        delete  GetTime(chain);        // Delete MTime-instance
+        delete fChains->Remove(chain); // Remove chain from TList
+
+        // FIXME: Maybe MTaskList should have a member function to
+        //        reorder the tasks?
+
+        // Move this task to the end of the list so that nmin still
+        // corresponds to the correct task in the list.
+        const_cast<TList*>(fTrees->GetList())->Remove(task);
+        const_cast<TList*>(fTrees->GetList())->AddLast(task);
+    }
+
+    return kFALSE; 
 }
 
