Index: trunk/MagicSoft/Mars/mdata/MData.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MData.cc	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MData.cc	(revision 1348)
@@ -48,3 +48,12 @@
 #include "MData.h"
 
+#include <ostream.h>
+
 ClassImp(MData);
+
+Bool_t MData::AsciiWrite(ostream &out) const
+{
+    out << GetValue() << " ";
+    return kTRUE;
+}
+
Index: trunk/MagicSoft/Mars/mdata/MData.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MData.h	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MData.h	(revision 1348)
@@ -23,4 +23,6 @@
     Double_t operator()() { return GetValue(); }
 
+    Bool_t AsciiWrite(ostream &out) const;
+
     ClassDef(MData, 0) // A Base class for a generalized value
 };
Index: trunk/MagicSoft/Mars/mdata/MDataChain.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1348)
@@ -81,4 +81,5 @@
 #include "MDataChain.h"
 
+#include <math.h>         // fabs on Alpha
 #include <ctype.h>        // isalnum, ...
 #include <stdlib.h>       // strtod, ...
@@ -131,4 +132,14 @@
 {
     return fMember ? fMember->PreProcess(pList) : kFALSE;
+}
+
+// --------------------------------------------------------------------------
+//
+// Checks whether at least one member has the ready-to-save flag.
+//
+Bool_t MDataChain::IsReadyToSave() const
+{
+    *fLog << all << "fM=" << fMember << "/" << (int)fMember->IsReadyToSave() << " " << endl;
+    return fMember ? fMember->IsReadyToSave() : kFALSE;
 }
 
Index: trunk/MagicSoft/Mars/mdata/MDataChain.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1348)
@@ -58,4 +58,5 @@
 
     Bool_t IsValid() const { return fMember ? kTRUE : kFALSE; }
+    Bool_t IsReadyToSave() const;
 
     void Print(Option_t *opt = "") const;
Index: trunk/MagicSoft/Mars/mdata/MDataList.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataList.cc	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataList.cc	(revision 1348)
@@ -142,4 +142,21 @@
 // --------------------------------------------------------------------------
 //
+// Checks whether at least one member has the ready-to-save flag.
+//
+Bool_t MDataList::IsReadyToSave() const
+{
+    TIter Next(&fMembers);
+
+    MData *data = NULL;
+
+    while ((data=(MData*)Next()))
+        if (data->IsReadyToSave())
+            return kTRUE;
+
+    return kFALSE;
+}
+
+// --------------------------------------------------------------------------
+//
 // If you want to add a new member to the list call this function with the
 // pointer to the member to be added. 
Index: trunk/MagicSoft/Mars/mdata/MDataList.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataList.h	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataList.h	(revision 1348)
@@ -41,4 +41,5 @@
 
     Bool_t IsValid() const { return fMembers.GetSize() ? kTRUE : kFALSE; }
+    Bool_t IsReadyToSave() const;
 
     Double_t GetValue() const;
Index: trunk/MagicSoft/Mars/mdata/MDataMember.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataMember.cc	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataMember.cc	(revision 1348)
@@ -59,4 +59,17 @@
     fObject = obj;
     fCall   = call;
+}
+
+// --------------------------------------------------------------------------
+//
+//  obj is a pointer to the instance of your class from which the data
+//  should be requested. TMethodCall (s. root dox) is a pointer
+//  to a TMethodCall object which should be the getter function for
+//  the data you want to get.
+//
+MDataMember::MDataMember(MParContainer *obj, const TString call)
+{
+    fObject = obj;
+    fCall   = obj->GetterMethod(call);
 }
 
@@ -134,4 +147,13 @@
 // --------------------------------------------------------------------------
 //
+// Returns the ready-to-save flag of the data member container
+//
+Bool_t MDataMember::IsReadyToSave() const
+{
+    return IsValid() ? fObject->IsReadyToSave() : kFALSE;
+}
+
+// --------------------------------------------------------------------------
+//
 // Print the name of the data member without an CR.
 //
Index: trunk/MagicSoft/Mars/mdata/MDataMember.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataMember.h	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataMember.h	(revision 1348)
@@ -24,4 +24,5 @@
     }
     MDataMember(MParContainer *obj, TMethodCall *call);
+    MDataMember(MParContainer *obj, const TString call);
 
     Double_t GetValue() const;
@@ -29,4 +30,5 @@
 
     Bool_t IsValid() const { return fCall ? kTRUE : kFALSE; }
+    Bool_t IsReadyToSave() const;
 
     void Print(Option_t *opt = "") const;
Index: trunk/MagicSoft/Mars/mdata/MDataValue.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataValue.h	(revision 1339)
+++ trunk/MagicSoft/Mars/mdata/MDataValue.h	(revision 1348)
@@ -26,4 +26,5 @@
 
     Bool_t IsValid() const { return kTRUE; }
+    Bool_t IsReadyToSave() const { return kFALSE; }
 
     void Print(Option_t *opt = "") const;
