diff --git a/src/GengoConnector.php b/src/GengoConnector.php
index 9a26d03..f6d5703 100644
--- a/src/GengoConnector.php
+++ b/src/GengoConnector.php
@@ -291,6 +291,21 @@ class GengoConnector {
   }
 
   /**
+   * DELETE request to gengo service.
+   *
+   * @param string $path
+   *   Resource path.
+   * @param array $data
+   *   DELETE data.
+   *
+   * @return object
+   *   Gengo response data.
+   */
+  public function delete($path, $data = array()) {
+    return $this->request($path, 'DELETE', $data);
+  }
+
+  /**
    * Does a request to gengo services.
    *
    * @param string $path
@@ -402,4 +417,18 @@ class GengoConnector {
 
     return 'Drupal TMGMT/' . $tmgmt_version . '; Gengo/' . $gengo_version . '; ' . $base_url;
   }
+
+  /**
+   * Abort job on Gengo's side.
+   *
+   * @param int $gengo_job_id
+   *   Gengo job id.
+   *
+   * @return object
+   *   Gengo response data.
+   */
+  public function abortJob($gengo_job_id) {
+    return $this->delete('translate/job/' . $gengo_job_id);
+  }
+
 }
diff --git a/src/Plugin/tmgmt/Translator/MyGengoTranslator.php b/src/Plugin/tmgmt/Translator/MyGengoTranslator.php
index 4ad95e2..a2038db 100644
--- a/src/Plugin/tmgmt/Translator/MyGengoTranslator.php
+++ b/src/Plugin/tmgmt/Translator/MyGengoTranslator.php
@@ -21,6 +21,7 @@ use Drupal\Core\Url;
 use Drupal\tmgmt\Entity\JobItem;
 use Drupal\tmgmt\Entity\RemoteMapping;
 use Drupal\tmgmt\Translator\AvailableResult;
+use Drupal\tmgmt\JobItemInterface;
 
 /**
  * Gengo translation plugin controller.
@@ -430,7 +431,7 @@ class MyGengoTranslator extends TranslatorPluginBase implements ContainerFactory
    * @param \Drupal\tmgmt\Entity\Job $job
    *   Job that will be mapped to remote jobs.
    */
-  public function fetchGengoJobs(Job $job) {
+  public function fetchGengoJobs(Job $job, $save_translations = TRUE) {
     // Search for placeholder item.
     $remotes = RemoteMapping::loadByLocalData($job->id());
 
@@ -540,7 +541,9 @@ class MyGengoTranslator extends TranslatorPluginBase implements ContainerFactory
           $matching_remote->save();
         }
       }
-      $this->saveTranslation($job, $tjiid . '][' . $data_item_key, $response_job);
+      if ($save_translations) {
+        $this->saveTranslation($job, $tjiid . '][' . $data_item_key, $response_job);
+      }
     }
   }
 
@@ -557,4 +560,47 @@ class MyGengoTranslator extends TranslatorPluginBase implements ContainerFactory
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function abortTranslation(JobInterface $job) {
+    // Update the TMGMT jobs to Gengo jobs mapping.
+    $this->fetchGengoJobs($job, FALSE);
+
+    $count_aborted = 0;
+    $remotes = RemoteMapping::loadByLocalData($job->id());
+    // There is only 1 job item for each remotes.
+    /** @var JobItem $job_item */
+    $job_item = reset($remotes)->getJobItem();
+
+    if (!$job_item->isAborted()) {
+      // Loop on Gengo translation jobs.
+      foreach ($remotes as $remote) {
+        if (!empty($remote->remote_identifier_2->value)) {
+          try {
+            $connector = new GengoConnector($job->getTranslator(), $this->client);
+            $connector->abortJob($remote->remote_identifier_2->value);
+            $count_aborted++;
+          } catch (TMGMTException $e) {
+            // Nothing to do. The abortion count isn't incremented.
+          }
+        }
+      }
+
+      if ($count_aborted > 1) {
+        $job_item->addMessage('@count_aborted jobs out of @count_total have been aborted at Gengo.', array('@count_aborted' => $count_aborted, '@count_total' => count($remotes)));
+      }
+      else {
+        $job_item->addMessage('@count_aborted job out of @count_total has been aborted at Gengo.', array('@count_aborted' => $count_aborted, '@count_total' => count($remotes)));
+      }
+
+      // Abort the job item even if Gengo job(s) couldn't be aborted.
+      $job_item->setState(JobItemInterface::STATE_ABORTED, 'Aborted by user.');
+      $job_item->save();
+    }
+
+    // Abort the job in the current system.
+    return parent::abortTranslation($job);
+  }
+
 }
