diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8d493490c23b6339125ad1b1d89f8433f7676de4
--- /dev/null
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\custom_block\Tests\CustomBlockFieldTest.
+ */
+
+namespace Drupal\custom_block\Tests;
+
+/**
+ * Tests the block edit functionality.
+ *
+ * @todo Consider removing this test when https://drupal.org/node/1822000 is
+ * fixed.
+ */
+class CustomBlockFieldTest extends CustomBlockTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('block', 'custom_block', 'link');
+
+  /**
+   * The created field.
+   *
+   * @var array
+   */
+  protected $field;
+
+  /**
+   * The created instance
+   *
+   * @var array
+   */
+  protected $instance;
+
+  /**
+   * The block type.
+   *
+   * @var \Drupal\custom_block\Plugin\Core\Entity\CustomBlockType
+   */
+  protected $blockType;
+
+
+  /**
+   * Declares test information.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Custom Block field test',
+      'description' => 'Test block fieldability.',
+      'group' => 'Custom Block',
+    );
+  }
+
+  /**
+   * Checks block edit functionality.
+   */
+  public function testBlockFields() {
+    $this->drupalLogin($this->adminUser);
+
+    $this->blockType = $this->createCustomBlockType('link');
+
+    // Create a field with settings to validate.
+    $this->field = array(
+      'field_name' => drupal_strtolower($this->randomName()),
+      'type' => 'link',
+      'cardinality' => 2,
+    );
+    field_create_field($this->field);
+    $this->instance = array(
+      'field_name' => $this->field['field_name'],
+      'entity_type' => 'custom_block',
+      'bundle' => 'link',
+      'settings' => array(
+        'title' => DRUPAL_OPTIONAL,
+      ),
+      'widget' => array(
+        'type' => 'link_default',
+      ),
+    );
+    $display_options = array(
+      'type' => 'link',
+      'label' => 'hidden',
+    );
+    field_create_instance($this->instance);
+    entity_get_display('custom_block', 'link', 'default')
+      ->setComponent($this->field['field_name'], $display_options)
+      ->save();
+
+    // Create a block.
+    $this->drupalGet('block/add/link');
+    $edit = array(
+      'info' => $this->randomName(8),
+      $this->field['field_name'] . '[und][0][url]' => 'http://example.com',
+      $this->field['field_name'] . '[und][0][title]' => 'Example.com'
+    );
+    $this->drupalPost(NULL, $edit, t('Save'));
+    // Place the block.
+    $instance = array(
+      'machine_name' => drupal_strtolower($edit['info']),
+      'label' => $edit['info'],
+      'region' => 'sidebar_first',
+    );
+    $this->drupalPost(NULL, $instance, t('Save block'));
+    // Navigate to home page.
+    $this->drupalGet('<front>');
+    $this->assertLinkByHref('http://example.com');
+    $this->assertText('Example.com');
+  }
+
+}
diff --git a/core/modules/field/field.attach.inc b/core/modules/field/field.attach.inc
index 9b24d94aad2add9f6be0d90a8c24afca83ab4737..de035d25e46890af38c9110312e708fd51a9735a 100644
--- a/core/modules/field/field.attach.inc
+++ b/core/modules/field/field.attach.inc
@@ -1337,12 +1337,12 @@ function field_attach_prepare_view($entity_type, array $entities, array $display
   $prepare = array();
   foreach ($entities as $id => $entity) {
     if (empty($entity->_field_view_prepared)) {
-      // Add this entity to the items to be prepared.
-      $prepare[$id] = $entity;
-
       // Enable BC if necessary.
       $entity = $entity->getBCEntity();
 
+      // Add this entity to the items to be prepared.
+      $prepare[$id] = $entity;
+
       // Determine the actual language code to display for each field, given the
       // language codes available in the field data.
       $options['langcode'][$id] = field_language($entity, NULL, $langcode);
diff --git a/core/modules/image/lib/Drupal/image/Type/ImageItem.php b/core/modules/image/lib/Drupal/image/Type/ImageItem.php
index 72bf09c6afcfd4d1e61043a8c371d86958bb8e8a..5417b1edf9e722dd12d12babeed90a853045e8d2 100644
--- a/core/modules/image/lib/Drupal/image/Type/ImageItem.php
+++ b/core/modules/image/lib/Drupal/image/Type/ImageItem.php
@@ -94,12 +94,9 @@ public function setValue($values) {
     }
 
     unset($values['fid'], $values['entity']);
-    // @todo These properties are sometimes set due to being present in form
-    //   values. Needs to be cleaned up somewhere.
-    unset($values['display'], $values['description'], $values['upload_button'], $values['remove_button'], $values['upload']);
-    if ($values) {
-      throw new \InvalidArgumentException('Property ' . key($values) . ' is unknown.');
-    }
+    // @todo: Throw an exception for invalid values once conversion is
+    // totally completed.
+    $this->extraValues = $values;
   }
 
 }