diff --git a/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php b/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
index 92a7987..f1b52c9 100644
--- a/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
+++ b/sources/tmgmt_config/src/Tests/ConfigSourceListTest.php
@@ -85,6 +85,7 @@ class ConfigSourceListTest extends EntityTestBase {
     // This is still one job, unlike when selecting more languages.
     $this->assertText(t('One job needs to be checked out.'));
     $this->assertText(t('Article content type and 1 more (English to ?, Unprocessed)'));
+    $this->assertText(t('1 item conflict with pending item and will be dropped on submission.'));
 
     // Submit.
     $this->drupalPostForm(NULL, array(), t('Submit to provider'));
@@ -93,7 +94,7 @@ class ConfigSourceListTest extends EntityTestBase {
     $this->assertUrl('admin/tmgmt/sources/config/node_type');
 
     $this->assertText(t('Test translation created.'));
-    $this->assertText(t('The translation of Article content type to German is finished and can now be reviewed.'));
+    $this->assertNoText(t('The translation of Article content type to German is finished and can now be reviewed.'));
     $this->assertText(t('The translation of Page content type to German is finished and can now be reviewed.'));
   }
 
@@ -136,6 +137,7 @@ class ConfigSourceListTest extends EntityTestBase {
     // Verify that we are on the translate tab.
     $this->assertText(t('One job needs to be checked out.'));
     $this->assertText(t('Archive view and 3 more (English to ?, Unprocessed)'));
+    $this->assertText(t('1 item conflict with pending item and will be dropped on submission.'));
 
     // Submit.
     $this->drupalPostForm(NULL, array(), t('Submit to provider'));
@@ -144,7 +146,7 @@ class ConfigSourceListTest extends EntityTestBase {
     $this->assertUrl('admin/tmgmt/sources/config/view');
 
     $this->assertText(t('Test translation created.'));
-    $this->assertText(t('The translation of Archive view to German is finished and can now be reviewed.'));
+    $this->assertNoText(t('The translation of Archive view to German is finished and can now be reviewed.'));
     $this->assertText(t('The translation of Recent content view to German is finished and can now be reviewed.'));
     $this->assertText(t('The translation of Content view to German is finished and can now be reviewed.'));
     $this->assertText(t('The translation of Job overview view to German is finished and can now be reviewed.'));
diff --git a/src/Form/JobForm.php b/src/Form/JobForm.php
index 7e61e67..9fc884e 100644
--- a/src/Form/JobForm.php
+++ b/src/Form/JobForm.php
@@ -7,8 +7,8 @@
 
 namespace Drupal\tmgmt\Form;
 
-use Drupal\Component\Utility\Html;
 use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\InvokeCommand;
 use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -56,10 +56,14 @@ class JobForm extends TmgmtFormBase {
 
     $source = $job->getSourceLanguage() ? $job->getSourceLanguage()->getName() : '?';
     if (!$job->getTargetLangcode() || $job->getTargetLangcode() == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
+      $form_state->set('check_target_language', 'und');
       $job->target_language = key($available['target_language']);
       $target = '?';
     }
     else {
+      if($form_state->get('check_target_language') == FALSE) {
+        $form_state->set('check_target_language', $job->getTargetLangcode());
+      }
       $target = $job->getTargetLanguage()->getName();
     }
 
@@ -208,6 +212,21 @@ class JobForm extends TmgmtFormBase {
       );
     }
 
+    if(!$job->isContinuous()) {
+      // Checkout whether given source already has items in translation.
+      $num_of_existing_items = count($this->checkoutExistingItems($form_state->get('check_target_language')));
+      $form['message'] = array(
+        '#type' => 'html_tag',
+        '#tag' => 'div',
+        '#value' => \Drupal::translation()->formatPlural($num_of_existing_items, '1 item conflict with pending item and will be dropped on submission.', '@count items conflict with pending items and will be dropped on submission.'),
+        '#prefix' => '<div class="messages existing_items messages--warning hidden">',
+        '#suffix' => '</div>',
+      );
+      if ($num_of_existing_items) {
+        $form['message']['#prefix'] = '<div class="messages existing_items messages--warning">';
+      }
+    }
+
     // Display created time only for jobs that are not new anymore.
     if (!$job->isUnprocessed() && !$job->isContinuousActive()) {
       $form['info']['created'] = array(
@@ -416,6 +435,7 @@ class JobForm extends TmgmtFormBase {
     }
 
     $form['#attached']['library'][] = 'tmgmt/admin';
+
     return $form;
   }
 
@@ -525,6 +545,17 @@ class JobForm extends TmgmtFormBase {
    * Overrides Drupal\Core\Entity\EntityForm::save().
    */
   public function save(array $form, FormStateInterface $form_state) {
+
+    $job = $this->entity;
+    if(!$job->isContinuous()) {
+      $ids_of_existing_items = $this->checkoutExistingItems($form_state->get('check_target_language'));
+      if ($ids_of_existing_items) {
+        entity_delete_multiple('tmgmt_job_item', $ids_of_existing_items);
+        $num_of_items = count($ids_of_existing_items);
+        drupal_set_message(\Drupal::translation()->formatPlural($num_of_items, '1 conflicting item have been dropped.', '@count conflicting items have been dropped.'));
+      }
+    }
+
     parent::save($form, $form_state);
 
     // Everything below this line is only invoked if the 'Submit to provider'
@@ -607,10 +638,18 @@ class JobForm extends TmgmtFormBase {
    * target / source language dropdowns.
    */
   public function ajaxLanguageSelect(array $form, FormStateInterface $form_state) {
+    $number_of_existing_items = count($this->checkoutExistingItems($form_state->get('check_target_language')));
     $replace = $form_state->getUserInput()['_triggering_element_name'] == 'source_language' ? 'target_language' : 'source_language';
     $response = new AjaxResponse();
     $response->addCommand(new ReplaceCommand('#tmgmt-ui-translator-wrapper', $form['translator_wrapper']));
     $response->addCommand(new ReplaceCommand('#tmgmt-ui-' . str_replace('_', '-', $replace), $form['info'][$replace]));
+    if ($number_of_existing_items) {
+      $response->addCommand(new InvokeCommand('.existing_items', 'removeClass', array('hidden')));
+      $response->addCommand(new ReplaceCommand('.existing_items > div', \Drupal::translation()->formatPlural($number_of_existing_items, '1 item conflict with pending item and will be dropped on submission.', '@count items conflict with pending items and will be dropped on submission.')));
+    }
+    else {
+      $response->addCommand(new InvokeCommand('.existing_items', 'addClass', array('hidden')));
+    }
     return $response;
   }
 
@@ -622,6 +661,37 @@ class JobForm extends TmgmtFormBase {
   }
 
   /**
+   * Helper function for retrieving number of existing items.
+   */
+  function checkoutExistingItems($check_target_language) {
+    $job = $this->entity;
+    $items = $job->getItems();
+    $latest_items_of_chosen_source = array();
+    $ids_of_existing_items = array();
+    if ($check_target_language == FALSE || $check_target_language != $job->getTargetLangcode()) {
+      foreach ($items as $item) {
+        $latest_items_of_chosen_source[$item->id()] = tmgmt_job_item_load_latest($item->getPlugin(), $item->getItemType(), $item->getItemId(), $job->getSourceLangcode());
+      }
+      foreach ($latest_items_of_chosen_source as $key => $item) {
+        if ($item && array_key_exists($job->getTargetLangcode(), $item)) {
+          $ids_of_existing_items[] = $key;
+        }
+      }
+    }
+    else {
+      foreach ($items as $item) {
+        $latest_items_of_chosen_source[$item->id()] = tmgmt_job_item_load_penultimate($item->getPlugin(), $item->getItemType(), $item->getItemId(), $job->getSourceLangcode(), $job->getTargetLangcode());
+      }
+      foreach ($latest_items_of_chosen_source as $key => $item) {
+        if ($item && array_key_exists($job->getTargetLangcode(), $item)) {
+          $ids_of_existing_items[] = $key;
+        }
+      }
+    }
+    return $ids_of_existing_items;
+  }
+
+  /**
    * Adds selected suggestions to the job.
    */
   function addSuggestionsSubmit(array $form, FormStateInterface $form_state) {
diff --git a/tmgmt.module b/tmgmt.module
index deb0792..e27c428 100644
--- a/tmgmt.module
+++ b/tmgmt.module
@@ -177,6 +177,50 @@ function tmgmt_job_item_load_latest($plugin, $item_type, $item_id, $source_langu
 }
 
 /**
+  * Loads penultimate active job entities that have a job item with the identifiers.
+  *
+  * @param $plugin
+  *   The source plugin.
+  * @param $item_type
+  *   The source item type.
+  * @param $item_id
+  *   The source item id.
+  * @param string $source_language
+  *   The source language of the item.
+  * @param string $target_language
+  *   The target language of the item.
+  *
+  * @return array
+  *   An array of job entities.
+  */
+function tmgmt_job_item_load_penultimate($plugin, $item_type, $item_id, $source_language, $target_language) {
+  $query = db_select('tmgmt_job_item', 'tji');
+  $query->innerJoin('tmgmt_job', 'tj', 'tj.tjid = tji.tjid');
+  $result = $query->condition('tj.source_language', $source_language)
+    ->condition('tj.target_language', $target_language)
+    // Only query for jobs that are currently active.
+    ->condition('tj.state', [Job::STATE_UNPROCESSED, Job::STATE_ACTIVE, Job::STATE_CONTINUOUS], 'IN')
+    // And only query for job items that are not yet finished.
+    ->condition('tji.state', JobItem::STATE_ACCEPTED, '<>')
+    ->condition('tji.plugin', $plugin)
+    ->condition('tji.item_type', $item_type)
+    ->condition('tji.item_id', $item_id)
+    ->fields('tji', array('tjiid'))
+    ->fields('tj', array('target_language'))
+    ->orderBy('tji.changed', 'DESC')
+    ->range(1, 1)
+    ->execute();
+  if ($items = $result->fetchAllKeyed()) {
+    $return = array();
+    foreach (JobItem::loadMultiple(array_keys($items)) as $key => $item) {
+      $return[$items[$key]] = $item;
+    }
+    return $return;
+  }
+  return FALSE;
+}
+
+/**
  * Loads all latest job entities that have a job item with the identifiers.
  *
  * @param $plugin
