diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 1ab6691..a32e393 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -22,7 +22,6 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Url;
-use Drupal\field\Entity\FieldConfig;
 use Drupal\field\FieldInstanceConfigInterface;
 use Drupal\field\FieldConfigInterface;
 use Drupal\file\FileInterface;
@@ -530,18 +529,12 @@ function comment_node_view_alter(array &$build, EntityInterface $node, EntityVie
  *
  * @return array
  *   The renderable array for the comment addition form.
+ *
+ * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
+ *   Use \Drupal\comment\CommentManager->addForm().
  */
 function comment_add(EntityInterface $entity, $field_name = 'comment', $pid = NULL) {
-  $field = Fieldconfig::loadByName($entity->getEntityTypeId(), $field_name);
-  $values = array(
-    'entity_type' => $entity->getEntityTypeId(),
-    'entity_id' => $entity->id(),
-    'field_name' => $field_name,
-    'comment_type' => $field->getSetting('bundle'),
-    'pid' => $pid,
-  );
-  $comment = entity_create('comment', $values);
-  return \Drupal::service('entity.form_builder')->getForm($comment);
+  return \Drupal::service('comment.manager')->addForm($entity, $field_name,$pid);
 }
 
 /**
diff --git a/core/modules/comment/comment.services.yml b/core/modules/comment/comment.services.yml
index 5873634..b37f21e 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: ['@entity.manager', '@config.factory', '@string_translation', '@url_generator']
+    arguments: ['@entity.manager', '@config.factory', '@string_translation', '@url_generator', '@entity.form_builder']
 
   comment.statistics:
     class: Drupal\comment\CommentStatistics
diff --git a/core/modules/comment/src/CommentManager.php b/core/modules/comment/src/CommentManager.php
index 2b639a2..86b9811 100644
--- a/core/modules/comment/src/CommentManager.php
+++ b/core/modules/comment/src/CommentManager.php
@@ -11,6 +11,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Entity\EntityFormBuilderInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
@@ -55,6 +56,13 @@ class CommentManager implements CommentManagerInterface {
   protected $urlGenerator;
 
   /**
+   * The entity form builder service.
+   *
+   * @var \Drupal\Core\Entity\EntityFormBuilderInterface
+   */
+  protected $entityFormBuilder;
+
+  /**
    * Construct the CommentManager object.
    *
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
@@ -65,10 +73,13 @@ class CommentManager implements CommentManagerInterface {
    *   The string translation service.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
+   * @param \Drupal\Core\Entity\EntityFormBuilderInterface $entity_form_builder
+   *   The entity form builder service.
    */
-  public function __construct(EntityManagerInterface $entity_manager, ConfigFactoryInterface $config_factory, TranslationInterface $string_translation, UrlGeneratorInterface $url_generator) {
+  public function __construct(EntityManagerInterface $entity_manager, ConfigFactoryInterface $config_factory, TranslationInterface $string_translation, UrlGeneratorInterface $url_generator, EntityFormBuilderInterface $entity_form_builder) {
     $this->entityManager = $entity_manager;
     $this->userConfig = $config_factory->get('user.settings');
+    $this->entityFormBuilder = $entity_form_builder;
     $this->stringTranslation = $string_translation;
     $this->urlGenerator = $url_generator;
   }
@@ -282,4 +293,21 @@ public function forbiddenMessage(EntityInterface $entity, $field_name) {
     return '';
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function addForm(EntityInterface $entity, $field_name = 'comment', $pid = NULL) {
+    $entity_type = $entity->getEntityTypeId();
+    $field = Fieldconfig::loadByName($entity_type, $field_name);
+    $values = array(
+      'entity_type' => $entity_type,
+      'entity_id' => $entity->id(),
+      'field_name' => $field_name,
+      'comment_type' => $field->getSetting('bundle'),
+      'pid' => $pid,
+    );
+    $comment = $this->entityManager->getStorage('comment')->create($values);
+    return $this->entityFormBuilder->getForm($comment);
+  }
+
 }
diff --git a/core/modules/comment/src/CommentManagerInterface.php b/core/modules/comment/src/CommentManagerInterface.php
index 8797065..5f8158e 100644
--- a/core/modules/comment/src/CommentManagerInterface.php
+++ b/core/modules/comment/src/CommentManagerInterface.php
@@ -84,4 +84,20 @@ public function addBodyField($comment_type);
    */
   public function forbiddenMessage(EntityInterface $entity, $field_name);
 
+  /**
+   * Returns a rendered form to comment the given entity.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to which the comments are in reply to.
+   * @param string $field_name
+   *   The field name where the comments were entered.
+   * @param int $pid
+   *   (optional) Some comments are replies to other comments. In those cases,
+   *   $pid is the parent comment's comment ID. Defaults to NULL.
+   *
+   * @return array
+   *   The renderable array for the comment addition form.
+   */
+  function addForm(EntityInterface $entity, $field_name = 'comment', $pid = NULL);
+
 }
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index 77681c9..e84f8d6 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment\Plugin\Field\FieldFormatter;
 
 use Drupal\comment\CommentStorageInterface;
+use Drupal\comment\CommentManagerInterface;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Core\Entity\EntityViewBuilderInterface;
 use Drupal\Core\Field\FieldItemListInterface;
@@ -65,6 +66,13 @@ public static function defaultSettings() {
   protected $viewBuilder;
 
   /**
+   * The comment manager service.
+   *
+   * @var \Drupal\comment\CommentManagerInterface
+   */
+  protected $commentManager;
+
+  /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
@@ -78,7 +86,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration['third_party_settings'],
       $container->get('current_user'),
       $container->get('entity.manager')->getStorage('comment'),
-      $container->get('entity.manager')->getViewBuilder('comment')
+      $container->get('entity.manager')->getViewBuilder('comment'),
+      $container->get('comment.manager')
     );
   }
 
@@ -105,12 +114,15 @@ public static function create(ContainerInterface $container, array $configuratio
    *   The comment storage.
    * @param \Drupal\Core\Entity\EntityViewBuilderInterface $comment_view_builder
    *   The comment view builder.
+   * @param \Drupal\comment\CommentManagerInterface $comment_manager
+   *   The comment manager service.
    */
-  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, CommentStorageInterface $comment_storage, EntityViewBuilderInterface $comment_view_builder) {
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, CommentStorageInterface $comment_storage, EntityViewBuilderInterface $comment_view_builder, CommentManagerInterface $comment_manager) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
     $this->viewBuilder = $comment_view_builder;
     $this->storage = $comment_storage;
     $this->currentUser = $current_user;
+    $this->commentManager = $comment_manager;
   }
 
   /**
@@ -174,7 +186,7 @@ public function viewElements(FieldItemListInterface $items) {
           // All users in the "anonymous" role can use the same form: it is fine
           // for this form to be stored in the render cache.
           if ($this->currentUser->isAnonymous()) {
-            $output['comment_form'] = comment_add($entity, $field_name);
+            $output['comment_form'] = $this->commentManager->addForm($entity, $field_name);
           }
           // All other users need a user-specific form, which would break the
           // render cache: hence use a #post_render_cache callback.
