diff --git a/src/Twig/Extension/FieldValueExtension.php b/src/Twig/Extension/FieldValueExtension.php
index d0abb11..768a6b7 100644
--- a/src/Twig/Extension/FieldValueExtension.php
+++ b/src/Twig/Extension/FieldValueExtension.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\twig_field_value\Twig\Extension;
 
+use Drupal\Core\Render\Element;
+
 /**
  * Provides field value filters for Twig templates.
  */
@@ -61,14 +63,11 @@ class FieldValueExtension extends \Twig_Extension {
       return NULL;
     }
 
-    if (isset($build['#items'])) {
-      $element = $build['#items'];
+    $elements = Element::children($build);
+    if (!empty($elements)) {
       $items = [];
-      $delta = 0;
-
-      while (!empty($element[$delta])) {
+      foreach ($elements as $delta) {
         $items[$delta] = $build[$delta];
-        $delta++;
       }
       return $items;
     }
diff --git a/tests/src/Kernel/FieldValue/FieldValueTest.php b/tests/src/Kernel/FieldValue/FieldValueTest.php
new file mode 100644
index 0000000..6fb7af0
--- /dev/null
+++ b/tests/src/Kernel/FieldValue/FieldValueTest.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace Drupal\Tests\twig_field_value\Kernel;
+
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\FieldStorageConfigInterface;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+
+/**
+ * @coversDefaultClass \Drupal\twig_field_value\Twig\Extension\FieldValueExtension
+ * @group twig_field_value
+ */
+class FieldValueTest extends EntityKernelTestBase {
+
+  public static $modules = [
+    'twig_field_value',
+    'user',
+    'entity_test'
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $fieldStorage = FieldStorageConfig::create([
+      'field_name' => 'field_reference',
+      'type' => 'entity_reference',
+      'entity_type' => 'entity_test',
+      'cardinality' => FieldStorageConfigInterface::CARDINALITY_UNLIMITED,
+      'settings' => [
+        'target_type' => 'entity_test',
+      ]
+    ]);
+    $fieldStorage->save();
+    $fieldConfig = FieldConfig::create([
+      'field_storage' => $fieldStorage,
+      'bundle' => 'entity_test'
+    ]);
+    $fieldConfig->save();
+    $current_user = $this->container->get('current_user');
+    $current_user->setAccount($this->createUser([], ['view test entity']));
+  }
+
+  /**
+   * Check if inaccessible content is _not_ displayed.
+   */
+  public function testFieldValue() {
+    $entity1 = EntityTest::create([
+      'name' => 'entity1',
+    ]);
+    $entity1->save();
+    // The entity label is important, \Drupal\entity_test\EntityTestAccessControlHandler
+    // returns AccessResult::forbidden for it.
+    $entity2 = EntityTest::create([
+      'name' => 'forbid_access',
+    ]);
+    $entity2->save();
+    $entity3 = EntityTest::create([
+      'name' => 'entity3',
+    ]);
+    $entity3->save();
+    $entity = EntityTest::create([
+      'field_reference' => [
+        $entity1->id(),
+        $entity2->id(),
+        $entity3->id(),
+      ]
+    ]);
+    $entity->save();
+    $render_field = function (FieldableEntityInterface $entity) {
+      return $entity->get('field_reference')->view([
+        'type' => 'entity_reference_label',
+        'settings' => [
+          'link' => FALSE,
+        ]
+      ]);
+    };
+    $element = $render_field($entity);
+
+    // Check the field values by rendering the formatter without any filter.
+    $content = \Drupal::service('renderer')->renderPlain($element);
+    $this->assertContains('entity1', (string) $content);
+    $this->assertNotContains('forbid_access', (string) $content);
+    $this->assertContains('entity3', (string) $content);
+
+    // Check output of the field_value filter.
+    $element = [
+      '#type' => 'inline_template',
+      '#template' => '{{ field|field_value|safe_join(", ") }}',
+      '#context' => [
+        'field' => $render_field($entity)
+      ],
+    ];
+    $content = \Drupal::service('renderer')->renderPlain($element);
+    $this->assertSame('entity1, entity3', (string) $content);
+  }
+
+}
diff --git a/tests/src/Unit/FieldValue/FieldValueTest.php b/tests/src/Unit/FieldValue/FieldValueTest.php
index 643d6da..65efbe3 100644
--- a/tests/src/Unit/FieldValue/FieldValueTest.php
+++ b/tests/src/Unit/FieldValue/FieldValueTest.php
@@ -88,12 +88,24 @@ class FieldValueTest extends UnitTestCase {
       [NULL, ['#items' => 'foo']],
       [NULL, ['#theme' => 'item_list']],
       [NULL, ['#theme' => 'field']],
-      [[0 => 'this value'], ['#theme' => 'field', '#items' => [0 => 'dummy'], 0 => 'this value']],
+      [
+        [
+          0 => ['#markup' => 'this value'],
+        ],
+        [
+          '#theme' => 'field',
+          '#items' => [
+            0 => 'dummy'
+          ],
+          0 => [
+            '#markup' => 'this value'
+          ]
+        ]
+      ],
       [[
-          0 => 'zero',
-          1 => 'one',
-          2 => 'two',
-          3 => 'three',
+          0 => ['#markup' => 'zero'],
+          2 => ['#markup' => 'two'],
+          3 => ['#markup' => 'three'],
         ],
         [
           '#theme' => 'field',
@@ -103,10 +115,9 @@ class FieldValueTest extends UnitTestCase {
             2 => 'dummy',
             3 => 'dummy',
           ],
-          0 => 'zero',
-          1 => 'one',
-          2 => 'two',
-          3 => 'three',
+          0 => ['#markup' => 'zero',],
+          2 => ['#markup' =>'two'],
+          3 => ['#markup' => 'three'],
       ]],
     ];
   }
