diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index bccfe74..302d50c 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -157,7 +157,7 @@ jobs:
           ref: test-data/v2/submodule-ssh-url
           path: submodules-true
           submodules: recursive
-          submodulesFetchJobs: "10"
+          submodules-fetch-jobs: "10"
       - name: Verify submodules true
         run: __test__/verify-submodules-with-jobs.sh
 
diff --git a/README.md b/README.md
index c4c618e..1c0b8d0 100644
--- a/README.md
+++ b/README.md
@@ -94,6 +94,12 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
     # Default: false
     fetch-tags: ''
 
+    # Specifies the maximal number of fetch operations to be run in parallel at a time
+    # (submodules, or remotes when the --multiple option of git-fetch is in effect). A
+    # value of 0 will give some reasonable default. If unset, it defaults to 1.
+    # Default: 1
+    fetch-parallel: ''
+
     # Whether to show progress status output when fetching.
     # Default: true
     show-progress: ''
@@ -115,7 +121,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
     # integer allows up to that number of submodules fetched in parallel. A value of 0
     # will give some reasonable default. If unset, it defaults to 1.
     # Default: 1
-    submodulesFetchJobs: ''
+    submodules-fetch-jobs: ''
 
     # Add repository path as safe.directory for Git global config by running `git
     # config --global --add safe.directory <path>`
diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts
index 94924f1..ae3b7c2 100644
--- a/__test__/git-auth-helper.test.ts
+++ b/__test__/git-auth-helper.test.ts
@@ -807,11 +807,12 @@ async function setup(testName: string): Promise<void> {
     sparseCheckoutConeMode: true,
     fetchDepth: 1,
     fetchTags: false,
+    fetchParallel: 1,
     showProgress: true,
     lfs: false,
     submodules: false,
     nestedSubmodules: false,
-    submodulesFetchJobs: '1',
+    submodulesFetchJobs: 1,
     persistCredentials: true,
     ref: 'refs/heads/main',
     repositoryName: 'my-repo',
diff --git a/action.yml b/action.yml
index 4e27f10..fbe73d8 100644
--- a/action.yml
+++ b/action.yml
@@ -73,6 +73,11 @@ inputs:
   fetch-tags:
     description: 'Whether to fetch tags, even if fetch-depth > 0.'
     default: false
+  fetch-parallel:
+    description: >
+      Specifies the maximal number of fetch operations to be run in parallel at a time (submodules, or remotes when the --multiple option of git-fetch is in effect).
+      A value of 0 will give some reasonable default. If unset, it defaults to 1.
+    default: 1
   show-progress:
     description: 'Whether to show progress status output when fetching.'
     default: true
@@ -88,7 +93,7 @@ inputs:
       When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are
       converted to HTTPS.
     default: false
-  submodulesFetchJobs:
+  submodules-fetch-jobs:
     description: >
       Specifies how many submodules are fetched/cloned at the same time. A positive integer allows up to that number of submodules fetched in parallel. A value of 0 will give some reasonable default. If unset, it defaults to 1.
     default: 1
diff --git a/dist/index.js b/dist/index.js
index b27e94a..9b58379 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1243,6 +1243,7 @@ function getSource(settings) {
             }
             // Fetch
             core.startGroup('Fetching the repository');
+            yield git.config('fetch.parallel', settings.fetchParallel.toString(), true);
             const fetchOptions = {};
             if (settings.filter) {
                 fetchOptions.filter = settings.filter;
@@ -1304,7 +1305,7 @@ function getSource(settings) {
                 core.endGroup();
                 // Checkout submodules
                 core.startGroup('Fetching submodules');
-                yield git.config('submodule.fetchJobs', settings.submodulesFetchJobs);
+                yield git.config('submodule.fetchJobs', settings.submodulesFetchJobs.toString(), true);
                 yield git.submoduleSync(settings.nestedSubmodules);
                 yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
                 yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
@@ -1753,6 +1754,12 @@ function getInputs() {
         result.fetchTags =
             (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
         core.debug(`fetch tags = ${result.fetchTags}`);
+        // Fetch tags
+        result.fetchParallel = Math.floor(Number(core.getInput('fetch-parallel') || '1'));
+        if (isNaN(result.fetchParallel) || result.fetchParallel < 0) {
+            result.fetchParallel = 0;
+        }
+        core.debug(`fetch parallel = ${result.fetchParallel}`);
         // Show fetch progress
         result.showProgress =
             (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE';
@@ -1771,12 +1778,17 @@ function getInputs() {
         else if (submodulesString == 'TRUE') {
             result.submodules = true;
         }
-        result.submodulesFetchJobs = core.getInput('submodulesFetchJobs') || '1';
+        result.submodulesFetchJobs = Math.floor(Number(core.getInput('submodules-fetch-jobs') || '1'));
+        if (isNaN(result.submodulesFetchJobs) || result.submodulesFetchJobs < 0) {
+            result.submodulesFetchJobs = 0;
+        }
         core.debug(`submodules = ${result.submodules}`);
         core.debug(`recursive submodules = ${result.nestedSubmodules}`);
-        core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`);
+        core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`);
         // Auth token
-        result.authToken = core.getInput('token', { required: true });
+        result.authToken = core.getInput('token', {
+            required: true
+        });
         // SSH
         result.sshKey = core.getInput('ssh-key');
         result.sshKnownHosts = core.getInput('ssh-known-hosts');
diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts
index 58d4292..f80d560 100644
--- a/src/git-source-provider.ts
+++ b/src/git-source-provider.ts
@@ -153,6 +153,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 
     // Fetch
     core.startGroup('Fetching the repository')
+    await git.config('fetch.parallel', settings.fetchParallel.toString(), true)
     const fetchOptions: {
       filter?: string
       fetchDepth?: number
@@ -232,7 +233,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 
       // Checkout submodules
       core.startGroup('Fetching submodules')
-      await git.config('submodule.fetchJobs', settings.submodulesFetchJobs)
+      await git.config(
+        'submodule.fetchJobs',
+        settings.submodulesFetchJobs.toString(),
+        true
+      )
       await git.submoduleSync(settings.nestedSubmodules)
       await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
       await git.submoduleForeach(
diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts
index ae6bb74..85af342 100644
--- a/src/git-source-settings.ts
+++ b/src/git-source-settings.ts
@@ -54,6 +54,11 @@ export interface IGitSourceSettings {
    */
   fetchTags: boolean
 
+  /**
+   * Indicates the maximal number of fetch operations to be run in parallel at a time
+   */
+  fetchParallel: number
+
   /**
    * Indicates whether to use the --progress option when fetching
    */
@@ -77,7 +82,7 @@ export interface IGitSourceSettings {
   /**
    * Indicates the number of parallel jobs to use when fetching submodules
    */
-  submodulesFetchJobs: string
+  submodulesFetchJobs: number
 
   /**
    * The auth token to use when fetching the repository
diff --git a/src/input-helper.ts b/src/input-helper.ts
index b2e76a9..dc43aa8 100644
--- a/src/input-helper.ts
+++ b/src/input-helper.ts
@@ -113,6 +113,15 @@ export async function getInputs(): Promise<IGitSourceSettings> {
     (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'
   core.debug(`fetch tags = ${result.fetchTags}`)
 
+  // Fetch tags
+  result.fetchParallel = Math.floor(
+    Number(core.getInput('fetch-parallel') || '1')
+  )
+  if (isNaN(result.fetchParallel) || result.fetchParallel < 0) {
+    result.fetchParallel = 0
+  }
+  core.debug(`fetch parallel = ${result.fetchParallel}`)
+
   // Show fetch progress
   result.showProgress =
     (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'
@@ -132,13 +141,20 @@ export async function getInputs(): Promise<IGitSourceSettings> {
   } else if (submodulesString == 'TRUE') {
     result.submodules = true
   }
-  result.submodulesFetchJobs = core.getInput('submodulesFetchJobs') || '1'
+  result.submodulesFetchJobs = Math.floor(
+    Number(core.getInput('submodules-fetch-jobs') || '1')
+  )
+  if (isNaN(result.submodulesFetchJobs) || result.submodulesFetchJobs < 0) {
+    result.submodulesFetchJobs = 0
+  }
   core.debug(`submodules = ${result.submodules}`)
   core.debug(`recursive submodules = ${result.nestedSubmodules}`)
-  core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`)
+  core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`)
 
   // Auth token
-  result.authToken = core.getInput('token', {required: true})
+  result.authToken = core.getInput('token', {
+    required: true
+  })
 
   // SSH
   result.sshKey = core.getInput('ssh-key')