diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index a66b1e8..f898368 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -412,6 +412,56 @@ function entity_uri($entity_type, $entity) {
 }
 
 /**
+ * Returns the URL of an entity.
+ *
+ * @param Drupal\entity\EntityInterface $entity
+ *   The entity for which to generate a path.
+ * @param array $options
+ *   An associative array of additional options to pass to the url() function.
+ *
+ * @return string|NULL
+ *   The URL of the entity, or NULL if this value is unavailable.
+ *
+ * @see Drupal\entity\EntityInterface::uri()
+ */
+function entity_url(EntityInterface $entity, array $options = array()) {
+  $uri = $entity->uri();
+
+  if (isset($uri)) {
+    $options += $uri['options'];
+    return url($uri['path'], $options);
+  }
+}
+
+/**
+ * Format the URL of an entity as a HTML anchor tag.
+ *
+ * @param Drupal\entity\EntityInterface $entity
+ *   The entity for which to generate a path.
+ * @param $text
+ *   The link text for the anchor tag. Default to entity label.
+ * @param array $options
+ *   An associative array of additional options to pass to the l() function.
+ *
+ * @return string|NULL
+ *   The HTML markup for a link to the entity, or NULL if the value is
+ *   unavailable.
+ *
+ * @see Drupal\entity\EntityInterface::uri()
+ */
+function entity_l(EntityInterface $entity, $text = NULL, array $options = array()) {
+  $uri = $entity->uri();
+
+  if (isset($uri)) {
+    $options += $uri['options'];
+    if (!isset($text)) {
+      $text = $entity->label();
+    }
+    return l($text, $uri['path'], $options);
+  }
+}
+
+/**
  * Returns the label of an entity.
  *
  * This is a wrapper for Drupal\entity\EntityInterface::label(). This function
diff --git a/core/modules/entity/lib/Drupal/entity/EntityInterface.php b/core/modules/entity/lib/Drupal/entity/EntityInterface.php
index 699c424..89b8ab4 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityInterface.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityInterface.php
@@ -96,6 +96,9 @@ interface EntityInterface {
    *   An array containing the 'path' and 'options' keys used to build the URI
    *   of the entity, and matching the signature of url(). NULL if the entity
    *   has no URI of its own.
+   *
+   * @see entity_url()
+   * @see entity_l()
    */
   public function uri();
 
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityApiTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityApiTest.php
index 5eb245f..029fb2e 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityApiTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityApiTest.php
@@ -91,4 +91,17 @@ class EntityApiTest extends WebTestBase {
     $value = $entity->get('uid', 'en');
     $this->assertNull($value, 'Language neutral property has been retrieved.');
   }
+
+  /**
+   * Tests Entity uri functions.
+   */
+  function testEntityUri() {
+    $user1 = $this->drupalCreateUser();
+
+    // Uri is managed by Entity controller, here at the API level we just do
+    // simple tests.
+    $uri = $user1->uri();
+    $this->assertTrue(is_array($uri) && isset($uri['path']), 'An array has been returned by EntityInterface::uri().');
+    $this->assertTrue(is_string(entity_url($user1)), 'Entity URL has been created.');
+  }
 }
