diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt
new file mode 100644
index 0000000000000000000000000000000000000000..aca52b82f6c0376a642e563079d22db741905ba9
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt
@@ -0,0 +1,4 @@
+package de.rki.coronawarnapp.exception.http
+
+class ServiceFactoryException(cause: Throwable) :
+    Exception("error inside the service factory", cause)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt
index 90c2fd6fcfcdccf1e1859481c1e7d7bb1e5d1a1b..42604a156a5c48bfd544680758a34cee93df6cef 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt
@@ -1,7 +1,9 @@
 package de.rki.coronawarnapp.http
 
+import android.webkit.URLUtil
 import de.rki.coronawarnapp.BuildConfig
 import de.rki.coronawarnapp.CoronaWarnApplication
+import de.rki.coronawarnapp.exception.http.ServiceFactoryException
 import de.rki.coronawarnapp.http.service.DistributionService
 import de.rki.coronawarnapp.http.service.SubmissionService
 import de.rki.coronawarnapp.http.service.VerificationService
@@ -90,34 +92,50 @@ class ServiceFactory {
         clientBuilder.build()
     }
 
+    private val downloadCdnUrl
+        get() = getValidUrl(DynamicURLs.DOWNLOAD_CDN_URL)
+
     fun distributionService(): DistributionService = distributionService
     private val distributionService by lazy {
         Retrofit.Builder()
             .client(okHttpClient)
-            .baseUrl(DynamicURLs.DOWNLOAD_CDN_URL)
+            .baseUrl(downloadCdnUrl)
             .addConverterFactory(gsonConverterFactory)
             .build()
             .create(DistributionService::class.java)
     }
 
+    private val verificationCdnUrl
+        get() = getValidUrl(DynamicURLs.VERIFICATION_CDN_URL)
+
     fun verificationService(): VerificationService = verificationService
     private val verificationService by lazy {
         Retrofit.Builder()
             .client(okHttpClient)
-            .baseUrl(DynamicURLs.VERIFICATION_CDN_URL)
+            .baseUrl(verificationCdnUrl)
             .addConverterFactory(gsonConverterFactory)
             .build()
             .create(VerificationService::class.java)
     }
 
+    private val submissionCdnUrl
+        get() = getValidUrl(DynamicURLs.SUBMISSION_CDN_URL)
+
     fun submissionService(): SubmissionService = submissionService
     private val submissionService by lazy {
         Retrofit.Builder()
             .client(okHttpClient)
-            .baseUrl(DynamicURLs.SUBMISSION_CDN_URL)
+            .baseUrl(submissionCdnUrl)
             .addConverterFactory(protoConverterFactory)
             .addConverterFactory(gsonConverterFactory)
             .build()
             .create(SubmissionService::class.java)
     }
+
+    private fun getValidUrl(url: String): String {
+        if (!URLUtil.isHttpsUrl(url)) {
+            throw ServiceFactoryException(IllegalArgumentException("the url is invalid"))
+        }
+        return url
+    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
index 408169d263c6ed8a2d521cdfc74e7915c6acecdb..5e8369c7145e338fe5993880baf05d788b03f8b6 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
@@ -48,9 +48,9 @@ object WebRequestBuilder {
 
     private val serviceFactory = ServiceFactory()
 
-    private val distributionService = serviceFactory.distributionService()
-    private val verificationService = serviceFactory.verificationService()
-    private val submissionService = serviceFactory.submissionService()
+    private val distributionService by lazy { serviceFactory.distributionService() }
+    private val verificationService by lazy { serviceFactory.verificationService() }
+    private val submissionService by lazy { serviceFactory.submissionService() }
 
     suspend fun asyncGetDateIndex(): List<String> = withContext(Dispatchers.IO) {
         return@withContext distributionService
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt
index 07bf9cc0ede200968366a53ff982de42d4e04618..2644430f991c08a461a511c33622c0f3eee647c6 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt
@@ -31,12 +31,13 @@ class UpdateChecker(private val activity: LauncherActivity) {
     suspend fun checkForUpdate() {
 
         // check if an update is needed based on server config
+        // TODO replace with signature exception
         val updateNeededFromServer: Boolean = try {
             checkIfUpdatesNeededFromServer()
-        }
-        // TODO replace with signature exception
-        catch (exception: Exception) {
-            true
+        } catch (exception: Exception) {
+            Log.e(TAG, exception.localizedMessage ?: "unknown error")
+            exception.printStackTrace()
+            false
         }
 
         // get AppUpdateManager