Index: trunk/MagicSoft/Mars/mbase/MContinue.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MContinue.cc	(revision 5938)
+++ trunk/MagicSoft/Mars/mbase/MContinue.cc	(revision 5956)
@@ -73,4 +73,5 @@
 //
 MContinue::MContinue(const TString rule, const char *name, const char *title)
+    : fTaskList(0)
 {
     fName  = name  ? name  : "MContinue";
@@ -95,4 +96,5 @@
 //
 MContinue::MContinue(MFilter *f, const char *name, const char *title)
+    : fTaskList(0)
 {
     fName  = name  ? name  : "MContinue";
@@ -119,6 +121,14 @@
 Int_t MContinue::PreProcess(MParList *list)
 {
+    ResetBit(kFilterIsPrivate);
+
     if (!GetFilter())
     {
+        if (IsAllowEmpty())
+        {
+            *fLog << warn << GetDescriptor() << " - WARNING: Empty filter found... task removed." << endl;
+            return kSKIP;
+        }
+
         *fLog << err << dbginf << "Unknown fatal Error! (fFilter=NULL?!?)" << endl;
         return kFALSE;
@@ -144,7 +154,9 @@
     }
 
+    // Make sure, that everything is correctly propageted to the childs
     GetFilter()->SetDisplay(fDisplay);
     GetFilter()->SetLogStream(fLog);
 
+    // Remeber that the filter is not already in tasklist
     SetBit(kFilterIsPrivate);
 
@@ -229,4 +241,8 @@
 //     MyContinue.0: MHillas.fSize>1000
 //     MyContinue.1: MHillas.fSize<10000
+//   or
+//     MyContinue.Condition: <MMyClass>
+//     MMyClass.Variable1: ...
+//     MMyClass.Variable2: ...
 //
 // For more details see MF::ReadEnv
@@ -234,4 +250,15 @@
 Int_t MContinue::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
 {
+    if (IsEnvDefined(env, prefix, "Condition", print))
+    {
+        TString txt = GetEnvValue(env, prefix, "Condition", "");
+        txt = txt.Strip(TString::kBoth);
+        if (txt.BeginsWith("<") && txt.EndsWith(">"))
+        {
+            *fLog << err << "NOT YET IMPLEMENTED..." << endl;
+            return kERROR;
+        }
+    }
+
     MF *f = new MF;
     f->SetName(fName);
Index: trunk/MagicSoft/Mars/mbase/MContinue.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MContinue.h	(revision 5938)
+++ trunk/MagicSoft/Mars/mbase/MContinue.h	(revision 5956)
@@ -30,5 +30,5 @@
     Int_t PostProcess();
 
-    enum { kIsOwner = BIT(14), kFilterIsPrivate = BIT(15) };
+    enum { kIsOwner = BIT(14), kFilterIsPrivate = BIT(15), kAllowEmpty = BIT(16) };
 
 public:
@@ -36,4 +36,9 @@
     MContinue(MFilter *f, const char *name=NULL, const char *title=NULL);
     ~MContinue();
+
+    // MContinue
+    void SetAllowEmpty(Bool_t b=kTRUE) { b ? SetBit(kAllowEmpty) : ResetBit(kAllowEmpty); }
+    Bool_t IsAllowEmpty() const { return TestBit(kAllowEmpty); }
+
 
     void SetInverted(Bool_t i=kTRUE);
Index: trunk/MagicSoft/Mars/mbase/MMath.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MMath.cc	(revision 5938)
+++ trunk/MagicSoft/Mars/mbase/MMath.cc	(revision 5956)
@@ -135,4 +135,19 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// This function truncates the precision to roughly 0.5% of a Float_t by
+// changing its bit-pattern (Be carefull, in rare cases this function must
+// be adapted to different machines!). This is usefull to enforce better
+// compression by eg. gzip.
+//
+void MMath::TruncatePrecision(Float_t &val)
+{
+    UInt_t &f = (UInt_t&)val;
+
+    f += 0x00004000;
+    f &= 0xffff8000;
+}
+
 // -------------------------------------------------------------------------
 //
Index: trunk/MagicSoft/Mars/mbase/MMath.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MMath.h	(revision 5938)
+++ trunk/MagicSoft/Mars/mbase/MMath.h	(revision 5956)
@@ -18,4 +18,6 @@
     Double_t SignificanceLiMaSigned(Double_t s, Double_t b, Double_t alpha=1);
 
+    void TruncatePrecision(Float_t &val);
+
     TVector3 GetParab(const TVector3 &x, const TVector3 &y);
     Double_t InterpolParabLin(const TVector3 &vx, const TVector3 &vy, Double_t x);
