Index: stable/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs
===================================================================
--- stable/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs	(revision 12702)
+++ stable/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs	(revision 12727)
@@ -167,5 +167,5 @@
     /// <param name="obj">The object.</param>
     /// <param name="stream">The stream.</param>
-    public new static void Serialize(object obj, Stream stream) {
+    public static void Serialize(object obj, Stream stream) {
       Serialize(obj, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()));
     }
@@ -178,5 +178,5 @@
     /// <param name="stream">The stream.</param>
     /// <param name="config">The configuration.</param>
-    public new static void Serialize(object obj, Stream stream, Configuration config) {
+    public static void Serialize(object obj, Stream stream, Configuration config) {
       try {
         using (StreamWriter writer = new StreamWriter(stream)) {
Index: stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs
===================================================================
--- stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 12702)
+++ stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 12727)
@@ -311,4 +311,60 @@
     }
 
+    private static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies
+   , CompressionLevel compression) {
+      Serializer serializer = new Serializer(obj, config);
+      Serialize(stream, includeAssemblies, compression, serializer);
+    }
+
+    private static void Serialize(Stream stream, bool includeAssemblies, CompressionLevel compression, Serializer serializer) {
+      try {
+        DateTime start = DateTime.Now;
+        serializer.InterleaveTypeInformation = false;
+        XmlGenerator generator = new XmlGenerator();
+        using (ZipArchive zipArchive = new ZipArchive(stream, ZipArchiveMode.Create)) {
+          ZipArchiveEntry entry = zipArchive.CreateEntry("data.xml", compression);
+          using (StreamWriter writer = new StreamWriter(entry.Open())) {
+            foreach (ISerializationToken token in serializer) {
+              string line = generator.Format(token);
+              writer.Write(line);
+            }
+          }
+          entry = zipArchive.CreateEntry("typecache.xml", compression);
+          using (StreamWriter writer = new StreamWriter(entry.Open())) {
+            foreach (string line in generator.Format(serializer.TypeCache)) {
+              writer.Write(line);
+            }
+          }
+          if (includeAssemblies) {
+            foreach (string name in serializer.RequiredFiles) {
+              Uri uri = new Uri(name);
+              if (!uri.IsFile) {
+                Logger.Warn("cannot read non-local files");
+                continue;
+              }
+              entry = zipArchive.CreateEntry(Path.GetFileName(uri.PathAndQuery), compression);
+              using (BinaryWriter bw = new BinaryWriter(entry.Open())) {
+                using (FileStream reader = File.OpenRead(uri.PathAndQuery)) {
+                  byte[] buffer = new byte[1024 * 1024];
+                  while (true) {
+                    int bytesRead = reader.Read(buffer, 0, 1024 * 1024);
+                    if (bytesRead == 0)
+                      break;
+                    bw.Write(buffer, 0, bytesRead);
+                  }
+                }
+              }
+            }
+          }
+        }
+        Logger.Info(String.Format("serialization took {0} seconds with compression level {1}",
+          (DateTime.Now - start).TotalSeconds, compression));
+      }
+      catch (Exception) {
+        Logger.Warn("Exception caught, no data has been serialized.");
+        throw;
+      }
+    }
+
     /// <summary>
     /// Serializes the specified object into a file.
