diff --git a/.github/workflows/coverage-generator.yml b/.github/workflows/coverage-generator.yml
new file mode 100644
index 000000000..13c12b124
--- /dev/null
+++ b/.github/workflows/coverage-generator.yml
@@ -0,0 +1,156 @@
+name: Code Coverage Generator
+
+on:
+  workflow_dispatch:
+  schedule:
+    # Daily 22:00 UTC (3.30 AM SL time).
+    - cron: '00 22 * * *'
+
+jobs:
+  build-source:
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+
+      - name: Set up Adopt JDK 11
+        uses: actions/setup-java@v4
+        with:
+          java-version: 11
+          distribution: "adopt"
+
+      - name: Build with Maven
+        run: |
+          mvn clean install -U -B -Dmaven.test.skip=true
+      - name: Cache source code
+        uses: actions/cache@v4
+        with:
+          path: .
+          key: ${{ runner.os }}-source-${{ github.sha }}
+
+  oidc-conformance-report:
+    needs: build-source
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Restore source code
+        uses: actions/cache@v4
+        with:
+          path: .
+          key: ${{ runner.os }}-source-${{ github.sha }}
+          restore-keys: |
+            ${{ runner.os }}-source-
+      - name: Get the latest Jacoco report URL
+        id: get-artifact-url-oidc
+        run: |
+          GITHUB_API_URL="https://api.github.com"
+          OWNER="wso2"
+          REPO="product-is"
+          WORKFLOW_ID="oidc-conformance-test.yml"
+          GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}"
+          # Get the latest successful workflow run
+          WORKFLOW_RUNS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "$GITHUB_API_URL/repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs?status=success&per_page=1")
+          RUN_ID=$(echo $WORKFLOW_RUNS | jq -r '.workflow_runs[0].id')
+          if [ "$RUN_ID" == "null" ]; then
+            echo "No successful workflow runs found"
+            exit 1
+          fi
+          # Get the artifacts for the workflow run
+          ARTIFACTS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "$GITHUB_API_URL/repos/$OWNER/$REPO/actions/runs/$RUN_ID/artifacts")
+          ARTIFACT_URL=$(echo $ARTIFACTS | jq -r '.artifacts[] | select(.name == "jacoco-xml") | .archive_download_url')
+          if [ "$ARTIFACT_URL" == "null" ]; then
+            echo "Artifact not found"
+            exit 1
+          fi
+          echo "::set-output name=artifact-url::$ARTIFACT_URL"
+      - name: Download latest Jacoco report
+        run: |
+          curl -L -o artifact-oidc.zip \
+          -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
+          ${{ steps.get-artifact-url-oidc.outputs.artifact-url }}
+      - name: Unzip Jacoco report
+        run: |
+          unzip artifact-oidc.zip -d ./artifacts-oidc
+      - name: Upload coverage reports to Codecov for OIDC
+        uses: codecov/codecov-action@v4
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          files: ./artifacts-oidc/jacoco.xml
+          flags: conformance-oidc
+          disable_search: true
+
+  fapi-conformance-report:
+    needs: build-source
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Restore source code
+        uses: actions/cache@v4
+        with:
+          path: .
+          key: ${{ runner.os }}-source-${{ github.sha }}
+          restore-keys: |
+            ${{ runner.os }}-source-
+      - name: Get the latest Jacoco report URL
+        id: get-artifact-url-fapi
+        run: |
+          GITHUB_API_URL="https://api.github.com"
+          OWNER="wso2"
+          REPO="product-is"
+          WORKFLOW_ID="fapi-oidc-conformance-test.yml"
+          GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}"
+          # Get the latest successful workflow run
+          WORKFLOW_RUNS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "$GITHUB_API_URL/repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs?status=success&per_page=1")
+          RUN_ID=$(echo $WORKFLOW_RUNS | jq -r '.workflow_runs[0].id')
+          if [ "$RUN_ID" == "null" ]; then
+            echo "No successful workflow runs found"
+            exit 1
+          fi
+          # Get the artifacts for the workflow run
+          ARTIFACTS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "$GITHUB_API_URL/repos/$OWNER/$REPO/actions/runs/$RUN_ID/artifacts")
+          ARTIFACT_URL=$(echo $ARTIFACTS | jq -r '.artifacts[] | select(.name == "jacoco-xml") | .archive_download_url')
+          if [ "$ARTIFACT_URL" == "null" ]; then
+            echo "Artifact not found"
+            exit 1
+          fi
+          echo "::set-output name=artifact-url::$ARTIFACT_URL"
+      - name: Download the latest Jacoco report
+        run: |
+          curl -L -o artifact-fapi.zip \
+          -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
+          ${{ steps.get-artifact-url-fapi.outputs.artifact-url }}
+      - name: Unzip Jacoco report
+        run: |
+          unzip artifact-fapi.zip -d ./artifacts-fapi
+      - name: Upload coverage reports to Codecov for FAPI
+        uses: codecov/codecov-action@v4
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          files: ./artifacts-fapi/jacoco.xml
+          flags: conformance-fapi
+          disable_search: true
+
+  integration-test-report:
+    needs: build-source
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Restore source code
+        uses: actions/cache@v4
+        with:
+          path: .
+          key: ${{ runner.os }}-source-${{ github.sha }}
+          restore-keys: |
+            ${{ runner.os }}-source-
+      - name: Download integration Jacoco XML report
+        run: |
+          mkdir artifacts-integration
+          curl -L -o ./artifacts-integration/jacoco.xml https://wso2.org/jenkins/job/products/job/product-is/lastSuccessfulBuild/artifact/modules/integration/tests-integration/tests-backend/target/jacoco/coverage/jacoco.xml
+      - name: Upload coverage reports to Codecov for integration tests
+        uses: codecov/codecov-action@v4
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          files: ./artifacts-integration/jacoco.xml
+          flags: integration
+          disable_search: true
diff --git a/.github/workflows/pr-builder.yml b/.github/workflows/pr-builder.yml
index ebab5c898..415e030c5 100644
--- a/.github/workflows/pr-builder.yml
+++ b/.github/workflows/pr-builder.yml
@@ -1,7 +1,7 @@
 # This workflow will build the project on pull requests with tests
 # Uses:
