diff --git a/field_multiple_limit.module b/field_multiple_limit.module
index dfb8acb..84fddb1 100644
--- a/field_multiple_limit.module
+++ b/field_multiple_limit.module
@@ -6,11 +6,7 @@
  * multi-value fields.
  */
 
-/**
- * @todo how will this work with HTML5 number inputs?
- *  can we deprecate it?
- */
-define('FIELD_MULTIPLE_LIMIT_ALL', -1);
+use Drupal\Core\Render\Element;
 
 
 /**
@@ -18,19 +14,19 @@ define('FIELD_MULTIPLE_LIMIT_ALL', -1);
  */
 function field_multiple_limit_field_formatter_settings_summary_alter(&$summary, $context) {
 
-  if ($context['field_definition']->isMultiple()) {
+  if ($context['field_definition']->getFieldStorageDefinition()->isMultiple()) {
 
     // Only display count + offset if the limit_values is TRUE
-    if ($context['formatter']->getThirdPartySetting('field_multiple_limit', 'limit_values')) { 
+    if ($context['formatter']->getThirdPartySetting('field_multiple_limit', 'limit_values')) {
 
       $count = $context['formatter']->getThirdPartySetting('field_multiple_limit', 'count');
       if (!empty($count)) {
-        $summary[] = format_plural($count, 'Display 1 value', 'Display @count values');
+        $summary[] = \Drupal::translation()->formatPlural($count, 'Display 1 value', 'Display @count values');
       }
 
       $offset = $context['formatter']->getThirdPartySetting('field_multiple_limit', 'offset');
       if (!empty($offset)) {
-        $summary[] = format_plural($offset, 'Skip 1 value', 'Skip @count values');
+        $summary[] = \Drupal::translation()->formatPlural($offset, 'Skip 1 value', 'Skip @count values');
       }
     }
   }
@@ -38,32 +34,39 @@ function field_multiple_limit_field_formatter_settings_summary_alter(&$summary,
 
 /**
  * Implements hook_field_formatter_third_party_settings_form().
- * 
- * Targets multivalued fields only.
- *
- * @todo #states property for the limit + offset, depending on the new boolean.
- *
  */
 function field_multiple_limit_field_formatter_third_party_settings_form(\Drupal\Core\Field\FormatterInterface $plugin, \Drupal\Core\Field\FieldDefinitionInterface $field_definition, $view_mode, $form, \Drupal\Core\Form\FormStateInterface $form_state) {
 
-  if ($field_definition->isMultiple()) {
+  // Targets multivalued fields only.
+  if ($field_definition->getFieldStorageDefinition()->isMultiple()) {
     $element['limit_values'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Limit the number of values to display'),
-      '#default_value' => $plugin->getThirdPartySetting('field_multiple_limit', 'limit_values'),
+      '#type'           => 'checkbox',
+      '#title'          => t('Limit the number of values to display'),
+      '#default_value'  => $plugin->getThirdPartySetting('field_multiple_limit', 'limit_values'),
     );
+    $inputName = 'fields['.$field_definition->getName().'][settings_edit_form][third_party_settings][field_multiple_limit][limit_values]';
 
     $element['count'] = array(
-      '#type' => 'number',
-      '#title' => t('Number of values to display'),
-      '#min' => 1,
-      '#default_value' => $plugin->getThirdPartySetting('field_multiple_limit', 'count'),
+      '#type'           => 'number',
+      '#title'          => t('Number of values to display'),
+      '#min'            => 1,
+      '#default_value'  => $plugin->getThirdPartySetting('field_multiple_limit', 'count'),
+      '#states'         => array(
+        'visible' => array(
+          ':input[name="'.$inputName.'"]' => array('checked' => TRUE),
+        ),
+      ),
     );
     $element['offset'] = array(
-      '#type' => 'number',
-      '#title' => t('Number of values to skip'),
-      '#min' => 0,
-      '#default_value' => $plugin->getThirdPartySetting('field_multiple_limit', 'offset'),
+      '#type'           => 'number',
+      '#title'          => t('Number of values to skip'),
+      '#min'            => 0,
+      '#default_value'  => $plugin->getThirdPartySetting('field_multiple_limit', 'offset'),
+      '#states'         => array(
+        'visible' => array(
+          ':input[name="'.$inputName.'"]' => array('checked' => TRUE),
+        ),
+      ),
     );
     return $element;
   }
@@ -102,3 +105,36 @@ function field_multiple_limit_field_attach_view_alter(&$output, $context) {
     }
   }
 }
+
+/**
+ * Implements hook_entity_view_display_alter().
+ */
+function field_multiple_limit_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInterface $display) {
+
+  // Check all components
+  foreach ($display->getComponents() as $field_name => $component) {
+    if (isset($component['third_party_settings']['field_multiple_limit'])) {
+
+      $settings = $component['third_party_settings']['field_multiple_limit'];
+      $limit = empty($settings['count']) ? CARDINALITY_UNLIMITED : $settings['count'];
+      $offset = (int) $settings['offset'];
+      $count = 1;
+
+      if (isset($build[$field_name]) && isset($build[$field_name]['#items'])) {
+        foreach(Element::children($build[$field_name]) as $delta) {
+
+          if($delta < $offset) {
+            $build[$field_name][$delta]['#access'] = FALSE;
+            continue;
+          }
+
+          if ($limit != CARDINALITY_UNLIMITED && $count > $limit) {
+            $build[$field_name][$delta]['#access'] = FALSE;
+          }
+          $count++;
+
+        }
+      }
+    }
+  }
+}
