Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/DoubleBoundedConstraint.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 122)
@@ -182,5 +182,4 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(reader, restoredObjects);
       lowerBound = double.Parse(reader["LowerBound"]);
       if(reader["LowerBoundIncluded"] != null) {
@@ -206,4 +205,5 @@
         upperBoundEnabled = true;
       }
+      base.Populate(reader, restoredObjects);
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/IntBoundedConstraint.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 122)
@@ -177,5 +177,4 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(reader, restoredObjects);
       lowerBound = int.Parse(reader["LowerBound"]);
       if(reader["LowerBoundIncluded"] != null) {
@@ -201,4 +200,5 @@
         upperBoundEnabled = true;
       }
+      base.Populate(reader, restoredObjects);
     }
 
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/ItemTypeConstraint.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 122)
@@ -92,6 +92,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      type = Type.GetType(reader["ItemType"]);
       base.Populate(reader, restoredObjects);
-      type = Type.GetType(reader["ItemType"]);
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 122)
@@ -94,7 +94,7 @@
     //}
     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);
+      base.Populate(reader, restoredObjects);
     }
     #endregion persistence
Index: branches/XmlTextReaderBranch/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 122)
@@ -133,5 +133,5 @@
       subOperatorIndex = (IntData)PersistenceManager.Restore(reader, "SubOperatorIndex", restoredObjects);
       subOperators = new List<IOperator>();
-      reader.ReadStartElement("AllowedSubOperators");
+      reader.ReadToDescendant("AllowedSubOperators");
       while(reader.IsStartElement())
         subOperators.Add((IOperator)PersistenceManager.Restore(reader, restoredObjects));
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/AtomicOperation.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/AtomicOperation.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/AtomicOperation.cs	(revision 122)
@@ -64,6 +64,9 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
+      reader.Read();
       myOperator = (IOperator)PersistenceManager.Restore(reader, "Operator", restoredObjects);
+      reader.Skip();
       myScope = (IScope)PersistenceManager.Restore(reader, "Scope", restoredObjects);
+      reader.Read();
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/CompositeOperation.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/CompositeOperation.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/CompositeOperation.cs	(revision 122)
@@ -81,9 +81,8 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      myExecuteInParallel = bool.Parse(reader["ExecuteInParallel"]);
       base.Populate(reader, restoredObjects);
 
-      myExecuteInParallel = bool.Parse(reader["ExecuteInParallel"]);
-
-      reader.ReadStartElement("Operations");
+      reader.ReadToDescendant("Operations");
       while(reader.IsStartElement()) 
         AddOperation((IOperation)PersistenceManager.Restore(reader, restoredObjects));
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/ConstrainedItemBase.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/ConstrainedItemBase.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/ConstrainedItemBase.cs	(revision 122)
@@ -39,5 +39,5 @@
       ConstrainedItemBase clone = (ConstrainedItemBase)base.Clone(clonedObjects);
       clone.myConstraints.Clear();
-      foreach (IConstraint constraint in Constraints)
+      foreach(IConstraint constraint in Constraints)
         clone.AddConstraint((IConstraint)Auxiliary.Clone(constraint, clonedObjects));
       return clone;
@@ -49,5 +49,5 @@
     }
     public virtual void RemoveConstraint(IConstraint constraint) {
-      if (myConstraints.Remove(constraint))
+      if(myConstraints.Remove(constraint))
         OnConstraintRemoved(constraint);
     }
