Index: branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAttribute.cs
===================================================================
--- branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAttribute.cs	(revision 13374)
+++ branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAttribute.cs	(revision 13375)
@@ -59,5 +59,5 @@
     /// <see cref="StorableClassType.MarkedOnly"/>.
     /// </summary>
-    public StorableClassAttribute() { }
+    private StorableClassAttribute() { }
 
     /// <summary>
Index: branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs
===================================================================
--- branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 13374)
+++ branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 13375)
@@ -85,4 +85,10 @@
         RegisterExtension(BoolArrayBox.BoolArray);
         RegisterExtension(IntArrayBox.IntArray);
+        RegisterExtension(LongArrayBox.LongArray);
+        RegisterExtension(UnsignedIntArrayBox.UnsignedIntArray);
+        RegisterExtension(UnsignedLongArrayBox.UnsignedLongArray);
+        RegisterExtension(FloatArrayBox.FloatArray);
+        RegisterExtension(DoubleArrayBox.DoubleArray);
+        RegisterExtension(StringArrayBox.StringArray);
         RegisterExtension(MatrixBox.Matrix);
         RegisterExtension(BoolMatrixBox.BoolMatrix);
Index: branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Protos/PersistenceMessages.proto
===================================================================
--- branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Protos/PersistenceMessages.proto	(revision 13374)
+++ branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Protos/PersistenceMessages.proto	(revision 13375)
@@ -85,4 +85,40 @@
   repeated int32 values = 1 [packed = true];
 }
+message LongArrayBox {
+  extend Box {
+    required LongArrayBox long_array = 122;
+  }
+  repeated int64 values = 1 [packed = true];
+}
+message UnsignedIntArrayBox {
+  extend Box {
+    required UnsignedIntArrayBox unsigned_int_array = 123;
+  }
+  repeated uint32 values = 1 [packed = true];
+}
+message UnsignedLongArrayBox {
+  extend Box {
+    required UnsignedLongArrayBox unsigned_long_array = 124;
+  }
+  repeated uint64 values = 1 [packed = true];
+}
+message FloatArrayBox {
+  extend Box {
+    required FloatArrayBox float_array = 125;
+  }
+  repeated float values = 1 [packed = true];
+}
+message DoubleArrayBox {
+  extend Box {
+    required DoubleArrayBox double_array = 126;
+  }
+  repeated double values = 1 [packed = true];
+}
+message StringArrayBox {
+  extend Box {
+    required StringArrayBox string_array = 127;
+  }
+  repeated string values = 1;
+}
 
 // matrix boxes
Index: branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs
===================================================================
--- branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs	(revision 13374)
+++ branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs	(revision 13375)
@@ -182,4 +182,76 @@
     protected abstract T ToValueType(IEnumerable<int> value, Type type, Mapper mapper);
   }
+  public abstract class LongArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = LongArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<LongArrayBox>(LongArrayBox.LongArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(LongArrayBox.LongArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<long> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<long> value, Type type, Mapper mapper);
+  }
+  public abstract class UnsignedIntArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = UnsignedIntArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<UnsignedIntArrayBox>(UnsignedIntArrayBox.UnsignedIntArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(UnsignedIntArrayBox.UnsignedIntArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<uint> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<uint> value, Type type, Mapper mapper);
+  }
+  public abstract class UnsignedLongArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = UnsignedLongArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<UnsignedLongArrayBox>(UnsignedLongArrayBox.UnsignedLongArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(UnsignedLongArrayBox.UnsignedLongArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<ulong> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<ulong> value, Type type, Mapper mapper);
+  }
+  public abstract class FloatArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = FloatArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<FloatArrayBox>(FloatArrayBox.FloatArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(FloatArrayBox.FloatArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<float> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<float> value, Type type, Mapper mapper);
+  }
+  public abstract class DoubleArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = DoubleArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<DoubleArrayBox>(DoubleArrayBox.DoubleArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(DoubleArrayBox.DoubleArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<double> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<double> value, Type type, Mapper mapper);
+  }
+  public abstract class StringArrayBoxTransformer<T> : BoxTransformer<T> {
+    protected override void Populate(Box.Builder box, T value, Mapper mapper) {
+      var b = StringArrayBox.CreateBuilder();
+      b.AddRangeValues(ToBoxType(value, mapper));
+      box.SetExtension<StringArrayBox>(StringArrayBox.StringArray, b.Build());
+    }
+    protected override T Extract(Box box, Type type, Mapper mapper) {
+      return ToValueType(box.GetExtension(StringArrayBox.StringArray).ValuesList, type, mapper);
+    }
+    protected abstract IEnumerable<string> ToBoxType(T value, Mapper mapper);
+    protected abstract T ToValueType(IEnumerable<string> value, Type type, Mapper mapper);
+  }
   #endregion
 
@@ -315,4 +387,35 @@
     protected override bool[] ToValueType(IEnumerable<bool> value, Type type, Mapper mapper) { return value.ToArray(); }
   }
