Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Common/3.3/Content/ContentManager.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Common/3.3/Content/ContentManager.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Common/3.3/Content/ContentManager.cs	(revision 17000)
@@ -21,8 +21,35 @@
 
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Threading;
+using System.Threading.Tasks;
+using HEAL.Attic;
 
 namespace HeuristicLab.Common {
   public abstract class ContentManager {
+    public class Info {
+      public Info() { }
+
+      public Info(string filename, TimeSpan duration) {
+        Filename = filename;
+        Duration = duration;
+      }
+
+      public Info(string filename, SerializationInfo serInfo) {
+        Filename = filename;
+        Duration = serInfo.Duration;
+        UnknownTypeGuids = serInfo.UnknownTypeGuids;
+        NumberOfSerializedObjects = serInfo.NumberOfSerializedObjects;
+        SerializedTypes = serInfo.SerializedTypes;        
+      }
+
+      public TimeSpan Duration { get; internal set; }
+      public IEnumerable<Guid> UnknownTypeGuids { get; internal set; } = Enumerable.Empty<Guid>();
+      public int NumberOfSerializedObjects { get; internal set; }
+      public IEnumerable<Type> SerializedTypes { get; internal set; } = Enumerable.Empty<Type>();
+      public string Filename { get; internal set; } = string.Empty;
+    }
+
     private static ContentManager instance;
 
@@ -36,25 +63,39 @@
 
     public static IStorableContent Load(string filename) {
+      return Load(filename, out var _);
+    }
+
+    public static IStorableContent Load(string filename, out Info serializationInfo) {
       if (instance == null) throw new InvalidOperationException("ContentManager is not initialized.");
-      IStorableContent content = instance.LoadContent(filename);
-      content.Filename = filename;
+      IStorableContent content = instance.LoadContent(filename, out serializationInfo);
+      
+      if (content != null) content.Filename = filename;
       return content;
     }
-    public static void LoadAsync(string filename, Action<IStorableContent, Exception> loadingCompletedCallback) {
+
+
+    public static Task LoadAsync(string filename, Action<IStorableContent, Exception> loadingCompletedCallback) {
+      return LoadAsync(filename, (content, error, info) => loadingCompletedCallback(content, error)); // drop info
+    }
+
+    public static async Task LoadAsync(string filename, Action<IStorableContent, Exception, Info> loadingCompletedCallback) {
       if (instance == null) throw new InvalidOperationException("ContentManager is not initialized.");
-      var func = new Func<string, IStorableContent>(instance.LoadContent);
-      func.BeginInvoke(filename, delegate (IAsyncResult result) {
-        Exception error = null;
-        IStorableContent content = null;
-        try {
-          content = func.EndInvoke(result);
-          content.Filename = filename;
-        } catch (Exception ex) {
-          error = ex;
-        }
-        loadingCompletedCallback(content, error);
-      }, null);
+
+      Exception error = null;
+      IStorableContent result = null;
+      Info serializationInfo = null;
+      try {
+        result = await Task.Run(() => {
+          var content = instance.LoadContent(filename, out serializationInfo);
+          if(content!=null) content.Filename = filename;
+          return content;
+        });
+      } catch(Exception ex) {
+        error = ex;
+      }
+      loadingCompletedCallback(result, error, serializationInfo);
     }
-    protected abstract IStorableContent LoadContent(string filename);
+
+    protected abstract IStorableContent LoadContent(string filename, out Info serializationInfo);
 
     public static void Save(IStorableContent content, string filename, bool compressed, CancellationToken cancellationToken = default(CancellationToken)) {
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Clipboard.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 17000)
@@ -24,5 +24,4 @@
 using System.Collections.Generic;
 using System.IO;
-using System.IO.Compression;
 using System.Linq;
 using System.Threading;
@@ -31,5 +30,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.MainForm;
-using HeuristicLab.Persistence.Default.Xml;
 using HeuristicLab.PluginInfrastructure;
 
@@ -157,13 +155,8 @@
       foreach (string filename in items) {
         try {
-          var ser = new ProtoBufSerializer();
-          T item = (T)ser.Deserialize(filename);
+          T item = (T)ContentManager.Load(filename);
           OnItemLoaded(item, progressBar.Maximum / items.Length);
-        } catch (Exception) {
-          try {
-            // try old format if protobuf deserialization fails
-            T item = XmlParser.Deserialize<T>(filename);
-            OnItemLoaded(item, progressBar.Maximum / items.Length);
-          } catch (Exception) { }
+        } catch(Exception) {
+          // ignore if loading a clipboad item fails.
         }
       }
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 17000)
@@ -375,9 +375,4 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Plugin.cs.frame	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Plugin.cs.frame	(revision 17000)
@@ -35,5 +35,4 @@
   [PluginDependency("HeuristicLab.MainForm", "3.3")]
   [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabCoreViewsPlugin : PluginBase {
   }
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core/3.3/PersistenceContentManager.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core/3.3/PersistenceContentManager.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core/3.3/PersistenceContentManager.cs	(revision 17000)
@@ -25,4 +25,5 @@
 using HEAL.Attic;
 using System;
+using System.Diagnostics;
 
 namespace HeuristicLab.Core {
@@ -30,11 +31,22 @@
     public PersistenceContentManager() : base() { }
 
-    protected override IStorableContent LoadContent(string filename) {
+    protected override IStorableContent LoadContent(string filename, out Info info) {
       bool useOldPersistence = XmlParser.CanOpen(filename);
-      if (useOldPersistence) return XmlParser.Deserialize<IStorableContent>(filename);
+      IStorableContent content = null;
+      if (useOldPersistence) {
+        var sw = new Stopwatch();
+        sw.Start();
+        content = XmlParser.Deserialize<IStorableContent>(filename);
+        sw.Stop();
+        info = new Info(filename, sw.Elapsed);
+      } else {
+        var ser = new ProtoBufSerializer();
+        content = (IStorableContent)ser.Deserialize(filename, out SerializationInfo serInfo);
+        info = new Info(filename, serInfo);
+      }
+      if (content == null) throw new PersistenceException($"Cannot deserialize root element of {filename}");
+      return content;
+    }
 
-      var ser = new ProtoBufSerializer();
-      return (IStorableContent)ser.Deserialize(filename, out SerializationInfo info);
-    }
 
     protected override void SaveContent(IStorableContent content, string filename, bool compressed, CancellationToken cancellationToken) {
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/FileManager.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 17000)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using System.Threading;
 using System.Windows.Forms;
@@ -73,7 +74,11 @@
     }
 
-    private static void LoadingCompleted(IStorableContent content, Exception error) {
+    private static void LoadingCompleted(IStorableContent content, Exception error, ContentManager.Info info) {
       try {
         if (error != null) throw error;
+        if (info!=null && info.UnknownTypeGuids.Any()) {
+          var message = "Unknown type guids: " + string.Join(Environment.NewLine, info.UnknownTypeGuids);
+          MessageBox.Show((Control)MainFormManager.MainForm, message, $"File {info.Filename} not restored completely", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
         IView view = MainFormManager.MainForm.ShowContent(content);
         if (view == null)
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 17000)
@@ -312,9 +312,4 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/Plugin.cs.frame
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 17000)
@@ -43,5 +43,4 @@
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   public class HeuristicLabOptimizerPlugin : PluginBase {
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 17000)
@@ -30,5 +30,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.MainForm;
-using HeuristicLab.Persistence.Default.Xml;
 
 namespace HeuristicLab.Optimizer {
@@ -121,5 +120,5 @@
         using (var stream = assembly.GetManifestResourceStream(name)) {
           WriteStreamToTempFile(stream, path); // create a file in a temporary folder (persistence cannot load these files directly from the stream)
-          var item = XmlParser.Deserialize<INamedItem>(path);
+          var item = (INamedItem)ContentManager.Load(path);
           OnSampleLoaded(item, group, 1.0 / count);
         }
Index: /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests/HeuristicLab.Persistence.Attic/PersistenceConsistencyChecks.cs
===================================================================
--- /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests/HeuristicLab.Persistence.Attic/PersistenceConsistencyChecks.cs	(revision 16999)
+++ /branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests/HeuristicLab.Persistence.Attic/PersistenceConsistencyChecks.cs	(revision 17000)
@@ -18,5 +18,4 @@
       var dict = new Dictionary<Guid, string>();
       var duplicates = new Dictionary<string, string>();
-      //get all non-generic and instantiable classes which implement IContentView
       foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(object))) {
         var attr = StorableTypeAttribute.GetStorableTypeAttribute(type);
