Index: branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 16481)
+++ branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 16482)
@@ -138,4 +138,6 @@
     <Compile Include="Auxiliary\TypeNameParser.cs" />
     <Compile Include="Auxiliary\ReflectionTools.cs" />
+    <Compile Include="Transformers\BitmapTransformer.cs" />
+    <Compile Include="Transformers\FontTransformer.cs" />
     <None Include="packages.config" />
     <None Include="Plugin.cs.frame" />
@@ -305,3 +307,4 @@
     </BootstrapperPackage>
   </ItemGroup>
+  <ItemGroup />
 </Project>
Index: branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame
===================================================================
--- branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame	(revision 16481)
+++ branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame	(revision 16482)
@@ -21,4 +21,6 @@
 
 using HeuristicLab.PluginInfrastructure;
+using HEAL.Fossil;
+using System;
 
 namespace HeuristicLab.Persistence {
@@ -30,5 +32,39 @@
   [PluginFile("HeuristicLab.Persistence-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Tracing", "3.3")]
-  public class HeuristicLabPersistencePlugin : PluginBase { }
+  public class HeuristicLabPersistencePlugin : PluginBase { 
 
+    // register types when the Plugin type is loaded
+    static HeuristicLabPersistencePlugin() {
+      RegisterStorableTypes();
+    }
+
+    // This method registers known StorableTypes for persistence.
+    // It will be called automatically when the plugin is loaded.
+    // For unit tests it must be called explicitly.
+    public static void RegisterStorableTypes() {
+      TryRegisterType(new Guid("ECC12A57-DA8D-43D9-9EC7-FCAC878A4D69"), typeof(System.Drawing.Font));
+      TryRegisterType(new Guid("494C1352-A1C3-47A3-8754-A0B19B8F1567"), typeof(System.Drawing.FontStyle));
+      TryRegisterType(new Guid("41147B67-4C7A-4907-9F6C-509568395EDB"), typeof(System.Drawing.GraphicsUnit));
+      TryRegisterType(new Guid("E8348C94-9817-4164-9C98-377689F83F30"), typeof(System.Drawing.Bitmap));
+
+       TryRegisterType(new Guid("4AF3A1F6-49CD-4172-8394-FE464889250E"), Type.GetType("System.CultureAwareRandomizedComparer"));
+       TryRegisterType(new Guid("4C7F657C-B69E-4D1A-8812-3254D6219FD2"), Type.GetType("System.OrdinalRandomizedComparer"));
+       TryRegisterType(new Guid("0549A3DF-1FD4-487A-B06B-8C572DFFFBEB"), Type.GetType("System.Security.PermissionTokenKeyComparer"));
+       TryRegisterType(new Guid("65D2DE74-8BDF-4C74-9005-81A2C3991DC5"), Type.GetType("System.Collections.CompatibleComparer"));
+       TryRegisterType(new Guid("075827F4-07D9-4E50-9D00-C9FF3E7DCF9A"), Type.GetType("System.Collections.IEqualityComparer"));
+       TryRegisterType(new Guid("3DA30D50-2337-4487-AECD-F2DB3ECED834"), Type.GetType("System.Collections.StructuralEqualityComparer"));
+       TryRegisterType(new Guid("8A19DA46-FE80-4776-9DB4-B17E6182D104"), Type.GetType("System.Collections.Generic.SByteEnumEqualityComparer`1"));
+       TryRegisterType(new Guid("F6F6EFB9-B631-4ACC-9326-F492A6A63011"), Type.GetType("System.Collections.Generic.ShortEnumEqualityComparer`1"));
+       TryRegisterType(new Guid("BA0AB604-C052-4E08-8F9E-A5D8098F16A6"), Type.GetType("System.Collections.Generic.RandomizedStringEqualityComparer"));
+       TryRegisterType(new Guid("00C8C940-63D9-43FF-99BA-9C69301BF043"), Type.GetType("System.Collections.Generic.RandomizedObjectEqualityComparer"));
+    }
+
+    private static void TryRegisterType(Guid typeGuid, Type type) {
+      try {
+        Mapper.StaticCache.RegisterType(typeGuid, type);
+      } catch (Exception) {
+        Tracing.Logger.Warn($"type {type} or guid {typeGuid} is already registerd.");
+      }
+    }
+  }
 }