+
+  [Transformer("FF89F6D1-CDE3-498E-9166-F70AC6EB01F1", 301)]
+  internal sealed class ByteArrayTransformer : UnsignedIntArrayBoxTransformer<byte[]> {
+    protected override IEnumerable<uint> ToBoxType(byte[] value, Mapper mapper) { return value.Cast<uint>(); }
+    protected override byte[] ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { return value.Cast<byte>().ToArray(); }
+  }
+
+  [Transformer("B49B3F2D-2E97-4BAB-8705-8D29DA707C6A", 302)]
+  internal sealed class SByteArrayTransformer : IntArrayBoxTransformer<sbyte[]> {
+    protected override IEnumerable<int> ToBoxType(sbyte[] value, Mapper mapper) { return value.Cast<int>(); }
+    protected override sbyte[] ToValueType(IEnumerable<int> value, Type type, Mapper mapper) { return value.Cast<sbyte>().ToArray(); }
+  }
+
+  [Transformer("2811FDD4-6800-4CBA-86D7-9071ED5775ED", 303)]
+  internal sealed class ShortArrayTransformer : IntArrayBoxTransformer<short[]> {
+    protected override IEnumerable<int> ToBoxType(short[] value, Mapper mapper) { return value.Cast<int>(); }
+    protected override short[] ToValueType(IEnumerable<int> value, Type type, Mapper mapper) { return value.Cast<short>().ToArray(); }
+  }
+
+  [Transformer("1AAC2625-356C-40BC-8CB4-15CB3D047EB8", 304)]
+  internal sealed class UShortArrayTransformer : UnsignedIntArrayBoxTransformer<ushort[]> {
+    protected override IEnumerable<uint> ToBoxType(ushort[] value, Mapper mapper) { return value.Cast<uint>(); }
+    protected override ushort[] ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { return value.Cast<ushort>().ToArray(); }
+  }
+
+  [Transformer("12F19098-5D49-4C23-8897-69087F1C146D", 305)]
+  internal sealed class CharArrayTransformer : UnsignedIntArrayBoxTransformer<char[]> {
+    protected override IEnumerable<uint> ToBoxType(char[] value, Mapper mapper) { return value.Cast<uint>(); }
+    protected override char[] ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { return value.Cast<char>().ToArray(); }
+  }
+
   [Transformer("5F6DC3BC-4433-4AE9-A636-4BD126F7DACD", 306)]
   internal sealed class IntArrayTransformer : IntArrayBoxTransformer<int[]> {
@@ -320,4 +423,40 @@
     protected override int[] ToValueType(IEnumerable<int> value, Type type, Mapper mapper) { return value.ToArray(); }
   }
+
+  [Transformer("3F10274F-D350-4C82-89EA-A5EB36D4EFCC", 307)]
+  internal sealed class UIntArrayTransformer : UnsignedIntArrayBoxTransformer<uint[]> {
+    protected override IEnumerable<uint> ToBoxType(uint[] value, Mapper mapper) { return value; }
+    protected override uint[] ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
+
+  [Transformer("E9D550E2-57F7-47F3-803D-37A619DA1A5C", 308)]
+  internal sealed class LongArrayTransformer : LongArrayBoxTransformer<long[]> {
+    protected override IEnumerable<long> ToBoxType(long[] value, Mapper mapper) { return value; }
+    protected override long[] ToValueType(IEnumerable<long> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
+
+  [Transformer("C02A205B-2176-4282-AC2B-ADEF96DDBE24", 309)]
+  internal sealed class ULongArrayTransformer : UnsignedLongArrayBoxTransformer<ulong[]> {
+    protected override IEnumerable<ulong> ToBoxType(ulong[] value, Mapper mapper) { return value; }
+    protected override ulong[] ToValueType(IEnumerable<ulong> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
+
+  [Transformer("3C4590D9-C76E-4AFB-98FD-E50D3D051648", 310)]
+  internal sealed class FloatArrayTransformer : FloatArrayBoxTransformer<float[]> {
+    protected override IEnumerable<float> ToBoxType(float[] value, Mapper mapper) { return value; }
+    protected override float[] ToValueType(IEnumerable<float> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
+
+  [Transformer("FB98C399-9323-4470-9A85-9186C2B2D5D4", 311)]
+  internal sealed class DoubleArrayTransformer : DoubleArrayBoxTransformer<double[]> {
+    protected override IEnumerable<double> ToBoxType(double[] value, Mapper mapper) { return value; }
+    protected override double[] ToValueType(IEnumerable<double> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
+
+  [Transformer("68332513-9CF1-47FA-A093-6DDB663186EC", 312)]
+  internal sealed class StringArrayTransformer : StringArrayBoxTransformer<string[]> {
+    protected override IEnumerable<string> ToBoxType(string[] value, Mapper mapper) { return value; }
+    protected override string[] ToValueType(IEnumerable<string> value, Type type, Mapper mapper) { return value.ToArray(); }
+  }
   #endregion
 }
