diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt
index b0e02bfce947e3a0776b4ed9eca95af2ca08d524..aef9b96ac5c4557b3cbc4075d09bec3c3967edb6 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt
@@ -71,6 +71,8 @@ class DebugOptionsFragment : Fragment(R.layout.fragment_test_debugoptions), Auto
                 environmentCdnurlVerification.text = "Verification CDN:\n${state.urlVerification}"
                 environmentUrlDatadonation.text = "DataDonation:\n${state.urlDataDonation}"
                 environmentUrlLogUpload.text = "LogUpload:\n${state.urlLogUpload}"
+                environmentUrlVaccinationProof.text = "Vaccination Proof: \n${state.urlVaccinationProof}"
+                environmentCdnUrlVaccination.text = "Vaccination CDN: \n${state.urlVaccination}"
                 environmentPubkeyCrowdnotifier.text = "CrowdNotifierPubKey:\n${state.pubKeyCrowdNotifier}"
                 environmentPubkeyAppconfig.text = "AppConfigPubKey:\n${state.pubKeyAppConfig}"
             }
diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/EnvironmentState.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/EnvironmentState.kt
index c9b907793ab6812a252f519c71a9bee66af2387a..5705116888c4301f48f89d35e649f63a500fcf51 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/EnvironmentState.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/EnvironmentState.kt
@@ -10,6 +10,8 @@ data class EnvironmentState(
     val urlVerification: String,
     val urlDataDonation: String,
     val urlLogUpload: String,
+    val urlVaccinationProof: String,
+    val urlVaccination: String,
     val pubKeyCrowdNotifier: String,
     val pubKeyAppConfig: String,
 ) {
@@ -22,6 +24,8 @@ data class EnvironmentState(
             urlVerification = verificationCdnUrl,
             urlDataDonation = dataDonationCdnUrl,
             urlLogUpload = logUploadServerUrl,
+            urlVaccinationProof = vaccinationProofServerUrl,
+            urlVaccination = vaccinationCdnUrl,
             pubKeyCrowdNotifier = crowdNotifierPublicKey,
             pubKeyAppConfig = appConfigPublicKey,
         )
diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml
index 165e76a5873ac28d6015f1d63ec99802ff2c4a4f..25c7dff4c96bbbbbefa701de75382a3a262045fb 100644
--- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml
+++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml
@@ -109,6 +109,22 @@
                     android:layout_marginTop="4dp"
                     tools:text="LogUpload: ?" />
 
+                <TextView
+                    android:id="@+id/environment_url_vaccination_proof"
+                    style="@style/TextAppearance.MaterialComponents.Caption"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="4dp"
+                    tools:text="VaccinationProof: ?" />
+
+                <TextView
+                    android:id="@+id/environment_cdn_url_vaccination"
+                    style="@style/TextAppearance.MaterialComponents.Caption"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="4dp"
+                    tools:text="Vaccination: ?" />
+
                 <TextView
                     android:id="@+id/environment_pubkey_appconfig"
                     style="@style/TextAppearance.MaterialComponents.Caption"
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentModule.kt
index b99710e6d4a6bd5a07a5bb7d08931aecf4594746..3a81cb926a78ecec4b9f6e8333b31fb15e075770 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentModule.kt
@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.environment.bugreporting.BugReportingServerModule
 import de.rki.coronawarnapp.environment.datadonation.DataDonationCDNModule
 import de.rki.coronawarnapp.environment.download.DownloadCDNModule
 import de.rki.coronawarnapp.environment.submission.SubmissionCDNModule
+import de.rki.coronawarnapp.environment.vaccination.VaccinationCertificateUrlModule
 import de.rki.coronawarnapp.environment.verification.VerificationCDNModule
 
 @Module(
@@ -13,7 +14,8 @@ import de.rki.coronawarnapp.environment.verification.VerificationCDNModule
         SubmissionCDNModule::class,
         VerificationCDNModule::class,
         DataDonationCDNModule::class,
-        BugReportingServerModule::class
+        BugReportingServerModule::class,
+        VaccinationCertificateUrlModule::class
     ]
 )
 class EnvironmentModule
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentSetup.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentSetup.kt
index d44e8e88ef378eaae6e78f7c4e73591be7c08e93..8f11f07e0bd9d8e2564181adad909ed9ce6ad294 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentSetup.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/EnvironmentSetup.kt
@@ -12,6 +12,8 @@ import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.LOG_UPLOAD
 import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.SAFETYNET_API_KEY
 import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.SUBMISSION
 import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.USE_EUR_KEY_PKGS
