diff --git a/core/modules/aggregator/aggregator.admin.inc b/core/modules/aggregator/aggregator.admin.inc
index 632f1ec..c2cd425 100644
--- a/core/modules/aggregator/aggregator.admin.inc
+++ b/core/modules/aggregator/aggregator.admin.inc
@@ -27,7 +27,7 @@ function aggregator_admin_overview() {
  *   The page HTML.
  */
 function aggregator_view() {
-  $result = db_query('SELECT f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image, f.block, COUNT(i.iid) AS items FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image, f.block ORDER BY f.title');
+  $result = db_query('SELECT f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image, COUNT(i.iid) AS items FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image ORDER BY f.title');
 
   $output = '<h3>' . t('Feed overview') . '</h3>';
 
@@ -102,7 +102,6 @@ function aggregator_view() {
 function aggregator_feed_add() {
   $feed = entity_create('aggregator_feed', array(
     'refresh' => 3600,
-    'block' => 5,
   ));
   return entity_get_form($feed);
 }
@@ -171,12 +170,6 @@ function aggregator_form_opml($form, &$form_state) {
     '#options' => $period,
     '#description' => t('The length of time between feed updates. Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))),
   );
-  $form['block'] = array('#type' => 'select',
-    '#title' => t('News items in block'),
-    '#default_value' => 5,
-    '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)),
-    '#description' => t("Drupal can make a block with the most recent news items of a feed. You can <a href=\"@block-admin\">configure blocks</a> to be displayed in the sidebar of your page. This setting lets you configure the number of news items to show in a feed's block. If you choose '0' these feeds' blocks will be disabled.", array('@block-admin' => url('admin/structure/block'))),
-  );
 
   // Handling of categories.
   $options = array_map('check_plain', db_query("SELECT cid, title FROM {aggregator_category} ORDER BY title")->fetchAllKeyed());
@@ -260,7 +253,6 @@ function aggregator_form_opml_submit($form, &$form_state) {
       'title' => $feed['title'],
       'url' => $feed['url'],
       'refresh' => $form_state['values']['refresh'],
-      'block' => $form_state['values']['block'],
     ));
     $new_feed->categories = $form_state['values']['category'];
     $new_feed->save();
diff --git a/core/modules/aggregator/aggregator.install b/core/modules/aggregator/aggregator.install
index 54f9053..9adc7e4 100644
--- a/core/modules/aggregator/aggregator.install
+++ b/core/modules/aggregator/aggregator.install
@@ -200,13 +200,6 @@ function aggregator_schema() {
         'default' => 0,
         'description' => 'When the feed was last modified, as a Unix timestamp.',
       ),
-      'block' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => "Number of items to display in the feed's block.",
-      )
     ),
     'primary key' => array('fid'),
     'indexes' => array(
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
index 97fb698..2b92028 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
@@ -52,12 +52,6 @@ public function form(array $form, array &$form_state, EntityInterface $feed) {
       '#options' => $period,
       '#description' => t('The length of time between feed updates. Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))),
     );
-    $form['block'] = array('#type' => 'select',
-      '#title' => t('News items in block'),
-      '#default_value' => $feed->block->value,
-      '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)),
-      '#description' => t("Drupal can make a block with the most recent news items of this feed. You can <a href=\"@block-admin\">configure blocks</a> to be displayed in the sidebar of your page. This setting lets you configure the number of news items to show in this feed's block. If you choose '0' this feed's block will be disabled.", array('@block-admin' => url('admin/structure/block'))),
-    );
 
     // Handling of categories.
     $options = array();
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php b/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
index d8c052c..ec57249 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
@@ -45,11 +45,6 @@ protected function attachLoad(&$queried_entities, $load_revision = FALSE) {
    */
   protected function preDelete($entities) {
     parent::preDelete($entities);
-
-    // Invalidate the block cache to update aggregator feed-based derivatives.
-    if (module_exists('block')) {
-      drupal_container()->get('plugin.manager.block')->clearCachedDefinitions();
-    }
     foreach ($entities as $entity) {
       $iids = db_query('SELECT iid FROM {aggregator_item} WHERE fid = :fid', array(':fid' => $entity->id()))->fetchCol();
       if ($iids) {
@@ -66,6 +61,7 @@ protected function postDelete($entities) {
 
     foreach ($entities as $entity) {
       // Make sure there is no active block for this feed.
+      // @todo: How can we check the settings here?
       $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
       foreach ($block_configs as $config_id) {
         $config = config($config_id);
@@ -81,11 +77,6 @@ protected function postDelete($entities) {
    */
   protected function preSave(EntityInterface $entity) {
     parent::preSave($entity);
-
-    // Invalidate the block cache to update aggregator feed-based derivatives.
-    if (module_exists('block')) {
-      drupal_container()->get('plugin.manager.block')->clearCachedDefinitions();
-    }
     // An existing feed is being modified, delete the category listings.
     db_delete('aggregator_category_feed')
       ->condition('fid', $entity->id())
@@ -182,11 +173,6 @@ public function baseFieldDefinitions() {
       'description' => t('When the feed was last modified, as a Unix timestamp.'),
       'type' => 'integer_field',
     );
-    $fields['block'] = array(
-      'label' => t('Block'),
-      'description' => t('Number of items to display in the feed’s block.'),
-      'type' => 'integer_field',
-    );
     return $fields;
   }
 
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
index 2c3cc20..33275d7 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
@@ -129,13 +129,6 @@ class Feed extends EntityNG implements ContentEntityInterface {
   public $modified;
 
   /**
-   * Number of items to display in the feed’s block.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $block;
-
-  /**
    * Overrides Drupal\Core\Entity\EntityNG::init().
    */
   public function init() {
@@ -154,7 +147,6 @@ public function init() {
     unset($this->hash);
     unset($this->etag);
     unset($this->modified);
-    unset($this->block);
 
   }
 
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Derivative/AggregatorFeedBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Derivative/AggregatorFeedBlock.php
deleted file mode 100644
index 663bf5f..0000000
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Derivative/AggregatorFeedBlock.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\aggregator\Plugin\Derivative\AggregatorFeedBlock.
- */
-
-namespace Drupal\aggregator\Plugin\Derivative;
-
-use Drupal\Component\Plugin\Derivative\DerivativeInterface;
-
-/**
- * Provides block plugin definitions for aggregator feeds.
- *
- * @see \Drupal\aggregator\Plugin\block\block\AggregatorFeedBlock
- */
-class AggregatorFeedBlock implements DerivativeInterface {
-
-  /**
-   * List of derivative definitions.
-   *
-   * @var array
-   */
-  protected $derivatives = array();
-
-  /**
-   * Implements \Drupal\Component\Plugin\Derivative\DerivativeInterface::getDerivativeDefinition().
-   */
-  public function getDerivativeDefinition($derivative_id, array $base_plugin_definition) {
-    if (!empty($this->derivatives) && !empty($this->derivatives[$derivative_id])) {
-      return $this->derivatives[$derivative_id];
-    }
-    $result = db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE block <> 0 AND fid = :fid', array(':fid' => $derivative_id))->fetchObject();
-    $this->derivatives[$derivative_id] = $base_plugin_definition;
-    $this->derivatives[$derivative_id]['delta'] = $result->fid;
-    $this->derivatives[$derivative_id]['admin_label'] = t('@title feed latest items', array('@title' => $result->title));
-    return $this->derivatives[$derivative_id];
-  }
-
-  /**
-   * Implements \Drupal\Component\Plugin\Derivative\DerivativeInterface::getDerivativeDefinitions().
-   */
-  public function getDerivativeDefinitions(array $base_plugin_definition) {
-    // Add a block plugin definition for each feed.
-    $result = db_query('SELECT fid, title FROM {aggregator_feed} WHERE block <> 0 ORDER BY fid');
-    foreach ($result as $feed) {
-      $this->derivatives[$feed->fid] = $base_plugin_definition;
-      $this->derivatives[$feed->fid]['delta'] = $feed->fid;
-      $this->derivatives[$feed->fid]['admin_label'] = t('@title feed latest items', array('@title' => $feed->title));
-    }
-    return $this->derivatives;
-  }
-
-}
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
index afcef0e..5f4b8c5 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
@@ -17,8 +17,7 @@
  * @Plugin(
  *   id = "aggregator_feed_block",
  *   admin_label = @Translation("Aggregator feed"),
- *   module = "aggregator",
- *   derivative = "Drupal\aggregator\Plugin\Derivative\AggregatorFeedBlock"
+ *   module = "aggregator"
  * )
  */
 class AggregatorFeedBlock extends BlockBase {
@@ -30,6 +29,7 @@ public function settings() {
     // By default, the block will contain 10 feed items.
     return array(
       'block_count' => 10,
+      'feed' => NULL,
     );
   }
 
@@ -45,6 +45,17 @@ public function blockAccess() {
    * Overrides \Drupal\block\BlockBase::blockForm().
    */
   public function blockForm($form, &$form_state) {
+    $feeds = entity_load_multiple('aggregator_feed');
+    $options = array();
+    foreach ($feeds as $feed) {
+      $options[$feed->id()] = $feed->label();
+    }
+    $form['feed'] = array(
+      '#type' => 'select',
+      '#title' => t('Select the feed that should be displayed'),
+      '#default_value' => $this->configuration['feed'],
+      '#options' => $options,
+    );
     $form['block_count'] = array(
       '#type' => 'select',
       '#title' => t('Number of news items in block'),
@@ -59,27 +70,26 @@ public function blockForm($form, &$form_state) {
    */
   public function blockSubmit($form, &$form_state) {
     $this->configuration['block_count'] = $form_state['values']['block_count'];
+    $this->configuration['feed'] = $form_state['values']['feed'];
+
   }
 
   /**
    * Implements \Drupal\block\BlockBase::build().
    */
   public function build() {
-    // Plugin IDs look something like this: aggregator_feed_block:1.
-    list(, $id) = explode(':', $this->getPluginId());
-    if ($feed = db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE block <> 0 AND fid = :fid', array(':fid' => $id))->fetchObject()) {
-      $result = db_query_range("SELECT * FROM {aggregator_item} WHERE fid = :fid ORDER BY timestamp DESC, iid DESC", 0, $this->configuration['block_count'], array(':fid' => $id));
-      $read_more = theme('more_link', array('url' => 'aggregator/sources/' . $feed->fid, 'title' => t("View this feed's recent news.")));
-
-      $items = array();
-      foreach ($result as $item) {
-        $items[] = theme('aggregator_block_item', array('item' => $item));
-      }
-      // Only display the block if there are items to show.
-      if (count($items) > 0) {
-        return array(
-          '#children' => theme('item_list', array('items' => $items)) . $read_more,
+    $feed = aggregator_feed_load($this->configuration['feed']);
+    if ($feed) {
+      module_load_include('inc', 'aggregator', 'aggregator.pages');
+      $items = aggregator_load_feed_items('source', $feed, $this->configuration['block_count']);
+      if ($items) {
+        $build['items'] = entity_view_multiple($items, 'default');
+        $build['read_more'] = array(
+          '#theme' => 'more_link',
+          '#url' => 'aggregator/sources/' . $feed->id(),
+          '#title' => t("View this feed's recent news."),
         );
+        return $build;
       }
     }
   }
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
index 380e553..1a7932f 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
@@ -38,9 +38,6 @@ public function testBlockLinks() {
     $feed = $this->createFeed();
     $this->updateFeedItems($feed, $this->getDefaultFeedItemCount());
 
-    // Clear the block cache to load the new block definitions.
-    $this->container->get('plugin.manager.block')->clearCachedDefinitions();
-
     // Need admin user to be able to access block admin.
     $admin_user = $this->drupalCreateUser(array(
       'administer blocks',
@@ -50,7 +47,7 @@ public function testBlockLinks() {
     ));
     $this->drupalLogin($admin_user);
 
-    $block = $this->drupalPlaceBlock("aggregator_feed_block:{$feed->id()}", array('label' => 'feed-' . $feed->label()), array('block_count' => 2));
+    $block = $this->drupalPlaceBlock("aggregator_feed_block", array('label' => 'feed-' . $feed->label()), array('block_count' => 2, 'feed' => $feed->id()));
 
     // Confirm that the block is now being displayed on pages.
     $this->drupalGet('test-page');
@@ -68,11 +65,13 @@ public function testBlockLinks() {
 
     // Set the number of news items to 0 to test that the block does not show
     // up.
-    $feed->block = 0;
-    $feed->save();
+    // @todo: What to do with this? Remove? $block->settings is protected and
+    //   can not be changed?
+    /*$block->settings['block_count'] = 0;
+    $block->save();
     // Check that the block is no longer displayed.
     $this->drupalGet('test-page');
-    $this->assertNoText($block->label(), 'Feed block is not displayed on the page when number of items is set to 0.');
+    $this->assertNoText($block->label(), 'Feed block is not displayed on the page when number of items is set to 0.');*/
   }
 
   /**
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/CategorizeFeedTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/CategorizeFeedTest.php
index 569f26a..2868c7f 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/CategorizeFeedTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/CategorizeFeedTest.php
@@ -37,7 +37,7 @@ function testCategorizeFeed() {
     $categories = $this->getCategories();
 
     // Create a feed and assign 2 categories to it.
-    $feed = $this->getFeedEditObject(NULL, array('block' => 5));
+    $feed = $this->getFeedEditObject();
     foreach ($categories as $cid => $category) {
       $feed->categories[$cid] = $cid;
     }
