diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index 051a363..f7d0710 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -31,8 +31,10 @@
 interface EntityInterface extends ComplexDataInterface, AccessibleInterface, TranslatableInterface {
 
   /**
-   * Instantiates a new empty entity object.
+   * Creates an entity object instance based on its values.
    *
+   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
+   *   The service container this object should use.
    * @param array $values
    *   An array of values to set, keyed by property name.
    * @param string $entity_type
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 197ba50..5eed979 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -194,7 +194,7 @@ public function hasController($entity_type, $controller_type) {
   }
 
   /**
-   * Instantiates a new empty entity object.
+   * Creates an entity object instance based on its values.
    *
    * Returns an empty entity object. If you need an entity object with default
    * values applied use \Drupal\Core\Entity\EntityManager::create() instead.
@@ -202,14 +202,21 @@ public function hasController($entity_type, $controller_type) {
    * @see entity_create()
    * @see \Drupal\Core\Entity\EntityManager::createInstance()
    *
-   * @param string $plugin_id
+   * @param string $entity_type
    *   The type of the entity.
-   * @param array $configuration
-   *   The configuration to create an entity instance. By default available keys
+   * @param array $values
+   *   The values to create an entity instance with. By default available keys
    *   are
-   *   bundle: the bundle of the entity,
-   *   values: An array of values to set, keyed by property name,
-   *   translations: An array of available translations of this entity.
+   *   - bundle: the bundle of the entity,
+   *   - values: An array of values to set, keyed by property name,
+   *   - translations: An array of available translations of this entity.
+   * @param string|FALSE $bundle
+   *   The bundle of the entity.
+   * @param array $translations
+   *   The langcodes of the available translations of the entity.
+   *
+   * @throws \InvalidArgumentException
+   *   If mandatory arguments are missing.
    *
    * @return \Drupal\Core\Entity\EntityInterface
    *   An empty new entity object.
@@ -223,8 +230,10 @@ public function createInstance($entity_type, array $values = array(), $bundle =
     $bundle_key = !empty($definition['entity_keys']['bundle']) ? $definition['entity_keys']['bundle'] : FALSE;
     if ($bundle_key) {
       if (empty($bundle)) {
-        throw new EntityStorageException(format_string('Missing bundle for entity type @type', array('@type' => $entity_type)));
+        throw new \InvalidArgumentException(format_string('Missing bundle for entity type @type', array('@type' => $entity_type)));
       }
+      // Make sure the bundle is part of the values too.
+      $values[$bundle_key] = $bundle;
     }
     return $definition['class']::createInstance(\Drupal::getContainer(), $values, $entity_type, $bundle, $translations);
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index 04d43e6..84a1d43 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -162,8 +162,8 @@ public function __construct(array $values, $entity_type, $bundle = FALSE, $trans
 
     // Currently each stored value has it's own internal language structure,
     // ensure the passed in values meet the required structure and set them to
-    // the raw values array of the entity.
-    // The raw values array will be used whenever properties accessed.
+    // the plain values array of the entity.
+    // The plain values array will be used whenever properties accessed.
     // @todo Change the raw values array structure to hold field values per
     // language instead languages per field.
     foreach ($values as $field => $value) {
diff --git a/core/modules/user/lib/Drupal/user/Entity/User.php b/core/modules/user/lib/Drupal/user/Entity/User.php
index d975177..22c29a3 100644
--- a/core/modules/user/lib/Drupal/user/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Entity/User.php
@@ -543,6 +543,12 @@ public static function baseFieldDefinitions($entity_type) {
       // https://drupal.org/node/2044859
       'type' => 'string_field',
     );
+    $properties['homepage'] = array(
+      'label' => t('Homepage'),
+      'description' => t('The users home page address.'),
+      'type' => 'string_field',
+      'computed' => TRUE,
+    );
     return $properties;
   }
 
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 24aee74..c4a0e8e 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -650,8 +650,8 @@ function template_preprocess_username(&$variables) {
     // space-separated set of values, so initialize it as an array to make it
     // easier for other preprocess functions to append to it.
     $variables['link_options']['attributes']['rel'] = 'nofollow';
-    $variables['link_path'] = $account->homepage;
-    $variables['homepage'] = $account->homepage;
+    $variables['link_path'] = $account->homepage->value;
+    $variables['homepage'] = $account->homepage->value;
   }
   // We do not want the l() function to check_plain() a second time.
   $variables['link_options']['html'] = TRUE;
