diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 3e97111..415a562 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -312,32 +312,11 @@ function comment_permission() {
  * @return \Drupal\comment\CommentInterface[]|array
  *   An array of comment objects or an empty array if there are no recent
  *   comments visible to the current user.
+ *
+ * @deprecated Use \Drupal\comment\CommentManager::getRecent() instead.
  */
 function comment_get_recent($number = 10) {
-  $query = db_select('comment', 'c');
-  $query->addMetaData('base_table', 'comment');
-  $query->fields('c')
-    ->condition('c.status', CommentInterface::PUBLISHED);
-  if (\Drupal::moduleHandler()->moduleExists('node')) {
-    // Special case to filter by published content.
-    $query->innerJoin('node_field_data', 'n', "n.nid = c.entity_id AND c.entity_type = 'node'");
-    $query->addTag('node_access');
-    // @todo This should be actually filtering on the desired node status field
-    //   language and just fall back to the default language.
-    $query
-      ->condition('n.status', NODE_PUBLISHED)
-      ->condition('n.default_langcode', 1);
-  }
-  $comments = $query
-    ->orderBy('c.created', 'DESC')
-    // Additionally order by cid to ensure that comments with the same timestamp
-    // are returned in the exact order posted.
-    ->orderBy('c.cid', 'DESC')
-    ->range(0, $number)
-    ->execute()
-    ->fetchAll();
-
-  return $comments ? $comments : array();
+  return \Drupal::service('comment.manager')->getRecent($number);
 }
 
 /**
diff --git a/core/modules/comment/comment.services.yml b/core/modules/comment/comment.services.yml
index 084f9b8..fd509c5 100644
--- a/core/modules/comment/comment.services.yml
+++ b/core/modules/comment/comment.services.yml
@@ -7,7 +7,7 @@ services:
 
   comment.manager:
     class: Drupal\comment\CommentManager
-    arguments: ['@field.info', '@entity.manager']
+    arguments: ['@field.info', '@entity.manager', '@entity.query']
 
   comment.route_enhancer:
       class: Drupal\comment\Routing\CommentBundleEnhancer
diff --git a/core/modules/comment/lib/Drupal/comment/CommentManager.php b/core/modules/comment/lib/Drupal/comment/CommentManager.php
index 9bca3c5..3c0b4f6 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentManager.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentManager.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\field\FieldInfo;
 
 /**
@@ -31,16 +32,26 @@ class CommentManager implements CommentManagerInterface {
   protected $entityManager;
 
   /**
+   * The entity query factory.
+   *
+   * @var \Drupal\Core\Entity\Query\QueryFactory
+   */
+  protected $queryFactory;
+
+  /**
    * Construct the CommentManager object.
    *
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
+   * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory
+   *   The entity query factory.
    */
-  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager) {
+  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager, QueryFactory $query_factory) {
     $this->fieldInfo = $field_info;
     $this->entityManager = $entity_manager;
+    $this->queryFactory = $query_factory;
   }
 
   /**
@@ -200,4 +211,25 @@ public function getFieldUIPageTitle($commented_entity_type, $field_name) {
     return String::checkPlain($sample_instance->label);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getRecent($count = 10) {
+    $query = $this->queryFactory->get('comment')
+      ->condition('status', CommentInterface::PUBLISHED);
+    if (\Drupal::moduleHandler()->moduleExists('node')) {
+      $query
+        ->condition('nid.entity.status', NODE_PUBLISHED)
+        // @todo This should be actually filtering on the desired node status
+        //   field language and just fall back to the default language.
+        ->condition('nid.entity.default_langcode', 1);
+    }
+    $ids = $query
+      ->sort('changed', 'DESC')
+      ->sort('cid', 'DESC')
+      ->range(0, $count)
+      ->execute();
+    return $this->commentStorage->loadMultiple($ids);
+  }
+
 }
diff --git a/core/modules/comment/lib/Drupal/comment/CommentManagerInterface.php b/core/modules/comment/lib/Drupal/comment/CommentManagerInterface.php
index b1747f2..dd20208 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentManagerInterface.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentManagerInterface.php
@@ -86,4 +86,16 @@ public function addBodyField($entity_type, $field_name);
    */
   public function getFieldUIPageTitle($commented_entity_type, $field_name);
 
+  /**
+   * Finds the most recent comments that are available to the current user.
+   *
+   * @param int $count
+   *   (optional) The maximum number of comments to find. Defaults to 10.
+   *
+   * @return \Drupal\comment\CommentInterface[]
+   *   An array of comment objects or an empty array if there are no recent
+   *   comments visible to the current user.
+   */
+  public function getRecent($count);
+
 }