@@ -55,5 +55,5 @@
     public bool IsValid() {
       bool result = true;
-      foreach (IConstraint constraint in Constraints)
+      foreach(IConstraint constraint in Constraints)
         result = result && constraint.Check(this);
       return result;
@@ -62,6 +62,6 @@
       bool result = true;
       violatedConstraints = new List<IConstraint>();
-      foreach (IConstraint constraint in Constraints) {
-        if (!constraint.Check(this)) {
+      foreach(IConstraint constraint in Constraints) {
+        if(!constraint.Check(this)) {
           result = false;
           violatedConstraints.Add(constraint);
@@ -77,19 +77,19 @@
     public event EventHandler<ConstraintEventArgs> ConstraintAdded;
     protected virtual void OnConstraintAdded(IConstraint constraint) {
-      if (ConstraintAdded != null)
+      if(ConstraintAdded != null)
         ConstraintAdded(this, new ConstraintEventArgs(constraint));
     }
     public event EventHandler<ConstraintEventArgs> ConstraintRemoved;
     protected virtual void OnConstraintRemoved(IConstraint constraint) {
-      if (ConstraintRemoved != null)
+      if(ConstraintRemoved != null)
         ConstraintRemoved(this, new ConstraintEventArgs(constraint));
     }
 
     #region Persistence Methods
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
       XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      if (Constraints.Count > 0) {
+      if(Constraints.Count > 0) {
         XmlNode constraintsNode = document.CreateNode(XmlNodeType.Element, "Constraints", null);
-        foreach (IConstraint constraint in Constraints)
+        foreach(IConstraint constraint in Constraints)
           constraintsNode.AppendChild(PersistenceManager.Persist(constraint, document, persistedObjects));
         node.AppendChild(constraintsNode);
@@ -108,6 +108,6 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      if(reader.IsStartElement()) {
-        reader.ReadToDescendant("Constraints");
+      reader.Read();
+      if(reader.Name == "Constraints") {
         myConstraints.Clear();
         while(reader.IsStartElement())
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/EngineBase.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/EngineBase.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/EngineBase.cs	(revision 122)
@@ -192,19 +192,24 @@
     public override void Populate(XmlReader reader, IDictionary<Guid,IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
+      reader.Read();
       myOperatorGraph = (IOperatorGraph)PersistenceManager.Restore(reader, "OperatorGraph", restoredObjects);
+      reader.Skip();
       myGlobalScope = (IScope)PersistenceManager.Restore(reader, "GlobalScope", restoredObjects);
-
-      reader.ReadStartElement("ExecutionStack");
+      reader.Skip();
+      if(reader.Name!="ExecutionStack") throw new XmlException("Expected \"ExecutionStack\", found: \""+reader.Name+"\"");
       List<IOperation> operationList = new List<IOperation>();
-      while(reader.IsStartElement()) {
-        operationList.Insert(0, (IOperation)PersistenceManager.Restore(reader, restoredObjects));
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
+          operationList.Insert(0, (IOperation)PersistenceManager.Restore(reader, restoredObjects));
+          reader.Skip();
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
       }
       foreach(IOperation op in operationList)
         myExecutionStack.Push(op);
-      reader.ReadEndElement();
-
-      reader.ReadStartElement("ExecutionTime");
-      myExecutionTime = TimeSpan.Parse(reader.ReadString());
-      reader.ReadEndElement();
+      myExecutionTime = TimeSpan.Parse(reader.ReadElementString("ExecutionTime"));
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorBase.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorBase.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorBase.cs	(revision 122)
@@ -479,22 +479,45 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(reader, restoredObjects);
       myName = reader["Name"];
       if(reader["Breakpoint"] != null)
         myBreakpoint = bool.Parse(reader["Breakpoint"]);
-      reader.ReadStartElement("SubOperators");
-      while(reader.IsStartElement())
-        AddSubOperator((IOperator)PersistenceManager.Restore(reader, restoredObjects));
-      reader.ReadEndElement();
-      reader.ReadStartElement("VariableInfos");
+
+      base.Populate(reader, restoredObjects);
+      // constraintItemBase already reads to the next subelement
+      if(reader.Name != "SubOperators") throw new XmlException("Expected: \"SubOperators\" found: \"" + reader.Name+"\"");
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
+          AddSubOperator((IOperator)PersistenceManager.Restore(reader, restoredObjects));
+          reader.Skip();
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
+      if(reader.Name != "VariableInfos") throw new XmlException("Expected: \"VariableInfos\" found: \"" + reader.Name+"\"");
       myVariableInfos.Clear();
-      while(reader.IsStartElement())
-        AddVariableInfo((IVariableInfo)PersistenceManager.Restore(reader, restoredObjects));
-      reader.ReadEndElement();
-      reader.ReadStartElement("Variables");
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {        
+          AddVariableInfo((IVariableInfo)PersistenceManager.Restore(reader, restoredObjects));
+          reader.Skip();
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
+      if(reader.Name != "Variables") throw new XmlException("Expected: \"Variables\" found: \"" + reader.Name + "\"");
       myVariables.Clear();
-      while(reader.IsStartElement()) 
-        AddVariable((IVariable)PersistenceManager.Restore(reader, restoredObjects));
-      reader.ReadEndElement();
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
+          AddVariable((IVariable)PersistenceManager.Restore(reader, restoredObjects));
+          reader.Skip();
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGraph.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGraph.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGraph.cs	(revision 122)
@@ -149,7 +149,10 @@
       base.Populate(reader, restoredObjects);
 
-      reader.ReadToDescendant("Operators");
+      reader.Read();
+      if(reader.Name != "Operators") throw new XmlException("Expected: Operators found: " + reader.Name);
+      reader.Read();
       while(reader.IsStartElement()) {
         IOperator op = (IOperator)PersistenceManager.Restore(reader, restoredObjects);
+        reader.Skip();
         myOperators.Add(op.Guid, op);
       }
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGroup.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGroup.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/OperatorGroup.cs	(revision 122)
@@ -109,11 +109,12 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      myName = reader["Name"];
       base.Populate(reader, restoredObjects);
-      myName = reader["Name"];
-      reader.ReadStartElement("SubGroups");
+
+      reader.ReadToDescendant("SubGroups");
       while(reader.IsStartElement()) 
         AddSubGroup((IOperatorGroup)PersistenceManager.Restore(reader, restoredObjects));
       reader.ReadEndElement();
-      reader.ReadStartElement("Operators");
+      reader.ReadToDescendant("Operators");
       while(reader.IsStartElement())
         AddOperator((IOperator)PersistenceManager.Restore(reader, restoredObjects));
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/PersistenceManager.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/PersistenceManager.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/PersistenceManager.cs	(revision 122)
@@ -51,16 +51,24 @@
 
     public static IStorable Restore(XmlReader reader, string elementName, IDictionary<Guid, IStorable> restoredObjects) {
-      reader.ReadToDescendant(elementName);
-      return RestoreElement(reader, restoredObjects);
+      reader = reader.ReadSubtree();
+      reader.Read();
+      if(reader.Name != elementName) throw new XmlException("Expected: \"" + elementName + "\" found: \"" + reader.Name+"\"");
+      IStorable result = RestoreElement(reader, restoredObjects);
+      reader.Read();
+      reader.Close();
+      return result;
     }
 
     public static IStorable Restore(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      reader = reader.ReadSubtree();
       reader.Read();
-      return RestoreElement(reader, restoredObjects);
+      IStorable result = RestoreElement(reader, restoredObjects);
+      reader.Read();
+      reader.Close();
+      return result;
     }
     private static IStorable RestoreElement(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       Guid guid = new Guid(reader["GUID"]);
-      if(restoredObjects.ContainsKey(guid)) {
-        reader.ReadEndElement();
+      if(restoredObjects.ContainsKey(guid)) {        
         return restoredObjects[guid];
       } else {
@@ -69,5 +77,4 @@
         restoredObjects.Add(guid, instance);
         instance.Populate(reader, restoredObjects);
-        reader.ReadEndElement();
         return instance;
       }
@@ -90,7 +97,8 @@
     }
     public static IStorable Load(Stream stream) {
-      XmlDocument doc = new XmlDocument();
-      XmlTextReader reader = new XmlTextReader(stream);
-      reader.WhitespaceHandling = WhitespaceHandling.None;
+      XmlReaderSettings settings = new XmlReaderSettings();
+      settings.IgnoreComments = true;
+      settings.IgnoreWhitespace = true;
+      XmlReader reader = XmlReader.Create(stream, settings);
       reader.MoveToContent(); // read "<?xml version="1.0"?/>
       return PersistenceManager.RestoreElement(reader, new Dictionary<Guid, IStorable>());
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/Scope.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/Scope.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/Scope.cs	(revision 122)
@@ -313,26 +313,40 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      myName = reader["Name"];
       base.Populate(reader, restoredObjects);
-      myName = reader["Name"];
-
-      reader.ReadStartElement("Variables");
-      while(reader.IsStartElement()) {
-        IVariable variable = (IVariable)PersistenceManager.Restore(reader, restoredObjects);
-        AddVariable(variable);
-      }
-      reader.ReadEndElement();
-
-      if(reader.IsStartElement() && reader.Name=="Aliases") {
-        reader.ReadStartElement("Aliases");
-        while(reader.IsStartElement()) 
+      reader.Read();
+      if(reader.Name != "Variables") throw new XmlException("Expected: \"Variables\", found: \""+reader.Name+"\"");
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
+          IVariable variable = (IVariable)PersistenceManager.Restore(reader, restoredObjects);
+          reader.Skip();
+          AddVariable(variable);
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
+      if(reader.Name == "Aliases" && !reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
           AddAlias(reader["Alias"], reader["Name"]);
+        }
         reader.ReadEndElement();
-      }
-      reader.ReadStartElement("SubScopes");
-      while(reader.IsStartElement()) {
-        IScope scope = (IScope)PersistenceManager.Restore(reader, restoredObjects);
-        AddSubScope(scope);
-      }
-      reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
+      if(reader.Name != "SubScopes") throw new XmlException("Expected: \"SubScopes\", found: \"" + reader.Name + "\"");
+      if(!reader.IsEmptyElement) {
+        reader.Read();
+        while(reader.IsStartElement()) {
+          IScope scope = (IScope)PersistenceManager.Restore(reader, restoredObjects);
+          reader.Skip();
+          AddSubScope(scope);
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Core/Variable.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Core/Variable.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Core/Variable.cs	(revision 122)
@@ -117,4 +117,5 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       myName = reader["Name"];
+      reader.Read();
       if(reader.IsStartElement())
         myValue = (IItem)PersistenceManager.Restore(reader, "Value", restoredObjects);
Index: branches/XmlTextReaderBranch/HeuristicLab.Data/ConstrainedItemList.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Data/ConstrainedItemList.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Data/ConstrainedItemList.cs	(revision 122)
@@ -77,10 +77,17 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      reader.ReadStartElement("ListItems");
+      reader.Read();
+      if(reader.Name!="ListItems") throw new XmlException("Expected: \"ListItems\", found: \""+reader.Name+"\"");
       suspendConstraintCheck = bool.Parse(reader["SuspendConstraintCheck"]);
       list = new List<IItem>();
-      while(reader.IsStartElement())
-        list.Add((IItem)PersistenceManager.Restore(reader, restoredObjects));
-      reader.ReadEndElement();
+      if(!reader.IsEmptyElement) {
+        while(reader.IsStartElement()) {
+          list.Add((IItem)PersistenceManager.Restore(reader, restoredObjects));
+          reader.Skip();
+        }
+        reader.ReadEndElement();
+      } else {
+        reader.Read();
+      }
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.Data/DoubleData.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Data/DoubleData.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Data/DoubleData.cs	(revision 122)
@@ -69,8 +69,9 @@
       base.Populate(reader, restoredObjects);
       double data;
-      if(double.TryParse(reader.ReadString(), NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data) == true) {
+      string token = reader.ReadString();
+      if(double.TryParse(token, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data) == true) {
         Data = data;
       } else {
-        throw new FormatException("Can't parse " + reader.ReadString() + " as double value.");
+        throw new FormatException("Can't parse " + token + " as double value.");
       }
     }
Index: branches/XmlTextReaderBranch/HeuristicLab.Data/IntMatrixData.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Data/IntMatrixData.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Data/IntMatrixData.cs	(revision 122)
@@ -74,4 +74,5 @@
       int dim2 = int.Parse(reader["Dimension2"], CultureInfo.InvariantCulture.NumberFormat);
       string[] tokens = reader.ReadString().Split(';');
+
       int[,] data = new int[dim1, dim2];
       for(int i = 0; i < dim1; i++) {
Index: branches/XmlTextReaderBranch/HeuristicLab.Data/ItemList_T.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Data/ItemList_T.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Data/ItemList_T.cs	(revision 122)
@@ -63,6 +63,10 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      while(reader.IsStartElement()) 
+      reader.Read();
+      while(reader.IsStartElement()) {
         list.Add((T)PersistenceManager.Restore(reader, restoredObjects));
+        reader.Skip();
+      }
+      reader.ReadEndElement();
     }
 
Index: branches/XmlTextReaderBranch/HeuristicLab.DataAnalysis/Dataset.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.DataAnalysis/Dataset.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.DataAnalysis/Dataset.cs	(revision 122)
@@ -166,8 +166,7 @@
       rows = int.Parse(reader["Dimension1"], CultureInfo.InvariantCulture.NumberFormat);
       columns = int.Parse(reader["Dimension2"], CultureInfo.InvariantCulture.NumberFormat);
-
       VariableNames = ParseVariableNamesString(reader["VariableNames"]);
-
       string[] tokens = reader.ReadString().Split(';');
+
       if(tokens.Length != rows * columns) throw new FormatException();
       samples = new double[rows * columns];
Index: branches/XmlTextReaderBranch/HeuristicLab.DistributedEngine/DistributedEngine.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.DistributedEngine/DistributedEngine.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.DistributedEngine/DistributedEngine.cs	(revision 122)
@@ -193,6 +193,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      ServerAddress = reader["ServerAddress"];
       base.Populate(reader, restoredObjects);
-      ServerAddress = reader["ServerAddress"];
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab.ES/ES.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.ES/ES.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.ES/ES.cs	(revision 122)
@@ -612,6 +612,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      myEngine = (IEngine)PersistenceManager.Restore(reader, "Engine", restoredObjects);
       base.Populate(reader, restoredObjects);
-      myEngine = (IEngine)PersistenceManager.Restore(reader, "Engine", restoredObjects);
       SetReferences();
     }
Index: branches/XmlTextReaderBranch/HeuristicLab.Functions/FunctionBase.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Functions/FunctionBase.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Functions/FunctionBase.cs	(revision 122)
@@ -337,5 +337,5 @@
 
       // load local variables
-      reader.ReadStartElement("LocalVariables");
+      reader.ReadToDescendant("LocalVariables");
       // remove the variables that have been added in a constructor
       variables.Clear();
Index: branches/XmlTextReaderBranch/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 122)
@@ -211,8 +211,8 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      reader.ReadStartElement("Description");
+      reader.ReadToDescendant("Description");
       myDescription = reader.ReadString();
       reader.ReadEndElement();
-      reader.ReadStartElement("Code");
+      reader.ReadToDescendant("Code");
       myCode = reader.ReadString();
       reader.ReadEndElement();
Index: branches/XmlTextReaderBranch/HeuristicLab.Operators/CombinedOperator.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Operators/CombinedOperator.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Operators/CombinedOperator.cs	(revision 122)
@@ -104,9 +104,5 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      if(reader.IsStartElement() && reader.Name == "Description") {
-        reader.ReadStartElement("Description");
-        myDescription = reader.ReadString();
-        reader.ReadEndElement();
-      }
+      myDescription = reader.ReadElementString("Description");
       myOperatorGraph = (IOperatorGraph)PersistenceManager.Restore(reader, "OperatorGraph", restoredObjects);
     }
Index: branches/XmlTextReaderBranch/HeuristicLab.Random/MersenneTwister.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Random/MersenneTwister.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Random/MersenneTwister.cs	(revision 122)
@@ -143,5 +143,5 @@
       base.Populate(reader, restoredObjects);
 
-      reader.ReadStartElement("State");
+      reader.ReadToDescendant("State");
       string stateString = reader.ReadString();
       reader.ReadEndElement();
@@ -149,8 +149,8 @@
       for(int i = 0; i < tokens.Length; i++)
         state[i] = uint.Parse(tokens[i]);
-      reader.ReadStartElement("P");
+      reader.ReadToDescendant("P");
       p = int.Parse(reader.ReadString());
       reader.ReadEndElement();
-      reader.ReadStartElement("Init");
+      reader.ReadToDescendant("Init");
       init = bool.Parse(reader.ReadString());
       reader.ReadEndElement();
Index: branches/XmlTextReaderBranch/HeuristicLab.Random/NormalDistributedRandom.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Random/NormalDistributedRandom.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Random/NormalDistributedRandom.cs	(revision 122)
@@ -538,8 +538,8 @@
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(reader, restoredObjects);
-      reader.ReadStartElement("Mu");
+      reader.ReadToDescendant("Mu");
       mu = double.Parse(reader.ReadString());
       reader.ReadEndElement();
-      reader.ReadStartElement("Sigma");
+      reader.ReadToDescendant("Sigma");
       sigma = double.Parse(reader.ReadString());
       reader.ReadEndElement();
Index: branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/Schedule.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/Schedule.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/Schedule.cs	(revision 122)
@@ -86,6 +86,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      int machines = int.Parse(reader["Machines"]);
       base.Populate(reader, restoredObjects);
-      int machines = int.Parse(reader["Machines"]);
       schedule = new ScheduleTree[machines];
       for(int i = 0; i < machines; i++) {
Index: branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs	(revision 122)
@@ -225,6 +225,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      string[] tokens = reader.ReadString().Split(';');
       base.Populate(reader, restoredObjects);
-      string[] tokens = reader.ReadString().Split(';');
       for(int i = 0; i < tokens.Length - 1; i++) {
         TimeSlot t = new TimeSlot(tokens[i]);
Index: branches/XmlTextReaderBranch/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs	(revision 122)
@@ -188,6 +188,6 @@
     //}
     public override void Populate(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
+      myWorkers = int.Parse(reader["Workers"]);
       base.Populate(reader, restoredObjects);
-      myWorkers = int.Parse(reader["Workers"]);
     }
     #endregion
Index: branches/XmlTextReaderBranch/HeuristicLab/UpdateLocalInstallation.cmd
===================================================================
--- branches/XmlTextReaderBranch/HeuristicLab/UpdateLocalInstallation.cmd	(revision 121)
+++ branches/XmlTextReaderBranch/HeuristicLab/UpdateLocalInstallation.cmd	(revision 122)
@@ -1,3 +1,3 @@
-set target=C:\Program Files\HeuristicLab 3.0
+set target=G:\Program Files\HeuristicLab 3.0
 
 copy "HeuristicLab.exe" "%target%"
