Index: trunk/MagicSoft/Mars/mjobs/MJOptimize.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJOptimize.cc	(revision 6924)
+++ trunk/MagicSoft/Mars/mjobs/MJOptimize.cc	(revision 6932)
@@ -109,4 +109,5 @@
 #include "MFilterList.h"
 #include "../mfilter/MFMagicCuts.h"
+#include "../mfilter/MFMagicCuts2.h"
 #include "MContinue.h"
 #include "MGeomCamMagic.h"
@@ -333,5 +334,17 @@
 void MJOptimize::AddPreCut(const char *rule)
 {
-    fPreCuts.Add(new MF(rule));
+    MFilter *f = new MF(rule);
+    f->SetBit(kCanDelete);
+    AddPreCut(f);
+}
+
+//------------------------------------------------------------------------
+//
+// Add a cut which is used to fill the matrix. If kCanDelete is set
+// MJOptimize takes the ownership.
+//
+void MJOptimize::AddPreCut(MFilter *f)
+{
+    fPreCuts.Add(f);
 }
 
@@ -823,4 +836,6 @@
     if (filter && filter->InheritsFrom(MFMagicCuts::Class()))
         ((MFMagicCuts*)filter)->InitMapping(&m);
+    if (filter && filter->InheritsFrom(MFMagicCuts2::Class()))
+        ((MFMagicCuts2*)filter)->InitMapping(&m);
 
     MReadTree read("Events");
@@ -898,4 +913,6 @@
     if (filter && filter->InheritsFrom(MFMagicCuts::Class()))
         ((MFMagicCuts*)filter)->InitMapping(&m);
+    if (filter && filter->InheritsFrom(MFMagicCuts2::Class()))
+        ((MFMagicCuts2*)filter)->InitMapping(&m);
 
     parlist.AddToList(&histon);
@@ -1025,4 +1042,6 @@
         return kFALSE;
 
+    hist.Print();
+
     TObjArray cont;
     cont.Add(&est);
Index: trunk/MagicSoft/Mars/mjobs/MJOptimize.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJOptimize.h	(revision 6924)
+++ trunk/MagicSoft/Mars/mjobs/MJOptimize.h	(revision 6932)
@@ -101,4 +101,5 @@
     void AddFilter(const char *rule);
     void AddPreCut(const char *rule);
+    void AddPreCut(MFilter *f);
 
     // Steering of optimization