@@ -322,48 +378,9 @@
       try {
         string tempfile = Path.GetTempFileName();
-        DateTime start = DateTime.Now;
+
         using (FileStream stream = File.Create(tempfile)) {
-          Serializer serializer = new Serializer(obj, config);
-          serializer.InterleaveTypeInformation = false;
-          XmlGenerator generator = new XmlGenerator();
-          using (ZipArchive zipArchive = new ZipArchive(stream, ZipArchiveMode.Create)) {
-            ZipArchiveEntry entry = zipArchive.CreateEntry("data.xml", compression);
-            using (StreamWriter writer = new StreamWriter(entry.Open())) {
-              foreach (ISerializationToken token in serializer) {
-                string line = generator.Format(token);
-                writer.Write(line);
-              }
-            }
-            entry = zipArchive.CreateEntry("typecache.xml", compression);
-            using (StreamWriter writer = new StreamWriter(entry.Open())) {
-              foreach (string line in generator.Format(serializer.TypeCache)) {
-                writer.Write(line);
-              }
-            }
-            if (includeAssemblies) {
-              foreach (string name in serializer.RequiredFiles) {
-                Uri uri = new Uri(name);
-                if (!uri.IsFile) {
-                  Logger.Warn("cannot read non-local files");
-                  continue;
-                }
-                entry = zipArchive.CreateEntry(Path.GetFileName(uri.PathAndQuery), compression);
-                using (BinaryWriter bw = new BinaryWriter(entry.Open())) {
-                  using (FileStream reader = File.OpenRead(uri.PathAndQuery)) {
-                    byte[] buffer = new byte[1024 * 1024];
-                    while (true) {
-                      int bytesRead = reader.Read(buffer, 0, 1024 * 1024);
-                      if (bytesRead == 0)
-                        break;
-                      bw.Write(buffer, 0, bytesRead);
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-        Logger.Info(String.Format("serialization took {0} seconds with compression level {1}",
-          (DateTime.Now - start).TotalSeconds, compression));
+          Serialize(obj, stream, config, includeAssemblies, compression);
+        }
+
         File.Copy(tempfile, filename, true);
         File.Delete(tempfile);
@@ -381,6 +398,7 @@
     /// <param name="obj">The object.</param>
     /// <param name="stream">The stream.</param>
-    public static void Serialize(object obj, Stream stream) {
-      Serialize(obj, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()));
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
+    public static void Serialize(object obj, Stream stream, CompressionType compressionType = CompressionType.GZip) {
+      Serialize(obj, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), compressionType);
     }
 
@@ -392,6 +410,7 @@
     /// <param name="stream">The stream.</param>
     /// <param name="config">The configuration.</param>
-    public static void Serialize(object obj, Stream stream, Configuration config) {
-      Serialize(obj, stream, config, false);
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
+    public static void Serialize(object obj, Stream stream, Configuration config, CompressionType compressionType = CompressionType.GZip) {
+      Serialize(obj, stream, config, false, compressionType);
     }
 
@@ -403,8 +422,14 @@
     /// <param name="config">The configuration.</param>
     /// <param name="includeAssemblies">if set to <c>true</c> include need assemblies.</param>
-    public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies) {
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
+    public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies,
+                                 CompressionType compressionType = CompressionType.GZip) {
       try {
         Serializer serializer = new Serializer(obj, config);
-        Serialize(stream, serializer);
+        if (compressionType == CompressionType.Zip) {
+          Serialize(obj, stream, config, includeAssemblies, CompressionLevel.Optimal);
+        } else {
+          Serialize(stream, serializer);
+        }
       }
       catch (PersistenceException) {
@@ -424,8 +449,14 @@
     /// <param name="includeAssemblies">if set to <c>true</c> include need assemblies.</param>
     /// <param name="types">The list of all serialized types.</param>
-    public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, out IEnumerable<Type> types) {
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
+    public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, out IEnumerable<Type> types,
+                                 CompressionType compressionType = CompressionType.GZip) {
       try {
         Serializer serializer = new Serializer(obj, config);
-        Serialize(stream, serializer);
+        if (compressionType == CompressionType.Zip) {
+          Serialize(stream, includeAssemblies, CompressionLevel.Optimal, serializer);
+        } else {
+          Serialize(stream, serializer);
+        }
         types = serializer.SerializedTypes;
       }
Index: stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs
===================================================================
--- stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 12702)
+++ stable/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 12727)
@@ -31,4 +31,11 @@
 
 namespace HeuristicLab.Persistence.Default.Xml {
+  /// <summary>
+  /// Type of compression used for the Xml stream or file.
+  /// </summary>
+  public enum CompressionType {
+    GZip,
+    Zip
+  }
 
   /// <summary>
@@ -216,26 +223,4 @@
     }
 
-
-    /// <summary>
-    /// Deserializes an object from the specified stream.
-    /// </summary>
-    /// <param name="stream">The stream.</param>
-    /// <returns>A fresh object instance.</returns>
-    public static object Deserialize(Stream stream) {
-      try {
-        using (StreamReader reader = new StreamReader(new GZipStream(stream, CompressionMode.Decompress))) {
-          XmlParser parser = new XmlParser(reader);
-          Deserializer deserializer = new Deserializer(new TypeMapping[] { });
-          return deserializer.Deserialize(parser);
-        }
-      }
-      catch (PersistenceException) {
-        throw;
-      }
-      catch (Exception x) {
-        throw new PersistenceException("Unexpected exception during deserialization", x);
-      }
-    }
-
     /// <summary>
     /// Deserializes an object from the specified stream.
@@ -243,7 +228,35 @@
     /// <typeparam name="T">object type expected from the serialized stream</typeparam>
     /// <param name="stream">The stream.</param>
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
     /// <returns>A fresh object instance.</returns>
-    public static T Deserialize<T>(Stream stream) {
-      return (T)Deserialize(stream);
+    public static T Deserialize<T>(Stream stream, CompressionType compressionType = CompressionType.GZip) {
+      return (T)Deserialize(stream, compressionType);
+    }
+
+    /// <summary>
+    /// Deserializes an object from the specified stream.
+    /// </summary>
+    /// <param name="stream">The stream.</param>
+    /// <param name="compressionType">Type of compression, default is GZip.</param>
+    /// <returns>A fresh object instance.</returns>
+    public static object Deserialize(Stream stream, CompressionType compressionType = CompressionType.GZip) {
+      if (compressionType == CompressionType.Zip) {
+        ZipArchive zipFile = new ZipArchive(stream);
+        return Deserialize(zipFile);
+      } else {
+        try {
+          using (StreamReader reader = new StreamReader(new GZipStream(stream, CompressionMode.Decompress))) {
+            XmlParser parser = new XmlParser(reader);
+            Deserializer deserializer = new Deserializer(new TypeMapping[] { });
+            return deserializer.Deserialize(parser);
+          }
+        }
+        catch (PersistenceException) {
+          throw;
+        }
+        catch (Exception x) {
+          throw new PersistenceException("Unexpected exception during deserialization", x);
+        }
+      }
     }
 
