diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
index 5547185..641a52c 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
@@ -80,10 +80,11 @@
     private final boolean useBinaryReferences;
     private final String name;
     private final Map<String, String> exportPathMapping;
+    private final int compressionLevel;
 
     public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots,
                                       String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences, int autosaveThreshold,
-                                      Map<String, String> exportPathMapping) {
+                                      Map<String, String> exportPathMapping, int compressionLevel) {
         this.name = name;
         this.packaging = packaging;
         this.importMode = importMode;
@@ -94,6 +95,7 @@
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
         this.useBinaryReferences = useBinaryReferences;
         this.exportPathMapping = exportPathMapping;
+        this.compressionLevel = compressionLevel;
     }
 
     @Override
@@ -107,6 +109,9 @@
             WorkspaceFilter filter = VltUtils.createFilter(exportOptions.getRequest(), nodeFilters, propertyFilters);
             ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION, useBinaryReferences, exportPathMapping);
 
+            // Set configured compression level (SLING-7362)
+            opts.setCompressionLevel(compressionLevel);
+
             log.debug("assembling package {} user {}", packageGroup + '/' + packageName + "-" + VERSION, resourceResolver.getUserID());
 
             packaging.getPackageManager().assemble(session, opts, outputStream);
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
index d44dcbe..2ecefa5 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
@@ -204,6 +204,18 @@
               "The format is {sourcePattern}={destinationPattern}, e.g. /etc/(.*)=/var/$1/some or simply /data=/bak")
     private static final String PATHS_MAPPING = "pathsMapping";
 
+    private static final int DEFAULT_COMPRESSION_LEVEL = 1;
+
+    @Property(
+            label = "The Vault zlib compression level",
+            description = "The zlib compression level used by Vault to serialize content. The compression level is " +
+                    "an integer between -1 and 9, see http://www.zlib.net/manual.html. Default is '1' (BEST_SPEED).",
+            intValue = DEFAULT_COMPRESSION_LEVEL,
+            propertyPrivate = true
+    )
+    private static final String COMPRESSION_LEVEL = "compressionLevel";
+
+
     @Reference
     private Packaging packaging;
 
@@ -238,6 +250,8 @@
             digestAlgorithm = null;
         }
 
+        int compressionLevel = PropertiesUtil.toInteger(config.get(COMPRESSION_LEVEL), DEFAULT_COMPRESSION_LEVEL);
+
         ImportMode importMode = null;
         if (importModeString != null) {
             importMode = ImportMode.valueOf(importModeString.trim());
@@ -253,7 +267,7 @@
         pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);
 
         DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling,
-                packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping);
+                packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping, compressionLevel);
 
         DistributionPackageBuilder wrapped;
         if ("filevlt".equals(type)) {
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
index f1679b7..9111a52 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
@@ -81,7 +81,8 @@
                 new String[0],
                 false,
                 -1,
-                null
+                null,
+                1
         );
 
         DistributionPackageBuilder builder =
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
index 4f5cf98..8a1c01d 100644
--- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
@@ -82,7 +82,7 @@
         boolean useReferences = false;
         int threshold = 1024;
         FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>());
+                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), 1);
 
         ResourceResolver sessionResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
@@ -124,7 +124,7 @@
         boolean useReferences = false;
         int thershold = 1024;
         FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>());
+                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), 1);
 
         File file = new File(getClass().getResource("/vlt/dp.vlt").getFile());
 
