diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java
index 7984873..88e2b1c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java
@@ -31,14 +31,9 @@
 import com.googlesource.gerrit.plugins.replication.pull.Source;
 import com.googlesource.gerrit.plugins.replication.pull.SourcesCollection;
 import com.googlesource.gerrit.plugins.replication.pull.api.exception.RemoteConfigurationMissingException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 import org.eclipse.jgit.errors.TransportException;
 
@@ -66,14 +61,12 @@
       String label,
       Set<FetchRefSpec> refsSpecs,
       PullReplicationApiRequestMetrics apiRequestMetrics)
-      throws InterruptedException, ExecutionException, RemoteConfigurationMissingException,
-          TimeoutException, TransportException {
+      throws InterruptedException, RemoteConfigurationMissingException, TransportException {
     fetch(name, label, refsSpecs, ASYNC, Optional.of(apiRequestMetrics));
   }
 
   public void fetchSync(Project.NameKey name, String label, Set<FetchRefSpec> refsSpecs)
-      throws InterruptedException, ExecutionException, RemoteConfigurationMissingException,
-          TimeoutException, TransportException {
+      throws InterruptedException, RemoteConfigurationMissingException, TransportException {
     fetch(name, label, refsSpecs, SYNC, Optional.empty());
   }
 
@@ -83,8 +76,7 @@
       Set<FetchRefSpec> refSpecs,
       ReplicationType fetchType,
       Optional<PullReplicationApiRequestMetrics> apiRequestMetrics)
-      throws InterruptedException, ExecutionException, RemoteConfigurationMissingException,
-          TimeoutException, TransportException {
+      throws InterruptedException, RemoteConfigurationMissingException, TransportException {
     ReplicationState state =
         fetchReplicationStateFactory.create(
             new FetchResultProcessing.CommandProcessing(this, eventDispatcher.get()));
@@ -98,17 +90,8 @@
     try {
       if (fetchType == ReplicationType.ASYNC) {
         state.markAllFetchTasksScheduled();
-        List<Future<?>> futures = new ArrayList<>();
         for (FetchRefSpec refSpec : refSpecs) {
-          futures.add(source.get().schedule(name, refSpec, state, apiRequestMetrics));
-        }
-        int timeout = source.get().getTimeout();
-        for (Future future : futures) {
-          if (timeout == 0) {
-            future.get();
-          } else {
-            future.get(timeout, TimeUnit.SECONDS);
-          }
+          source.get().schedule(name, refSpec, state, apiRequestMetrics);
         }
       } else {
         Optional<FetchOne> maybeFetch =
@@ -121,10 +104,7 @@
           throw newTransportException(maybeFetch.get());
         }
       }
-    } catch (ExecutionException
-        | IllegalStateException
-        | TimeoutException
-        | InterruptedException e) {
+    } catch (IllegalStateException e) {
       fetchStateLog.error("Exception during the fetch operation", e, state);
       throw e;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchJob.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchJob.java
index f5ee3a1..4437bef 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchJob.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchJob.java
@@ -20,8 +20,6 @@
 import com.google.inject.assistedinject.Assisted;
 import com.googlesource.gerrit.plugins.replication.pull.api.FetchAction.BatchInput;
 import com.googlesource.gerrit.plugins.replication.pull.api.exception.RemoteConfigurationMissingException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
 import org.eclipse.jgit.errors.TransportException;
 
 public class FetchJob implements Runnable {
@@ -53,11 +51,7 @@
   public void run() {
     try {
       command.fetchAsync(project, batchInput.label, batchInput.getRefSpecs(), metrics);
-    } catch (InterruptedException
-        | ExecutionException
-        | RemoteConfigurationMissingException
-        | TimeoutException
-        | TransportException e) {
+    } catch (InterruptedException | RemoteConfigurationMissingException | TransportException e) {
       log.atSevere().withCause(e).log(
           "Exception during the async fetch call for project %s, label %s and ref(s) name(s) %s",
           project.get(), batchInput.label, batchInput.getRefSpecs());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchActionTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchActionTest.java
index cb5758f..68f6bf0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchActionTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchActionTest.java
@@ -37,9 +37,7 @@
 import com.googlesource.gerrit.plugins.replication.pull.api.exception.RemoteConfigurationMissingException;
 import java.util.Optional;
 import java.util.Set;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeoutException;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -200,19 +198,6 @@
   }
 
   @Test(expected = RestApiException.class)
-  public void shouldThrowRestApiExceptionWhenIssueDuringPocessing() throws Exception {
-    FetchAction.Input inputParams = new FetchAction.Input();
-    inputParams.label = label;
-    inputParams.refName = refName;
-
-    doThrow(new ExecutionException(new RuntimeException()))
-        .when(fetchCommand)
-        .fetchSync(any(), any(), any());
-
-    fetchAction.apply(projectResource, inputParams);
-  }
-
-  @Test(expected = RestApiException.class)
   public void shouldThrowRestApiExceptionWhenIssueWithUrlParam() throws Exception {
     FetchAction.Input inputParams = new FetchAction.Input();
     inputParams.label = label;
@@ -223,17 +208,6 @@
     fetchAction.apply(projectResource, inputParams);
   }
 
-  @Test(expected = RestApiException.class)
-  public void shouldThrowRestApiExceptionWhenTimeout() throws Exception {
-    FetchAction.Input inputParams = new FetchAction.Input();
-    inputParams.label = label;
-    inputParams.refName = refName;
-
-    doThrow(new TimeoutException()).when(fetchCommand).fetchSync(any(), any(), any());
-
-    fetchAction.apply(projectResource, inputParams);
-  }
-
   @Test(expected = AuthException.class)
   public void shouldThrowAuthExceptionWhenCallFetchActionCapabilityNotAssigned() throws Exception {
     FetchAction.Input inputParams = new FetchAction.Input();