+import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.VACCINATION_PROOF
+import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.VACCINATION_VALUE
 import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.VERIFICATION
 import de.rki.coronawarnapp.environment.EnvironmentSetup.EnvKey.VERIFICATION_KEYS
 import de.rki.coronawarnapp.environment.EnvironmentSetup.Type.Companion.toEnvironmentType
@@ -36,6 +38,8 @@ class EnvironmentSetup @Inject constructor(
         VERIFICATION_KEYS("PUB_KEYS_SIGNATURE_VERIFICATION"),
         DATA_DONATION("DATA_DONATION_CDN_URL"),
         LOG_UPLOAD("LOG_UPLOAD_SERVER_URL"),
+        VACCINATION_PROOF("VACCINATION_PROOF_SERVER_URL"),
+        VACCINATION_VALUE("VACCINATION_CDN_URL"),
         SAFETYNET_API_KEY("SAFETYNET_API_KEY"),
         CROWD_NOTIFIER_PUBLIC_KEY("CROWD_NOTIFIER_PUBLIC_KEY")
     }
@@ -135,6 +139,12 @@ class EnvironmentSetup @Inject constructor(
     val logUploadServerUrl: String
         get() = getEnvironmentValue(LOG_UPLOAD).asString
 
+    val vaccinationProofServerUrl: String
+        get() = getEnvironmentValue(VACCINATION_PROOF).asString
+
+    val vaccinationCdnUrl: String
+        get() = getEnvironmentValue(VACCINATION_VALUE).asString
+
     companion object {
         private const val PKEY_CURRENT_ENVINROMENT = "environment.current"
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateCDNUrl.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateCDNUrl.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5740f4bf0ca8e587642020e693a8754b43e91b09
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateCDNUrl.kt
@@ -0,0 +1,8 @@
+package de.rki.coronawarnapp.environment.vaccination
+
+import javax.inject.Qualifier
+
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class VaccinationCertificateCDNUrl
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateProofServerUrl.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateProofServerUrl.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c8ede341fd2906c7188da2885814378698917fff
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateProofServerUrl.kt
@@ -0,0 +1,8 @@
+package de.rki.coronawarnapp.environment.vaccination
+
+import javax.inject.Qualifier
+
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class VaccinationCertificateProofServerUrl
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateUrlModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateUrlModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..bb368376758cf7e747e2a1f4008fe8250def894f
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/environment/vaccination/VaccinationCertificateUrlModule.kt
@@ -0,0 +1,23 @@
+package de.rki.coronawarnapp.environment.vaccination
+
+import dagger.Module
+import dagger.Provides
+import dagger.Reusable
+import de.rki.coronawarnapp.environment.BaseEnvironmentModule
+import de.rki.coronawarnapp.environment.EnvironmentSetup
+
+@Module
+class VaccinationCertificateUrlModule : BaseEnvironmentModule() {
+
+    @Reusable
+    @VaccinationCertificateProofServerUrl
+    @Provides
+    fun provideVaccinationProofUrl(environmentSetup: EnvironmentSetup): String =
+        requireValidUrl(environmentSetup.vaccinationProofServerUrl)
+
+    @Reusable
+    @VaccinationCertificateCDNUrl
+    @Provides
+    fun provideVaccinationValueSetUrl(environmentSetup: EnvironmentSetup): String =
+        requireValidUrl(environmentSetup.vaccinationCdnUrl)
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt
index fc29037ffa37a26efb60cd0a22a0868ef7a16af0..5be20e9fa039068af920b122f382e7e13e2ff2ba 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt
@@ -1,7 +1,8 @@
 package de.rki.coronawarnapp.vaccination.core
 
 import de.rki.coronawarnapp.vaccination.core.repository.storage.PersonData
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationValueSet
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
+
 import org.joda.time.LocalDate
 
 data class VaccinatedPerson(
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationModule.kt
index a8347a192f3011c53a2f139323433e186e44fd18..c8a9c230647944e03cb26de79d0251861d53a191 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationModule.kt
@@ -1,6 +1,11 @@
 package de.rki.coronawarnapp.vaccination.core
 
 import dagger.Module
+import de.rki.coronawarnapp.vaccination.core.server.VaccinationServerModule
 
-@Module
-class VaccinationModule
+@Module(
+    includes = [
+        VaccinationServerModule::class
+    ]
+)
+abstract class VaccinationModule
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepository.kt
index c4b6a7fb8536a0def5677044033c3cad525cee58..1a3cb68addd4d000e4cf92bd0a64d13c9340e0c3 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepository.kt
@@ -17,7 +17,8 @@ import de.rki.coronawarnapp.vaccination.core.repository.storage.PersonData
 import de.rki.coronawarnapp.vaccination.core.repository.storage.VaccinationStorage
 import de.rki.coronawarnapp.vaccination.core.repository.storage.toProofContainer
 import de.rki.coronawarnapp.vaccination.core.repository.storage.toVaccinationContainer
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationProofServer
+import de.rki.coronawarnapp.vaccination.core.server.proof.VaccinationProofServer
+
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.SharingStarted
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepository.kt
index 7ffaf2e5348106232304541a11db4fcce9562c5e..e3497c090778dcdf8079163b72f2bd4082338107 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepository.kt
@@ -1,7 +1,8 @@
 package de.rki.coronawarnapp.vaccination.core.repository
 
 import de.rki.coronawarnapp.submission.server.SubmissionServer
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationValueSet
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
+
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.flowOf
 import javax.inject.Inject
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ProofContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ProofContainer.kt
index fec60be5d44adc3971a72a13f2acf3927020e955..422bf60f041b7f36fb1ae4d0be4f71f998d792e7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ProofContainer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ProofContainer.kt
@@ -5,11 +5,12 @@ import com.google.gson.annotations.SerializedName
 import de.rki.coronawarnapp.vaccination.core.ProofCertificate
 import de.rki.coronawarnapp.vaccination.core.VaccinatedPersonIdentifier
 import de.rki.coronawarnapp.vaccination.core.personIdentifier
-import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateCOSEParser
-import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateData
-import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateResponse
+import de.rki.coronawarnapp.vaccination.core.server.proof.ProofCertificateCOSEParser
+import de.rki.coronawarnapp.vaccination.core.server.proof.ProofCertificateData
+import de.rki.coronawarnapp.vaccination.core.server.proof.ProofCertificateResponse
 import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateV1
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationValueSet
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
+
 import okio.ByteString
 import org.joda.time.Instant
 import org.joda.time.LocalDate
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt
index 0519e17300c05a76cc42e22cdc853c9fb826fe1a..87bb73192f326eff7d0e8885257e9bb39ce3062e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt
@@ -10,7 +10,8 @@ import de.rki.coronawarnapp.vaccination.core.qrcode.VaccinationCertificateCOSEPa
 import de.rki.coronawarnapp.vaccination.core.qrcode.VaccinationCertificateData
 import de.rki.coronawarnapp.vaccination.core.qrcode.VaccinationCertificateQRCode
 import de.rki.coronawarnapp.vaccination.core.qrcode.VaccinationCertificateV1
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationValueSet
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
+
 import okio.ByteString
 import org.joda.time.Instant
 import org.joda.time.LocalDate
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServerModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServerModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b609d87e49bcdb47968d08f6e58f961384381534
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServerModule.kt
@@ -0,0 +1,13 @@
+package de.rki.coronawarnapp.vaccination.core.server
+
+import dagger.Module
+import de.rki.coronawarnapp.vaccination.core.server.proof.VaccinationProofModule
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSetModule
+
+@Module(
+    includes = [
+        VaccinationValueSetModule::class,
+        VaccinationProofModule::class
+    ]
+)
+abstract class VaccinationServerModule
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateCOSEParser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateCOSEParser.kt
similarity index 92%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateCOSEParser.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateCOSEParser.kt
index 97eafeda40e53f915ea00909d2f3b79e18e8077f..555dd116eda479da40c4144270851954464a2648 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateCOSEParser.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateCOSEParser.kt
@@ -1,5 +1,6 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.proof
 
+import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateV1
 import okio.ByteString
 import org.joda.time.Instant
 import org.joda.time.LocalDate
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateData.kt
similarity index 78%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateData.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateData.kt
index 382dbc8d37a6189fc195035123c3e1a6f85c3adf..deef7b47e4ea145106a8de9653a3e31383e56e75 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateData.kt
@@ -1,5 +1,6 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.proof
 
+import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateV1
 import org.joda.time.Instant
 
 /**
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateException.kt
similarity index 78%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateException.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateException.kt
index 447790e02173bdb25da275124eb56b65c913e9c0..a7b10b17330ee9bbfcd829e481abc5115525aff5 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateException.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateException.kt
@@ -1,4 +1,4 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.proof
 
 import de.rki.coronawarnapp.vaccination.core.VaccinationException
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateResponse.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateResponse.kt
similarity index 79%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateResponse.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateResponse.kt
index bc1ab87a8b3f8a8e25569c67ce7cb4115e7a97a5..41284e1569c01b8a581d7534abbe5fc76f7f0f7a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/ProofCertificateResponse.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateResponse.kt
@@ -1,4 +1,4 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.proof
 
 import okio.ByteString
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateServerData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateServerData.kt
new file mode 100644
index 0000000000000000000000000000000000000000..644c05b091e7796d30aecafb43dd52523097ca6f
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/ProofCertificateServerData.kt
@@ -0,0 +1,5 @@
+package de.rki.coronawarnapp.vaccination.core.server.proof
+
+interface ProofCertificateServerData {
+    // Satisfy CI ¯\_(ツ)_/¯
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV1.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV1.kt
new file mode 100644
index 0000000000000000000000000000000000000000..bb4c059786efd23bd5f877100103f35f68170aec
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV1.kt
@@ -0,0 +1,6 @@
+package de.rki.coronawarnapp.vaccination.core.server.proof
+
+@Deprecated("Poor fella never was used once. Delete when everything is merged.")
+interface VaccinationProofApiV1 {
+    // Satisfy CI ¯\_(ツ)_/¯
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV2.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV2.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e90a9ece33ff0cc17c71421bc13370ed796e5783
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofApiV2.kt
@@ -0,0 +1,23 @@
+package de.rki.coronawarnapp.vaccination.core.server.proof
+
+import okio.ByteString
+import retrofit2.http.Body
+import retrofit2.http.Headers
+
+import retrofit2.http.POST
+
+interface VaccinationProofApiV2 {
+
+    // Returns COSE representation (as byte sequence) of a Proof Certificate
+    @Headers("Content-Type: application/cbor")
+    @POST("/api/certify/v2/reissue/cbor")
+    suspend fun obtainProofCertificate(@Body cose: ByteString): ByteString
+
+    // Returns string as for the QR Code of a Proof Certificate (starting with HC1: )
+    @Headers(
+        "Content-Type: application/cbor",
+        "Accept: application/cbor+base45"
+    )
+    @POST("/api/certify/v2/reissue/cbor")
+    suspend fun obtainProofCertificateBase45(@Body cose: ByteString): String
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofHttpClient.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofHttpClient.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a94a2c643210300f0b862786430ad3cb491eded8
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofHttpClient.kt
@@ -0,0 +1,8 @@
+package de.rki.coronawarnapp.vaccination.core.server.proof
+
+import javax.inject.Qualifier
+
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class VaccinationProofHttpClient
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0d5d820efd78a1cbad4b0d750989021112951fa5
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofModule.kt
@@ -0,0 +1,31 @@
+package de.rki.coronawarnapp.vaccination.core.server.proof
+
+import dagger.Module
+import dagger.Provides
+import dagger.Reusable
+import de.rki.coronawarnapp.environment.vaccination.VaccinationCertificateProofServerUrl
+import de.rki.coronawarnapp.http.HttpClientDefault
+import okhttp3.OkHttpClient
+import retrofit2.Retrofit
+
+@Module
+class VaccinationProofModule {
+
+    @Reusable
+    @VaccinationProofHttpClient
+    @Provides
+    fun httpClient(
+        @HttpClientDefault default: OkHttpClient
+    ): OkHttpClient = default.newBuilder().build()
+
+    @Reusable
+    @Provides
+    fun api(
+        @VaccinationProofHttpClient httpClient: OkHttpClient,
+        @VaccinationCertificateProofServerUrl url: String
+    ): VaccinationProofApiV2 = Retrofit.Builder()
+        .client(httpClient)
+        .baseUrl(url)
+        .build()
+        .create(VaccinationProofApiV2::class.java)
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationProofServer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofServer.kt
similarity index 84%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationProofServer.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofServer.kt
index dd3a546794c27e8fcf0a258ef032cc564b0de142..87aea53e08e53837527668101e6885db1918131b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationProofServer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/proof/VaccinationProofServer.kt
@@ -1,4 +1,4 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.proof
 
 import dagger.Reusable
 import okio.ByteString
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationServer.kt
similarity index 51%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServer.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationServer.kt
index 3b4ed12919eec83292dbd27d63cbecabb23e245b..cb64715a67d263d703c095a9e64ad11c925e006c 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationServer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationServer.kt
@@ -1,6 +1,8 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.valueset
 
 import dagger.Reusable
+import okhttp3.Cache
+import timber.log.Timber
 import java.util.Locale
 import javax.inject.Inject
 
@@ -8,7 +10,9 @@ import javax.inject.Inject
  * Talks with CWA servers
  */
 @Reusable
-class VaccinationServer @Inject constructor() {
+class VaccinationServer @Inject constructor(
+    @VaccinationValueSetHttpClient private val cache: Cache
+) {
 
     suspend fun getVaccinationValueSets(languageCode: Locale): VaccinationValueSet {
         throw NotImplementedError()
@@ -16,6 +20,7 @@ class VaccinationServer @Inject constructor() {
 
     fun clear() {
         // Clear cache
-        throw NotImplementedError()
+        Timber.d("Clearing cache")
+        cache.evictAll()
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationValueSet.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSet.kt
similarity index 68%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationValueSet.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSet.kt
index c1f88db7386d45b9a6e7a1ed50fbbf361fc22606..6bace45c474e8760501732e684653ab8c7360ea8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/VaccinationValueSet.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSet.kt
@@ -1,4 +1,4 @@
-package de.rki.coronawarnapp.vaccination.core.server
+package de.rki.coronawarnapp.vaccination.core.server.valueset
 
 import java.util.Locale
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetApiV1.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetApiV1.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d30f63ada3e13187b20aa2952192c35b9ea9df20
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetApiV1.kt
@@ -0,0 +1,12 @@
+package de.rki.coronawarnapp.vaccination.core.server.valueset
+
+import okhttp3.ResponseBody
+import retrofit2.Response
+import retrofit2.http.GET
+import retrofit2.http.Path
+
+interface VaccinationValueSetApiV1 {
+
+    @GET("/version/v1/ehn-dgc/{lang}/value-sets")
+    suspend fun getValueSets(@Path("lang") languageCode: String): Response<ResponseBody>
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetHttpClient.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetHttpClient.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1650bcb5f61039656a1cc3e51485dacf03e5317b
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetHttpClient.kt
@@ -0,0 +1,8 @@
+package de.rki.coronawarnapp.vaccination.core.server.valueset
+
+import javax.inject.Qualifier
+
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class VaccinationValueSetHttpClient
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1a4d73746910ef349635ffe3e5e95f0c1a0f0807
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/server/valueset/VaccinationValueSetModule.kt
@@ -0,0 +1,53 @@
+package de.rki.coronawarnapp.vaccination.core.server.valueset
+
+import android.content.Context
+import dagger.Module
+import dagger.Provides
+import dagger.Reusable
+import de.rki.coronawarnapp.environment.vaccination.VaccinationCertificateCDNUrl
+import de.rki.coronawarnapp.http.HttpClientDefault
+import de.rki.coronawarnapp.util.di.AppContext
+import okhttp3.Cache
+import okhttp3.OkHttpClient
+import retrofit2.Retrofit
+import java.io.File
+
+@Module
+class VaccinationValueSetModule {
+
+    @Reusable
+    @VaccinationValueSetHttpClient
+    @Provides
+    fun cache(
+        @AppContext context: Context
+    ): Cache {
+        val cacheDir = File(context.cacheDir, "vaccination_value")
+        val cacheFile = File(cacheDir, "http_cache")
+        return Cache(cacheFile, CACHE_SIZE_5MB)
+    }
+
+    @Reusable
+    @VaccinationValueSetHttpClient
+    @Provides
+    fun httpClient(
+        @HttpClientDefault defaultHttpClient: OkHttpClient,
+        @VaccinationValueSetHttpClient cache: Cache
+    ): OkHttpClient = defaultHttpClient.newBuilder()
+        .cache(cache)
+        .build()
+
+    @Reusable
+    @Provides
+    fun api(
+        @VaccinationValueSetHttpClient httpClient: OkHttpClient,
+        @VaccinationCertificateCDNUrl url: String
+    ): VaccinationValueSetApiV1 = Retrofit.Builder()
+        .client(httpClient)
+        .baseUrl(url)
+        .build()
+        .create(VaccinationValueSetApiV1::class.java)
+
+    companion object {
+        private const val CACHE_SIZE_5MB = 5 * 1024 * 1024L // 5MB
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/environment/EnvironmentSetupTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/environment/EnvironmentSetupTest.kt
index cfbee9a6393b9464a3c8b85d14e5dd9158516988..2825adb0544c484dd185beade0c336934e322228 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/environment/EnvironmentSetupTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/environment/EnvironmentSetupTest.kt
@@ -68,6 +68,8 @@ class EnvironmentSetupTest : BaseTest() {
                 dataDonationCdnUrl shouldBe "https://datadonation-${env.rawKey}"
                 logUploadServerUrl shouldBe "https://logupload-${env.rawKey}"
                 crowdNotifierPublicKey shouldBe "123_abc-${env.rawKey}"
+                vaccinationProofServerUrl shouldBe "https://vaccination_proof-${env.rawKey}"
+                vaccinationCdnUrl shouldBe "https://vaccination-${env.rawKey}"
             }
         }
     }
@@ -127,7 +129,9 @@ class EnvironmentSetupTest : BaseTest() {
         EnvironmentSetup.EnvKey.LOG_UPLOAD.rawKey shouldBe "LOG_UPLOAD_SERVER_URL"
         EnvironmentSetup.EnvKey.SAFETYNET_API_KEY.rawKey shouldBe "SAFETYNET_API_KEY"
         EnvironmentSetup.EnvKey.CROWD_NOTIFIER_PUBLIC_KEY.rawKey shouldBe "CROWD_NOTIFIER_PUBLIC_KEY"
-        EnvironmentSetup.EnvKey.values().size shouldBe 9
+        EnvironmentSetup.EnvKey.VACCINATION_PROOF.rawKey shouldBe "VACCINATION_PROOF_SERVER_URL"
+        EnvironmentSetup.EnvKey.VACCINATION_VALUE.rawKey shouldBe "VACCINATION_CDN_URL"
+        EnvironmentSetup.EnvKey.values().size shouldBe 11
     }
 
     companion object {
@@ -149,6 +153,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-PROD",
                     "DATA_DONATION_CDN_URL": "https://datadonation-PROD",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-PROD",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-PROD",
+                    "VACCINATION_CDN_URL": "https://vaccination-PROD",
                     "SAFETYNET_API_KEY": "placeholder-PROD",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-PROD",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-PROD"                    
@@ -160,6 +166,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-DEV",
                     "DATA_DONATION_CDN_URL": "https://datadonation-DEV",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-DEV",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-DEV",
+                    "VACCINATION_CDN_URL": "https://vaccination-DEV",
                     "SAFETYNET_API_KEY": "placeholder-DEV",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-DEV",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-DEV"
@@ -171,6 +179,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-INT",
                     "DATA_DONATION_CDN_URL": "https://datadonation-INT",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-INT",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-INT",
+                    "VACCINATION_CDN_URL": "https://vaccination-INT",
                     "SAFETYNET_API_KEY": "placeholder-INT",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-INT",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-INT"
@@ -182,6 +192,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-WRU",
                     "DATA_DONATION_CDN_URL": "https://datadonation-WRU",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-WRU",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-WRU",
+                    "VACCINATION_CDN_URL": "https://vaccination-WRU",
                     "SAFETYNET_API_KEY": "placeholder-WRU",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-WRU",
                     "CREATE_TRACELOCATION_URL": "https://tracelocation-WRU",
@@ -194,6 +206,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-WRU-XD",
                     "DATA_DONATION_CDN_URL": "https://datadonation-WRU-XD",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-WRU-XD",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-WRU-XD",
+                    "VACCINATION_CDN_URL": "https://vaccination-WRU-XD",
                     "SAFETYNET_API_KEY": "placeholder-WRU-XD",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-WRU-XD",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-WRU-XD"
@@ -205,6 +219,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-WRU-XA",
                     "DATA_DONATION_CDN_URL": "https://datadonation-WRU-XA",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-WRU-XA",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-WRU-XA",
+                    "VACCINATION_CDN_URL": "https://vaccination-WRU-XA",
                     "SAFETYNET_API_KEY": "placeholder-WRU-XA",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-WRU-XA",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-WRU-XA"
@@ -216,6 +232,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-TESTER-MOCK",
                     "DATA_DONATION_CDN_URL": "https://datadonation-TESTER-MOCK",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-TESTER-MOCK",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-TESTER-MOCK",
+                    "VACCINATION_CDN_URL": "https://vaccination-TESTER-MOCK",
                     "SAFETYNET_API_KEY": "placeholder-TESTER-MOCK",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-TESTER-MOCK",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-TESTER-MOCK"
@@ -227,6 +245,8 @@ class EnvironmentSetupTest : BaseTest() {
                     "VERIFICATION_CDN_URL": "https://verification-LOCAL",
                     "DATA_DONATION_CDN_URL": "https://datadonation-LOCAL",
                     "LOG_UPLOAD_SERVER_URL": "https://logupload-LOCAL",
+                    "VACCINATION_PROOF_SERVER_URL": "https://vaccination_proof-LOCAL",
+                    "VACCINATION_CDN_URL": "https://vaccination-LOCAL",
                     "SAFETYNET_API_KEY": "placeholder-LOCAL",
                     "PUB_KEYS_SIGNATURE_VERIFICATION": "12345678-LOCAL",
                     "CROWD_NOTIFIER_PUBLIC_KEY": "123_abc-LOCAL"
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinationTestData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinationTestData.kt
index a8f8596ee00e7be776b987a6602f9ac8c8de5804..334f7be771cc886709ed5de362fadf43ad8d2ee5 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinationTestData.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinationTestData.kt
@@ -6,8 +6,8 @@ import de.rki.coronawarnapp.vaccination.core.qrcode.VaccinationCertificateV1
 import de.rki.coronawarnapp.vaccination.core.repository.storage.PersonData
 import de.rki.coronawarnapp.vaccination.core.repository.storage.ProofContainer
 import de.rki.coronawarnapp.vaccination.core.repository.storage.VaccinationContainer
-import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateData
-import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateResponse
+import de.rki.coronawarnapp.vaccination.core.server.proof.ProofCertificateData
+import de.rki.coronawarnapp.vaccination.core.server.proof.ProofCertificateResponse
 import de.rki.coronawarnapp.vaccination.core.server.ProofCertificateV1
 import okio.ByteString
 import okio.ByteString.Companion.decodeBase64
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepositoryTest.kt
index 9a707688ee09916569fac6caa90e9828045a41d4..dfb4b86a2e1d75f27c252e63f4949b8ca958a23d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepositoryTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/VaccinationRepositoryTest.kt
@@ -4,8 +4,8 @@ import de.rki.coronawarnapp.util.TimeStamper
 import de.rki.coronawarnapp.vaccination.core.VaccinationTestData
 import de.rki.coronawarnapp.vaccination.core.repository.storage.PersonData
 import de.rki.coronawarnapp.vaccination.core.repository.storage.VaccinationStorage
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationProofServer
-import de.rki.coronawarnapp.vaccination.core.server.VaccinationValueSet
+import de.rki.coronawarnapp.vaccination.core.server.proof.VaccinationProofServer
+import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
 import io.kotest.matchers.shouldBe
 import io.mockk.MockKAnnotations
 import io.mockk.coEvery
diff --git a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
index c1b802516a2f5aa590dd3cf5ba6fcbd6d23e5906..899f6fd6ebec6a210ee296f95202f0f8bf1489ab 100644
--- a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
@@ -31,6 +31,8 @@ class DebugOptionsFragmentViewModelTest : BaseTestInstrumentation() {
         every { environmentSetup.verificationCdnUrl } returns "verificationUrl"
         every { environmentSetup.dataDonationCdnUrl } returns "dataDonationUrl"
         every { environmentSetup.logUploadServerUrl } returns "logUploadServerUrl"
+        every { environmentSetup.vaccinationProofServerUrl } returns "vaccinationProofServerUrl"
+        every { environmentSetup.vaccinationCdnUrl } returns "vaccinationCdnUrl"
         every { environmentSetup.crowdNotifierPublicKey } returns "crowdNotifierPublicKey"
         every { environmentSetup.appConfigPublicKey } returns "appConfigPublicKey"
 
diff --git a/prod_environments.json b/prod_environments.json
index 09d9015c150489eb2dac757a9dfbe5d25f476926..c5c3b3f63cb9db1cf02a4f9e542168f804038d2a 100644
--- a/prod_environments.json
+++ b/prod_environments.json
@@ -6,6 +6,8 @@
     "VERIFICATION_CDN_URL": "https://verification.coronawarn.app",
     "DATA_DONATION_CDN_URL": "https://data.coronawarn.app",
     "LOG_UPLOAD_SERVER_URL": "https://logupload.coronawarn.app",
+    "VACCINATION_PROOF_SERVER_URL": "https://placeholder",
+    "VACCINATION_CDN_URL": "https://placeholder",
     "SAFETYNET_API_KEY": "placeholder",
     "PUB_KEYS_SIGNATURE_VERIFICATION": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEc7DEstcUIRcyk35OYDJ95/hTg3UVhsaDXKT0zK7NhHPXoyzipEnOp3GyNXDVpaPi3cAfQmxeuFMZAIX2+6A5Xg==",
     "CROWD_NOTIFIER_PUBLIC_KEY": "gwLMzE153tQwAOf2MZoUXXfzWTdlSpfS99iZffmcmxOG9njSK4RTimFOFwDh6t0Tyw8XR01ugDYjtuKwjjuK49Oh83FWct6XpefPi9Skjxvvz53i9gaMmUEc96pbtoaA"