-#   OS: ubuntu-lates
-#   JDK: Adopt JDK 11 and Adopt JDK 17
+#   OS: ubuntu-latest
+#   JDK: Temurin JDK 11 and Adopt JDK 17
 
 name: PR Builder
 
@@ -25,15 +25,15 @@ jobs:
         java-version: [ 11, 17 ]
         
     steps:
-      - uses: actions/checkout@v2
-      - name: Set up Adopt JDK 11 and 17
-        uses: actions/setup-java@v2
+      - uses: actions/checkout@v4
+      - name: Set up Temurin JDK 11 and 17
+        uses: actions/setup-java@v4
         with:
           java-version: ${{ matrix.java-version }}
-          distribution: "adopt"
+          distribution: "temurin"
       - name: Cache local Maven repository
         id: cache-maven-m2
-        uses: actions/cache@v2
+        uses: actions/cache@v4
         env:
           cache-name: cache-m2
         with:
@@ -54,3 +54,4 @@ jobs:
         with:
           token: ${{ secrets.CODECOV_TOKEN }}
           files : target/site/jacoco/jacoco.xml
+          flags: unit
diff --git a/codecov.yml b/codecov.yml
index 9571a5f2a..843a42781 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -1,16 +1,23 @@
-
 codecov:
   require_ci_to_pass: yes
   notify:
     wait_for_ci: yes
+  max_report_age: false
+
 coverage:
   status:
-    project:
-      default:
-        enabled: yes
-        threshold: null
-        target: auto
-    patch:
-      default:
-        target: 80%
-        threshold: 40%
+    project: off
+    patch: off
+
+flag_management:
+  default_rules:
+    carryforward: true
+  individual_flags:
+    - name: unit
+      statuses:
+        - type: project
+          target: auto
+          threshold: null
+        - type: patch
+          target: 80%
+          threshold: 40%
diff --git a/components/org.wso2.carbon.identity.scim2.common/pom.xml b/components/org.wso2.carbon.identity.scim2.common/pom.xml
index e4a2f322e..857aecdf2 100644
--- a/components/org.wso2.carbon.identity.scim2.common/pom.xml
+++ b/components/org.wso2.carbon.identity.scim2.common/pom.xml
@@ -283,6 +283,7 @@
                         <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                     </systemPropertyVariables>
                     <argLine>
+                        ${argLine}
                         --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
                         --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED
                         --add-opens java.base/java.lang=ALL-UNNAMED