Index: branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs
===================================================================
--- branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs	(revision 16482)
+++ branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs	(revision 16482)
@@ -0,0 +1,30 @@
+﻿using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using Google.Protobuf;
+using HEAL.Fossil;
+
+namespace HeuristicLab.Persistence {
+  [Transformer("D0ADB806-2DFD-459D-B5DA-14B5F1152534", 404)]
+  [StorableType("B13D6153-E71D-4B76-9893-81D3570403E8")]
+  internal sealed class BitmapTransformer : BoxTransformer<Bitmap> {
+    protected override void Populate(Box box, Bitmap value, Mapper mapper) {
+      lock (value)
+        using (var ms = new MemoryStream()) {
+          value.Save(ms, ImageFormat.Png);
+          box.Bytes = ByteString.CopyFrom(ms.ToArray());
+        }
+    }
+
+    protected override Bitmap Extract(Box box, Type type, Mapper mapper) {
+      using (var ms = new MemoryStream()) {
+        ms.Write(box.Bytes.ToArray(), 0, box.Bytes.Length);
+        ms.Seek(0, SeekOrigin.Begin);
+        return new Bitmap(ms);
+      }
+    }
+  }
+
+}
Index: branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs
===================================================================
--- branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs	(revision 16482)
+++ branches/2520_PersistenceReintegration/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs	(revision 16482)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Drawing;
+using HEAL.Fossil;
+
+namespace HeuristicLab.Persistence.Transformers {
+
+  [Transformer("AFF27987-3301-4D70-9601-EFCA31BDA0DB", 405)]
+  [StorableType("B9F9A371-4DCB-478B-B0D4-6F87A15C02B5")]
+  internal sealed class FontTransformer : BoxTransformer<Font> {
+    protected override void Populate(Box box, Font value, Mapper mapper) {
+      var uints = box.UInts;
+      uints.Add(mapper.GetStringId(GetFontFamilyName(value.FontFamily)));
+      uints.Add(mapper.GetBoxId(value.Size));
+      uints.Add(mapper.GetBoxId(value.Style));
+      uints.Add(mapper.GetBoxId(value.Unit));
+      uints.Add(mapper.GetBoxId(value.GdiCharSet));
+      uints.Add(mapper.GetBoxId(value.GdiVerticalFont));
+    }
+
+    protected override Font Extract(Box box, Type type, Mapper mapper) {
+      var fontData = box.UInts;
+      return new Font(
+        GetFontFamily(mapper.GetString(fontData[0])),
+        (float)mapper.GetObject(fontData[1]),
+        (FontStyle)mapper.GetObject(fontData[2]),
+        (GraphicsUnit)mapper.GetObject(fontData[3]),
+        (byte)mapper.GetObject(fontData[4]),
+        (bool)mapper.GetObject(fontData[5])
+      );
+    }
+
+    public const string GENERIC_MONOSPACE_NAME = "_GenericMonospace";
+    public const string GENERIC_SANS_SERIF_NAME = "_GenericSansSerif";
+    public const string GENERIC_SERIF_NAME = "_GenericSerif";
+
+    public static FontFamily GetFontFamily(string name) {
+      if (name == GENERIC_MONOSPACE_NAME) return FontFamily.GenericMonospace;
+      if (name == GENERIC_SANS_SERIF_NAME) return FontFamily.GenericSansSerif;
+      if (name == GENERIC_SERIF_NAME) return FontFamily.GenericSerif;
+      return new FontFamily(name);
+    }
+
+    public static string GetFontFamilyName(FontFamily ff) {
+      if (ff.Equals(FontFamily.GenericMonospace)) return GENERIC_MONOSPACE_NAME;
+      if (ff.Equals(FontFamily.GenericSansSerif)) return GENERIC_SANS_SERIF_NAME;
+      if (ff.Equals(FontFamily.GenericSerif)) return GENERIC_SERIF_NAME;
+      return ff.Name;
+    }
+  }
+}
Index: branches/2520_PersistenceReintegration/HeuristicLab.Tests/HeuristicLab.Persistence.Fossil/UseCases.cs
===================================================================
--- branches/2520_PersistenceReintegration/HeuristicLab.Tests/HeuristicLab.Persistence.Fossil/UseCases.cs	(revision 16481)
+++ branches/2520_PersistenceReintegration/HeuristicLab.Tests/HeuristicLab.Persistence.Fossil/UseCases.cs	(revision 16482)
@@ -29,5 +29,7 @@
 using HEAL.Fossil;
 using HeuristicLab.Algorithms.GeneticAlgorithm;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
+using HeuristicLab.Data;
 using HeuristicLab.Persistence.Core;
 using HeuristicLab.Persistence.Default.Xml;
@@ -43,4 +45,6 @@
     public void CreateTempFile() {
       tempFile = Path.GetTempFileName();
+      // in HL this is not necessary because RegisterStorableTypes is called when the plugin is loaded
+      HeuristicLabPersistencePlugin.RegisterStorableTypes();
     }
 
@@ -150,5 +154,5 @@
               }
             } catch (Exception e) {
-              Console.WriteLine(t.FullName);
+              Console.WriteLine($"type {t.FullName} in {fileName} is not registered with a GUID in HEAL.Fossil");
               ok = false;
             }
