diff --git a/sources/tmgmt_config/src/ConfigSourcePluginUi.php b/sources/tmgmt_config/src/ConfigSourcePluginUi.php
index 7ba9a08..a261ec5 100644
--- a/sources/tmgmt_config/src/ConfigSourcePluginUi.php
+++ b/sources/tmgmt_config/src/ConfigSourcePluginUi.php
@@ -139,9 +139,7 @@ class ConfigSourcePluginUi extends SourcePluginUiBase {
 
     $row = array(
       'id' => $entity->id(),
-      // If the entity type is FieldConfig, we list the field of the fieldable
-      // entity type which doesn't have a link.
-      'title' => $entity->url('edit-form') ? $entity->link($label) : $label,
+      'title' => $entity->link($label),
     );
 
     // Load entity translation specific data.
@@ -297,27 +295,18 @@ class ConfigSourcePluginUi extends SourcePluginUiBase {
         $item_id = $definition['id'];
         $items[$item_id]['label'] = $definition['title'];;
         $items[$item_id]['langcode'] = \Drupal::config($definition['names'][0])->get('langcode') ?: 'en';
-        $items[$item_id]['type'] = $type;
       }
     }
     else {
       $entity_type = \Drupal::entityManager()->getDefinition($type);
       $entity_ids = str_replace($entity_type->getConfigPrefix() . '.', '', array_filter($form_state->getValue('items')));
+
       $entities = entity_load_multiple($type, $entity_ids);
       foreach ($entities as $entity) {
         /* @var $entity \Drupal\Core\Entity\EntityInterface */
         $item_id = $entity->getConfigDependencyName();
         $items[$item_id]['label'] = $entity->label();
         $items[$item_id]['langcode'] = $entity->language()->getId();
-
-        // The type cannot be field_config, should be the id of the
-        // fieldable entity type.
-        if ($type == 'field_config') {
-          $items[$item_id]['type'] = $entity->get('entity_type') . '_fields';
-        }
-        else {
-          $items[$item_id]['type'] = $type;
-        }
       }
     }
     $source_lang_registry = array();
