diff --git a/.circleci/config.yml b/.circleci/config.yml
index 82050edd7b8f3c9a98fb486ba941872d42f94086..29858818167968060a19ef492f7b3f6c66f55342 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -8,10 +8,19 @@ commands:
   save-build-cache: android/save-build-cache
   scan-sonar: sonarcloud/scan
 jobs:
-  quickBuildReleaseWithTestsAndChecks:
+  quick_build_release_no_tests:
     executor: android/android
+    resource_class: large
     steps:
       - checkout
+      - run:
+          name: Check if assemble required
+          command: |
+            last_commit=$(git log -1 --pretty=%B)
+            if [[ $last_commit != *"Version bump"* ]]; then
+              circleci-agent step halt
+              echo "Skipping job"
+            fi
       - install-ndk:
           ndk-sha: "c81a5bcb4672a18d3647bf6898cd4dbcb978d0e8"
           ndk-version: "android-ndk-r21c"
@@ -20,7 +29,66 @@ jobs:
           key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
       - run:
           name: Quick Build
-          command: ./gradlew quickBuild quickBuildTest
+          command: ./gradlew assembleDeviceRelease
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - save-build-cache
+      - save_cache:
+          paths:
+            - ~/.gradle
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  quick_build_for_testers_no_tests:
+    executor: android/android
+    resource_class: large
+    steps:
+      - checkout
+      - run:
+          name: Check if assemble required
+          command: |
+            last_commit=$(git log -1 --pretty=%B)
+            if [[ $last_commit != *"Version bump"* ]]; then
+              circleci-agent step halt
+              echo "Skipping job"
+            fi
+      - install-ndk:
+          ndk-sha: "c81a5bcb4672a18d3647bf6898cd4dbcb978d0e8"
+          ndk-version: "android-ndk-r21c"
+      - restore-build-cache
+      - restore_cache:
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - run:
+          name: Quick Build
+          command: ./gradlew :Corona-Warn-App:assembleDeviceForTestersRelease
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - save-build-cache
+      - save_cache:
+          paths:
+            - ~/.gradle
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  device_release_unit_tests:
+    executor: android/android
+    resource_class: large
+    parallelism: 4
+    steps:
+      - checkout
+      - restore-build-cache
+      - restore_cache:
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - run:
+          name: test splitting output
+          command: circleci tests glob "**/test*/**/*.kt" | circleci tests split | xargs -n 1 echo
+      - run:
+          name: Unit tests
+          command: ./gradlew :Corona-Warn-App:testDeviceReleaseUnitTest -i -PtestFilter="`circleci tests glob "**/test*/**/*.kt" | circleci tests split`"
           environment:
             JVM_OPTS: -Xmx2048m
             GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
@@ -44,8 +112,114 @@ jobs:
           name: Skip SonarCloud for external Pull Requests
           command: '[[ -v CIRCLE_PR_REPONAME ]] && circleci-agent step halt || true'
       - scan-sonar
+  device_for_testers_unit_tests:
+    executor: android/android
+    resource_class: large
+    parallelism: 4
+    steps:
+      - checkout
+      - restore-build-cache
+      - restore_cache:
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - run:
+          name: test splitting output
+          command: circleci tests glob "**/test*/**/*.kt" | circleci tests split | xargs -n 1 echo
+      - run:
+          name: Unit tests
+          command: ./gradlew :Corona-Warn-App:testDeviceForTestersReleaseUnitTest -i -PtestFilter="`circleci tests glob "**/test*/**/*.kt" | circleci tests split`"
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - save-build-cache
+      - save_cache:
+          paths:
+            - ~/.gradle
+          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "Corona-Warn-App/build.gradle" }}-{{ checksum  "Server-Protocol-Buffer/build.gradle" }}
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+      - store_test_results:
+          path: Corona-Warn-App/build/test-results
+  lint_device_release_check:
+    executor: android/android
+    resource_class: large
+    steps:
+      - checkout
+      - run:
+          name: Lint check device release
+          command: ./gradlew --profile :Corona-Warn-App:lintDeviceRelease
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  ktlint_device_release_check:
+    executor: android/android
+    resource_class: medium
+    steps:
+      - checkout
+      - run:
+          name: Ktlint check device release
+          command: ./gradlew :Corona-Warn-App:ktlintDeviceReleaseCheck
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  lint_device_for_testers_check:
+    executor: android/android
+    resource_class: large
+    steps:
+      - checkout
+      - run:
+          name: Lint check device for testers
+          command: ./gradlew --profile :Corona-Warn-App:lintDeviceForTestersRelease
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  ktlint_device_for_testers_check:
+    executor: android/android
+    resource_class: medium
+    steps:
+      - checkout
+      - run:
+          name: Ktlint check device for testers
+          command: ./gradlew :Corona-Warn-App:ktlintDeviceForTestersReleaseCheck
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
+  detekt:
+    executor: android/android
+    resource_class: medium
+    steps:
+      - checkout
+      - run:
+          name: Detekt check
+          command: ./gradlew :Corona-Warn-App:detekt
+          environment:
+            JVM_OPTS: -Xmx2048m
+            GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
+      - store_artifacts:
+          path: Corona-Warn-App/build/reports
+          destination: reports
 workflows:
   version: 2
-  workflow:
+  quick_build:
     jobs:
-      - quickBuildReleaseWithTestsAndChecks
+      - quick_build_release_no_tests
+      - quick_build_for_testers_no_tests
+      - device_release_unit_tests
+      - device_for_testers_unit_tests
+      - lint_device_release_check
+      - lint_device_for_testers_check
+      - ktlint_device_release_check
+      - ktlint_device_for_testers_check
+      - detekt
diff --git a/Corona-Warn-App/build.gradle b/Corona-Warn-App/build.gradle
index 260f0678b8b7dba3033261cad7e734518dd2ab65..a8c84ac362cded3e91fc643a9be50bf2dd2eb761 100644
--- a/Corona-Warn-App/build.gradle
+++ b/Corona-Warn-App/build.gradle
@@ -129,6 +129,16 @@ android {
     testOptions {
         unitTests.all {
             useJUnitPlatform()
+            if (project.hasProperty('testFilter')) {
+                List<String> props = project.getProperties().get("testFilter").split("\\s+")
+                props.each {
+                    def replaced = it
+                            .replaceFirst("^(Corona-Warn-App/src/test.*/java/)(.+)\$", "**/\$2")
+                            .replace(".kt", ".class")
+                    project.logger.lifecycle("testFilter File: before=$it, after=$replaced")
+                    include(replaced)
+                }
+            }
         }
         unitTests {
             includeAndroidResources = true
@@ -173,7 +183,6 @@ android {
             java.srcDirs += "$projectDir/src/testShared/java"
         }
     }
-
 }
 
 task jacocoTestReportDeviceRelease(type: JacocoReport, dependsOn: 'testDeviceReleaseUnitTest') {