diff --git a/src/Entity/Job.php b/src/Entity/Job.php
index 48feca2..3e88a45 100644
--- a/src/Entity/Job.php
+++ b/src/Entity/Job.php
@@ -403,10 +403,22 @@ class Job extends ContentEntityBase implements EntityOwnerInterface, JobInterfac
    * {@inheritdoc}
    */
   public function getTranslator() {
-    if ($this->translator->target_id) {
+    if ($this->hasTranslator()) {
       return $this->translator->entity;
+    } else {
+      throw new TMGMTException('Cannot get the translator.');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function hasTranslator() {
+    if ($this->translator->target_id && $this->translator->entity->hasPlugin()) {
+      return TRUE;
+    } else {
+      return FALSE;
     }
-    return FALSE;
   }
 
   /**
diff --git a/src/Entity/Translator.php b/src/Entity/Translator.php
index 22316e8..a1517bc 100644
--- a/src/Entity/Translator.php
+++ b/src/Entity/Translator.php
@@ -219,17 +219,22 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
   }
 
   /**
+ * {@inheritdoc}
+ */
+  public function getPlugin() {
+    return \Drupal::service('plugin.manager.tmgmt.translator')->createInstance($this->plugin);
+  }
+
+  /**
    * {@inheritdoc}
    */
-  public function getPlugin() {
-    try {
-      if (!empty($this->plugin)) {
-        return \Drupal::service('plugin.manager.tmgmt.translator')->createInstance($this->plugin);
-      }
+  public function hasPlugin() {
+    if (!empty($this->plugin) && \Drupal::service('plugin.manager.tmgmt.translator')->hasDefinition($this->plugin)) {
+      return TRUE;
     }
-    catch (PluginException $e) {
+    else {
+      return FALSE;
     }
-    return FALSE;
   }
 
   /**
diff --git a/src/Form/TranslatorForm.php b/src/Form/TranslatorForm.php
index bf6b46a..34315a0 100644
--- a/src/Form/TranslatorForm.php
+++ b/src/Form/TranslatorForm.php
@@ -23,6 +23,11 @@ use Drupal\Core\Render\Element;
 class TranslatorForm extends EntityForm {
 
   /**
+   * @var \Drupal\tmgmt\TranslatorInterface
+   */
+  protected $entity;
+
+  /**
    * Translator plugin manager.
    *
    * @var \Drupal\tmgmt\TranslatorManager
@@ -72,8 +77,7 @@ class TranslatorForm extends EntityForm {
     $available = $this->translatorManager->getLabels();
     // If the translator plugin is not set, pick the first available plugin as the
     // default.
-    $plugin_id = $entity->getPlugin();
-    if (empty($plugin_id)) {
+    if (!($entity->hasPlugin())) {
       $entity->setPluginID(key($available));
     }
     $form['label'] = array(
diff --git a/src/JobInterface.php b/src/JobInterface.php
index 33360ec..e09b1ca 100644
--- a/src/JobInterface.php
+++ b/src/JobInterface.php
@@ -244,11 +244,22 @@ interface JobInterface extends ContentEntityInterface, EntityOwnerInterface {
    * Returns the translator for this job.
    *
    * @return Translator
-   *   The translator entity or NULL if there is none.
+   *   The translator entity.
+   *
+   * @throws TMGMTException
+   *   Throws an exception.
    */
   public function getTranslator();
 
   /**
+   * Checks if the translator and the plugin exist.
+   *
+   * @return boolean
+   *   True if exists, false otherwise.
+   */
+  public function hasTranslator();
+
+  /**
    * Returns the state of the job. Can be one of the job state constants.
    *
    * @return int
diff --git a/src/TranslatorInterface.php b/src/TranslatorInterface.php
index 2dce386..45820a6 100644
--- a/src/TranslatorInterface.php
+++ b/src/TranslatorInterface.php
@@ -97,6 +97,14 @@ interface TranslatorInterface extends ConfigEntityInterface {
   public function getPlugin();
 
   /**
+   * Checks if the translator plugin of this translator exists.
+   *
+   * @return bool
+   *   Returns true if it exists, false otherwise.
+   */
+  public function hasPlugin();
+
+  /**
    * Returns the supported target languages for this translator.
    *
    * @param string $source_language
diff --git a/tmgmt.module b/tmgmt.module
index 7ff9478..9da1287 100644
--- a/tmgmt.module
+++ b/tmgmt.module
@@ -401,7 +401,7 @@ function tmgmt_translator_load_available($job) {
 /**
  * Checks whether a translator with a certain name is busy and therefore can't
  * be modified or deleted. A translator is considered 'busy' if there are jobs
- * attached to it that are in an active state.
+ * attached to it that are in any state.
  *
  * @param $translator
  *   The machine-readable name of a translator.
@@ -411,7 +411,6 @@ function tmgmt_translator_load_available($job) {
  */
 function tmgmt_translator_busy($translator) {
   return (bool) \Drupal::entityQuery('tmgmt_job')
-    ->condition('state', Job::STATE_ACTIVE)
     ->condition('translator', $translator)
     ->range(0, 1)
     ->count()
@@ -592,7 +591,7 @@ function tmgmt_job_needs_checkout_form(JobInterface $job) {
     return TRUE;
   }
   // If no translator is pre-selected, try to pick one automatically.
-  if (!$job->getTranslator()) {
+  if (!$job->hasTranslator()) {
     // If there is more than a single translator available or if there are no
     // translators available at all checkout is mandatory.
     $translators = tmgmt_translator_load_available($job);