@@ -332,7 +321,7 @@ class ConfigSourcePluginUi extends SourcePluginUiBase {
           // Create new job.
           $job = tmgmt_job_create($source_lang, LanguageInterface::LANGCODE_NOT_SPECIFIED, \Drupal::currentUser()->id());
           // Add initial job item.
-          $job->addItem('config', $extra['type'], $id);
+          $job->addItem('config', $type, $id);
           // Add job identifier into registry
           $source_lang_registry[$source_lang] = $job->id();
           // Add newly created job into jobs queue.
@@ -341,7 +330,7 @@ class ConfigSourcePluginUi extends SourcePluginUiBase {
         // We have a job for given source lang, so just add new job item for the
         // existing job.
         else {
-          $jobs[$source_lang_registry[$source_lang]]->addItem('config', $extra['type'], $id);
+          $jobs[$source_lang_registry[$source_lang]]->addItem('config', $type, $id);
         }
       } catch (TMGMTException $e) {
         watchdog_exception('tmgmt', $e);
diff --git a/sources/tmgmt_config/src/Plugin/tmgmt/Source/ConfigSource.php b/sources/tmgmt_config/src/Plugin/tmgmt/Source/ConfigSource.php
index a8d6c70..242f206 100644
--- a/sources/tmgmt_config/src/Plugin/tmgmt/Source/ConfigSource.php
+++ b/sources/tmgmt_config/src/Plugin/tmgmt/Source/ConfigSource.php
@@ -126,7 +126,7 @@ class ConfigSource extends SourcePluginBase implements ContainerFactoryPluginInt
       $config_mapper = $this->configMapperManager->createInstance($job_item->getItemType());
 
       /** @var \Drupal\Core\Config\Entity\ConfigEntityTypeInterface $entity_type */
-      $entity_type = $this->entityManager->getDefinition($config_mapper->getType());
+      $entity_type = $this->entityManager->getDefinition($job_item->getItemType());
 
       $pos = strpos($job_item->getItemId(), $entity_type->getConfigPrefix());
       if (($pos !== FALSE)) {
@@ -136,7 +136,7 @@ class ConfigSource extends SourcePluginBase implements ContainerFactoryPluginInt
         throw new TMGMTException(t('Item ID does not contain the full config object name.'));
       }
 
-      $entity = $this->entityManager->getStorage($config_mapper->getType())->load($entity_id);
+      $entity = $this->entityManager->getStorage($job_item->getItemType())->load($entity_id);
       if (!$entity) {
         throw new TMGMTException(t('Unable to load entity %type with id %id', array('%type' => $job_item->getItemType(), '%id' => $entity_id)));
       }
@@ -298,9 +298,9 @@ class ConfigSource extends SourcePluginBase implements ContainerFactoryPluginInt
     $entity_types = $this->entityManager->getDefinitions();
     $definitions = $this->configMapperManager->getDefinitions();
     $types = array();
-    foreach ($definitions as $definition_name => $definition) {
-      if (isset($definition['entity_type'])) {
-        $types[$definition['entity_type']] = (string) $entity_types[$definition['entity_type']]->getLabel();
+    foreach ($entity_types as $entity_type_name => $entity_type) {
+      if (isset($definitions[$entity_type_name])) {
+        $types[$entity_type_name] = (string) $entity_type->getLabel();
       }
     }
     $types[static::SIMPLE_CONFIG] = t('Simple configuration');
diff --git a/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php b/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
index 10be384..7318dc6 100644
--- a/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
+++ b/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
@@ -24,7 +24,7 @@ class ConfigSourceListTest extends EntityTestBase {
    *
    * @var array
    */
-  public static $modules = array('tmgmt_config', 'tmgmt_content', 'config_translation', 'views', 'views_ui', 'field_ui');
+  public static $modules = array('tmgmt_config', 'tmgmt_content', 'config_translation', 'views', 'views_ui');
 
   protected $nodes = array();
 
@@ -330,21 +330,4 @@ class ConfigSourceListTest extends EntityTestBase {
     $this->assertEqual(count($this->xpath('//tbody/tr')), 1);
   }
 
-  /**
-   * Test for field configuration translation from source list.
-   */
-  function testFieldConfigList() {
-    $this->drupalGet('admin/tmgmt/sources/config/field_config');
-
-    // Test submission.
-    $this->drupalPostForm(NULL, array('items[field.field.node.article.body]' => TRUE), t('Request translation'));
-    $this->assertText(t('One job needs to be checked out.'));
-    $this->drupalPostForm(NULL, array(), t('Submit to translator'));
-
-    // Make sure that we're back on the originally defined destination URL.
-    $this->assertUrl('admin/tmgmt/sources/config/field_config');
-    $this->assertText(t('Test translation created.'));
-    $this->assertText(t('The translation of Body  to German is finished and can now be reviewed.'));
-  }
-
 }
diff --git a/sources/tmgmt_config/src/Tests/ConfigSourceUiTest.php b/sources/tmgmt_config/src/Tests/ConfigSourceUiTest.php
index 5474338..84e41a0 100644
--- a/sources/tmgmt_config/src/Tests/ConfigSourceUiTest.php
+++ b/sources/tmgmt_config/src/Tests/ConfigSourceUiTest.php
@@ -24,7 +24,7 @@ class ConfigSourceUiTest extends EntityTestBase {
    *
    * @var array
    */
-  public static $modules = array('tmgmt_config', 'views', 'views_ui', 'field_ui', 'config_translation');
+  public static $modules = array('tmgmt_config', 'views', 'views_ui', 'config_translation');
 
   /**
    * {@inheritdoc}
@@ -252,28 +252,6 @@ class ConfigSourceUiTest extends EntityTestBase {
   }
 
   /**
-   * Test the field config entity type for a single checkout.
-   */
-  function testFieldConfigTranslateTabSingleCheckout() {
-    $this->loginAsAdmin(array('translate configuration'));
-
-    // Go to the translate tab.
-    $this->drupalGet('admin/structure/types/manage/article/fields/node.article.body/translate');
-
-    // Request a german translation.
-    $this->drupalPostForm(NULL, array('languages[de]' => TRUE), t('Request translation'));
-
-    // Verify that we are on the checkout page.
-    $this->assertResponse(200);
-    $this->assertText(t('One job needs to be checked out.'));
-    $this->drupalPostForm(NULL, array(), t('Submit to translator'));
-
-    // Verify that the pending translation is shown.
-    $this->clickLink(t('Needs review'));
-    $this->drupalPostForm(NULL, array(), t('Save as completed'));
-
-  }
-  /**
    * Test the entity source specific cart functionality.
    */
   function testCart() {
diff --git a/src/Entity/Job.php b/src/Entity/Job.php
index 165843d..8c18b2c 100644
--- a/src/Entity/Job.php
+++ b/src/Entity/Job.php
@@ -18,6 +18,7 @@ use Drupal\Core\Session\AccountInterface;
 use Drupal\tmgmt\JobInterface;
 use Drupal\tmgmt\JobItemInterface;
 use Drupal\tmgmt\TMGMTException;
+use Drupal\tmgmt\Translator\TranslatableResult;
 use Drupal\user\EntityOwnerInterface;
 use Drupal\user\UserInterface;
 
@@ -518,10 +519,10 @@ class Job extends ContentEntityBase implements EntityOwnerInterface, JobInterfac
   public function canRequestTranslation() {
     if ($translator = $this->getTranslator()) {
       if ($translator->canTranslate($this)) {
-        return TRUE;
+        return TranslatableResult::yes();
       }
     }
-    return FALSE;
+    return TranslatableResult::no(t('Translation cant be requested.'));
   }
 
   /**
diff --git a/src/Entity/Translator.php b/src/Entity/Translator.php
index fdcc1f3..38b9ac1 100644
--- a/src/Entity/Translator.php
+++ b/src/Entity/Translator.php
@@ -13,6 +13,8 @@ use Drupal\Core\Cache\Cache;
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\tmgmt\JobInterface;
+use Drupal\tmgmt\Translator\AvailableResult;
+use Drupal\tmgmt\Translator\TranslatableResult;
 use Drupal\tmgmt\TranslatorInterface;
 
 /**
@@ -310,7 +312,7 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
     if ($plugin = $this->getPlugin()) {
       return $plugin->canTranslate($this, $job);
     }
-    return FALSE;
+    return TranslatableResult::no(t('The job cannot be translated.'));
   }
 
   /**
@@ -320,7 +322,11 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
     if ($plugin = $this->getPlugin()) {
       return $plugin->isAvailable($this);
     }
-    return FALSE;
+    return AvailableResult::no(t('@translator is not available. Make sure it is properly :configured.', [
+      '@translator' => $this->label(),
+      ':configured' => $this->link(t('configured')
+      )
+    ]));
   }
 
   /**
@@ -333,25 +339,6 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
     return FALSE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getNotAvailableReason() {
-    if ($plugin = $this->getPlugin()) {
-      return $plugin->getNotAvailableReason($this);
-    }
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNotCanTranslateReason(JobInterface $job) {
-    if ($plugin = $this->getPlugin()) {
-      return $plugin->getNotCanTranslateReason($job);
-    }
-    return FALSE;
-  }
 
   /**
    * {@inheritdoc}
diff --git a/src/Form/JobForm.php b/src/Form/JobForm.php
index c1670b1..778feea 100644
--- a/src/Form/JobForm.php
+++ b/src/Form/JobForm.php
@@ -17,6 +17,8 @@ use Drupal\Core\Url;
 use Drupal\tmgmt\Entity\Job;
 use Drupal\tmgmt\Entity\JobItem;
 use Drupal\tmgmt\JobInterface;
+use Drupal\tmgmt\Translator\AvailableResult;
+use Drupal\tmgmt\Translator\TranslatableResult;
 use Drupal\views\Views;
 
 /**
@@ -420,12 +422,14 @@ class JobForm extends TmgmtFormBase {
     // Load the selected translator.
     $translator = $job->getTranslator();
     // Check translator availability.
+    $available_status = $translator->isAvailable();
+    $translatable_status = $translator->canTranslate($job);
     if (!empty($translator)) {
-      if (!$translator->isAvailable()) {
-        $form_state->setErrorByName('translator', $translator->getNotAvailableReason());
+      if (!($available_status->getSuccess())) {
+        $form_state->setErrorByName('translator', $available_status->getMessage());
       }
-      elseif (!$translator->canTranslate($job)) {
-        $form_state->setErrorByName('translator', $translator->getNotCanTranslateReason($job));
+      elseif (!$translatable_status->getSuccess()) {
+        $form_state->setErrorByName('translator', $translatable_status->getMessage());
       }
     }
   }
@@ -497,12 +501,13 @@ class JobForm extends TmgmtFormBase {
       return $form;
     }
     $translator = $job->getTranslator();
-    if (!$translator->isAvailable()) {
-      $form['#description'] = Xss::filter($job->getTranslator()->getNotAvailableReason());
+    if (!$translator->isAvailable()->getSuccess()) {
+      $result = AvailableResult::no(t('@translator is not available. Make sure it is properly :configured.', array('@translator' => $translator->label(), ':configured' => $translator->link(t('configured')))));
+      $form['#description'] = Xss::filter($result->getMessage());
     }
     // @todo: if the target language is not defined, the check will not work if the first language in the list is not available.
-    elseif ($job->getTargetLangcode() && !$translator->canTranslate($job)) {
-      $form['#description'] = Xss::filter($job->getTranslator()->getNotCanTranslateReason($job));
+    elseif ($job->getTargetLangcode() && !$translator->canTranslate($job)->getSuccess()) {
+      $form['#description'] = Xss::filter($job->getTranslator()->canTranslate($job)->getMessage());
     }
     else {
       $plugin_ui = $this->translatorManager->createUIInstance($translator->getPluginId());
diff --git a/src/Form/TranslatorForm.php b/src/Form/TranslatorForm.php
index 9d8de19..cabb59c 100644
--- a/src/Form/TranslatorForm.php
+++ b/src/Form/TranslatorForm.php
@@ -143,7 +143,7 @@ class TranslatorForm extends EntityForm {
         '#required' => TRUE,
         '#disabled' => $busy,
         '#ajax' => array(
-          'callback' => array($this, 'ajaxTranslatorPluginSelect'),
+          'callback' => array($this, 'ajaxTranslaorPluginSelect'),
           'wrapper' => 'tmgmt-plugin-wrapper',
         ),
       );
@@ -257,7 +257,7 @@ class TranslatorForm extends EntityForm {
    * Ajax callback for loading the translator plugin settings form for the
    * currently selected translator plugin.
    */
-  function ajaxTranslatorPluginSelect(array $form, FormStateInterface $form_state) {
+  function ajaxTranslaorPluginSelect(array $form, FormStateInterface $form_state) {
     return $form['plugin_wrapper'];
   }
 
diff --git a/src/Tests/TMGMTUiTest.php b/src/Tests/TMGMTUiTest.php
index ee40229..b14191e 100644
--- a/src/Tests/TMGMTUiTest.php
+++ b/src/Tests/TMGMTUiTest.php
@@ -289,6 +289,13 @@ class TMGMTUiTest extends TMGMTTestBase {
     // Verify that we are on the submit job page.
     $this->drupalPostForm(NULL, array(), t('Submit to translator'));
 
+    // Test for Unavailable/Unconfigured Translators.
+    $this->default_translator->setSetting('action', 'not_translatable');
+    $this->default_translator->save();
+    $this->drupalGet('admin/tmgmt/jobs/' . $job->id());
+    $this->drupalPostForm(NULL, array(), t('Submit to translator'));
+    $this->assertText(t('Test translator (auto created) can not translate from English to German.'));
+
     // Login as administrator to delete a job.
     $this->loginAsAdmin();
     $this->drupalGet('admin/tmgmt/jobs');
diff --git a/src/Translator/AvailableResult.php b/src/Translator/AvailableResult.php
new file mode 100644
index 0000000..aec0f31
--- /dev/null
+++ b/src/Translator/AvailableResult.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\tmgmt\Translator\AvailableResult.
+ */
+
+namespace Drupal\tmgmt\Translator;
+
+use Drupal\tmgmt\TranslatorInterface;
+
+/**
+ * Class AvailableResult.
+ *
+ * @package Drupal\tmgmt\Translator
+ * @param TranslatorInterface $translator
+ *   The Translator entity that should handle the translation.
+ * @param \Drupal\tmgmt\JobInterface $job
+ *   The Job entity that should be translated.
+ */
+class AvailableResult extends TranslatorResult {
+}
diff --git a/src/Translator/TranslatableResult.php b/src/Translator/TranslatableResult.php
new file mode 100644
index 0000000..bc4f88a
--- /dev/null
+++ b/src/Translator/TranslatableResult.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\tmgmt\TranslatableResult.
+ */
+
+namespace Drupal\tmgmt\Translator;
+
+use Drupal\tmgmt\TranslatorInterface;
+use Drupal\tmgmt\JobInterface;
+
+/**
+ * Class AvailableResult.
+ *
+ * @package Drupal\tmgmt\Translator
+ *
+ * @param TranslatorInterface $translator
+ *   The Translator entity that should handle the translation.
+ * @param \Drupal\tmgmt\JobInterface $job
+ *   The Job entity that should be translated.
+ */
+class TranslatableResult extends TranslatorResult {
+}
diff --git a/src/Translator/TranslatorResult.php b/src/Translator/TranslatorResult.php
new file mode 100644
index 0000000..530678f
--- /dev/null
+++ b/src/Translator/TranslatorResult.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\tmgmt\TranslatorResult.
+ */
+
+namespace Drupal\tmgmt\Translator;
+
+/**
+ * TMGMT Translator Result abstract class.
+ */
+abstract class TranslatorResult {
+
+  /**
+   * TRUE or FALSE for response.
+   *
+   * @var boolean
+   */
+  protected static $success;
+
+  /**
+   * Message in case success is FALSE.
+   *
+   * @var string
+   */
+  protected static $message;
+
+  /**
+   * Returns the object message.
+   */
+  public function getMessage() {
+    $argumented_message = t(self::$message);
+    return $argumented_message;
+  }
+
+  /**
+   * Returns the object state on success.
+   */
+  public function getSuccess() {
+    return self::$success;
+  }
+
+  /**
+   * Sets the value success to FALSE and sets the $message accordingly.
+   *
+   * @param string $message
+   *   This is the value to be saved as message for object.
+   */
+  protected function setNo($message) {
+    self::$success = FALSE;
+    self::$message = $message;
+  }
+
+  /**
+   * Sets the value success to TRUE.
+   */
+  protected function setYes() {
+    self::$success = TRUE;
+  }
+
+  /**
+   * Returns the object with TRUE.
+   *
+   * @return \Drupal\tmgmt\Translator\TranslatorResult
+   *   This returns the instance of the object with desired values.
+   */
+  public static function yes() {
+    $result = new static();
+    $result->setYes();
+    return $result;
+  }
+
+  /**
+   * Returns the object with FALSE and a message.
+   *
+   * @return \Drupal\tmgmt\Translator\TranslatorResult
+   *   This returns the instance of the object with desired values.
+   */
+  public static function no($message) {
+    $result = new static();
+    $result->setNo($message);
+    return $result;
+  }
+}
diff --git a/src/TranslatorInterface.php b/src/TranslatorInterface.php
index 6379292..ee669be 100644
--- a/src/TranslatorInterface.php
+++ b/src/TranslatorInterface.php
@@ -140,7 +140,7 @@ interface TranslatorInterface extends ConfigEntityInterface {
    * @param \Drupal\tmgmt\JobInterface Job
    *   The Job entity that should be translated.
    *
-   * @return bool
+   * @return \Drupal\tmgmt\Translator\TranslatableResult
    *   TRUE if the job can be processed and translated, FALSE otherwise.
    */
   public function canTranslate(JobInterface $job);
@@ -148,7 +148,7 @@ interface TranslatorInterface extends ConfigEntityInterface {
   /**
    * Checks whether a translator is available.
    *
-   * @return bool
+   * @return \Drupal\tmgmt\Translator\AvailableResult
    *   TRUE if the translator plugin is available, FALSE otherwise.
    */
   public function isAvailable();
@@ -162,19 +162,6 @@ interface TranslatorInterface extends ConfigEntityInterface {
   public function hasCheckoutSettings(JobInterface $job);
 
   /**
-   * @todo Remove this once http://drupal.org/node/1420364 is done.
-   */
-  public function getNotAvailableReason();
-
-  /**
-   * @todo Remove this once http://drupal.org/node/1420364 is done.
-   *
-   * * @param \Drupal\tmgmt\JobInterface $job
-   *   The Job entity that should be translated.
-   */
-  public function getNotCanTranslateReason(JobInterface $job);
-
-  /**
    * Gets existing remote languages mappings.
    *
    * This method is responsible to provide all local to remote language pairs.
diff --git a/src/TranslatorPluginBase.php b/src/TranslatorPluginBase.php
index 2efd518..c98fe79 100644
--- a/src/TranslatorPluginBase.php
+++ b/src/TranslatorPluginBase.php
@@ -11,6 +11,8 @@ use Drupal\Component\Plugin\PluginBase;
 use Drupal\tmgmt\Entity\Job;
 use Drupal\tmgmt\Entity\JobItem;
 use Drupal\tmgmt\Entity\Translator;
+use Drupal\tmgmt\Translator\AvailableResult;
+use Drupal\tmgmt\Translator\TranslatableResult;
 
 /**
  * Default controller class for service plugins.
@@ -38,7 +40,7 @@ abstract class TranslatorPluginBase extends PluginBase implements TranslatorPlug
    */
   public function isAvailable(TranslatorInterface $translator) {
     // Assume that the translation service is always available.
-    return TRUE;
+    return AvailableResult::yes();
   }
 
   /**
@@ -46,12 +48,12 @@ abstract class TranslatorPluginBase extends PluginBase implements TranslatorPlug
    */
   public function canTranslate(TranslatorInterface $translator, JobInterface $job) {
     // The job is only translatable if the translator is available too.
-    if ($this->isAvailable($translator) && array_key_exists($job->getTargetLangcode(), $translator->getSupportedTargetLanguages($job->getSourceLangcode()))) {
+    if ($this->isAvailable($translator)->getSuccess() && array_key_exists($job->getTargetLangcode(), $translator->getSupportedTargetLanguages($job->getSourceLangcode()))) {
       // We can only translate this job if the target language of the job is in
       // one of the supported languages.
-      return TRUE;
+      return TranslatableResult::yes();
     }
-    return FALSE;
+    return TranslatableResult::no(t('@translator can not translate because is not available', array('@translator' => $translator->label())));
   }
 
   /**
@@ -109,20 +111,6 @@ abstract class TranslatorPluginBase extends PluginBase implements TranslatorPlug
   /**
    * {@inheritdoc}
    */
-  public function getNotCanTranslateReason(JobInterface $job) {
-    return t('@translator can not translate from @source to @target.', array('@translator' => $job->getTranslator()->label(), '@source' => $job->getSourceLanguage()->getName(), '@target' => $job->getTargetLanguage()->getName()));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNotAvailableReason(TranslatorInterface $translator) {
-    return t('@translator is not available. Make sure it is properly @configured.', array('@translator' => $this->pluginDefinition['label'], '@configured' => $translator->link(t('configured'))));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function defaultSettings() {
     $defaults = array('auto_accept' => FALSE);
     // Check if any default settings are defined in the plugin info.
diff --git a/src/TranslatorPluginInterface.php b/src/TranslatorPluginInterface.php
index 5f2047b..fefdfac 100644
--- a/src/TranslatorPluginInterface.php
+++ b/src/TranslatorPluginInterface.php
@@ -22,23 +22,11 @@ interface TranslatorPluginInterface extends PluginInspectionInterface {
    * @param TranslatorInterface $translator
    *   The translator entity.
    *
-   * @return bool
+   * @return \Drupal\tmgmt\Translator\AvailableResult
    *   TRUE if the translator plugin is available, FALSE otherwise.
    */
   public function isAvailable(TranslatorInterface $translator);
 
-  /**
-   * Return a reason why the translator is not available.
-   *
-   * @param TranslatorInterface $translator
-   *   The translator entity.
-   *
-   * Might be called when isAvailable() returns FALSE to get a reason that
-   * can be displayed to the user.
-   *
-   * @todo Remove this once http://drupal.org/node/1420364 is done.
-   */
-  public function getNotAvailableReason(TranslatorInterface $translator);
 
   /**
    * Check whether this service can handle a particular translation job.
@@ -48,25 +36,12 @@ interface TranslatorPluginInterface extends PluginInspectionInterface {
    * @param \Drupal\tmgmt\JobInterface $job
    *   The Job entity that should be translated.
    *
-   * @return bool
+   * @return \Drupal\tmgmt\Translator\TranslatableResult
    *   TRUE if the job can be processed and translated, FALSE otherwise.
    */
   public function canTranslate(TranslatorInterface $translator, JobInterface $job);
 
   /**
-   * Return a reason why the translator is not able to translate this job.
-   *
-   * @param \Drupal\tmgmt\JobInterface $job
-   *   The job entity.
-   *
-   * Might be called when canTranslate() returns FALSE to get a reason that
-   * can be displayed to the user.
-   *
-   * @todo Remove this once http://drupal.org/node/1420364 is done.
-   */
-  public function getNotCanTranslateReason(JobInterface $job);
-
-  /**
    * Specifies default mappings for local to remote language codes.
    *
    * This method can be used in case we know in advance what language codes are
diff --git a/tmgmt.module b/tmgmt.module
index 89d6b64..d06901b 100644
--- a/tmgmt.module
+++ b/tmgmt.module
@@ -8,7 +8,8 @@
 use Drupal\tmgmt\Entity\Job;
 use Drupal\tmgmt\Entity\Translator;
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\Xss;
+use Drupal\tmgmt\Translator\TranslatableResult;
+use Drupal\tmgmt\Translator\AvailableResult;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\tmgmt\Entity\JobItem;
@@ -388,7 +389,7 @@ function tmgmt_message_create($message = '', $variables = array(), $values = arr
 function tmgmt_translator_load_available($job) {
   $translators = Translator::loadMultiple();
   foreach ($translators as $name => $translator) {
-    if (!$translator->isAvailable() || (isset($job) && !$translator->canTranslate($job))) {
+    if (!$translator->isAvailable()->getSuccess() || (isset($job) && !$translator->canTranslate($job)->getSuccess())) {
       unset($translators[$name]);
     }
   }
@@ -465,10 +466,10 @@ function tmgmt_translator_labels() {
 function tmgmt_translator_labels_flagged($job = NULL) {
   $labels = array();
   foreach (Translator::loadMultiple() as $translator) {
-    if (!$translator->isAvailable()) {
+    if (!$translator->isAvailable()->getSuccess()) {
       $labels[$translator->id()] = t('@label (not available)', array('@label' => $translator->label()));
     }
-    elseif (isset($job) && !$translator->canTranslate($job)) {
+    elseif (isset($job) && !$translator->canTranslate($job)->getSuccess()) {
       $labels[$translator->id()] = t('@label (unsupported)', array('@label' => $translator->label()));
     }
     else {
diff --git a/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php b/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
index 9d6f6be..490971b 100644
--- a/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
+++ b/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
@@ -11,6 +11,7 @@ use Drupal\Core\Form\FormStateInterface;
 use Drupal\tmgmt\Entity\Translator;
 use Drupal\tmgmt\JobInterface;
 use Drupal\tmgmt\JobItemInterface;
+use Drupal\tmgmt\Translator\TranslatableResult;
 use Drupal\tmgmt\TranslatorInterface;
 use Drupal\tmgmt\TranslatorPluginBase;
 use Drupal\tmgmt\TranslatorRejectDataInterface;
@@ -99,7 +100,11 @@ class TestTranslator extends TranslatorPluginBase implements TranslatorRejectDat
    */
   function canTranslate(TranslatorInterface $translator, JobInterface $job) {
     if ($job->getSetting('action') == 'not_translatable') {
-      return FALSE;
+      return TranslatableResult::no(t('@translator can not translate from @source to @target.', array(
+        '@translator' => $job->getTranslator()->label(),
+        '@source' => $job->getSourceLanguage()->getName(),
+        '@target' => $job->getTargetLanguage()->getName()
+      )));
     }
     return parent::canTranslate($translator, $job);
   }
diff --git a/translators/tmgmt_file/src/Plugin/tmgmt/Translator/FileTranslator.php b/translators/tmgmt_file/src/Plugin/tmgmt/Translator/FileTranslator.php
index 3013e1e..cb479c7 100644
--- a/translators/tmgmt_file/src/Plugin/tmgmt/Translator/FileTranslator.php
+++ b/translators/tmgmt_file/src/Plugin/tmgmt/Translator/FileTranslator.php
@@ -8,6 +8,7 @@
 namespace Drupal\tmgmt_file\Plugin\tmgmt\Translator;
 
 use Drupal\tmgmt\JobInterface;
+use Drupal\tmgmt\Translator\TranslatableResult;
 use Drupal\tmgmt\TranslatorInterface;
 use Drupal\tmgmt\TranslatorPluginBase;
 
@@ -28,7 +29,7 @@ class FileTranslator extends TranslatorPluginBase {
    */
   public function canTranslate(TranslatorInterface $translator, JobInterface $job) {
     // Anything can be exported.
-    return TRUE;
+    return TranslatableResult::yes();
   }
 
   /**
