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 0000000..a35d822
--- /dev/null
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\custom_block\Tests\CustomBlockFieldTest.
+ */
+
+namespace Drupal\custom_block\Tests;
+
+/**
+ * Tests the block edit functionality.
+ */
+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', 'full')
+      ->setComponent($this->field['field_name'], $display_options)
+      ->save();
+
+    $langcode = LANGUAGE_NOT_SPECIFIED;
+
+    // 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 69102f4..dd5c4d1 100644
--- a/core/modules/field/field.attach.inc
+++ b/core/modules/field/field.attach.inc
@@ -510,8 +510,7 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
       $field_id = $instance['field_id'];
       $field_name = $instance['field_name'];
       $field = field_info_field_by_id($field_id);
-      $function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
-      if (function_exists($function)) {
+      if (function_exists($options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op)) {
         // Add the field to the list of fields to invoke the hook on.
         if (!isset($fields[$field_id])) {
           $fields[$field_id] = $field;
@@ -524,7 +523,11 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
         $langcode = !empty($options['langcode'][$id]) ? $options['langcode'][$id] : $options['langcode'];
         $langcodes = _field_language_suggestion($available_langcodes, $langcode, $field_name);
         foreach ($langcodes as $langcode) {
+          // Enable BC if necessary.
+          $entity = $entity->getBCEntity();
           $grouped_items[$field_id][$langcode][$id] = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();
+          // Reset back to original.
+          $entity = $entity->getOriginalEntity();
           // Group the instances and entities corresponding to the current
           // field.
           $grouped_instances[$field_id][$langcode][$id] = $instance;
@@ -565,7 +568,11 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
     foreach ($grouped_entities[$field_id] as $langcode => $entities) {
       foreach ($entities as $id => $entity) {
         if ($grouped_items[$field_id][$langcode][$id] !== array() || isset($entity->{$field_name}[$langcode])) {
+          // Enable BC Entity if necessary.
+          $entity = $entity->getBCEntity();
           $entity->{$field_name}[$langcode] = $grouped_items[$field_id][$langcode][$id];
+          // Reset back to original.
+          $entity = $entity->getOriginalEntity();
         }
       }
     }
