Index: trunk/MagicSoft/Mars/mbase/MEvtLoop.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 2015)
@@ -251,11 +251,35 @@
     // Check System time (don't loose too much time by updates)
     //
-    static TTime t0 = gSystem->Now();
-
-    const TTime t1 = gSystem->Now();
-    if (t1-t0 < (TTime)20)
+
+    // FIXME: Not thread safe
+    static Int_t start = num;
+    static TTime t1 = gSystem->Now();
+    static TTime t2 = t1;
+
+    //
+    // No update < 20ms
+    //
+    const TTime t0 = gSystem->Now();
+    if (t0-t1 < (TTime)20)
         return rc;
-
-    t0 = t1;
+    t1 = t0;
+
+    //
+    // Update current speed each second
+    //
+    if (t0-t2 > (TTime)1000)
+    {
+        const Int_t speed = 1000*(num-start)/(long int)(t0-t2);
+        TString txt = "Processing...";
+        if (speed>0)
+        {
+            txt += " (";
+            txt += speed;
+            txt += "Evts/s)";
+        }
+        fDisplay->SetStatusLine1(txt);
+        start = num;
+        t2 = t1;
+    }
 
     //
Index: trunk/MagicSoft/Mars/mbase/MGGroupFrame.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MGGroupFrame.h	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MGGroupFrame.h	(revision 2015)
@@ -37,5 +37,5 @@
     virtual Bool_t ProcessMessage(Long_t msg, Long_t param1, Long_t param2);
 
-    ClassDef(MGGroupFrame, 0) // A interface to widgets in a group frame (makes live easier)
+    ClassDef(MGGroupFrame, 0) // An interface to widgets in a group frame (makes live easier)
 };
 
Index: trunk/MagicSoft/Mars/mbase/MTask.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 2015)
@@ -69,4 +69,5 @@
 
 #include <fstream.h>
+#include <TBaseClass.h>
 
 #include "MLog.h"
@@ -317,2 +318,39 @@
      out << "   " << GetUniqueName() << ".SetFilter(&" << fFilter->GetUniqueName() <<");" << endl;
 }
+
+// --------------------------------------------------------------------------
+//
+// Check whether the class given in the argument overwrites MTask::Process.
+// This function calls itself recursively. If you want to call it,
+// leave out the argument.
+//
+Bool_t MTask::OverwritesProcess(TClass *cls) const
+{
+    if (!cls)
+        cls = IsA();
+
+    //
+    // Check whether we reached the base class MTask
+    //
+    if (TString(cls->GetName())=="MTask")
+        return kFALSE;
+
+    //
+    // Check whether the class cls overwrites Process
+    //
+    if (cls->GetMethodAny("Process"))
+        return kTRUE;
+
+    //
+    // If the class itself doesn't overload it check all it's base classes
+    //
+    TBaseClass *base=NULL;
+    TIter NextBase(cls->GetListOfBases());
+    while ((base=(TBaseClass*)NextBase()))
+    {
+        if (OverwritesProcess(base->GetClassPointer()))
+            return kTRUE;
+    }
+
+    return kFALSE;
+}
Index: trunk/MagicSoft/Mars/mbase/MTask.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTask.h	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MTask.h	(revision 2015)
@@ -80,4 +80,6 @@
     const TList *GetListOfBranches() const { return fListOfBranches; }
 
+    Bool_t OverwritesProcess(TClass *cls=NULL) const;
+
     void SavePrimitive(ofstream &out, Option_t *o="");
 
Index: trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 2015)
@@ -60,5 +60,4 @@
 
 #include <TClass.h>
-#include <TBaseClass.h>
 #include <TOrdCollection.h>
 
@@ -322,38 +321,9 @@
 // --------------------------------------------------------------------------
 //
-// Check whether this task (or one of it's base classes) overloads
-// MTask::Process. Only if this function is overloaded this task is
-// added to the fTaskProcess-List. This makes the execution of the
-// tasklist a little bit (only a little bit) faster, bacause tasks
-// doing no Processing are not Processed.
-//
-Bool_t MTaskList::CheckClassForProcess(TClass *cls)
-{
-    //
-    // Check whether the class itself overloads the Process function
-    //
-    if (cls->GetName()=="MTask")
-        return kFALSE;
-
-    if (cls->GetMethodAny("Process"))
-        return kTRUE;
-
-    //
-    // If the class itself doesn't overload it check all it's base classes
-    //
-    TBaseClass *base=NULL;
-    TIter NextBase(cls->GetListOfBases());
-    while ((base=(TBaseClass*)NextBase()))
-    {
-        if (CheckClassForProcess(base->GetClassPointer()))
-            return kTRUE;
-    }
-
-    return kFALSE;
-}
-
-// --------------------------------------------------------------------------
-//
 //  do pre processing (before eventloop) of all tasks in the task-list
+//  Only if a task overwrites the Process function the task is
+//  added to the fTaskProcess-List. This makes the execution of the
+//  tasklist a little bit (only a little bit) faster, bacause tasks
+//  doing no Processing are not Processed.
 //
 Bool_t MTaskList::PreProcess(MParList *pList)
@@ -410,5 +380,5 @@
     //
     while ((task=(MTask*)Next()))
-        if (CheckClassForProcess(task->IsA()))
+        if (task->OverwritesProcess())
             fTasksProcess.Add(task);
 
Index: trunk/MagicSoft/Mars/mbase/MTaskList.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTaskList.h	(revision 2009)
+++ trunk/MagicSoft/Mars/mbase/MTaskList.h	(revision 2015)
@@ -31,8 +31,5 @@
 
     void   Remove(MTask *task);
-    Bool_t CheckClassForProcess(TClass *cls);
-
-    void StreamPrimitive(ofstream &out) const;
-
+    void   StreamPrimitive(ofstream &out) const;
     Bool_t CheckAddToList(MTask *task, const char *tType, const MTask *where=NULL) const;
 
