diff --git a/core/modules/aggregator/aggregator.install b/core/modules/aggregator/aggregator.install
index 800802962c..c17b071e29 100644
--- a/core/modules/aggregator/aggregator.install
+++ b/core/modules/aggregator/aggregator.install
@@ -1,5 +1,7 @@
 <?php
 
+use Drupal\Core\Field\BaseFieldDefinition;
+
 /**
  * @file
  * Install, update and uninstall functions for the aggregator module.
@@ -11,3 +13,16 @@
 function aggregator_update_last_removed() {
   return 8501;
 }
+
+/**
+ * Added new item_category field in the aggregator_item entity.
+ */
+function aggregator_update_8502() {
+  $field_storage_definition = BaseFieldDefinition::create('string')
+    ->setLabel(t('Feed Item Category'))
+    ->setDescription(t('Feed Item Category'))
+    ->setRevisionable(FALSE);
+
+  \Drupal::entityDefinitionUpdateManager()
+    ->installFieldStorageDefinition('item_category', 'aggregator_item', 'aggregator_item', $field_storage_definition);
+}
\ No newline at end of file
diff --git a/core/modules/aggregator/aggregator.links.task.yml b/core/modules/aggregator/aggregator.links.task.yml
index 57b9899518..404741164b 100644
--- a/core/modules/aggregator/aggregator.links.task.yml
+++ b/core/modules/aggregator/aggregator.links.task.yml
@@ -22,3 +22,8 @@ entity.aggregator_feed.delete_form:
   base_route: entity.aggregator_feed.canonical
   title: Delete
   weight: 20
+entity.aggregator_feed.categorize_form:
+  route_name: aggregator.feed_items_categorize
+  base_route: entity.aggregator_feed.canonical
+  title: Categorize
+  weight: 20
diff --git a/core/modules/aggregator/aggregator.routing.yml b/core/modules/aggregator/aggregator.routing.yml
index 105ab6db0c..da5a4f02f7 100644
--- a/core/modules/aggregator/aggregator.routing.yml
+++ b/core/modules/aggregator/aggregator.routing.yml
@@ -22,6 +22,26 @@ aggregator.feed_items_delete:
   requirements:
     _permission: 'administer news feeds'
 
+aggregator.feed_items_categorize:
+  path: '/aggregator/sources/{aggregator_feed}/categorize'
+  defaults:
+    _form: '\Drupal\aggregator\Form\FeedItemCategorizeForm'
+    _title: 'Categorize Feed Items'
+  requirements:
+    _permission: 'administer news feeds'
+  options:
+    _admin_route: TRUE
+
+aggregator.feed_items_selected_items:
+  path: '/admin/config/services/aggregator/selected-items'
+  defaults:
+    _form: '\Drupal\aggregator\Form\FeedItemSelectedItemsForm'
+    _title: 'Selected Feed Items'
+  requirements:
+    _permission: 'administer news feeds'
+  options:
+    _admin_route: TRUE
+
 aggregator.feed_refresh:
   path: '/admin/config/services/aggregator/update/{aggregator_feed}'
   defaults:
diff --git a/core/modules/aggregator/src/AggregatorItemViewsData.php b/core/modules/aggregator/src/AggregatorItemViewsData.php
index 3aaaa600ff..f5c331c2c3 100644
--- a/core/modules/aggregator/src/AggregatorItemViewsData.php
+++ b/core/modules/aggregator/src/AggregatorItemViewsData.php
@@ -31,6 +31,10 @@ public function getViewsData() {
 
     $data['aggregator_item']['author']['field']['default_formatter'] = 'aggregator_xss';
 
+    $data['aggregator_item']['item_category']['help'] = $this->t('The Item Category of the original imported item.');
+
+    $data['aggregator_item']['item_category']['field']['default_formatter'] = 'aggregator_xss';
+
     $data['aggregator_item']['guid']['help'] = $this->t('The guid of the original imported item.');
 
     $data['aggregator_item']['description']['help'] = $this->t('The actual content of the imported item.');
diff --git a/core/modules/aggregator/src/Controller/AggregatorController.php b/core/modules/aggregator/src/Controller/AggregatorController.php
index 0d2a329a9e..1a3b2152bf 100644
--- a/core/modules/aggregator/src/Controller/AggregatorController.php
+++ b/core/modules/aggregator/src/Controller/AggregatorController.php
@@ -8,6 +8,7 @@
 use Drupal\aggregator\FeedInterface;
 use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Render\Markup;
 
 /**
  * Returns responses for aggregator module routes.
@@ -163,6 +164,27 @@ public function adminOverview() {
       '#empty' => $this->t('No feeds available. <a href=":link">Add feed</a>.', [':link' => Url::fromRoute('aggregator.feed_add')->toString()]),
     ];
 
+    $item_ids = \Drupal::entityQuery('aggregator_item')
+      ->accessCheck(FALSE)
+      ->condition('item_category', 'News', '=')
+      ->execute();
+
+    $header_items = [
+      'title' => t('Title'),
+      'items' => t('Items'),
+      'operations' => t('Operations'),
+    ];
+
+    $options_items = [];
+    $options_items[] = ["Newsfeed", count($item_ids), Markup::create("<a href='/admin/config/services/aggregator/selected-items'>edit</a>")];
+
+    $build['category_items'] = [
+      '#prefix' => '<h3><br />' . $this->t('Category overview') . '</h3>',
+      '#type' => 'table',
+      '#header' => $header_items,
+      '#rows' => $options_items,
+    ];
+
     return $build;
   }
 
diff --git a/core/modules/aggregator/src/Entity/Item.php b/core/modules/aggregator/src/Entity/Item.php
index 58bf53eb7d..e175ebd053 100644
--- a/core/modules/aggregator/src/Entity/Item.php
+++ b/core/modules/aggregator/src/Entity/Item.php
@@ -116,6 +116,15 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setLabel(t('GUID'))
       ->setDescription(t('Unique identifier for the feed item.'));
 
+    $fields['item_category'] = BaseFieldDefinition::create('string')
+    ->setLabel(t('Feed Item Category'))
+    ->setDescription(t('Feed Item Category.'))
+    ->setDisplayOptions('view', [
+      'label' => 'hidden',
+      'weight' => 4,
+    ])
+    ->setDisplayConfigurable('view', TRUE);
+
     return $fields;
   }
 
@@ -217,6 +226,20 @@ public function setGuid($guid) {
     return $this->set('guid', $guid);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getItemCategory() {
+    return $this->get('item_category')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setItemCategory($item_category) {
+    return $this->set('item_category', $item_category);
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/aggregator/src/ItemInterface.php b/core/modules/aggregator/src/ItemInterface.php
index 090fc65075..d9e58bb679 100644
--- a/core/modules/aggregator/src/ItemInterface.php
+++ b/core/modules/aggregator/src/ItemInterface.php
@@ -85,6 +85,25 @@ public function getAuthor();
    */
   public function setAuthor($author);
 
+  /**
+   * Returns the Item Category of the feed item.
+   *
+   * @return string
+   *   The Item Category of the feed item.
+   */
+  public function getItemCategory();
+
+  /**
+   * Sets the Item Category of the feed item.
+   *
+   * @param string $item_category
+   *   The author name of the feed item.
+   *
+   * @return $this
+   *   The called feed item entity.
+   */
+  public function setItemCategory($item_category);
+
   /**
    * Returns the body of the feed item.
    *
diff --git a/core/modules/aggregator/src/Plugin/ParserInterface.php b/core/modules/aggregator/src/Plugin/ParserInterface.php
index e4c9a8e824..f3ccb594c7 100644
--- a/core/modules/aggregator/src/Plugin/ParserInterface.php
+++ b/core/modules/aggregator/src/Plugin/ParserInterface.php
@@ -43,6 +43,7 @@ interface ParserInterface {
    *       identifies the item. If not available, the link is used to identify
    *       the item.
    *     - link: A full URL to the individual feed item.
+   *     - item_category: The Item Category of the feed item.
    *
    * @return bool
    *   TRUE if parsing was successful, FALSE otherwise.
diff --git a/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php b/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
index fb229ac801..0fc65d518b 100644
--- a/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
+++ b/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
@@ -221,6 +221,7 @@ public function process(FeedInterface $feed) {
       // Make sure the item title and author fit in the 255 varchar column.
       $entry->setTitle(Unicode::truncate($item['title'], 255, TRUE, TRUE));
       $entry->setAuthor(Unicode::truncate($item['author'], 255, TRUE, TRUE));
+      $entry->setItemCategory(Unicode::truncate($item['item_category'], 255, TRUE, TRUE));
 
       $entry->setFeedId($feed->id());
       $entry->setLink($item['link']);
diff --git a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
index 11fc9575f9..340cd91b9e 100644
--- a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
+++ b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
@@ -41,6 +41,7 @@ public function fields() {
       'description' => $this->t('Body of the feed item.'),
       'timestamp' => $this->t('Post date of feed item, as a Unix timestamp.'),
       'guid' => $this->t('Unique identifier for the feed item.'),
+      'item_category' => $this->t('Item Category of the feed item.'),
     ];
   }
 
