Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs	(revision 16874)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs	(revision 16946)
@@ -35,4 +35,5 @@
       public const string PopulationBasedAlgorithms = Algorithms + SplitToken + "1" + OrderToken + "Population Based";
       public const string SingleSolutionAlgorithms = Algorithms + SplitToken + "2" + OrderToken + "Single Solution";
+      public const string ExactAlgorithms = Algorithms + SplitToken + "3" + OrderToken + "Exact";
 
       public const string Problems = "2" + OrderToken + "Problems";
Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 16874)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 16946)
@@ -27,6 +27,8 @@
   public interface IValueParameter : IParameter {
     IItem Value { get; set; }
+    bool ReadOnly { get; set; }
     bool GetsCollected { get; set; }
     event EventHandler ValueChanged;
+    event EventHandler ReadOnlyChanged;
     event EventHandler GetsCollectedChanged;
   }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/NamedItem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/NamedItem.cs	(revision 16874)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/NamedItem.cs	(revision 16946)
@@ -30,5 +30,5 @@
     [Storable]
     protected string name;
-    /// <inheritdoc/>
+    /// Gets and sets the name of the item.
     /// <remarks>Calls <see cref="OnNameChanging"/> and also <see cref="OnNameChanged"/> 
     /// eventually in the setter.</remarks>
@@ -74,5 +74,5 @@
     }
     /// <summary>
-    /// Initializes a new instance of <see cref="Variable"/> with name <c>Anonymous</c> 
+    /// Initializes a new instance of <see cref="NamedItem"/> with name and description <c>string.Empty</c> 
     /// and value <c>null</c>.
     /// </summary>
@@ -82,9 +82,7 @@
     }
     /// <summary>
-    /// Initializes a new instance of <see cref="Variable"/> with the specified <paramref name="name"/>
-    /// and the specified <paramref name="value"/>.
+    /// Initializes a new instance of <see cref="NamedItem"/> with the specified <paramref name="name"/>
     /// </summary>
     /// <param name="name">The name of the current instance.</param>
-    /// <param name="value">The value of the current instance.</param>
     protected NamedItem(string name) {
       if (name == null) this.name = string.Empty;
@@ -92,4 +90,7 @@
       description = string.Empty;
     }
+    /// <summary>
+    /// Initializes a new instance of <see cref="NamedItem"/> with the specified <paramref name="name"/> and <paramref name="description"/>.
+    /// </summary>
     protected NamedItem(string name, string description) {
       if (name == null) this.name = string.Empty;
@@ -100,5 +101,5 @@
 
     /// <summary>
-    /// Gets the string representation of the current instance in the format: <c>Name: [null|Value]</c>.
+    /// Gets the string representation of the current instance.
     /// </summary>
     /// <returns>The current instance as a string.</returns>
@@ -122,5 +123,5 @@
     /// Fires a new <c>NameChanged</c> event.
     /// </summary>
-    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
+    /// <remarks>Calls <see cref="Item.OnToStringChanged"/>.</remarks>
     protected virtual void OnNameChanged() {
       var handler = NameChanged;
@@ -133,5 +134,4 @@
     /// Fires a new <c>DescriptionChanged</c> event.
     /// </summary>
-    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
     protected virtual void OnDescriptionChanged() {
       var handler = DescriptionChanged;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/PersistenceContentManager.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/PersistenceContentManager.cs	(revision 16874)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/PersistenceContentManager.cs	(revision 16946)
@@ -31,17 +31,14 @@
 
     protected override IStorableContent LoadContent(string filename) {
-      // first try to load using the new persistence format
-      try {
-        var ser = new ProtoBufSerializer();
-        return (IStorableContent)ser.Deserialize(filename);
-      } catch (Exception) {
-        // try old format if new format fails
-        return XmlParser.Deserialize<IStorableContent>(filename);
-      }
+      bool useOldPersistence = XmlParser.CanOpen(filename);
+      if (useOldPersistence) return XmlParser.Deserialize<IStorableContent>(filename);
+
+      var ser = new ProtoBufSerializer();
+      return (IStorableContent)ser.Deserialize(filename, out SerializationInfo info);
     }
 
     protected override void SaveContent(IStorableContent content, string filename, bool compressed, CancellationToken cancellationToken) {
       var ser = new ProtoBufSerializer();
-      ser.Serialize(content, filename, cancellationToken); 
+      ser.Serialize(content, filename, cancellationToken);
     }
   }
