diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
index 6bc8a23..e6608d7 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
@@ -45,8 +45,8 @@ public function access(EntityInterface $entity, $operation, $langcode = Language
    * Checks access to create an entity.
    *
    * @param string $entity_bundle
-   *   (optional) The bundle of the entity. Required if the entity supports
-   *   bundles, defaults to NULL otherwise.
+   *   (optional) The bundle of the entity. If no bundle has been given, access
+   *   is checked for any available bundle.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   (optional) The user session for which to check access, or NULL to check
    *   access for the current user. Defaults to NULL.
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index ca5025c..dabbc05 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Utility\LinkGeneratorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Component\Utility\String;
 
@@ -17,6 +18,13 @@
 class EntityListBuilder extends EntityControllerBase implements EntityListBuilderInterface, EntityControllerInterface {
 
   /**
+   * The entity access controller.
+   *
+   * @var \Drupal\Core\Entity\EntityAccessControllerInterface
+   */
+  protected $entityAccess;
+
+  /**
    * The entity storage class.
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
@@ -38,6 +46,13 @@ class EntityListBuilder extends EntityControllerBase implements EntityListBuilde
   protected $entityType;
 
   /**
+   * The link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $linkGenerator;
+
+  /**
    * {@inheritdoc}
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
@@ -181,16 +196,19 @@ public function buildOperations(EntityInterface $entity) {
    * {@inheritdoc}
    *
    * Builds the entity listing as renderable array for theme_table().
-   *
-   * @todo Add a link to add a new item to the #empty text.
    */
   public function render() {
+    $empty_text = $this->getEmptyText();
+    $add_link = $this->createAddLink();
+    if ($add_link) {
+      $empty_text .= ' ' . $add_link;
+    }
     $build = array(
       '#type' => 'table',
       '#header' => $this->buildHeader(),
       '#title' => $this->getTitle(),
       '#rows' => array(),
-      '#empty' => $this->t('There is no @label yet.', array('@label' => $this->entityType->getLabel())),
+      '#empty' => $empty_text,
     );
     foreach ($this->load() as $entity) {
       if ($row = $this->buildRow($entity)) {
@@ -201,6 +219,44 @@ public function render() {
   }
 
   /**
+   * Gets the text to display when the list is empty.
+   *
+   * @return string
+   */
+  protected function getEmptyText() {
+    return $this->t('There is no @label yet.', array(
+      '@label' => $this->entityType->getLabel(),
+    ));
+  }
+
+  /**
+   * Gets the text for the "Add new entity" link.
+   *
+   * @return string
+   */
+  protected function getAddLinkText() {
+    return $this->t('Add one.');
+  }
+
+  /**
+   * Creates a link to add a new entity.
+   *
+   * @return string|false
+   *   The HTML link or FALSE if no link is available.
+   */
+  protected function createAddLink() {
+    if ($this->entityType->hasLinkTemplate('add-entity-form') && $this->entityAccess->createAccess()) {
+      return $this->linkGenerator->generate(
+        $this->getAddLinkText(),
+        $this->entityType->getLinkTemplate('add-entity-form')
+      );
+    }
+    else {
+      return FALSE;
+    }
+  }
+
+  /**
    * Returns the title of the page.
    *
    * @return string
@@ -210,4 +266,30 @@ protected function getTitle() {
     return;
   }
 
+  /**
+   * Returns the link generator.
+   *
+   * @return \Drupal\Core\Utility\LinkGeneratorInterface
+   *   The link generator.
+   */
+  protected function linkGenerator() {
+    if (!$this->linkGenerator) {
+      $this->linkGenerator = \Drupal::linkGenerator();
+    }
+    return $this->linkGenerator;
+  }
+
+  /**
+   * Sets the link generator for this controller.
+   *
+   * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
+   *   The link generator.
+   *
+   * @return $this
+   */
+  public function setLinkGenerator(LinkGeneratorInterface $link_generator) {
+    $this->linkGenerator = $link_generator;
+    return $this;
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 32c9aae..cbc087a 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -21,6 +21,7 @@
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\Core\TypedData\TranslatableInterface;
+use Drupal\Core\Utility\LinkGeneratorInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
 
@@ -96,6 +97,13 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
   protected $classResolver;
 
   /**
+   * The link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $linkGenerator;
+
+  /**
    * Static cache of bundle information.
    *
    * @var array
@@ -135,8 +143,10 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
    *   The string translationManager.
    * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
    *   The class resolver.
+   * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
+   *   The link generator.
    */
-  public function __construct(\Traversable $namespaces, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, TranslationInterface $translation_manager, ClassResolverInterface $class_resolver) {
+  public function __construct(\Traversable $namespaces, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, TranslationInterface $translation_manager, ClassResolverInterface $class_resolver, LinkGeneratorInterface $link_generator) {
     parent::__construct('Entity', $namespaces, $module_handler, 'Drupal\Core\Entity\Annotation\EntityType');
 
     $this->setCacheBackend($cache, $language_manager, 'entity_type:', array('entity_types' => TRUE));
@@ -144,6 +154,7 @@ public function __construct(\Traversable $namespaces, ModuleHandlerInterface $mo
 
     $this->translationManager = $translation_manager;
     $this->classResolver = $class_resolver;
+    $this->linkGenerator = $link_generator;
   }
 
   /**
@@ -283,6 +294,9 @@ public function getController($entity_type, $controller_type, $controller_class_
       else {
         $controller = new $class($definition);
       }
+      if (method_exists($controller, 'setLinkGenerator')) {
+        $controller->setLinkGenerator($this->linkGenerator);
+      }
       if (method_exists($controller, 'setModuleHandler')) {
         $controller->setModuleHandler($this->moduleHandler);
       }
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
index 71913b7..dab73c6 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
@@ -39,7 +39,8 @@
  *     "canonical" = "custom_block.edit",
  *     "delete-form" = "custom_block.delete",
  *     "edit-form" = "custom_block.edit",
- *     "admin-form" = "custom_block.type_edit"
+ *     "admin-form" = "custom_block.type_edit",
+ *     "add-entity-form" = "custom_block.add_page"
  *   },
  *   fieldable = TRUE,
  *   translatable = TRUE,
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
index 65dd974..8b15903 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
@@ -36,7 +36,8 @@
  *   },
  *   links = {
  *     "delete-form" = "custom_block.type_delete",
- *     "edit-form" = "custom_block.type_edit"
+ *     "edit-form" = "custom_block.type_edit",
+ *     "add-entity-form" = "custom_block.type_add"
  *   }
  * )
  */
diff --git a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
index 6bd4a40..679970b 100644
--- a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
@@ -43,7 +43,8 @@
  *   links = {
  *     "flush-form" = "image.style_flush",
  *     "edit-form" = "image.style_edit",
- *     "delete-form" = "image.style_delete"
+ *     "delete-form" = "image.style_delete",
+ *     "add-entity-form" = "image.style_add"
  *   }
  * )
  */
diff --git a/core/modules/image/lib/Drupal/image/ImageStyleListBuilder.php b/core/modules/image/lib/Drupal/image/ImageStyleListBuilder.php
index 73dfe6c..98f6740 100644
--- a/core/modules/image/lib/Drupal/image/ImageStyleListBuilder.php
+++ b/core/modules/image/lib/Drupal/image/ImageStyleListBuilder.php
@@ -85,15 +85,4 @@ public function getDefaultOperations(EntityInterface $entity) {
     );
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function render() {
-    $build = parent::render();
-    $build['#empty'] = $this->t('There are currently no styles. <a href="!url">Add a new one</a>.', array(
-      '!url' => $this->urlGenerator->generateFromPath('admin/config/media/image-styles/add'),
-    ));
-    return $build;
-  }
-
 }
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index 1d21504..4b0c033 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -56,7 +56,8 @@
  *     "delete-form" = "node.delete_confirm",
  *     "edit-form" = "node.page_edit",
  *     "version-history" = "node.revision_overview",
- *     "admin-form" = "node.type_edit"
+ *     "admin-form" = "node.type_edit",
+ *     "add-entity-form" = "node.add_page"
  *   }
  * )
  */
diff --git a/core/modules/node/lib/Drupal/node/Entity/NodeType.php b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
index 307e947..d8bb003 100644
--- a/core/modules/node/lib/Drupal/node/Entity/NodeType.php
+++ b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
@@ -37,7 +37,8 @@
  *   links = {
  *     "add-form" = "node.add",
  *     "edit-form" = "node.type_edit",
- *     "delete-form" = "node.type_delete_confirm"
+ *     "delete-form" = "node.type_delete_confirm",
+ *     "add-entity-form" = "node.type_add"
  *   }
  * )
  */
diff --git a/core/modules/node/lib/Drupal/node/NodeListBuilder.php b/core/modules/node/lib/Drupal/node/NodeListBuilder.php
index fc9c0ba..95f8b8d 100644
--- a/core/modules/node/lib/Drupal/node/NodeListBuilder.php
+++ b/core/modules/node/lib/Drupal/node/NodeListBuilder.php
@@ -60,6 +60,20 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
   /**
    * {@inheritdoc}
    */
+  protected function getEmptyText() {
+    return $this->t('There is no content yet.');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getAddLinkText() {
+    return $this->t('Add new content.');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function buildHeader() {
     // Enable language column and filter if multiple languages are added.
     $header = array(
diff --git a/core/modules/node/lib/Drupal/node/NodeTypeListBuilder.php b/core/modules/node/lib/Drupal/node/NodeTypeListBuilder.php
index 779672a..8aeac3f 100644
--- a/core/modules/node/lib/Drupal/node/NodeTypeListBuilder.php
+++ b/core/modules/node/lib/Drupal/node/NodeTypeListBuilder.php
@@ -8,13 +8,8 @@
 namespace Drupal\node;
 
 use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
-use Drupal\Core\Entity\EntityTypeInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Component\Utility\Xss;
-use Drupal\Component\Utility\String;
 
 /**
  * Defines a class to build a listing of node type entities.
@@ -24,39 +19,6 @@
 class NodeTypeListBuilder extends ConfigEntityListBuilder {
 
   /**
-   * The url generator service.
-   *
-   * @var \Drupal\Core\Routing\UrlGeneratorInterface
-   */
-  protected $urlGenerator;
-
-  /**
-   * Constructs a NodeTypeForm object.
-   *
-   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
-   *   The entity type definition.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
-   *   The entity storage class.
-   * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
-   *   The url generator service.
-   */
-  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, UrlGeneratorInterface $url_generator) {
-    parent::__construct($entity_type, $storage);
-    $this->urlGenerator = $url_generator;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
-      $entity_type,
-      $container->get('entity.manager')->getStorage($entity_type->id()),
-      $container->get('url_generator')
-    );
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function buildHeader() {
@@ -93,15 +55,5 @@ public function getDefaultOperations(EntityInterface $entity) {
     return $operations;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function render() {
-    $build = parent::render();
-    $build['#empty'] = t('No content types available. <a href="@link">Add content type</a>.', array(
-      '@link' => $this->urlGenerator->generateFromPath('admin/structure/types/add'),
-    ));
-    return $build;
-  }
 
 }
diff --git a/core/modules/responsive_image/lib/Drupal/responsive_image/Entity/ResponsiveImageMapping.php b/core/modules/responsive_image/lib/Drupal/responsive_image/Entity/ResponsiveImageMapping.php
index d94d376..1eb8375 100644
--- a/core/modules/responsive_image/lib/Drupal/responsive_image/Entity/ResponsiveImageMapping.php
+++ b/core/modules/responsive_image/lib/Drupal/responsive_image/Entity/ResponsiveImageMapping.php
@@ -34,7 +34,8 @@
  *   },
  *   links = {
  *     "edit-form" = "responsive_image.mapping_page_edit",
- *     "duplicate-form" = "responsive_image.mapping_page_duplicate"
+ *     "duplicate-form" = "responsive_image.mapping_page_duplicate",
+ *     "add-entity-form" = "responsive_image.mapping_page_add"
  *   }
  * )
  */
diff --git a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
index a3d6ece..d7d6d35 100644
--- a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
+++ b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
@@ -33,7 +33,8 @@
  *   admin_permission = "administer site configuration",
  *   links = {
  *     "delete-form" = "system.date_format_delete",
- *     "edit-form" = "system.date_format_edit"
+ *     "edit-form" = "system.date_format_edit",
+ *     "add-entity-form" = "system.date_format_add"
  *   }
  * )
  */
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index 121d745..a0c65df 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -23,6 +23,13 @@
 class EntityListBuilderTest extends UnitTestCase {
 
   /**
+   * The entity access controller.
+   *
+   * @var \Drupal\Core\Entity\EntityAccessControllerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityAccess;
+
+  /**
    * The entity type used for testing.
    *
    * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -30,6 +37,13 @@ class EntityListBuilderTest extends UnitTestCase {
   protected $entityType;
 
   /**
+   * The link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $linkGenerator;
+
+  /**
    * The module handler used for testing.
    *
    * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -87,6 +101,8 @@ protected function setUp() {
 
     $this->role = $this->getMock('Drupal\user\RoleInterface');
     $this->roleStorage = $this->getMock('\Drupal\user\RoleStorageInterface');
+    $this->entityAccess = $this->getMock('\Drupal\Core\Entity\EntityAccessControllerInterface');
+    $this->linkGenerator = $this->getMock('\Drupal\Core\Utility\LinkGeneratorInterface');
     $this->moduleHandler = $this->getMock('\Drupal\Core\Extension\ModuleHandlerInterface');
     $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
     $this->translationManager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
