diff --git a/sources/content/src/Plugin/tmgmt/Source/ContentEntitySource.php b/sources/content/src/Plugin/tmgmt/Source/ContentEntitySource.php
index a24d367..a72972b 100644
--- a/sources/content/src/Plugin/tmgmt/Source/ContentEntitySource.php
+++ b/sources/content/src/Plugin/tmgmt/Source/ContentEntitySource.php
@@ -91,6 +91,37 @@ class ContentEntitySource extends SourcePluginBase implements SourcePreviewInter
 
     $translation = $entity->getTranslation($job_item->getJob()->getSourceLangcode());
     $data = $this->extractTranslatableData($translation);
+    $entity_form_display = entity_get_form_display($job_item->getItemType(), $entity->bundle(), 'default');
+    uksort($data, function ($a, $b) use ($entity_form_display) {
+      $a_weight = NULL;
+      $b_weight = NULL;
+      // Get the weights.
+      if ($entity_form_display->getComponent($a) && !is_null($entity_form_display->getComponent($a)['weight'])) {
+        $a_weight = (int) $entity_form_display->getComponent($a)['weight'];
+      }
+      if ($entity_form_display->getComponent($b) && !is_null($entity_form_display->getComponent($b)['weight'])) {
+        $b_weight = (int) $entity_form_display->getComponent($b)['weight'];
+      }
+
+      // If neither field has a weight, sort alphabetically.
+      if ($a_weight === NULL && $b_weight === NULL) {
+        return ($a > $b) ? 1 : -1;
+      }
+      // If one of them has no weight, the other comes first.
+      elseif ($a_weight === NULL) {
+        return 1;
+      }
+      elseif ($b_weight === NULL) {
+        return -1;
+      }
+      // If both have a weight, sort by weight.
+      elseif ($a_weight == $b_weight) {
+        return 0;
+      }
+      else {
+        return ($a_weight > $b_weight) ? 1 : -1;
+      }
+    });
     return $data;
   }
 
diff --git a/sources/content/src/Tests/ContentEntitySourceUiTest.php b/sources/content/src/Tests/ContentEntitySourceUiTest.php
index 73475c7..bec8b9b 100644
--- a/sources/content/src/Tests/ContentEntitySourceUiTest.php
+++ b/sources/content/src/Tests/ContentEntitySourceUiTest.php
@@ -783,4 +783,93 @@ class ContentEntitySourceUiTest extends EntityTestBase {
     $this->assertText($updated_body, 'Source updated correctly.');
   }
 
+  /**
+   * Test consider field sequences.
+   */
+  public function testConsiderFieldSequences() {
+    $this->createNodeType('article1', 'Article 1', TRUE, FALSE);
+
+    for ($i = 0; $i <= 5; $i++) {
+      // Create a field.
+      $field_storage = FieldStorageConfig::create(array(
+        'field_name' => 'field_' . $i,
+        'entity_type' => 'node',
+        'type' => 'text',
+        'cardinality' => mt_rand(1, 5),
+        'translatable' => TRUE,
+      ));
+      $field_storage->save();
+
+      // Create an instance of the previously created field.
+      $field = FieldConfig::create(array(
+        'field_name' => 'field_' . $i,
+        'entity_type' => 'node',
+        'bundle' => 'article1',
+        'label' => 'Field' . $i,
+        'description' => $this->randomString(30),
+        'widget' => array(
+          'type' => 'text',
+          'label' => $this->randomString(10),
+        ),
+      ));
+      $field->save();
+      $this->field_names['node']['article1'][] = 'field_' . $i;
+    }
+
+    $node = $this->createTranslatableNode('article1', 'en');
+
+    entity_get_form_display('node', 'article1', 'default')
+      ->setComponent('body', array(
+        'type' => 'text_textarea_with_summary',
+        'weight' => 0,
+      ))
+      ->setComponent('title', array(
+        'type' => 'string_textfield',
+        'weight' => 1,
+      ))
+      ->setComponent('field_1', array(
+        'type' => 'string_textfield',
+        'weight' => 2,
+      ))
+      ->setComponent('field_2', array(
+        'type' => 'string_textfield',
+        'weight' => 5,
+      ))
+      ->setComponent('field_0', array(
+        'type' => 'string_textfield',
+        'weight' => 6,
+      ))
+      ->setComponent('field_4', array(
+        'type' => 'string_textfield',
+        'weight' => 7,
+      ))
+      ->save();
+
+    $job = $this->createJob('en', 'de');
+    $job->translator = $this->default_translator->id();
+    $job->addItem('content', $node->getEntityTypeId(), $node->id());
+    $job->save();
+
+    $job->requestTranslation();
+
+    // Visit job item review page.
+    $this->drupalGet(URL::fromRoute('entity.tmgmt_job_item.canonical', ['tmgmt_job_item' => $node->id()]));
+    $review_elements = $this->xpath('//*[@id="edit-review"]/div');
+
+    $ids = [];
+    foreach ($review_elements as $review_element) {
+      $ids[] = (string) $review_element['id'];
+    }
+    // Check are fields showing on page in desired order. Field 3 and 5 have
+    // no weight set and are expected to be ordered alphabetically, at the end.
+    $this->assertEqual($ids[0], 'tmgmt-ui-element-body-wrapper');
+    $this->assertEqual($ids[1], 'tmgmt-ui-element-title-wrapper');
+    $this->assertEqual($ids[2], 'tmgmt-ui-element-field-1-wrapper');
+    $this->assertEqual($ids[3], 'tmgmt-ui-element-field-2-wrapper');
+    $this->assertEqual($ids[4], 'tmgmt-ui-element-field-0-wrapper');
+    $this->assertEqual($ids[5], 'tmgmt-ui-element-field-4-wrapper');
+    $this->assertEqual($ids[6], 'tmgmt-ui-element-field-3-wrapper');
+    $this->assertEqual($ids[7], 'tmgmt-ui-element-field-5-wrapper');
+  }
+
 }
