diff --git a/core/lib/Drupal/Core/Link.php b/core/lib/Drupal/Core/Link.php
index 05869a2..f34b9de 100644
--- a/core/lib/Drupal/Core/Link.php
+++ b/core/lib/Drupal/Core/Link.php
@@ -7,12 +7,13 @@
 
 namespace Drupal\Core;
 
+use Drupal\Core\Render\RenderableInterface;
 use Drupal\Core\Routing\LinkGeneratorTrait;
 
 /**
  * Defines an object that holds information about a link.
  */
-class Link {
+class Link implements RenderableInterface  {
 
   use LinkGeneratorTrait;
 
@@ -75,6 +76,10 @@ public static function createFromRoute($text, $route_name, $route_parameters = a
     return new static($text, new Url($route_name, $route_parameters, $options));
   }
 
+  public static function fromUrl($title, Url $url, $options = []) {
+    return new static($title, $url, $options);
+  }
+
   /**
    * Returns the text of the link.
    *
@@ -135,4 +140,15 @@ public function toString($collect_bubbleable_metadata = FALSE) {
     return $this->getLinkGenerator()->generateFromLink($this, $collect_bubbleable_metadata);
   }
 
+  /**
+   * @inheritDoc
+   */
+  public function buildRenderable() {
+    return [
+      '#type' => 'link',
+      '#url' => $this->url,
+      '#title' => $this->text,
+    ];
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Render/RenderableInterface.php b/core/lib/Drupal/Core/Render/RenderableInterface.php
new file mode 100644
index 0000000..aeec022
--- /dev/null
+++ b/core/lib/Drupal/Core/Render/RenderableInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Render\RenderableInterface.
+ */
+
+namespace Drupal\Core\Render;
+
+/**
+ * Defines an object which can be rendered by render API.
+ *
+ * Good usecases are objects like the Link object.
+ */
+interface RenderableInterface {
+
+  /**
+   * Returns a render array representation of the object.
+   *
+   * @return array
+   *   A render array.
+   */
+  public function buildRenderable();
+
+}
diff --git a/core/lib/Drupal/Core/Template/TwigExtension.php b/core/lib/Drupal/Core/Template/TwigExtension.php
index 482c888..6b614b3 100644
--- a/core/lib/Drupal/Core/Template/TwigExtension.php
+++ b/core/lib/Drupal/Core/Template/TwigExtension.php
@@ -14,6 +14,7 @@
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\SafeStringInterface;
+use Drupal\Core\Render\RenderableInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Theme\ThemeManagerInterface;
@@ -493,6 +494,10 @@ public function renderVar($arg) {
       if (method_exists($arg, '__toString')) {
         return (string) $arg;
       }
+      elseif ($arg instanceof RenderableInterface) {
+        $arg = $arg->buildRenderable();
+        return $this->renderer->render($arg);
+      }
       // You can't throw exceptions in the magic PHP __toString methods, see
       // http://php.net/manual/en/language.oop5.magic.php#object.tostring so
       // we also support a toString method.
diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
index 5f15073..c2f5169 100644
--- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
+++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Link;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -40,13 +41,6 @@ class ImageFormatter extends ImageFormatterBase implements ContainerFactoryPlugi
   protected $currentUser;
 
   /**
-   * The link generator.
-   *
-   * @var \Drupal\Core\Utility\LinkGeneratorInterface
-   */
-  protected $linkGenerator;
-
-  /**
    * The image style entity storage.
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
@@ -75,10 +69,9 @@ class ImageFormatter extends ImageFormatterBase implements ContainerFactoryPlugi
    * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
    *   The link generator service.
    */
-  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, LinkGeneratorInterface $link_generator, EntityStorageInterface $image_style_storage) {
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, EntityStorageInterface $image_style_storage) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
     $this->currentUser = $current_user;
-    $this->linkGenerator = $link_generator;
     $this->imageStyleStorage = $image_style_storage;
   }
 
@@ -95,7 +88,6 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration['view_mode'],
       $configuration['third_party_settings'],
       $container->get('current_user'),
-      $container->get('link_generator'),
       $container->get('entity.manager')->getStorage('image_style')
     );
   }
@@ -115,17 +107,14 @@ public static function defaultSettings() {
    */
   public function settingsForm(array $form, FormStateInterface $form_state) {
     $image_styles = image_style_options(FALSE);
-    $element['image_style'] = array(
+    $element['image_style'] = [
       '#title' => t('Image style'),
       '#type' => 'select',
       '#default_value' => $this->getSetting('image_style'),
       '#empty_option' => t('None (original image)'),
       '#options' => $image_styles,
-      '#description' => array(
-        '#markup' => $this->linkGenerator->generate($this->t('Configure Image Styles'), new Url('entity.image_style.collection')),
-        '#access' => $this->currentUser->hasPermission('administer image styles'),
-      ),
-    );
+      '#description' => Link::fromUrl($this->t('Configure Image Styles'), Url::fromRoute('entity.image_style.collection'))->buildRenderable() + ['#access' => $this->currentUser->hasPermission('administer image styles')],
+    ];
     $link_types = array(
       'content' => t('Content'),
       'file' => t('File'),
diff --git a/core/modules/menu_ui/src/MenuForm.php b/core/modules/menu_ui/src/MenuForm.php
index e008b3b..fd34a96 100644
--- a/core/modules/menu_ui/src/MenuForm.php
+++ b/core/modules/menu_ui/src/MenuForm.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Link;
 use Drupal\Core\Menu\MenuLinkManagerInterface;
 use Drupal\Core\Menu\MenuLinkTreeElement;
 use Drupal\Core\Menu\MenuLinkTreeInterface;
@@ -353,7 +354,7 @@ protected function buildOverviewTreeForm($tree, $delta) {
         $id = 'menu_plugin_id:' . $link->getPluginId();
         $form[$id]['#item'] = $element;
         $form[$id]['#attributes'] = $link->isEnabled() ? array('class' => array('menu-enabled')) : array('class' => array('menu-disabled'));
-        $form[$id]['title']['#markup'] = $this->linkGenerator->generate($link->getTitle(), $link->getUrlObject());
+        $form[$id]['title']['#markup'] = Link::fromUrl($link->getTitle(), $link->getUrlObject())->toString();
         if (!$link->isEnabled()) {
           $form[$id]['title']['#markup'] .= ' (' . $this->t('disabled') . ')';
         }
