diff --git a/config/schema/ds.views.schema.yml b/config/schema/ds.views.schema.yml
index 696f54a3..aede0cce 100644
--- a/config/schema/ds.views.schema.yml
+++ b/config/schema/ds.views.schema.yml
@@ -72,3 +72,11 @@ ds_views_entity_row:
         switch:
           type: boolean
           label: 'Use the alternative view mode selected in the display settings tab.'
+    deltas_fieldset:
+      type: mapping
+      label: 'Delta fields'
+      mapping:
+        delta_fields:
+          sequence:
+            - type: string
+              label: 'Field wrapper'
diff --git a/ds.module b/ds.module
index c4c42120..224961f7 100644
--- a/ds.module
+++ b/ds.module
@@ -309,20 +309,30 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt
     if (isset($component['third_party_settings']['ds']) && !empty($component['third_party_settings']['ds']['ds_limit'])) {
       $limit = $component['third_party_settings']['ds']['ds_limit'];
       if (isset($build[$field]) && isset($build[$field]['#items'])) {
-        if ($limit === 'delta' && isset($entity->ds_delta) && isset($entity->ds_delta[$field])) {
-          $delta = $entity->ds_delta[$field];
-          $filtered_elements = Element::children($build['field']);
+        if ($limit === 'delta' && isset($build['#ds_delta']) && isset($build['#ds_delta'][$field])) {
+
+          // Get delta.
+          $delta = $build['#ds_delta'][$field];
+
+          // Remove caching for this entity as it otherwise won't work.
+          unset($build['#cache']);
+
+          $filtered_elements = Element::children($build[$field]);
           foreach ($filtered_elements as $filtered_element) {
             if ($filtered_element != $delta) {
-              unset($build[$field][$filtered_element]);
+              $build[$field][$filtered_element]['#access'] = FALSE;
             }
           }
         }
-        else {
+        elseif (is_numeric($limit)) {
+
+          // Remove caching for this entity as it otherwise won't work.
+          unset($build['#cache']);
+
           $filtered_elements = Element::children($build[$field]);
           $filtered_elements = array_slice($filtered_elements, $limit);
           foreach ($filtered_elements as $filtered_element) {
-            unset($build[$field][$filtered_element]);
+            $build[$field][$filtered_element]['#access'] = FALSE;
           }
         }
       }
@@ -350,7 +360,6 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt
         $field['settings'] = $field_values[$key]['settings'];
       }
 
-      /* @var $field_instance \Drupal\ds\Plugin\DsField\DsFieldInterface */
       $field_instance = Ds::getFieldInstance($key, $field, $entity, $view_mode, $display, $build);
       $field_value = $field_instance->build();
       $field_title = $field_instance->getTitle();
@@ -526,7 +535,7 @@ function ds_preprocess_ds_layout(&$variables) {
             ['clear' => TRUE]
           );
         }
-        list($key, $attribute_value) = explode('|', $replaced_attribute);
+        [$key, $attribute_value] = explode('|', $replaced_attribute);
         // Handle the class attribute as an array and others as strings.
         $key == 'class' ? $variables['attributes'][$key][] = $attribute_value : $variables['attributes'][$key] = $attribute_value;
       }
@@ -1020,7 +1029,7 @@ function ds_field_formatter_third_party_settings_form(FormatterInterface $plugin
       '#type' => 'textfield',
       '#title' => t('UI limit'),
       '#size' => 2,
-      '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta). Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."),
+      '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta).<br />Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."),
       '#default_value' => !empty($settings[$name]['ds_limit']) ? $settings[$name]['ds_limit'] : '',
     ];
   }
diff --git a/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php b/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php
index 9f31c716..9bcc7ac8 100644
--- a/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php
+++ b/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php
@@ -14,8 +14,11 @@ class CurrentLanguageRenderer extends RendererBase {
    *
    * @param \Drupal\views\ResultRow $row
    *   The result row.
+   *
+   * @return string
    */
   public function getLangcode(ResultRow $row) {
+    return $this->languageManager->getCurrentLanguage()->getId();
   }
 
 }
