Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs	(revision 121)
@@ -92,7 +92,11 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      groupConstraint = (SubOperatorTypeConstraint)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorsGroupConstraint"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  groupConstraint = (SubOperatorTypeConstraint)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorsGroupConstraint"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      groupConstraint = (SubOperatorTypeConstraint)PersistenceManager.Restore(reader, "SubOperatorsGroupConstraint", restoredObjects);
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/AndConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/AndConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/AndConstraint.cs	(revision 121)
@@ -81,7 +81,11 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(reader, "Clauses", restoredObjects);
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/DoubleBoundedConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 121)
@@ -155,26 +155,52 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      lowerBound = double.Parse(node.Attributes["LowerBound"].Value);
-      if (node.Attributes["LowerBoundIncluded"] != null) {
-        lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  lowerBound = double.Parse(node.Attributes["LowerBound"].Value);
+    //  if(node.Attributes["LowerBoundIncluded"] != null) {
+    //    lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+    //  } else {
+    //    lowerBoundIncluded = true;
+    //  }
+    //  if(node.Attributes["LowerBoundEnabled"] != null) {
+    //    lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+    //  } else {
+    //    lowerBoundEnabled = true;
+    //  }
+
+    //  upperBound = double.Parse(node.Attributes["UpperBound"].Value);
+    //  if(node.Attributes["UpperBoundIncluded"] != null) {
+    //    upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+    //  } else {
+    //    upperBoundIncluded = true;
+    //  }
+    //  if(node.Attributes["UpperBoundEnabled"] != null) {
+    //    upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+    //  } else {
+    //    upperBoundEnabled = true;
+    //  }
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      lowerBound = double.Parse(reader["LowerBound"]);
+      if(reader["LowerBoundIncluded"] != null) {
+        lowerBoundIncluded = bool.Parse(reader["LowerBoundIncluded"]);
       } else {
         lowerBoundIncluded = true;
       }
-      if (node.Attributes["LowerBoundEnabled"] != null) {
-        lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+      if(reader["LowerBoundEnabled"] != null) {
+        lowerBoundEnabled = bool.Parse(reader["LowerBoundEnabled"]);
       } else {
         lowerBoundEnabled = true;
       }
 
-      upperBound = double.Parse(node.Attributes["UpperBound"].Value);
-      if (node.Attributes["UpperBoundIncluded"] != null) {
-        upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+      upperBound = double.Parse(reader["UpperBound"]);
+      if(reader["UpperBoundIncluded"] != null) {
+        upperBoundIncluded = bool.Parse(reader["UpperBoundIncluded"]);
       } else {
         upperBoundIncluded = true;
       }
-      if (node.Attributes["UpperBoundEnabled"] != null) {
-        upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+      if(reader["UpperBoundEnabled"] != null) {
+        upperBoundEnabled = bool.Parse(reader["UpperBoundEnabled"]);
       } else {
         upperBoundEnabled = true;
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/IntBoundedConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 121)
@@ -150,30 +150,57 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      lowerBound = int.Parse(node.Attributes["LowerBound"].Value);
-      if (node.Attributes["LowerBoundIncluded"] != null) {
-        lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  lowerBound = int.Parse(node.Attributes["LowerBound"].Value);
+    //  if (node.Attributes["LowerBoundIncluded"] != null) {
+    //    lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+    //  } else {
+    //    lowerBoundIncluded = true;
+    //  }
+    //  if (node.Attributes["LowerBoundEnabled"] != null) {
+    //    lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+    //  } else {
+    //    lowerBoundEnabled = true;
+    //  }
+
+    //  upperBound = int.Parse(node.Attributes["UpperBound"].Value);
+    //  if (node.Attributes["UpperBoundIncluded"] != null) {
+    //    upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+    //  } else {
+    //    upperBoundIncluded = true;
+    //  }
+    //  if (node.Attributes["UpperBoundEnabled"] != null) {
+    //    upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+    //  } else {
+    //    upperBoundEnabled = true;
+    //  }
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      lowerBound = int.Parse(reader["LowerBound"]);
+      if(reader["LowerBoundIncluded"] != null) {
+        lowerBoundIncluded = bool.Parse(reader["LowerBoundIncluded"]);
       } else {
         lowerBoundIncluded = true;
       }
-      if (node.Attributes["LowerBoundEnabled"] != null) {
-        lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+      if(reader["LowerBoundEnabled"] != null) {
+        lowerBoundEnabled = bool.Parse(reader["LowerBoundEnabled"]);
       } else {
         lowerBoundEnabled = true;
       }
 
-      upperBound = int.Parse(node.Attributes["UpperBound"].Value);
-      if (node.Attributes["UpperBoundIncluded"] != null) {
-        upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+      upperBound = int.Parse(reader["UpperBound"]);
+      if(reader["UpperBoundIncluded"] != null) {
+        upperBoundIncluded = bool.Parse(reader["UpperBoundIncluded"]);
       } else {
         upperBoundIncluded = true;
       }
-      if (node.Attributes["UpperBoundEnabled"] != null) {
-        upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+      if(reader["UpperBoundEnabled"] != null) {
+        upperBoundEnabled = bool.Parse(reader["UpperBoundEnabled"]);
       } else {
         upperBoundEnabled = true;
       }
     }
+
     #endregion
   }
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/ItemTypeConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 121)
@@ -86,8 +86,12 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      XmlAttribute itemTypeAttribute = node.Attributes["ItemType"];
-      type = Type.GetType(itemTypeAttribute.Value);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  XmlAttribute itemTypeAttribute = node.Attributes["ItemType"];
+    //  type = Type.GetType(itemTypeAttribute.Value);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      type = Type.GetType(reader["ItemType"]);
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/NotConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/NotConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/NotConstraint.cs	(revision 121)
@@ -75,7 +75,11 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      subConstraint = (ConstraintBase)PersistenceManager.Restore(node.SelectSingleNode("SubConstraint"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  subConstraint = (ConstraintBase)PersistenceManager.Restore(node.SelectSingleNode("SubConstraint"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      subConstraint = (ConstraintBase)PersistenceManager.Restore(reader, "SubConstraint", restoredObjects);
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 121)
@@ -88,8 +88,13 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      minOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("min"), restoredObjects);
-      maxOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("max"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  minOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("min"), restoredObjects);
+    //  maxOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("max"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      minOperators = (IntData)PersistenceManager.Restore(reader, "min", restoredObjects);
+      maxOperators = (IntData)PersistenceManager.Restore(reader, "max", restoredObjects);
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/OrConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/OrConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/OrConstraint.cs	(revision 121)
@@ -82,7 +82,11 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(reader, "Clauses", restoredObjects);
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 121)
@@ -121,11 +121,20 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      subOperatorIndex = (IntData)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorIndex"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  subOperatorIndex = (IntData)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorIndex"), restoredObjects);
+    //  subOperators = new List<IOperator>();
+    //  foreach(XmlNode childNode in node.SelectSingleNode("AllowedSubOperators").ChildNodes) {
+    //    subOperators.Add((IOperator)PersistenceManager.Restore(childNode, restoredObjects));
+    //  }
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      subOperatorIndex = (IntData)PersistenceManager.Restore(reader, "SubOperatorIndex", restoredObjects);
       subOperators = new List<IOperator>();
-      foreach(XmlNode childNode in node.SelectSingleNode("AllowedSubOperators").ChildNodes) {
-        subOperators.Add((IOperator)PersistenceManager.Restore(childNode, restoredObjects));
-      }
+      reader.ReadStartElement("AllowedSubOperators");
+      while(reader.IsStartElement())
+        subOperators.Add((IOperator)PersistenceManager.Restore(reader, restoredObjects));
+      reader.ReadEndElement();
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/VariableComparisonConstraint.cs
===================================================================
--- trunk/sources/HeuristicLab.Constraints/VariableComparisonConstraint.cs	(revision 103)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/VariableComparisonConstraint.cs	(revision 121)
@@ -117,9 +117,15 @@
     }
 
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      leftVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("LeftVarName"), restoredObjects);
-      rightVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("RightVarName"), restoredObjects);
-      comparer = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Comparer"), restoredObjects);
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+    //  leftVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("LeftVarName"), restoredObjects);
+    //  rightVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("RightVarName"), restoredObjects);
+    //  comparer = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Comparer"), restoredObjects);
+    //}
+    public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(reader, restoredObjects);
+      leftVarName = (StringData)PersistenceManager.Restore(reader, "LeftVarName", restoredObjects);
+      rightVarName = (StringData)PersistenceManager.Restore(reader, "RightVarName", restoredObjects);
+      comparer = (IntData)PersistenceManager.Restore(reader, "Comparer", restoredObjects);
     }
     #endregion
