Index: trunk/MagicSoft/Mars/mbase/MParList.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParList.h	(revision 2899)
+++ trunk/MagicSoft/Mars/mbase/MParList.h	(revision 2958)
@@ -36,5 +36,5 @@
 
 public:
-    enum { kDoNotReset = BIT(17) };
+    enum { kDoNotReset = BIT(17), kIsProcessing = BIT(18) };
 
     MParList(const char *name=NULL, const char *title=NULL);
Index: trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 2899)
+++ trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 2958)
@@ -308,4 +308,15 @@
     *fLog << all << "Reinit... " << flush;
 
+    if (!pList)
+        pList = fParList;
+
+    //
+    // Make sure, that the ReadyToSave flag is not reset from a tasklist
+    // running as a task in another tasklist.
+    //
+    const Bool_t noreset = pList->TestBit(MParList::kDoNotReset);
+    if (!noreset)
+        pList->SetBit(MParList::kDoNotReset);
+
     //
     //  create the Iterator over the tasklist
@@ -314,4 +325,5 @@
 
     MTask *task=NULL;
+
     //
     // loop over all tasks for reinitialization
@@ -321,5 +333,5 @@
         *fLog << all << task->GetName() << "... " << flush;
 
-        if (!task->ReInit(pList?pList:fParList))
+        if (!task->ReInit(pList/*?pList:fParList*/))
         {
             *fLog << err << "ERROR - ReInit of Task '" << task->GetDescriptor() << "' failed." << endl;
@@ -329,4 +341,13 @@
 
     *fLog << all << endl;
+
+    //
+    // Reset the ReadyToSave flag.
+    //
+    if (!noreset)
+    {
+        pList->SetReadyToSave(kFALSE);
+        pList->ResetBit(MParList::kDoNotReset);
+    }
 
     return kTRUE;
@@ -366,5 +387,11 @@
     fParList = pList;
 
-    fTasksProcess.Clear();
+    //
+    // Make sure, that the ReadyToSave flag is not reset from a tasklist
+    // running as a task in another tasklist.
+    //
+    const Bool_t noreset = fParList->TestBit(MParList::kDoNotReset);
+    if (!noreset)
+        fParList->SetBit(MParList::kDoNotReset);
 
     //
@@ -406,9 +433,18 @@
     *fLog << all << endl;
 
+    //
+    // Reset the ReadyToSave flag.
+    //
+    if (!noreset)
+    {
+        fParList->SetReadyToSave(kFALSE);
+        fParList->ResetBit(MParList::kDoNotReset);
+    }
+
+    //
+    // loop over all tasks to fill fTasksProcess
+    //
     Next.Reset();
-
-    //
-    // loop over all tasks for preproccesing
-    //
+    fTasksProcess.Clear();
     while ((task=(MTask*)Next()))
         if (task->OverwritesProcess())
@@ -441,10 +477,9 @@
     // running as a task in another tasklist.
     //
-    const Bool_t noreset = fParList->TestBit(MParList::kDoNotReset);
+    const Bool_t noreset = fParList->TestBit(MParList::kIsProcessing);
     if (!noreset)
     {
-        fParList->SetReadyToSave(kFALSE);
+        fParList->SetBit(MParList::kIsProcessing);
         fParList->Reset();
-        fParList->SetBit(MParList::kDoNotReset);
     }
 
@@ -514,5 +549,8 @@
 
     if (!noreset)
-        fParList->ResetBit(MParList::kDoNotReset);
+    {
+        fParList->SetReadyToSave(kFALSE);
+        fParList->ResetBit(MParList::kIsProcessing);
+    }
 
     return rc;
@@ -535,12 +573,13 @@
 
     //
-    // Reset the ReadyToSave flag.
-    // Reset all containers.
-    //
-    // FIXME: To run a tasklist as a single task in another tasklist we
-    //        have to make sure, that the Parameter list isn't reset.
-    //
-    fParList->SetReadyToSave(kFALSE);
-    fParList->Reset();
+    // Make sure, that the ReadyToSave flag is not reset from a tasklist
+    // running as a task in another tasklist.
+    //
+    const Bool_t noreset = fParList->TestBit(MParList::kDoNotReset);
+    if (!noreset)
+    {
+        fParList->SetBit(MParList::kDoNotReset);
+        fParList->Reset();
+    }
 
     //
@@ -566,4 +605,13 @@
 
     *fLog << all << endl;
+
+    //
+    // Reset the ReadyToSave flag.
+    //
+    if (!noreset)
+    {
+        fParList->SetReadyToSave(kFALSE);
+        fParList->ResetBit(MParList::kDoNotReset);
+    }
 
     return kTRUE;