diff --git a/src/Plugin/views/Entity/Render/RendererBase.php b/src/Plugin/views/Entity/Render/RendererBase.php
index 25160f7e..c28368f6 100644
--- a/src/Plugin/views/Entity/Render/RendererBase.php
+++ b/src/Plugin/views/Entity/Render/RendererBase.php
@@ -3,6 +3,7 @@
 namespace Drupal\ds\Plugin\views\Entity\Render;
 
 use Drupal\views\Entity\Render\EntityTranslationRendererBase;
+use Drupal\views\ResultRow;
 
 /**
  * Renders entities in the current language.
@@ -17,12 +18,53 @@ abstract class RendererBase extends EntityTranslationRendererBase {
     $this->dsPreRender($result);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $row) {
+    $entity_id = $row->_entity->id();
+    $langcode = $this->getLangcode($row);
+    if (isset($this->build[$entity_id][$langcode])) {
+      $build = $this->build[$entity_id][$langcode];
+      $this->alterBuild($build, $row);
+      return $build;
+    }
+    return [];
+  }
+
+  /**
+   * Alter the build.
+   *
+   * @param $build
+   * @param $row
+   */
+  protected function alterBuild(&$build, $row) {
+    // Add row index. Remember that in case you want to use this, you will
+    // have to remove the cache for this build.
+    $build['#row_index'] = isset($row->index) ? $row->index : NULL;
+
+    // Delta fields.
+    $delta_fields = $this->view->rowPlugin->options['delta_fieldset']['delta_fields'];
+    if (!empty($delta_fields)) {
+      foreach ($delta_fields as $field) {
+        $field_name_delta = $field . '_delta';
+        if (isset($row->{$field_name_delta})) {
+          $build['#ds_delta'][$field] = $row->{$field_name_delta};
+        }
+      }
+    }
+  }
+
   /**
    * Pre renders all the Display Suite rows.
+   *
+   * @param array $result
+   * @param bool $translation
    */
   protected function dsPreRender(array $result, $translation = FALSE) {
     if ($result) {
-      // Get all entities which will be used to render in rows.
+
+      // Get the view builder to render this entity.
       $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->entityType->id());
 
       $i = 0;
@@ -33,7 +75,6 @@ abstract class RendererBase extends EntityTranslationRendererBase {
         $group_value_content = '';
         $entity = $row->_entity;
         $entity->view = $this->view;
-        $entity->row_index = isset($row->index) ? $row->index : NULL;
 
         /* @var $entity \Drupal\Core\Entity\EntityInterface */
         $entity_id = $entity->id();
@@ -68,12 +109,10 @@ abstract class RendererBase extends EntityTranslationRendererBase {
           $modules = \Drupal::moduleHandler()->getImplementations('ds_views_row_render_entity');
           foreach ($modules as $module) {
             if ($content = \Drupal::moduleHandler()->invoke($module, 'ds_views_row_render_entity', [$entity, $view_mode])) {
-              if (!$translation) {
-                $this->build[$entity_id] = $content;
-              }
-              else {
-                $this->build[$entity_id][$langcode] = $content;
+              if (!is_array($content)) {
+                $content = ['#markup' => $content];
               }
+              $this->build[$entity_id][$langcode] = $content;
               $rendered = TRUE;
             }
           }
@@ -89,22 +128,10 @@ abstract class RendererBase extends EntityTranslationRendererBase {
         \Drupal::moduleHandler()->alter('ds_views_view_mode', $view_mode, $context);
 
         if (!$rendered) {
-          if (!$translation) {
-            if (!empty($view_mode)) {
-              $this->build[$entity_id] = $view_builder->view($entity, $view_mode, $langcode);
-            }
-            else {
-              $this->build[$entity_id] = $view_builder->view($entity, 'full', $langcode);
-            }
-          }
-          else {
-            if (!empty($view_mode)) {
-              $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode);
-            }
-            else {
-              $this->build[$entity_id][$langcode] = $view_builder->view($entity, 'full', $langcode);
-            }
+          if (empty($view_mode)) {
+            $view_mode = 'full';
           }
+          $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode);
         }
 
         $context = [
@@ -121,7 +148,7 @@ abstract class RendererBase extends EntityTranslationRendererBase {
 
           // New way of creating the alias.
           if (strpos($group_field, '|') !== FALSE) {
-            list(, $ffield) = explode('|', $group_field);
+            [, $ffield] = explode('|', $group_field);
             if (isset($this->view->sort[$ffield]->realField)) {
               $group_field = $this->view->sort[$ffield]->tableAlias . '_' . $this->view->sort[$ffield]->realField;
             }
diff --git a/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php b/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php
index 759032f1..7d4bb7c4 100644
--- a/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php
+++ b/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php
@@ -6,7 +6,7 @@ use Drupal\views\Plugin\views\query\QueryPluginBase;
 use Drupal\views\ResultRow;
 
 /**
- * Renders entities in the current language.
+ * Renders entity translations in their row language.
  */
 class TranslationLanguageRenderer extends DefaultLanguageRenderer {
 
@@ -52,7 +52,13 @@ class TranslationLanguageRenderer extends DefaultLanguageRenderer {
   public function render(ResultRow $row) {
     $entity_id = $row->_entity->id();
     $langcode = $this->getLangcode($row);
-    return $this->build[$entity_id][$langcode];
+    if (isset($this->build[$entity_id][$langcode])) {
+      $build = $this->build[$entity_id][$langcode];
+      $this->alterBuild($build, $row);
+      return $build;
+    }
+
+    return [];
   }
 
   /**
diff --git a/src/Plugin/views/row/EntityRow.php b/src/Plugin/views/row/EntityRow.php
index 4107271a..88275a7d 100644
--- a/src/Plugin/views/row/EntityRow.php
+++ b/src/Plugin/views/row/EntityRow.php
@@ -18,6 +18,22 @@ use Drupal\views\Plugin\views\row\EntityRow as ViewsEntityRow;
  */
 class EntityRow extends ViewsEntityRow {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    parent::query();
+
+    $delta_fields = $this->options['delta_fieldset']['delta_fields'];
+    if (!empty($delta_fields)) {
+      foreach ($delta_fields as $field) {
+        $table_name = $this->entityTypeId . '__' . $field;
+        $field_name_delta = $field . '_delta';
+        $this->view->query->addField($table_name, 'delta', $field_name_delta);
+      }
+    }
+  }
+
   /**
    * Contains an array of render arrays, one for each rendered entity.
    *
@@ -57,6 +73,11 @@ class EntityRow extends ViewsEntityRow {
         'switch' => ['default' => FALSE, 'bool' => TRUE],
       ],
     ];
+    $options['delta_fieldset'] = [
+      'contains' => [
+        'delta_fields' => ['default' => []],
+      ],
+    ];
     return $options;
   }
 
@@ -167,6 +188,30 @@ class EntityRow extends ViewsEntityRow {
       $form['grouping_fieldset']['group']['#description'] = $this->t('Grouping is disabled because you do not have any sort fields.');
     }
 
+    // Delta fields.
+    $delta_fields = [];
+    $fields = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($this->entityTypeId);
+    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field */
+    foreach ($fields as $key => $field) {
+      if ($field->getCardinality() != 1) {
+        $delta_fields[$key] = $key;
+      }
+    }
+    $form['delta_fieldset'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Delta fields'),
+      '#collapsible' => TRUE,
+      '#collapsed' => empty($this->options['delta_fields']),
+    );
+    $form['delta_fieldset']['delta_fields'] = array(
+      '#type' => 'select',
+      '#title' => t('Select fields'),
+      '#description' => t('Select fields which "delta" value should be added to the result row. On the manage display of an entity you can decide to look for this delta value to only print that row.'),
+      '#options' => $delta_fields,
+      '#multiple' => TRUE,
+      '#default_value' => !empty($this->options['delta_fieldset']['delta_fields']) ? $this->options['delta_fieldset']['delta_fields'] : '',
+    );
+
     // Advanced function.
     $form['advanced_fieldset'] = [
       '#type' => 'details',
