Index: addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryFeatureProviderTransformer.cs
===================================================================
--- addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryFeatureProviderTransformer.cs	(revision 17777)
+++ addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryFeatureProviderTransformer.cs	(revision 17777)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using GeoAPI.Geometries;
+using HEAL.Attic;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using SharpMap.Data;
+using SharpMap.Data.Providers;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing.Design;
+using System.Linq;
+
+namespace HeuristicLab.BioBoost.Persistence {
+
+  [Transformer("EDCB7A5F-A05F-4303-9B67-B1C84DF02246", 100)]
+  public class GeometryFeatureProviderTransformer : BoxTransformer<GeometryFeatureProvider> {
+    
+    public override Box CreateBox(object o, Mapper mapper) {
+      var box = base.CreateBox(o, mapper);
+      var value = o as GeometryFeatureProvider;
+      box.Values = new RepeatedValueBox();
+      box.Values.Kvps = new RepeatedKeyValuePairsBox();
+      foreach (DataColumn col in value.Features.Columns) {
+        Debug.Assert(col.ColumnName != null);
+        Debug.Assert(col.DataType != null);
+        box.Values.Kvps.Keys.Add(mapper.GetStringId(col.ColumnName));
+        box.Values.Kvps.Values.Add(mapper.GetTypeId(col.DataType));
+      }
+      return box;
+    }
+
+    public override object ToObject(Box box, Mapper mapper) {
+      var table = new FeatureDataTable();
+      for (int i = 0; i<box.Values.Kvps.Keys.Count; i++) {
+        table.Columns.Add(
+          mapper.GetString(box.Values.Kvps.Keys[i]),
+          mapper.GetType(box.Values.Kvps.Values[i]));
+      }
+      return new GeometryFeatureProvider(table);
+    }
+
+    public override void FillBox(Box box, object o, Mapper mapper) {
+      var value = o as GeometryFeatureProvider;
+      var rows = new List<Tuple<object[], IGeometry>>();
+      foreach (FeatureDataRow row in value.Features.Rows) {
+        rows.Add(Tuple.Create(row.ItemArray, row.Geometry));
+      }
+      box.Values.UInts = new RepeatedUIntBox();
+      box.Values.UInts.Values.Add(mapper.GetBoxId(rows));
+    }
+
+    public override void FillFromBox(object obj, Box box, Mapper mapper) {
+      var gfp = obj as GeometryFeatureProvider;
+      var rows = (List<Tuple<object[], IGeometry>>)mapper.GetObject(box.Values.UInts.Values[0]);
+      foreach (var row in rows) {
+        var dataRow = (FeatureDataRow)gfp.Features.LoadDataRow(row.Item1, LoadOption.OverwriteChanges);
+        dataRow.Geometry = row.Item2;
+      }
+    }
+
+    protected override void Populate(Box box, GeometryFeatureProvider value, Mapper mapper) {
+      throw new NotImplementedException();
+    }
+
+    protected override GeometryFeatureProvider Extract(Box box, Type type, Mapper mapper) {
+      throw new NotImplementedException();
+    }
+  }
+}
Index: addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryTransformer.cs
===================================================================
--- addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryTransformer.cs	(revision 17777)
+++ addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/GeometryTransformer.cs	(revision 17777)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using GeoAPI.Geometries;
+using Google.Protobuf;
+using HEAL.Attic;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using NetTopologySuite.Geometries;
+using NetTopologySuite.IO;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.BioBoost.Persistence {
+
+  [Transformer("C8168BD4-55BF-4478-98FD-B66D29C82D55", 100)]
+  public class GeometryTransformer : BoxTransformer<IGeometry> {
+
+    protected override void Populate(Box box, IGeometry value, Mapper mapper) {
+      box.Value = new ScalarValueBox();
+      box.Value.Bytes = ByteString.CopyFrom(new WKBWriter().Write(value));
+    }
+
+    protected override IGeometry Extract(Box box, Type type, Mapper mapper) {
+      return new WKBReader().Read(box.Value.Bytes.ToByteArray());
+    }
+
+    public override bool CanTransformType(Type type) {
+      return typeof(IGeometry).IsAssignableFrom(type);
+    }
+
+  }
+}
Index: addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/StorableTypeMap.cs
===================================================================
--- addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/StorableTypeMap.cs	(revision 17777)
+++ addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Persistence/StorableTypeMap.cs	(revision 17777)
@@ -0,0 +1,25 @@
+﻿using GeoAPI.Geometries;
+using HEAL.Attic;
+using SharpMap.Data.Providers;
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Problems.BioBoost.Persistence {
+  public class StorableTypeMap : IStorableTypeMap {
+    public IEnumerable<Tuple<Guid, Type>> KnownStorableTypes {
+      get {
+        yield return Tuple.Create(new Guid("C0423505-BFE3-441A-B859-9414E5DA8843"), typeof(GeometryFeatureProvider));
+        yield return Tuple.Create(new Guid("9668D7D3-8EB1-4C78-B35E-206A1A967F05"), typeof(IGeometry));
+        yield return Tuple.Create(new Guid("46AD44B0-25ED-4193-8B62-3FCEBFB4397E"), typeof(NetTopologySuite.Geometries.Point));
+        yield return Tuple.Create(new Guid("8C7605E3-485D-4BC2-931D-F9CFD0462987"), typeof(NetTopologySuite.Geometries.MultiPoint));
+        yield return Tuple.Create(new Guid("79699D23-2B0C-4470-99FD-5B08B3E62314"), typeof(NetTopologySuite.Geometries.LineString));
+        yield return Tuple.Create(new Guid("EDB0B8F6-AFE0-4225-A0ED-F11D06AA590C"), typeof(NetTopologySuite.Geometries.MultiLineString));
+        yield return Tuple.Create(new Guid("80929154-A48A-4CEB-B23A-952F3026F925"), typeof(NetTopologySuite.Geometries.Polygon));
+        yield return Tuple.Create(new Guid("15191D96-A005-4BDE-BFFB-C011D4FCEE6B"), typeof(NetTopologySuite.Geometries.MultiPolygon));
+        yield return Tuple.Create(new Guid("F9A1463F-FCAB-4D7B-B9EE-513564EA4D4A"), typeof(NetTopologySuite.Geometries.Geometry));
+        yield return Tuple.Create(new Guid("1500FC16-421B-4FAB-89A0-7DA92C441F64"), typeof(NetTopologySuite.Geometries.GeometryCollection));
+
+      }
+    }
+  }
+}
