diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/crypto/CryptoProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProvider.java
similarity index 89%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/crypto/CryptoProvider.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProvider.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/crypto/CryptoProvider.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProvider.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.crypto;
+package app.coronawarn.server.services.distribution.assembly.component;

 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -22,7 +22,7 @@
 import org.springframework.stereotype.Component;

 /**
- * Wrapper class for a {@link CryptoProvider#getPrivateKey() private key} and a {@link
+ * Wrapper component for a {@link CryptoProvider#getPrivateKey() private key} and a {@link
  * CryptoProvider#getCertificate()} certificate} from the application properties.
  */
 @Component
@@ -30,10 +30,10 @@ public class CryptoProvider {

   private static final Logger logger = LoggerFactory.getLogger(CryptoProvider.class);

-  @Value("${app.coronawarn.server.services.distribution.paths.privatekey}")
+  @Value("${services.distribution.paths.privatekey}")
   private String privateKeyPath;

-  @Value("${app.coronawarn.server.services.distribution.paths.certificate}")
+  @Value("${services.distribution.paths.certificate}")
   private String certificatePath;

   @Autowired
@@ -72,10 +72,10 @@ private static Certificate getCertificateFromBytes(final byte[] bytes)
    * Reads and returns the {@link PrivateKey} configured in the application properties.
    */
   public PrivateKey getPrivateKey() {
-    if (this.privateKey == null) {
+    if (privateKey == null) {
       Resource privateKeyResource = resourceLoader.getResource(privateKeyPath);
       try (InputStream privateKeyStream = privateKeyResource.getInputStream()) {
-        this.privateKey = getPrivateKeyFromStream(privateKeyStream);
+        privateKey = getPrivateKeyFromStream(privateKeyStream);
       } catch (IOException e) {
         logger.error("Failed to load private key from {}", privateKeyPath, e);
         throw new RuntimeException(e);
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CwaApiStructureProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CwaApiStructureProvider.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/CwaApiStructureProvider.java
@@ -0,0 +1,35 @@
+package app.coronawarn.server.services.distribution.assembly.component;
+
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Assembles the content underneath the {@code /version} path of the CWA API.
+ */
+@Component
+public class CwaApiStructureProvider {
+
+  private final String VERSION_DIRECTORY = "version";
+  private final String VERSION_V1 = "v1";
+
+  @Autowired
+  private ExposureConfigurationStructureProvider exposureConfigurationStructureProvider;
+
+  @Autowired
+  private DiagnosisKeysStructureProvider diagnosisKeysStructureProvider;
+
+  public Directory getDirectory() {
+    IndexDirectory<?> versionDirectory =
+        new IndexDirectoryImpl<>(VERSION_DIRECTORY, __ -> Set.of(VERSION_V1), Object::toString);
+
+    versionDirectory.addDirectoryToAll(__ -> exposureConfigurationStructureProvider.getExposureConfiguration());
+    versionDirectory.addDirectoryToAll(__ -> diagnosisKeysStructureProvider.getDiagnosisKeys());
+
+    return new IndexingDecorator<>(versionDirectory);
+  }
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/DiagnosisKeysStructureProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/DiagnosisKeysStructureProvider.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/DiagnosisKeysStructureProvider.java
@@ -0,0 +1,37 @@
+package app.coronawarn.server.services.distribution.assembly.component;
+
+import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
+import app.coronawarn.server.common.persistence.service.DiagnosisKeyService;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory.DiagnosisKeysDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import java.util.Collection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Retrieves stored diagnosis keys and builds a {@link DiagnosisKeysDirectoryImpl} with them.
+ */
+@Component
+public class DiagnosisKeysStructureProvider {
+
+  private static final Logger logger = LoggerFactory.getLogger(DiagnosisKeysStructureProvider.class);
+
+  @Autowired
+  private DiagnosisKeyService diagnosisKeyService;
+
+  @Autowired
+  private CryptoProvider cryptoProvider;
+
+  public Directory getDiagnosisKeys() {
+    Collection<DiagnosisKey> diagnosisKeys = readDiagnosisKeys();
+    return new DiagnosisKeysDirectoryImpl(diagnosisKeys, cryptoProvider);
+  }
+
+  private Collection<DiagnosisKey> readDiagnosisKeys() {
+    logger.debug("Querying diagnosis keys from the database...");
+    return diagnosisKeyService.getDiagnosisKeys();
+  }
+
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/ExposureConfigurationStructureProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/ExposureConfigurationStructureProvider.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/ExposureConfigurationStructureProvider.java
@@ -0,0 +1,40 @@
+package app.coronawarn.server.services.distribution.assembly.component;
+
+import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.ExposureConfigurationProvider;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.UnableToLoadFileException;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.structure.directory.ExposureConfigurationDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Reads the exposure configuration parameters from the respective file in the class path and builds
+ * a {@link ExposureConfigurationDirectoryImpl} with them.
+ */
+@Component
+public class ExposureConfigurationStructureProvider {
+
+  private static final Logger logger = LoggerFactory
+      .getLogger(ExposureConfigurationStructureProvider.class);
+
+  @Autowired
+  private CryptoProvider cryptoProvider;
+
+  public Directory getExposureConfiguration() {
+    var riskScoreParameters = readExposureConfiguration();
+    return new ExposureConfigurationDirectoryImpl(riskScoreParameters, cryptoProvider);
+  }
+
+  private RiskScoreParameters readExposureConfiguration() {
+    logger.debug("Reading exposure configuration...");
+    try {
+      return ExposureConfigurationProvider.readMasterFile();
+    } catch (UnableToLoadFileException e) {
+      logger.error("Could not load exposure configuration parameters", e);
+      throw new RuntimeException(e);
+    }
+  }
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/OutputDirectoryProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/OutputDirectoryProvider.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/component/OutputDirectoryProvider.java
@@ -0,0 +1,37 @@
+package app.coronawarn.server.services.distribution.assembly.component;
+
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * Creates and clears a {@link Directory} on disk, which is defined by the application properties.
+ */
+@Component
+public class OutputDirectoryProvider {
+
+  private static final Logger logger = LoggerFactory.getLogger(OutputDirectoryProvider.class);
+
+  @Value("${services.distribution.paths.output}")
+  private String outputPath;
+
+  public Directory getDirectory() {
+    return new DirectoryImpl(getFileOnDisk());
+  }
+
+  public java.io.File getFileOnDisk() {
+    return new java.io.File(outputPath);
+  }
+
+  public void clear() throws IOException {
+    logger.debug("Clearing output directory...");
+    java.io.File outputDirectory = getFileOnDisk();
+    FileUtils.deleteDirectory(outputDirectory);
+    outputDirectory.mkdirs();
+  }
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java
similarity index 55%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysCountryDirectoryImpl.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory.decorator.DateAggregatingDecorator;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory.decorator.DateAggregatingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.time.LocalDate;
 import java.util.Collection;
 import java.util.Set;
@@ -17,8 +17,8 @@ public class DiagnosisKeysCountryDirectoryImpl extends IndexDirectoryImpl<String
   private static final String COUNTRY_DIRECTORY = "country";
   private static final String COUNTRY = "DE";

-  private Collection<DiagnosisKey> diagnosisKeys;
-  private CryptoProvider cryptoProvider;
+  private final Collection<DiagnosisKey> diagnosisKeys;
+  private final CryptoProvider cryptoProvider;

   public DiagnosisKeysCountryDirectoryImpl(Collection<DiagnosisKey> diagnosisKeys,
       CryptoProvider cryptoProvider) {
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java
similarity index 59%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDateDirectoryImpl.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.diagnosiskeys.util.DateTime;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util.DateTime;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -18,14 +18,14 @@ public class DiagnosisKeysDateDirectoryImpl extends IndexDirectoryImpl<LocalDate
   private static final String DATE_DIRECTORY = "date";
   private static final DateTimeFormatter ISO8601 = DateTimeFormatter.ofPattern("yyyy-MM-dd");

-  private Collection<DiagnosisKey> diagnosisKeys;
-  private CryptoProvider cryptoProvider;
+  private final Collection<DiagnosisKey> diagnosisKeys;
+  private final CryptoProvider cryptoProvider;

   public DiagnosisKeysDateDirectoryImpl(Collection<DiagnosisKey> diagnosisKeys,
       CryptoProvider cryptoProvider) {
     super(DATE_DIRECTORY, __ -> DateTime.getDates(diagnosisKeys), ISO8601::format);
-    this.diagnosisKeys = diagnosisKeys;
     this.cryptoProvider = cryptoProvider;
+    this.diagnosisKeys = diagnosisKeys;
   }

   @Override
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java
similarity index 69%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryImpl.java
@@ -1,12 +1,12 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.Collection;

 /**
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java
similarity index 61%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysHourDirectoryImpl.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.diagnosiskeys.structure.file.HourFileImpl;
-import app.coronawarn.server.services.distribution.diagnosiskeys.util.DateTime;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.decorator.SigningDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.file.HourFileImpl;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util.DateTime;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.SigningDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.Collection;
@@ -16,9 +16,9 @@ public class DiagnosisKeysHourDirectoryImpl extends IndexDirectoryImpl<LocalDate

   private static final String HOUR_DIRECTORY = "hour";

-  private Collection<DiagnosisKey> diagnosisKeys;
-  private LocalDate currentDate;
-  private CryptoProvider cryptoProvider;
+  private final Collection<DiagnosisKey> diagnosisKeys;
+  private final LocalDate currentDate;
+  private final CryptoProvider cryptoProvider;

   public DiagnosisKeysHourDirectoryImpl(Collection<DiagnosisKey> diagnosisKeys,
       LocalDate currentDate, CryptoProvider cryptoProvider) {
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java
similarity index 77%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/decorator/DateAggregatingDecorator.java
@@ -1,16 +1,16 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory.decorator;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory.decorator;

 import app.coronawarn.server.common.protocols.internal.FileBucket;
 import app.coronawarn.server.common.protocols.internal.SignedPayload;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.DirectoryDecorator;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.file.decorator.SigningDecorator;
-import app.coronawarn.server.services.distribution.structure.functional.CheckedFunction;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.DirectoryDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.SigningDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.CheckedFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/file/HourFileImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/file/HourFileImpl.java
similarity index 86%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/file/HourFileImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/file/HourFileImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/file/HourFileImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/file/HourFileImpl.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.file;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.file;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
 import app.coronawarn.server.common.protocols.external.exposurenotification.File;
 import app.coronawarn.server.common.protocols.external.exposurenotification.Key;
 import app.coronawarn.server.common.protocols.internal.FileBucket;
-import app.coronawarn.server.services.distribution.diagnosiskeys.util.Batch;
-import app.coronawarn.server.services.distribution.diagnosiskeys.util.DateTime;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util.Batch;
+import app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util.DateTime;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import com.google.protobuf.ByteString;
 import java.time.Instant;
 import java.time.LocalDateTime;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Batch.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Batch.java
similarity index 97%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Batch.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Batch.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Batch.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Batch.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.util;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util;

 import app.coronawarn.server.common.protocols.external.exposurenotification.File;
 import app.coronawarn.server.common.protocols.external.exposurenotification.Header;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTime.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTime.java
similarity index 95%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTime.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTime.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTime.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTime.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.util;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
 import java.time.LocalDate;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Maths.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Maths.java
similarity index 64%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Maths.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Maths.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/Maths.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/Maths.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.util;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util;

 public class Maths {

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProvider.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationProvider.java
similarity index 92%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProvider.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationProvider.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProvider.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationProvider.java
@@ -1,8 +1,8 @@
-package app.coronawarn.server.services.distribution.exposureconfig;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig;

 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters.Builder;
-import app.coronawarn.server.services.distribution.exposureconfig.parsing.YamlConstructorForProtoBuf;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.parsing.YamlConstructorForProtoBuf;
 import java.io.IOException;
 import java.io.InputStream;
 import org.springframework.core.io.ClassPathResource;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/UnableToLoadFileException.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/UnableToLoadFileException.java
similarity index 79%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/UnableToLoadFileException.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/UnableToLoadFileException.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/UnableToLoadFileException.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/UnableToLoadFileException.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig;

 /**
  * The file could not be loaded/parsed correctly.
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/parsing/YamlConstructorForProtoBuf.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/parsing/YamlConstructorForProtoBuf.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/parsing/YamlConstructorForProtoBuf.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/parsing/YamlConstructorForProtoBuf.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/parsing/YamlConstructorForProtoBuf.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/parsing/YamlConstructorForProtoBuf.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.parsing;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.parsing;

 import java.util.Arrays;
 import org.yaml.snakeyaml.constructor.Constructor;
@@ -20,9 +20,9 @@ public YamlConstructorForProtoBuf() {
     setPropertyUtils(new ProtoBufPropertyUtils());
   }

-  private class ProtoBufPropertyUtils extends PropertyUtils {
+  private static class ProtoBufPropertyUtils extends PropertyUtils {

-    public Property getProperty(Class<? extends Object> type, String name, BeanAccess bAccess) {
+    public Property getProperty(Class<?> type, String name, BeanAccess bAccess) {
       return super.getProperty(type, transformToProtoNaming(name), bAccess);
     }

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java
similarity index 69%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/ExposureConfigurationDirectoryImpl.java
@@ -1,12 +1,12 @@
-package app.coronawarn.server.services.distribution.exposureconfig.structure;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.structure;

 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.file.decorator.SigningDecorator;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.SigningDecorator;
 import java.util.Set;

 /**
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java
similarity index 68%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/structure/directory/ExposureConfigurationDirectoryImpl.java
@@ -1,12 +1,12 @@
-package app.coronawarn.server.services.distribution.exposureconfig.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.structure.directory;

 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.file.decorator.SigningDecorator;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.SigningDecorator;
 import java.util.Set;

 /**
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationValidator.java
similarity index 93%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationValidator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationValidator.java
@@ -1,8 +1,8 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 import app.coronawarn.server.common.protocols.internal.RiskLevel;
 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
-import app.coronawarn.server.services.distribution.exposureconfig.validation.WeightValidationError.ErrorType;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.validation.WeightValidationError.ErrorType;
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
 import java.beans.Introspector;
@@ -19,7 +19,7 @@
  */
 public class ExposureConfigurationValidator {

-  private RiskScoreParameters config;
+  private final RiskScoreParameters config;

   private ValidationResult errors;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ParameterSpec.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ParameterSpec.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ParameterSpec.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ParameterSpec.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ParameterSpec.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ParameterSpec.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 /**
  * Definition of the spec according to Apple/Google:
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/RiskLevelValidationError.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/RiskLevelValidationError.java
similarity index 93%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/RiskLevelValidationError.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/RiskLevelValidationError.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/RiskLevelValidationError.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/RiskLevelValidationError.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 import java.util.Objects;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationError.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationError.java
similarity index 67%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationError.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationError.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationError.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationError.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 /**
  * A validation error, found during the process of validating the Exposure Configuration. Can either
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationFailedException.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationFailedException.java
similarity index 78%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationFailedException.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationFailedException.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationFailedException.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationFailedException.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 /**
  * The validation could not be executed. Find more information about the root cause in the cause
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationResult.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationResult.java
similarity index 87%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationResult.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationResult.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ValidationResult.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ValidationResult.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 import java.util.HashSet;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/WeightValidationError.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/WeightValidationError.java
similarity index 94%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/WeightValidationError.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/WeightValidationError.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/exposureconfig/validation/WeightValidationError.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/WeightValidationError.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 import java.util.Objects;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/io/IO.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/io/IO.java
similarity index 96%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/io/IO.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/io/IO.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/io/IO.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/io/IO.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.io;
+package app.coronawarn.server.services.distribution.assembly.io;

 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/Writable.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/Writable.java
similarity index 74%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/Writable.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/Writable.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/Writable.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/Writable.java
@@ -1,7 +1,7 @@
-package app.coronawarn.server.services.distribution.structure;
+package app.coronawarn.server.services.distribution.assembly.structure;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;

 /**
  * Something that can be written to disk.
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/WritableImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/WritableImpl.java
similarity index 82%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/WritableImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/WritableImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/WritableImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/WritableImpl.java
@@ -1,6 +1,6 @@
-package app.coronawarn.server.services.distribution.structure;
+package app.coronawarn.server.services.distribution.assembly.structure;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
 import java.util.Objects;

 public abstract class WritableImpl implements Writable {
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/Directory.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/Directory.java
similarity index 75%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/Directory.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/Directory.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/Directory.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/Directory.java
@@ -1,7 +1,7 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
 import java.util.Set;

 /**
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryImpl.java
similarity index 87%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryImpl.java
@@ -1,8 +1,8 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

-import app.coronawarn.server.services.distribution.structure.WritableImpl;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.WritableImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.HashSet;
 import java.util.Set;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectory.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectory.java
similarity index 77%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectory.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectory.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectory.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectory.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

-import app.coronawarn.server.services.distribution.structure.functional.DirectoryFunction;
-import app.coronawarn.server.services.distribution.structure.functional.FileFunction;
-import app.coronawarn.server.services.distribution.structure.functional.Formatter;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.DirectoryFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.FileFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.Formatter;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.Set;
 import java.util.Stack;

@@ -32,7 +32,7 @@ public interface IndexDirectory<T> extends Directory {
   void addDirectoryToAll(DirectoryFunction directoryFunction);

   /**
-   * Calls the {@link app.coronawarn.server.services.distribution.structure.functional.IndexFunction}
+   * Calls the {@link app.coronawarn.server.services.distribution.assembly.structure.functional.IndexFunction}
    * with the {@code indices} to calculate and return the elements of the index of this {@link
    * IndexDirectory}.
    *
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryImpl.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryImpl.java
@@ -1,11 +1,11 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.functional.DirectoryFunction;
-import app.coronawarn.server.services.distribution.structure.functional.FileFunction;
-import app.coronawarn.server.services.distribution.structure.functional.Formatter;
-import app.coronawarn.server.services.distribution.structure.functional.IndexFunction;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.DirectoryFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.FileFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.Formatter;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.IndexFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.Stack;
@@ -61,7 +61,7 @@ public void addDirectoryToAll(DirectoryFunction directoryFunction) {
    * Creates a new subdirectory for every element of the {@link IndexDirectory#getIndex index} and
    * writes {@link IndexDirectory#addFileToAll files} and {@link IndexDirectory#addDirectory
    * directories} to those. The respective element of the index will be pushed onto the Stack for
-   * subsequent {@link app.coronawarn.server.services.distribution.structure.Writable#prepare} calls
+   * subsequent {@link app.coronawarn.server.services.distribution.assembly.structure.Writable#prepare} calls
    * on those files and directories.
    *
    * @param indices A {@link Stack} of parameters from all {@link IndexDirectory IndexDirectories}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/DirectoryDecorator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/DirectoryDecorator.java
similarity index 75%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/DirectoryDecorator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/DirectoryDecorator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/DirectoryDecorator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/DirectoryDecorator.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.directory.decorator;
+package app.coronawarn.server.services.distribution.assembly.structure.directory.decorator;

-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.Set;

 /**
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/IndexingDecorator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/IndexingDecorator.java
similarity index 72%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/IndexingDecorator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/IndexingDecorator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/directory/decorator/IndexingDecorator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorator/IndexingDecorator.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.directory.decorator;
+package app.coronawarn.server.services.distribution.assembly.structure.directory.decorator;

-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -14,7 +14,7 @@
 /**
  * A {@link DirectoryDecorator} that writes a file called {@code "index"}, containing a JSON array
  * containing all elements returned {@link IndexDirectoryImpl#getIndex}, formatted with the {@link
- * IndexDirectoryImpl#getIndexFormatter} on {@link app.coronawarn.server.services.distribution.structure.Writable#prepare}.
+ * IndexDirectoryImpl#getIndexFormatter} on {@link app.coronawarn.server.services.distribution.assembly.structure.Writable#prepare}.
  */
 public class IndexingDecorator<T> extends DirectoryDecorator {

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/File.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/File.java
similarity index 64%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/File.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/File.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/File.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/File.java
@@ -1,6 +1,6 @@
-package app.coronawarn.server.services.distribution.structure.file;
+package app.coronawarn.server.services.distribution.assembly.structure.file;

-import app.coronawarn.server.services.distribution.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;

 /**
  * A {@link Writable} containing some bytes.
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/FileImpl.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileImpl.java
similarity index 69%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/FileImpl.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileImpl.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/FileImpl.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileImpl.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.file;
+package app.coronawarn.server.services.distribution.assembly.structure.file;

-import app.coronawarn.server.services.distribution.io.IO;
-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.WritableImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.io.IO;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.WritableImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;

 /**
  * Implementation of {@link File} that interfaces with {@link java.io.File Files} on disk.
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/FileDecorator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/FileDecorator.java
similarity index 70%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/FileDecorator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/FileDecorator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/FileDecorator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/FileDecorator.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.file.decorator;
+package app.coronawarn.server.services.distribution.assembly.structure.file.decorator;

-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;

 /**
  * Decorates a {@link File} (e.g. to modify its content) on {@link Writable#prepare}. This class
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/SigningDecorator.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/SigningDecorator.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/SigningDecorator.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/SigningDecorator.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/file/decorator/SigningDecorator.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorator/SigningDecorator.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.structure.file.decorator;
+package app.coronawarn.server.services.distribution.assembly.structure.file.decorator;

 import app.coronawarn.server.common.protocols.internal.SignedPayload;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import com.google.protobuf.ByteString;
 import java.security.GeneralSecurityException;
 import java.security.PrivateKey;
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/CheckedFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/CheckedFunction.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/CheckedFunction.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/CheckedFunction.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/CheckedFunction.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/CheckedFunction.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.structure.functional;
+package app.coronawarn.server.services.distribution.assembly.structure.functional;

 import java.util.function.Function;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/DirectoryFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/DirectoryFunction.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/DirectoryFunction.java
@@ -0,0 +1,14 @@
+package app.coronawarn.server.services.distribution.assembly.structure.functional;
+
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
+import java.util.function.Function;
+
+/**
+ * A {@code Function<Stack<Object>, Directory>}.
+ */
+@FunctionalInterface
+public interface DirectoryFunction extends Function<ImmutableStack<Object>, Directory> {
+
+  Directory apply(ImmutableStack<Object> t);
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/FileFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/FileFunction.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/FileFunction.java
@@ -0,0 +1,14 @@
+package app.coronawarn.server.services.distribution.assembly.structure.functional;
+
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
+import java.util.function.Function;
+
+/**
+ * A {@code Function<Stack<Object>, File>}.
+ */
+@FunctionalInterface
+public interface FileFunction extends Function<ImmutableStack<Object>, File> {
+
+  File apply(ImmutableStack<Object> t);
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/Formatter.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/Formatter.java
similarity index 74%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/Formatter.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/Formatter.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/Formatter.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/Formatter.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.structure.functional;
+package app.coronawarn.server.services.distribution.assembly.structure.functional;

 import java.util.function.Function;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/IndexFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/IndexFunction.java
similarity index 64%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/IndexFunction.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/IndexFunction.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/IndexFunction.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/functional/IndexFunction.java
@@ -1,6 +1,6 @@
-package app.coronawarn.server.services.distribution.structure.functional;
+package app.coronawarn.server.services.distribution.assembly.structure.functional;

-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.util.Set;
 import java.util.function.Function;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/util/ImmutableStack.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/util/ImmutableStack.java
similarity index 84%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/util/ImmutableStack.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/util/ImmutableStack.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/util/ImmutableStack.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/assembly/structure/util/ImmutableStack.java
@@ -1,10 +1,10 @@
-package app.coronawarn.server.services.distribution.structure.util;
+package app.coronawarn.server.services.distribution.assembly.structure.util;

 import java.util.Stack;

 public class ImmutableStack<T> {

-  private Stack<T> stack;
+  private final Stack<T> stack;

   public ImmutableStack() {
     this.stack = new Stack<>();
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccess.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccess.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccess.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccess.java
@@ -36,9 +36,9 @@
 @Component
 public class ObjectStoreAccess {

-  private Logger logger = LoggerFactory.getLogger(this.getClass());
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());

-  private String bucket;
+  private final String bucket;

   private S3Client client;

diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/S3Publisher.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/S3Publisher.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/S3Publisher.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/objectstore/S3Publisher.java
@@ -16,14 +16,14 @@
 @Component
 public class S3Publisher {

-  private Logger logger = LoggerFactory.getLogger(this.getClass());
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());

   /**
    * prefix path on S3, enforced for all methods on this class.
    */
   private String prefixPath = "cwa/";

-  private ObjectStoreAccess objectStoreAccess;
+  private final ObjectStoreAccess objectStoreAccess;

   @Autowired
   public S3Publisher(ObjectStoreAccess objectStoreAccess) {
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/Assembly.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/Assembly.java
new file mode 100644
--- /dev/null
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/Assembly.java
@@ -0,0 +1,42 @@
+package app.coronawarn.server.services.distribution.runner;
+
+import app.coronawarn.server.services.distribution.assembly.component.CwaApiStructureProvider;
+import app.coronawarn.server.services.distribution.assembly.component.OutputDirectoryProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
+import java.io.IOException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * This runner assembles and writes diagnosis key bundles and the parameter configuration.
+ */
+@Component
+@Order(2)
+public class Assembly implements ApplicationRunner {
+
+  private static final Logger logger = LoggerFactory.getLogger(Assembly.class);
+
+  @Autowired
+  private OutputDirectoryProvider outputDirectoryProvider;
+
+  @Autowired
+  private CwaApiStructureProvider cwaApiStructureProvider;
+
+  @Override
+  public void run(ApplicationArguments args) throws IOException {
+    Directory outputDirectory = this.outputDirectoryProvider.getDirectory();
+    outputDirectory.addDirectory(cwaApiStructureProvider.getDirectory());
+    this.outputDirectoryProvider.clear();
+    logger.debug("Preparing files...");
+    outputDirectory.prepare(new ImmutableStack<>());
+    logger.debug("Writing files...");
+    outputDirectory.write();
+    logger.debug("Distribution run finished successfully.");
+  }
+}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/DiagnosisKeyDistributionRunner.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/DiagnosisKeyDistributionRunner.java
deleted file mode 100644
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/DiagnosisKeyDistributionRunner.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package app.coronawarn.server.services.distribution.runner;
-
-import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.common.persistence.service.DiagnosisKeyService;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory.DiagnosisKeysDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Set;
-import org.apache.commons.io.FileUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-@Component
-@Order(3)
-/**
- * This runner retrieves stored diagnosis keys, the generates and persists the respective diagnosis
- * key bundles.
- */
-public class DiagnosisKeyDistributionRunner implements ApplicationRunner {
-
-  private static final Logger logger = LoggerFactory
-      .getLogger(DiagnosisKeyDistributionRunner.class);
-
-  private static final String VERSION_DIRECTORY = "version";
-
-  @Value("${app.coronawarn.server.services.distribution.version}")
-  private String version;
-
-  @Value("${app.coronawarn.server.services.distribution.paths.output}")
-  private String outputPath;
-
-  @Autowired
-  private CryptoProvider cryptoProvider;
-
-  @Autowired
-  private DiagnosisKeyService diagnosisKeyService;
-
-
-  @Override
-  public void run(ApplicationArguments args) throws IOException {
-    Collection<DiagnosisKey> diagnosisKeys = diagnosisKeyService.getDiagnosisKeys();
-
-    DiagnosisKeysDirectoryImpl diagnosisKeysDirectory =
-        new DiagnosisKeysDirectoryImpl(diagnosisKeys, cryptoProvider);
-
-    IndexDirectory<?> versionDirectory =
-        new IndexDirectoryImpl<>(VERSION_DIRECTORY, __ -> Set.of(version), Object::toString);
-
-    versionDirectory.addDirectoryToAll(__ -> diagnosisKeysDirectory);
-
-    java.io.File outputDirectory = new File(outputPath);
-    clearDirectory(outputDirectory);
-    DirectoryImpl root = new DirectoryImpl(outputDirectory);
-    root.addDirectory(new IndexingDecorator<>(versionDirectory));
-
-    root.prepare(new ImmutableStack<>());
-    root.write();
-    logger.debug("Diagnosis key distribution structure written successfully.");
-  }
-
-  private static void clearDirectory(File directory) throws IOException {
-    FileUtils.deleteDirectory(directory);
-    directory.mkdirs();
-  }
-}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/ExposureConfigurationDistributionRunner.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/ExposureConfigurationDistributionRunner.java
deleted file mode 100644
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/ExposureConfigurationDistributionRunner.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package app.coronawarn.server.services.distribution.runner;
-
-import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.exposureconfig.ExposureConfigurationProvider;
-import app.coronawarn.server.services.distribution.exposureconfig.UnableToLoadFileException;
-import app.coronawarn.server.services.distribution.exposureconfig.structure.directory.ExposureConfigurationDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
-import java.io.File;
-import java.util.Set;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-@Component
-@Order(2)
-/**
- * Reads the exposure configuration parameters from the respective file in the class path, then
- * generates and persists the respective exposure configuration bundle.
- */
-public class ExposureConfigurationDistributionRunner implements ApplicationRunner {
-
-  private static final Logger logger =
-      LoggerFactory.getLogger(ExposureConfigurationDistributionRunner.class);
-
-  @Value("${app.coronawarn.server.services.distribution.version}")
-  private String version;
-
-  @Value("${app.coronawarn.server.services.distribution.paths.output}")
-  private String outputPath;
-
-  @Autowired
-  private CryptoProvider cryptoProvider;
-
-  private static final String VERSION_DIRECTORY = "version";
-
-  @Override
-  public void run(ApplicationArguments args) {
-    var riskScoreParameters = readExposureConfiguration();
-    IndexDirectory<?> versionDirectory =
-        new IndexDirectoryImpl<>(VERSION_DIRECTORY, __ -> Set.of(version), Object::toString);
-    ExposureConfigurationDirectoryImpl parametersDirectory =
-        new ExposureConfigurationDirectoryImpl(riskScoreParameters, cryptoProvider);
-    Directory root = new DirectoryImpl(new File(outputPath));
-    versionDirectory.addDirectoryToAll(__ -> parametersDirectory);
-    root.addDirectory(new IndexingDecorator<>(versionDirectory));
-    root.prepare(new ImmutableStack<>());
-    root.write();
-    logger.debug("Exposure configuration structure written successfully.");
-  }
-
-  private RiskScoreParameters readExposureConfiguration() {
-    try {
-      return ExposureConfigurationProvider.readMasterFile();
-    } catch (UnableToLoadFileException e) {
-      logger.error("Could not load exposure configuration parameters", e);
-      throw new RuntimeException(e);
-    }
-  }
-}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicyRunner.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicy.java
similarity index 85%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicyRunner.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicy.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicyRunner.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/RetentionPolicy.java
@@ -16,15 +16,15 @@
  */
 @Component
 @Order(1)
-public class RetentionPolicyRunner implements ApplicationRunner {
+public class RetentionPolicy implements ApplicationRunner {

   private static final Logger logger = LoggerFactory
-      .getLogger(RetentionPolicyRunner.class);
+      .getLogger(RetentionPolicy.class);

   @Autowired
   private DiagnosisKeyService diagnosisKeyService;

-  @Value("${app.coronawarn.server.services.distribution.retention_days}")
+  @Value("${services.distribution.retention_days}")
   private Integer rententionDays;

   @Override
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3DistributionRunner.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3Distribution.java
similarity index 69%
rename from services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3DistributionRunner.java
rename to services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3Distribution.java
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3DistributionRunner.java
+++ b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/runner/S3Distribution.java
@@ -1,12 +1,12 @@
 package app.coronawarn.server.services.distribution.runner;

+import app.coronawarn.server.services.distribution.assembly.component.OutputDirectoryProvider;
 import app.coronawarn.server.services.distribution.objectstore.S3Publisher;
 import java.io.IOException;
 import java.nio.file.Path;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.core.annotation.Order;
@@ -16,13 +16,13 @@
  * This runner will sync the base working directory to the S3.
  */
 @Component
-@Order(4)
-public class S3DistributionRunner implements ApplicationRunner {
+@Order(3)
+public class S3Distribution implements ApplicationRunner {

-  private Logger logger = LoggerFactory.getLogger(this.getClass());
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());

-  @Value("${app.coronawarn.server.services.distribution.paths.output}")
-  private String workdir;
+  @Autowired
+  private OutputDirectoryProvider outputDirectoryProvider;

   @Autowired
   private S3Publisher s3Publisher;
@@ -30,8 +30,7 @@ public class S3DistributionRunner implements ApplicationRunner {
   @Override
   public void run(ApplicationArguments args) {
     try {
-      Path pathToDistribute = Path.of(workdir).toAbsolutePath();
-
+      Path pathToDistribute = outputDirectoryProvider.getFileOnDisk().toPath().toAbsolutePath();
       s3Publisher.publishFolder(pathToDistribute);
     } catch (IOException | UnsupportedOperationException e) {
       logger.error("Distribution failed.", e);
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/DirectoryFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/DirectoryFunction.java
deleted file mode 100644
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/DirectoryFunction.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package app.coronawarn.server.services.distribution.structure.functional;
-
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
-import java.util.function.Function;
-
-/**
- * A {@code Function<Stack<Object>, Directory>}.
- */
-@FunctionalInterface
-public interface DirectoryFunction extends Function<ImmutableStack<Object>, Directory> {
-
-  Directory apply(ImmutableStack<Object> t);
-}
diff --git a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/FileFunction.java b/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/FileFunction.java
deleted file mode 100644
--- a/services/distribution/src/main/java/app/coronawarn/server/services/distribution/structure/functional/FileFunction.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package app.coronawarn.server.services.distribution.structure.functional;
-
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
-import java.util.function.Function;
-
-/**
- * A {@code Function<Stack<Object>, File>}.
- */
-@FunctionalInterface
-public interface FileFunction extends Function<ImmutableStack<Object>, File> {
-
-  File apply(ImmutableStack<Object> t);
-}
diff --git a/services/distribution/src/main/resources/application.properties b/services/distribution/src/main/resources/application.properties
--- a/services/distribution/src/main/resources/application.properties
+++ b/services/distribution/src/main/resources/application.properties
@@ -2,11 +2,10 @@ logging.level.org.springframework.web=INFO
 logging.level.app.coronawarn=INFO
 spring.main.web-application-type=NONE

-app.coronawarn.server.services.distribution.retention_days=14
-app.coronawarn.server.services.distribution.version=v1
-app.coronawarn.server.services.distribution.paths.output=out
-app.coronawarn.server.services.distribution.paths.privatekey=classpath:certificates/client/private.pem
-app.coronawarn.server.services.distribution.paths.certificate=classpath:certificates/chain/certificate.crt
+services.distribution.retention_days=14
+services.distribution.paths.output=out
+services.distribution.paths.privatekey=classpath:certificates/client/private.pem
+services.distribution.paths.certificate=classpath:certificates/chain/certificate.crt

 spring.flyway.enabled=false
 spring.jpa.hibernate.ddl-auto=validate

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/ApplicationInitializationTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/ApplicationInitializationTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/ApplicationInitializationTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/ApplicationInitializationTest.java
@@ -3,7 +3,7 @@
 import static org.junit.jupiter.api.Assertions.assertNotNull;

 import app.coronawarn.server.common.persistence.service.DiagnosisKeyService;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
 import app.coronawarn.server.services.distribution.objectstore.S3Publisher;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/crypto/CryptoProviderTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProviderTest.java
similarity index 92%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/crypto/CryptoProviderTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProviderTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/crypto/CryptoProviderTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/component/CryptoProviderTest.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.crypto;
+package app.coronawarn.server.services.distribution.assembly.component;

 import static org.junit.jupiter.api.Assertions.assertNotNull;

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysStructureProviderDirectoryTest.java
similarity index 93%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysStructureProviderDirectoryTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/structure/directory/DiagnosisKeysDirectoryTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/structure/directory/DiagnosisKeysStructureProviderDirectoryTest.java
@@ -1,14 +1,14 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.structure.directory;

 import static app.coronawarn.server.services.distribution.common.Helpers.buildDiagnosisKeyForSubmissionTimestamp;
 import static java.lang.String.join;
 import static org.junit.jupiter.api.Assertions.assertEquals;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -31,7 +31,7 @@
 @ExtendWith(SpringExtension.class)
 @ContextConfiguration(classes = {CryptoProvider.class},
     initializers = ConfigFileApplicationContextInitializer.class)
-public class DiagnosisKeysDirectoryTest {
+public class DiagnosisKeysStructureProviderDirectoryTest {

   @Autowired
   CryptoProvider cryptoProvider;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTimeTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTimeTest.java
similarity index 97%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTimeTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTimeTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/diagnosiskeys/util/DateTimeTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/diagnosiskeys/util/DateTimeTest.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.diagnosiskeys.util;
+package app.coronawarn.server.services.distribution.assembly.diagnosiskeys.util;

 import static app.coronawarn.server.services.distribution.common.Helpers.buildDiagnosisKeyForDateTime;
 import static java.util.Collections.emptyList;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationMasterFileTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderMasterFileTest.java
similarity index 64%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationMasterFileTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderMasterFileTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationMasterFileTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderMasterFileTest.java
@@ -1,9 +1,9 @@
-package app.coronawarn.server.services.distribution.exposureconfig;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig;

 import static org.junit.jupiter.api.Assertions.assertEquals;

-import app.coronawarn.server.services.distribution.exposureconfig.validation.ExposureConfigurationValidator;
-import app.coronawarn.server.services.distribution.exposureconfig.validation.ValidationResult;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.validation.ExposureConfigurationValidator;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.validation.ValidationResult;
 import org.junit.jupiter.api.Test;

 /**
@@ -12,7 +12,7 @@
  *
  * There should never be any deployment when this test is failing.
  */
-public class ExposureConfigurationMasterFileTest {
+public class ExposureConfigurationStructureProviderMasterFileTest {

   private static final ValidationResult SUCCESS = new ValidationResult();

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProviderTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderProviderTest.java
similarity index 87%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProviderTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderProviderTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/ExposureConfigurationProviderTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/ExposureConfigurationStructureProviderProviderTest.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig;

 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -6,7 +6,7 @@
 import app.coronawarn.server.common.protocols.internal.RiskScoreParameters;
 import org.junit.jupiter.api.Test;

-public class ExposureConfigurationProviderTest {
+public class ExposureConfigurationStructureProviderProviderTest {

   @Test
   public void okFile() throws UnableToLoadFileException {
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidatorTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationStructureProviderValidatorTest.java
similarity index 87%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidatorTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationStructureProviderValidatorTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/ExposureConfigurationValidatorTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/ExposureConfigurationStructureProviderValidatorTest.java
@@ -1,18 +1,18 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;

-import app.coronawarn.server.services.distribution.exposureconfig.ExposureConfigurationProvider;
-import app.coronawarn.server.services.distribution.exposureconfig.UnableToLoadFileException;
-import app.coronawarn.server.services.distribution.exposureconfig.validation.WeightValidationError.ErrorType;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.ExposureConfigurationProvider;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.UnableToLoadFileException;
+import app.coronawarn.server.services.distribution.assembly.exposureconfig.validation.WeightValidationError.ErrorType;
 import java.util.stream.Stream;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;

-public class ExposureConfigurationValidatorTest {
+public class ExposureConfigurationStructureProviderValidatorTest {

   private static final ValidationResult SUCCESS = new ValidationResult();

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/TestWithExpectedResult.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/TestWithExpectedResult.java
similarity index 83%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/TestWithExpectedResult.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/TestWithExpectedResult.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/exposureconfig/validation/TestWithExpectedResult.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/exposureconfig/validation/TestWithExpectedResult.java
@@ -1,4 +1,4 @@
-package app.coronawarn.server.services.distribution.exposureconfig.validation;
+package app.coronawarn.server.services.distribution.assembly.exposureconfig.validation;

 public class TestWithExpectedResult {

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/WritableTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/WritableTest.java
similarity index 81%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/WritableTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/WritableTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/WritableTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/WritableTest.java
@@ -1,11 +1,11 @@
-package app.coronawarn.server.services.distribution.structure;
+package app.coronawarn.server.services.distribution.assembly.structure;

 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.io.File;
 import org.junit.jupiter.api.Test;

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryTest.java
similarity index 90%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/DirectoryTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/DirectoryTest.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;

-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.io.IOException;
 import java.util.Set;
 import org.junit.Rule;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryTest.java
similarity index 85%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/IndexDirectoryTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/IndexDirectoryTest.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.structure.directory;
+package app.coronawarn.server.services.distribution.assembly.structure.directory;

 import static org.junit.jupiter.api.Assertions.assertEquals;

-import app.coronawarn.server.services.distribution.structure.Writable;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.functional.Formatter;
-import app.coronawarn.server.services.distribution.structure.functional.IndexFunction;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.Writable;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.Formatter;
+import app.coronawarn.server.services.distribution.assembly.structure.functional.IndexFunction;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/DirectoryDecoratorTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/DirectoryDecoratorTest.java
similarity index 63%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/DirectoryDecoratorTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/DirectoryDecoratorTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/DirectoryDecoratorTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/DirectoryDecoratorTest.java
@@ -1,14 +1,14 @@
-package app.coronawarn.server.services.distribution.structure.directory.decorators;
+package app.coronawarn.server.services.distribution.assembly.structure.directory.decorators;

 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.DirectoryDecorator;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.DirectoryDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import org.junit.jupiter.api.Test;

 public class DirectoryDecoratorTest {
@@ -52,7 +52,7 @@ public void checkProxiesAllMethods() {
     verify(decoree).getFileOnDisk();
   }

-  private class TestDirectoryDecorator extends DirectoryDecorator {
+  private static class TestDirectoryDecorator extends DirectoryDecorator {

     protected TestDirectoryDecorator(Directory directory) {
       super(directory);
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/IndexingDecoratorTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/IndexingDecoratorTest.java
similarity index 77%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/IndexingDecoratorTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/IndexingDecoratorTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/directory/decorators/IndexingDecoratorTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/directory/decorators/IndexingDecoratorTest.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.structure.directory.decorators;
+package app.coronawarn.server.services.distribution.assembly.structure.directory.decorators;

 import static app.coronawarn.server.services.distribution.common.Helpers.prepareAndWrite;
 import static org.junit.jupiter.api.Assertions.assertTrue;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectory;
-import app.coronawarn.server.services.distribution.structure.directory.IndexDirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.directory.decorator.IndexingDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.IndexDirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.decorator.IndexingDecorator;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/FileTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileTest.java
similarity index 81%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/FileTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/FileTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/FileTest.java
@@ -1,11 +1,11 @@
-package app.coronawarn.server.services.distribution.structure.file;
+package app.coronawarn.server.services.distribution.assembly.structure.file;

 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
 import java.io.IOException;
 import java.nio.file.Files;
 import org.junit.Rule;
@@ -15,7 +15,7 @@

 public class FileTest {

-  private byte[] bytes = "World".getBytes();
+  private final byte[] bytes = "World".getBytes();
   private File file;

   @Rule
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/FileDecoratorTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/FileDecoratorTest.java
similarity index 62%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/FileDecoratorTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/FileDecoratorTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/FileDecoratorTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/FileDecoratorTest.java
@@ -1,13 +1,13 @@
-package app.coronawarn.server.services.distribution.structure.file.decorators;
+package app.coronawarn.server.services.distribution.assembly.structure.file.decorators;

 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;

-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.decorator.FileDecorator;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.FileDecorator;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import org.junit.jupiter.api.Test;

 public class FileDecoratorTest {
@@ -45,7 +45,7 @@ public void checkProxiesAllMethods() {
     verify(decoree).getFileOnDisk();
   }

-  private class TestFileDecorator extends FileDecorator {
+  private static class TestFileDecorator extends FileDecorator {

     protected TestFileDecorator(File file) {
       super(file);
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/SigningDecoratorTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/SigningDecoratorTest.java
similarity index 84%
rename from services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/SigningDecoratorTest.java
rename to services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/SigningDecoratorTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/structure/file/decorators/SigningDecoratorTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/assembly/structure/file/decorators/SigningDecoratorTest.java
@@ -1,16 +1,16 @@
-package app.coronawarn.server.services.distribution.structure.file.decorators;
+package app.coronawarn.server.services.distribution.assembly.structure.file.decorators;

 import static app.coronawarn.server.services.distribution.common.Helpers.prepareAndWrite;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;

 import app.coronawarn.server.common.protocols.internal.SignedPayload;
-import app.coronawarn.server.services.distribution.crypto.CryptoProvider;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.directory.DirectoryImpl;
-import app.coronawarn.server.services.distribution.structure.file.File;
-import app.coronawarn.server.services.distribution.structure.file.FileImpl;
-import app.coronawarn.server.services.distribution.structure.file.decorator.SigningDecorator;
+import app.coronawarn.server.services.distribution.assembly.component.CryptoProvider;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.DirectoryImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.File;
+import app.coronawarn.server.services.distribution.assembly.structure.file.FileImpl;
+import app.coronawarn.server.services.distribution.assembly.structure.file.decorator.SigningDecorator;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/common/Helpers.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/common/Helpers.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/common/Helpers.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/common/Helpers.java
@@ -1,8 +1,8 @@
 package app.coronawarn.server.services.distribution.common;

 import app.coronawarn.server.common.persistence.domain.DiagnosisKey;
-import app.coronawarn.server.services.distribution.structure.directory.Directory;
-import app.coronawarn.server.services.distribution.structure.util.ImmutableStack;
+import app.coronawarn.server.services.distribution.assembly.structure.directory.Directory;
+import app.coronawarn.server.services.distribution.assembly.structure.util.ImmutableStack;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;

diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccessTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccessTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccessTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/ObjectStoreAccessTest.java
@@ -20,11 +20,11 @@
 public class ObjectStoreAccessTest {

-  private Logger logger = LoggerFactory.getLogger(this.getClass());
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());

-  private String testRunId = "testing/cwa/" + UUID.randomUUID().toString() + "/";
+  private final String testRunId = "testing/cwa/" + UUID.randomUUID().toString() + "/";

-  private String textFile = "objectstore/store-test-file";
+  private final String textFile = "objectstore/store-test-file";

   @Autowired
   private ObjectStoreAccess objectStoreAccess;
diff --git a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/S3PublisherTest.java b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/S3PublisherTest.java
--- a/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/S3PublisherTest.java
+++ b/services/distribution/src/test/java/app/coronawarn/server/services/distribution/objectstore/S3PublisherTest.java
@@ -23,11 +23,11 @@
 @TestInstance(Lifecycle.PER_CLASS)
 public class S3PublisherTest {

-  private String testRunId = "testing/cwa/" + UUID.randomUUID().toString() + "/";
+  private final String testRunId = "testing/cwa/" + UUID.randomUUID().toString() + "/";

-  private String rootTestFolder = "objectstore/publisher/";
+  private final String rootTestFolder = "objectstore/publisher/";

-  private String exampleFile = rootTestFolder + "rootfile";
+  private final String exampleFile = rootTestFolder + "rootfile";

   @Autowired
   private S3Publisher s3Publisher;
diff --git a/services/distribution/src/test/resources/application.properties b/services/distribution/src/test/resources/application.properties
--- a/services/distribution/src/test/resources/application.properties
+++ b/services/distribution/src/test/resources/application.properties
@@ -3,10 +3,9 @@ logging.level.org.springframework=off
 logging.level.root=off
 spring.main.banner-mode=off

-app.coronawarn.server.services.distribution.retention_days=14
-app.coronawarn.server.services.distribution.version=v1
-app.coronawarn.server.services.distribution.paths.output=out
-app.coronawarn.server.services.distribution.paths.privatekey=classpath:certificates/client/private.pem
-app.coronawarn.server.services.distribution.paths.certificate=classpath:certificates/chain/certificate.crt
+services.distribution.retention_days=14
+services.distribution.paths.output=out
+services.distribution.paths.privatekey=classpath:certificates/client/private.pem
+services.distribution.paths.certificate=classpath:certificates/chain/certificate.crt

 spring.flyway.enabled=false

DiagnosisKeyDistributionRunner deletes exposure configuration
``DiagnosisKeyDistributionRunner`` deletes the files written by ``ExposureConfigurationDistributionRunner`` before they are published.