diff --git a/translators/tmgmt_local/src/Form/LocalTaskItemForm.php b/translators/tmgmt_local/src/Form/LocalTaskItemForm.php
index d3109a8..a06cb15 100644
--- a/translators/tmgmt_local/src/Form/LocalTaskItemForm.php
+++ b/translators/tmgmt_local/src/Form/LocalTaskItemForm.php
@@ -132,8 +132,7 @@ class LocalTaskItemForm extends ContentEntityForm {
     // Need to keep the first hierarchy. So flatten must take place inside
     // of the foreach loop.
     $zebra = 'even';
-    // Reverse the order to get the correct order.
-    foreach (array_reverse(Element::children($data)) as $key) {
+    foreach (Element::children($data) as $key) {
       $flattened = \Drupal::service('tmgmt.data')->flatten($data[$key], $key);
       $form['translation'][$key] = $this->formElement($flattened, $task_item, $zebra);
     }
diff --git a/translators/tmgmt_local/src/Tests/LocalTranslatorTest.php b/translators/tmgmt_local/src/Tests/LocalTranslatorTest.php
index 59489e4..183129c 100755
--- a/translators/tmgmt_local/src/Tests/LocalTranslatorTest.php
+++ b/translators/tmgmt_local/src/Tests/LocalTranslatorTest.php
@@ -154,16 +154,26 @@ class LocalTranslatorTest extends LocalTranslatorTestBase {
     $job = $this->createJob();
     $job->translator = $translator->id();
     $job->addItem('test_source', 'test', '1');
-    \Drupal::state()->set('tmgmt.test_source_data', array(
-      'dummy' => array(
-        'deep_nesting' => array(
+    \Drupal::state()->set('tmgmt.test_source_data', [
+      'dummy' => [
+        'deep_nesting' => [
           '#text' => file_get_contents(drupal_get_path('module', 'tmgmt') . '/tests/testing_html/sample.html'),
           '#label' => 'Label for job item with type test and id 2.',
           '#translate' => TRUE,
           '#format' => 'basic_html',
-        ),
-      ),
-    ));
+        ],
+      ],
+      'second' => [
+        '#text' => 'second text',
+        '#label' => 'Second label',
+        '#translate' => TRUE,
+      ],
+      'third' => [
+        '#text' => 'third text',
+        '#label' => 'Third label',
+        '#translate' => TRUE,
+      ],
+    ]);
     $job->addItem('test_source', 'test', '2');
     $job->save();
 
@@ -447,6 +457,18 @@ class LocalTranslatorTest extends LocalTranslatorTestBase {
     $this->drupalGet('translate/items/' . $second_task_item->id());
     $xpath = $this->xpath('//*[@id="edit-dummydeep-nesting-translation-format-guidelines"]/div')[0];
     $this->assertEqual($xpath[0]->h4[0], t('Basic HTML'));
+
+    // Assert the order of the displayed elements.
+    $translate_elements = $this->xpath('//*[@id="edit-translation"]/table');
+
+    $ids = [];
+    foreach ($translate_elements as $translate_element) {
+      $ids[] = (string) $translate_element['id'];
+    }
+    $this->assertEqual($ids[0], 'tmgmt-local-element-dummy-deep-nesting');
+    $this->assertEqual($ids[1], 'tmgmt-local-element-second');
+    $this->assertEqual($ids[2], 'tmgmt-local-element-third');
+
     $edit = array(
       'dummy|deep_nesting[translation][value]' => $translation2 = 'German translation of source 2',
     );
@@ -491,7 +513,11 @@ class LocalTranslatorTest extends LocalTranslatorTestBase {
     // Mark the second item as completed now.
     $this->clickLink(t('View'));
     $this->clickLink(t('Translate'));
-    $this->drupalPostForm(NULL, array(), t('Save as completed'));
+    $remaining_translations = [
+      'second[translation]' => 'Third translation',
+      'third[translation]' => 'Third translation',
+    ];
+    $this->drupalPostForm(NULL, $remaining_translations, t('Save as completed'));
     $this->assertText('The translation for ' . $second_task_item->label() . ' has been saved as completed.');
     $this->clickLink('View');
 
