diff --git a/core/core.services.yml b/core/core.services.yml
index cd3ac5008c856ce33fff0a23cdf87df3f3fc6b37..1b0d520b2f0095ac34155ccdb3e78f1a89332b38 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -70,7 +70,7 @@ services:
       - { name: persist }
   config.context.factory:
     class: Drupal\Core\Config\Context\ConfigContextFactory
-    arguments: ['@event_dispatcher']
+    arguments: ['@event_dispatcher', '@uuid']
   config.context:
     class: Drupal\Core\Config\Context\ContextInterface
     tags:
diff --git a/core/includes/config.inc b/core/includes/config.inc
index 56364a80aec090f3f874739d63dc2285ed39d733..fa804acdbe72a4529127bb82a6d7b60bce4e83f8 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -76,7 +76,8 @@ function ($value) use ($name) {
       \Drupal::service('event_dispatcher'),
       \Drupal::service('config.factory'),
       \Drupal::entityManager(),
-      \Drupal::lock()
+      \Drupal::lock(),
+      \Drupal::service('uuid')
     );
     $installer->import();
   }
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 64c7c1ee3e40ceaeeee8bd0c2790436091d30588..91a241fff6de43f6a90b47a246ee72eb864c72fa 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -375,7 +375,8 @@ function install_begin_request(&$install_state) {
 
     $container->register('config.storage', 'Drupal\Core\Config\InstallStorage');
     $container->register('config.context.factory', 'Drupal\Core\Config\Context\ConfigContextFactory')
-      ->addArgument(new Reference('event_dispatcher'));
+      ->addArgument(new Reference('event_dispatcher'))
+      ->addArgument(new Reference('uuid'));
 
     $container->register('config.context', 'Drupal\Core\Config\Context\ContextInterface')
       ->setFactoryService(new Reference('config.context.factory'))
@@ -435,6 +436,9 @@ function install_begin_request(&$install_state) {
 
     $container->register('url_generator', 'Drupal\Core\Routing\NullGenerator');
 
+    // Register UUID.
+    CoreServiceProvider::registerUuid($container);
+
     // Register the CSS and JavaScript asset collection renderers.
     $container->register('asset.css.collection_renderer', 'Drupal\Core\Asset\CssCollectionRenderer');
     $container->register('asset.js.collection_renderer', 'Drupal\Core\Asset\JsCollectionRenderer');
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 789d13681ed8c2f90652f91d58339c69519a697b..79090551163e907afd6bd4926812f99c382bd856 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -582,7 +582,7 @@ function update_prepare_d8_language() {
 
     // Convert languages to config entities.
     $result = db_query('SELECT * FROM {language}');
-    $uuid = new Uuid();
+    $uuid = \Drupal::service('uuid');
     foreach ($result as $language) {
       \Drupal::config('language.entity.' . $language->langcode)
         ->set('id', $language->langcode)
@@ -1535,7 +1535,7 @@ function update_variables_to_state(array $variable_map) {
  *   A $primary_key values of rows to be updated.
  */
 function update_add_uuids(&$sandbox, $table, $primary_key, $values) {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   foreach ($values as $value) {
     db_update($table)
       ->fields(array(
diff --git a/core/lib/Drupal/Component/Uuid/Com.php b/core/lib/Drupal/Component/Uuid/Com.php
index 5a08294c22e7eadb5202e4bea5a888c4c0660568..21e39c0cf46274527526ffa26841e1a18e54dae7 100644
--- a/core/lib/Drupal/Component/Uuid/Com.php
+++ b/core/lib/Drupal/Component/Uuid/Com.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\Component\Uuid\Com.
+ * Contains \Drupal\Component\Uuid\Com.
  */
 
 namespace Drupal\Component\Uuid;
diff --git a/core/lib/Drupal/Component/Uuid/Pecl.php b/core/lib/Drupal/Component/Uuid/Pecl.php
index 5eca5ed5d91ccb277ac86e6b8bb83e9012058ffc..3861138d75f866564eb3dff7db03ce03c437b5c1 100644
--- a/core/lib/Drupal/Component/Uuid/Pecl.php
+++ b/core/lib/Drupal/Component/Uuid/Pecl.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\Component\Uuid\Pecl.
+ * Contains \Drupal\Component\Uuid\Pecl.
  */
 
 namespace Drupal\Component\Uuid;
diff --git a/core/lib/Drupal/Component/Uuid/Php.php b/core/lib/Drupal/Component/Uuid/Php.php
index 9c0a17091e412d8b1ee0c64a337252499dcd897f..08c526149c33ae42eb003260320e0770d4a9bb0f 100644
--- a/core/lib/Drupal/Component/Uuid/Php.php
+++ b/core/lib/Drupal/Component/Uuid/Php.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\Component\Uuid\Php.
+ * Contains \Drupal\Component\Uuid\Php.
  */
 
 namespace Drupal\Component\Uuid;
@@ -46,4 +46,5 @@ public function generate() {
 
     return $uuid;
   }
+
 }
diff --git a/core/lib/Drupal/Component/Uuid/Uuid.php b/core/lib/Drupal/Component/Uuid/Uuid.php
index 5df83cea0e9741c82a24586204ca5abed799faba..7998adefd1b358285e3b540c838f0e7c2c4f3b77 100644
--- a/core/lib/Drupal/Component/Uuid/Uuid.php
+++ b/core/lib/Drupal/Component/Uuid/Uuid.php
@@ -2,48 +2,21 @@
 
 /**
  * @file
- * Definition of Drupal\Component\Uuid\Uuid.
+ * Contains \Drupal\Component\Uuid\Uuid.
  */
 
 namespace Drupal\Component\Uuid;
 
 /**
- * Factory class for UUIDs.
- *
- * Determines which UUID implementation to use, and uses that to generate
- * and validate UUIDs.
+ * UUID Helper methods.
  */
 class Uuid {
 
-  /**
-   * Holds the UUID implementation.
-   *
-   * @var Drupal\Component\Uuid\UuidInterface
-   */
-  protected $plugin;
-
-  /**
-   * Instantiates the correct UUID object.
-   */
-  public function __construct() {
-    $class = $this->determinePlugin();
-    $this->plugin = new $class();
-  }
-
-  /**
-   * Generates a universally unique identifier.
-   *
-   * @see Drupal\Component\Uuid\UuidInterface::generate()
-   */
-  public function generate() {
-    return $this->plugin->generate();
-  }
-
   /**
    * Checks that a string appears to be in the format of a UUID.
    *
-   * Plugins should not implement validation, since UUIDs should be in a
-   * consistent format across all plugins.
+   * Implementations should not implement validation, since UUIDs should be in
+   * a consistent format across all implementations.
    *
    * @param string $uuid
    *   The string to test.
@@ -51,37 +24,8 @@ public function generate() {
    * @return bool
    *   TRUE if the string is well formed, FALSE otherwise.
    */
-  public function isValid($uuid) {
-    return preg_match("/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/", $uuid);
+  public static function isValid($uuid) {
+    return (bool) preg_match("/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/", $uuid);
   }
 
-  /**
-   * Determines the optimal implementation to use for generating UUIDs.
-   *
-   * The selection is made based on the enabled PHP extensions with the
-   * most performant available option chosen.
-   *
-   * @return string
-   *  The class name for the optimal UUID generator.
-   */
-  protected function determinePlugin() {
-    static $plugin;
-    if (!empty($plugin)) {
-      return $plugin;
-    }
-
-    $plugin = 'Drupal\Component\Uuid\Php';
-
-    // Debian/Ubuntu uses the (broken) OSSP extension as their UUID
-    // implementation. The OSSP implementation is not compatible with the
-    // PECL functions.
-    if (function_exists('uuid_create') && !function_exists('uuid_make')) {
-      $plugin = 'Drupal\Component\Uuid\Pecl';
-    }
-    // Try to use the COM implementation for Windows users.
-    elseif (function_exists('com_create_guid')) {
-      $plugin = 'Drupal\Component\Uuid\Com';
-    }
-    return $plugin;
-  }
 }
diff --git a/core/lib/Drupal/Core/Config/ConfigImporter.php b/core/lib/Drupal/Core/Config/ConfigImporter.php
index d496fe78fd487526cf2d2a71f9fb6a93d4d65031..ba2ece655ca73f0b0ce35644fe239ce93177ce8d 100644
--- a/core/lib/Drupal/Core/Config/ConfigImporter.php
+++ b/core/lib/Drupal/Core/Config/ConfigImporter.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Config\Context\FreeConfigContext;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Lock\LockBackendInterface;
+use Drupal\Component\Uuid\UuidInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 /**
@@ -94,6 +95,13 @@ class ConfigImporter {
    */
   protected $validated;
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Constructs a configuration import object.
    *
@@ -108,18 +116,21 @@ class ConfigImporter {
    *   The entity manager used to import config entities.
    * @param \Drupal\Core\Lock\LockBackendInterface
    *   The lock backend to ensure multiple imports do not occur at the same time.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
    */
-  public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, LockBackendInterface $lock) {
+  public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, LockBackendInterface $lock, UuidInterface $uuid_service) {
     $this->storageComparer = $storage_comparer;
     $this->eventDispatcher = $event_dispatcher;
     $this->configFactory = $config_factory;
     $this->entityManager = $entity_manager;
     $this->lock = $lock;
+    $this->uuidService = $uuid_service;
     $this->processed = $this->storageComparer->getEmptyChangelist();
     // Use an override free context for importing so that overrides to do not
     // pollute the imported data. The context is hard coded to ensure this is
     // the case.
-    $this->context = new FreeConfigContext($this->eventDispatcher);
+    $this->context = new FreeConfigContext($this->eventDispatcher, $this->uuidService);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Context/ConfigContext.php b/core/lib/Drupal/Core/Config/Context/ConfigContext.php
index a5382fdb68cc705af73e00ba7d51f4fc66a02d4f..128165b4e824e781127b61fbc762213bb15f53ed 100644
--- a/core/lib/Drupal/Core/Config/Context/ConfigContext.php
+++ b/core/lib/Drupal/Core/Config/Context/ConfigContext.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Config\Config;
 use Drupal\Core\Config\ConfigEvent;
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Component\Uuid\Uuid;
+use Drupal\Component\Uuid\UuidInterface;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 
 /**
@@ -49,14 +49,24 @@ class ConfigContext implements ContextInterface {
    */
   protected $uuid;
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Constructs the configuration context.
    *
    * @param \Symfony\Component\EventDispatcher\EventDispatcher $event_dispatcher
    *   An event dispatcher instance to use for configuration events.
+   * @param \Drupal\Component\Uuid\UuidInterface
+   *   The UUID service.
    */
-  public function __construct(EventDispatcher $event_dispatcher) {
+  public function __construct(EventDispatcher $event_dispatcher, UuidInterface $uuid) {
     $this->eventDispatcher = $event_dispatcher;
+    $this->uuidService = $uuid;
   }
 
   /**
@@ -89,8 +99,7 @@ public function set($key, $value) {
    * Implements \Drupal\Core\Config\Context\ContextInterface::setUuid().
    */
   public function setUuid() {
-    $uuid = new Uuid();
-    $this->uuid = $uuid->generate();
+    $this->uuid = $this->uuidService->generate();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php b/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php
index 164238021dc8fdb9a1eccccf54965b73b2ebd540..de3fd7bbbeb970a5f8b0ebaf36e5b51eb9acccf5 100644
--- a/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php
+++ b/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Config\Config;
 use Drupal\Core\Config\ConfigException;
+use Drupal\Component\Uuid\UuidInterface;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 
 /**
@@ -27,14 +28,24 @@ class ConfigContextFactory {
    */
   protected $eventDispatcher;
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Constructs the configuration context.
    *
    * @param \Symfony\Component\EventDispatcher\EventDispatcher $event_dispatcher
    *   An event dispatcher instance to use for configuration events.
+   * @param \Drupal\Component\Uuid\UuidInterface
+   *   The UUID service.
    */
-  public function __construct(EventDispatcher $event_dispatcher) {
+  public function __construct(EventDispatcher $event_dispatcher, UuidInterface $uuid) {
     $this->eventDispatcher = $event_dispatcher;
+    $this->uuidService = $uuid;
   }
 
   /**
@@ -52,7 +63,7 @@ public function get($class = NULL) {
       $class = 'Drupal\Core\Config\Context\ConfigContext';
     }
     if (class_exists($class)) {
-      $context = new $class($this->eventDispatcher);
+      $context = new $class($this->eventDispatcher, $this->uuidService);
     }
     else {
       throw new ConfigException(sprintf('Unknown config context class: %s', $class));
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
index 60d0ce0590523f2536c3c4b70cdd1bcf55159a02..2fd44c4ae596c3b5d1bbad1c37ca0308a995f50b 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Config\Entity;
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Core\Entity\EntityStorageControllerBase;
@@ -15,6 +14,7 @@
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\Component\Uuid\UuidInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -41,6 +41,13 @@ class ConfigStorageController extends EntityStorageControllerBase {
    */
   protected $uuidKey = 'uuid';
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Name of the entity's status key or FALSE if a status is not supported.
    *
@@ -82,8 +89,10 @@ class ConfigStorageController extends EntityStorageControllerBase {
    *   The config storage service.
    * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory
    *   The entity query factory.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
    */
-  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory) {
+  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service) {
     parent::__construct($entity_type, $entity_info);
 
     $this->idKey = $this->entityInfo['entity_keys']['id'];
@@ -98,6 +107,7 @@ public function __construct($entity_type, array $entity_info, ConfigFactory $con
     $this->configFactory = $config_factory;
     $this->configStorage = $config_storage;
     $this->entityQueryFactory = $entity_query_factory;
+    $this->uuidService = $uuid_service;
   }
 
   /**
@@ -109,7 +119,8 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $entity_info,
       $container->get('config.factory'),
       $container->get('config.storage'),
-      $container->get('entity.query')
+      $container->get('entity.query'),
+      $container->get('uuid')
     );
   }
 
@@ -323,8 +334,7 @@ public function create(array $values) {
 
     // Assign a new UUID if there is none yet.
     if (!isset($entity->{$this->uuidKey})) {
-      $uuid = new Uuid();
-      $entity->{$this->uuidKey} = $uuid->generate();
+      $entity->{$this->uuidKey} = $this->uuidService->generate();
     }
     $entity->postCreate($this);
 
diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php
index a6cb9574da9bb537209484ab7c47530e92eb5aaa..9cd8f5a87bbd62d790e5a096952b72d26edc6800 100644
--- a/core/lib/Drupal/Core/CoreServiceProvider.php
+++ b/core/lib/Drupal/Core/CoreServiceProvider.php
@@ -50,6 +50,7 @@ public function register(ContainerBuilder $container) {
     $container->addScope(new Scope('request'));
     $this->registerTwig($container);
     $this->registerModuleHandler($container);
+    $this->registerUuid($container);
 
     $container->addCompilerPass(new RegisterRouteFiltersPass());
     // Add a compiler pass for registering event subscribers.
@@ -133,4 +134,31 @@ public static function registerTwig(ContainerBuilder $container) {
       ->addMethodCall('addExtension', array(new Definition('Twig_Extension_Debug')));
   }
 
+  /**
+   * Determines and registers the UUID service.
+   *
+   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
+   *   The container.
+   *
+   * @return string
+   *   Class name for the UUID service.
+   */
+  public static function registerUuid(ContainerBuilder $container) {
+    $uuid_class = 'Drupal\Component\Uuid\Php';
+
+    // Debian/Ubuntu uses the (broken) OSSP extension as their UUID
+    // implementation. The OSSP implementation is not compatible with the
+    // PECL functions.
+    if (function_exists('uuid_create') && !function_exists('uuid_make')) {
+      $uuid_class = 'Drupal\Component\Uuid\Pecl';
+    }
+    // Try to use the COM implementation for Windows users.
+    elseif (function_exists('com_create_guid')) {
+      $uuid_class = 'Drupal\Component\Uuid\Com';
+    }
+
+    $container->register('uuid', $uuid_class);
+    return $uuid_class;
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
index e69d2f6d9ea2059e75482b3781d3947f9988dd71..4bd89ae9e9a179e1c87b0f9e22ea49c14fa5756c 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Entity\Query\QueryInterface;
 use Drupal\Core\Language\Language;
@@ -29,6 +30,13 @@
  */
 class DatabaseStorageController extends FieldableEntityStorageControllerBase {
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Name of entity's revision database table field, if it supports revisions.
    *
@@ -76,7 +84,8 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $entity_type,
       $entity_info,
       $container->get('database'),
-      $container->get('field.info')
+      $container->get('field.info'),
+      $container->get('uuid')
     );
   }
 
@@ -91,12 +100,15 @@ public static function createInstance(ContainerInterface $container, $entity_typ
    *   The database connection to be used.
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
    */
-  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info) {
+  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info, UuidInterface $uuid_service) {
     parent::__construct($entity_type, $entity_info);
 
     $this->database = $database;
     $this->fieldInfo = $field_info;
+    $this->uuidService = $uuid_service;
 
     // Check if the entity type supports IDs.
     if (isset($this->entityInfo['entity_keys']['id'])) {
@@ -380,8 +392,7 @@ public function create(array $values) {
 
     // Assign a new UUID if there is none yet.
     if ($this->uuidKey && !isset($entity->{$this->uuidKey})) {
-      $uuid = new Uuid();
-      $entity->{$this->uuidKey} = $uuid->generate();
+      $entity->{$this->uuidKey} = $this->uuidService->generate();
     }
     $entity->postCreate($this);
 
diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index 9fb88df6c31b271f35e740173fb584159fca082a..02b9978c7594779a4a26df03e0462d3ff69758c4 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\Core\Entity\EntityStorageException;
-use Drupal\Component\Uuid\Uuid;
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Database\Connection;
 
 /**
@@ -52,8 +52,8 @@ class DatabaseStorageControllerNG extends DatabaseStorageController {
   /**
    * Overrides DatabaseStorageController::__construct().
    */
-  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info) {
-    parent::__construct($entity_type,$entity_info, $database, $field_info);
+  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info, UuidInterface $uuid_service) {
+    parent::__construct($entity_type,$entity_info, $database, $field_info, $uuid_service);
     $this->bundleKey = !empty($this->entityInfo['entity_keys']['bundle']) ? $this->entityInfo['entity_keys']['bundle'] : FALSE;
     $this->entityClass = $this->entityInfo['class'];
 
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index d4b4ea5d015e1772ef39b1a7d0e7816370828756..6d41d1304ef7cff4451f727bde5119b4f0acc10a 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Entity;
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\Plugin\DataType\EntityReferenceItem;
 use Drupal\Core\Language\Language;
 use Drupal\Core\TypedData\TranslatableInterface;
@@ -448,8 +447,8 @@ public function createDuplicate() {
 
     // Check if the entity type supports UUIDs and generate a new one if so.
     if (!empty($entity_info['entity_keys']['uuid'])) {
-      $uuid = new Uuid();
-      $duplicate->{$entity_info['entity_keys']['uuid']} = $uuid->generate();
+      // @todo Inject the UUID service into the Entity class once possible.
+      $duplicate->{$entity_info['entity_keys']['uuid']} = \Drupal::service('uuid')->generate();
     }
     return $duplicate;
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index 66f9ea72e51506e68933d398e4a6c6ffb7ceb141..49fa3a076c620f000405ea0be2791312521693f1 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -55,6 +55,7 @@ class EntityNG extends Entity {
    *
    * @todo: Add methods for getting original fields and for determining
    * changes.
+   * @todo: Provide a better way for defining default values.
    *
    * @var array
    */
@@ -712,7 +713,8 @@ public function createDuplicate() {
 
     // Check if the entity type supports UUIDs and generate a new one if so.
     if (!empty($entity_info['entity_keys']['uuid'])) {
-      $duplicate->{$entity_info['entity_keys']['uuid']}->applyDefaultValue();
+      // @todo Inject the UUID service into the Entity class once possible.
+      $duplicate->{$entity_info['entity_keys']['uuid']}->value = \Drupal::service('uuid')->generate();
     }
 
     // Check whether the entity type supports revisions and initialize it if so.
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
index 737409d64cdcc3f14ac821e4cd8918ba0c61f026..d06e69db7e3ecc7bfcd8df6230aa0f039b87d42a 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\TypedData\Annotation\DataType;
 use Drupal\Core\Annotation\Translation;
-use Drupal\Component\Uuid\Uuid;
 
 /**
  * Defines the 'uuid_field' entity field item.
@@ -35,7 +34,7 @@ class UuidItem extends StringItem {
    */
   public function applyDefaultValue($notify = TRUE) {
     // Default to one field item with a generated UUID.
-    $uuid = new Uuid();
+    $uuid = \Drupal::service('uuid');
     $this->setValue(array('value' => $uuid->generate()), $notify);
     return $this;
   }
diff --git a/core/modules/block/block.install b/core/modules/block/block.install
index ed996f63b436f5d6219b6ef80c71a79c501f7b91..9c5304bdf0fa94f5ca94f69fb4624bb7f2c05011 100644
--- a/core/modules/block/block.install
+++ b/core/modules/block/block.install
@@ -4,7 +4,7 @@
  * @file
  * Install, update and uninstall functions for the block module.
  */
-use Drupal\Component\Uuid\Uuid;
+
 use Drupal\Core\Language\Language;
 
 /**
@@ -198,7 +198,7 @@ function block_update_8007() {
   // Populate the {custom_block} and {custom_block_revision} table.
   $results = db_select('block_custom', 'bc')->fields('bc')->execute();
 
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $execute = FALSE;
   $block_insert = db_insert('custom_block')->fields(array(
     'id',
diff --git a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
index 6068ce9124d6cd933641fc0b6d315146ad1c664c..f1c9c3f321460ae423f3f3e3f0fbae69ae94ebeb 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\DatabaseStorageControllerNG;
-use Drupal\Component\Uuid\Uuid;
 
 /**
  * Defines the controller class for comments.
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
index 7876ef6f66f49629171fccff29f3403e174cb1e9..da65a0988c6fe1a8a2a380a35032b6f21c9daa61 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\config\Form;
 
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Config\StorageInterface;
@@ -64,6 +65,13 @@ class ConfigSync extends FormBase {
    */
   protected $urlGenerator;
 
+  /**
+   * The UUID service.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface
+   */
+  protected $uuidService;
+
   /**
    * Constructs the object.
    *
@@ -81,8 +89,10 @@ class ConfigSync extends FormBase {
    *   Entity manager.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   * The UUID Service.
    */
-  public function __construct(StorageInterface $sourceStorage, StorageInterface $targetStorage, LockBackendInterface $lock, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, UrlGeneratorInterface $url_generator) {
+  public function __construct(StorageInterface $sourceStorage, StorageInterface $targetStorage, LockBackendInterface $lock, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, UrlGeneratorInterface $url_generator, UuidInterface $uuid_service) {
     $this->sourceStorage = $sourceStorage;
     $this->targetStorage = $targetStorage;
     $this->lock = $lock;
@@ -90,6 +100,7 @@ public function __construct(StorageInterface $sourceStorage, StorageInterface $t
     $this->configFactory = $config_factory;
     $this->entity_manager = $entity_manager;
     $this->urlGenerator = $url_generator;
+    $this->uuidService = $uuid_service;
   }
 
   /**
@@ -103,7 +114,8 @@ public static function create(ContainerInterface $container) {
       $container->get('event_dispatcher'),
       $container->get('config.factory'),
       $container->get('entity.manager'),
-      $container->get('url_generator')
+      $container->get('url_generator'),
+      $container->get('uuid')
     );
   }
 
@@ -206,7 +218,8 @@ public function submitForm(array &$form, array &$form_state) {
       $this->eventDispatcher,
       $this->configFactory,
       $this->entity_manager,
-      $this->lock
+      $this->lock,
+      $this->uuidService
     );
     if ($config_importer->alreadyImporting()) {
       drupal_set_message($this->t('Another request may be synchronizing configuration already.'));
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php
index c4bb60aa8fcfc6add38f6b5121eca85887df0a36..5ab2ea46793fdbbf975e8589dc38d541740ad3e7 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\config\Tests;
 
 use Drupal\simpletest\DrupalUnitTestBase;
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Config\ConfigDuplicateUUIDException;
 
 /**
@@ -44,8 +43,7 @@ public function testUUIDConflict() {
     $original_properties = $entity->getExportProperties();
 
     // Override with a new UUID and try to save.
-    $uuid = new Uuid();
-    $new_uuid = $uuid->generate();
+    $new_uuid = $this->container->get('uuid')->generate();
     $entity->set('uuid', $new_uuid);
 
     try {
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php
index b17c48b8d3f18629708e802c3d99423b8e0b979b..99fbaea9b1c604abf4b15aa17e528afb439a8253 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php
@@ -60,7 +60,8 @@ function setUp() {
       $this->container->get('event_dispatcher'),
       $this->container->get('config.factory'),
       $this->container->get('entity.manager'),
-      $this->container->get('lock')
+      $this->container->get('lock'),
+      $this->container->get('uuid')
     );
     $this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.staging'));
   }
diff --git a/core/modules/contact/contact.install b/core/modules/contact/contact.install
index 3f71a5d9322ea531d3169d9af1f53203742f567d..c3802e78f618cf67c0fb2be824d8e33908b7f7ea 100644
--- a/core/modules/contact/contact.install
+++ b/core/modules/contact/contact.install
@@ -5,7 +5,6 @@
  * Install, update and uninstall functions for the contact module.
  */
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Language\Language;
 
 /**
@@ -54,7 +53,7 @@ function contact_update_8000() {
  * @ingroup config_upgrade
  */
 function contact_update_8001() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $result = db_query('SELECT * FROM {contact}');
   foreach ($result as $category) {
     // Take over the category's serial ID as new machine name.
diff --git a/core/modules/entity/entity.install b/core/modules/entity/entity.install
index 95d485bd88215e1d8278057dac62d757c8932d80..01d898eaa3b31922888fa1b1e44025130bfed110 100644
--- a/core/modules/entity/entity.install
+++ b/core/modules/entity/entity.install
@@ -5,8 +5,6 @@
  * Install, update and uninstall functions for the entity module.
  */
 
-use Drupal\Component\Uuid\Uuid;
-
 /**
  * Returns the raw configuration object for an EntityDisplay entity.
  *
@@ -31,7 +29,7 @@ function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) {
   }
 
   // Initialize a fresh structure.
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $properties = array(
     'id' => $id,
     'uuid' => $uuid->generate(),
@@ -70,7 +68,7 @@ function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode)
   }
 
   // Initialize a fresh structure.
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $properties = array(
     'id' => $id,
     'uuid' => $uuid->generate(),
diff --git a/core/modules/field/field.install b/core/modules/field/field.install
index 5f70ee173065a85097a1f3dc342268ee82c3e6ee..c4211ffe8ae9d2d83bcc48fd1a14796e169f3c95 100644
--- a/core/modules/field/field.install
+++ b/core/modules/field/field.install
@@ -5,7 +5,6 @@
  * Install, update, and uninstall functions for the Field module.
  */
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\field\Entity\Field;
 
@@ -26,7 +25,7 @@
  * @ingroup update_api
  */
 function _update_8003_field_create_field(array &$field_config) {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   // Merge in default values.
   $field_config += array(
@@ -69,7 +68,7 @@ function _update_8003_field_create_field(array &$field_config) {
  * @ingroup update_api
  */
 function _update_8003_field_create_instance(array $field_config, array &$instance_config) {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   // Merge in defaults.
   $instance_config += array(
@@ -314,8 +313,8 @@ function field_update_8002() {
  * Convert fields and instances to config.
  */
 function field_update_8003() {
-  $uuid = new Uuid();
 
+  $uuid = \Drupal::service('uuid');
   $state = \Drupal::state();
   $deleted_fields = $state->get('field.field.deleted') ?: array();
   $deleted_instances = $state->get('field.instance.deleted') ?: array();
@@ -449,7 +448,7 @@ function field_update_8004() {
  * the user.user.register form display.
  */
 function field_update_8005() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   $user_default_form_display = \Drupal::config('entity.form_display.user.user.default');
   $user_register_config_data = array(
diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
index 4a86e01ab292826193602d19dde7ef0e088ee484..2b4ef46ea657289e851d341ec1592ced3e581f8f 100644
--- a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
+++ b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Entity\Query\QueryFactory;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Config\ConfigFactory;
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Extension\ModuleHandler;
@@ -59,6 +60,10 @@ class FieldInstanceStorageController extends ConfigStorageController {
    *   The config factory service.
    * @param \Drupal\Core\Config\StorageInterface $config_storage
    *   The config storage service.
+   * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory
+   *   The entity query factory.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
    * @param \Drupal\Core\Entity\EntityManager $entity_manager
    *   The entity manager.
    * @param \Drupal\Core\Extension\ModuleHandler $module_handler
@@ -66,8 +71,8 @@ class FieldInstanceStorageController extends ConfigStorageController {
    * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
    *   The state key value store.
    */
-  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
-    parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory);
+  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
+    parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service);
     $this->entityManager = $entity_manager;
     $this->moduleHandler = $module_handler;
     $this->state = $state;
@@ -83,6 +88,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $container->get('config.factory'),
       $container->get('config.storage'),
       $container->get('entity.query'),
+      $container->get('uuid'),
       $container->get('entity.manager'),
       $container->get('module_handler'),
       $container->get('state')
diff --git a/core/modules/field/lib/Drupal/field/FieldStorageController.php b/core/modules/field/lib/Drupal/field/FieldStorageController.php
index 08b7a869909e5669b0e097297baa9dd4670e3178..fff0df7d0300c3418cae5057d12c7d163cd87ed5 100644
--- a/core/modules/field/lib/Drupal/field/FieldStorageController.php
+++ b/core/modules/field/lib/Drupal/field/FieldStorageController.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\field;
 
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Config\Config;
 use Drupal\Core\Config\Entity\ConfigStorageController;
 use Drupal\Core\Entity\Query\QueryFactory;
@@ -54,6 +55,10 @@ class FieldStorageController extends ConfigStorageController {
    *   The config factory service.
    * @param \Drupal\Core\Config\StorageInterface $config_storage
    *   The config storage service.
+   * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory
+   *   The entity query factory.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
    * @param \Drupal\Core\Entity\EntityManager $entity_manager
    *   The entity manager.
    * @param \Drupal\Core\Extension\ModuleHandler $module_handler
@@ -61,9 +66,8 @@ class FieldStorageController extends ConfigStorageController {
    * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
    *   The state key value store.
    */
-  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
-    parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory);
-
+  public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
+    parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service);
     $this->entityManager = $entity_manager;
     $this->moduleHandler = $module_handler;
     $this->state = $state;
@@ -79,6 +83,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $container->get('config.factory'),
       $container->get('config.storage'),
       $container->get('entity.query'),
+      $container->get('uuid'),
       $container->get('entity.manager'),
       $container->get('module_handler'),
       $container->get('state')
diff --git a/core/modules/filter/filter.install b/core/modules/filter/filter.install
index 0390d7944d2c339e08f1a66e48347ad3f606ae85..6718777d475b92300e8fc71e278a5d0e49bbb1f6 100644
--- a/core/modules/filter/filter.install
+++ b/core/modules/filter/filter.install
@@ -5,8 +5,6 @@
  * Install, update, and uninstall functions for the Filter module.
  */
 
-use Drupal\Component\Uuid\Uuid;
-
 /**
  * @addtogroup updates-7.x-to-8.x
  * @{
@@ -29,7 +27,7 @@ function filter_update_8000() {
  * @ingroup config_upgrade
  */
 function filter_update_8001() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $result = db_query('SELECT format, name, cache, status, weight FROM {filter_format}', array(), array('fetch' => PDO::FETCH_ASSOC));
   foreach ($result as $format) {
     $id = $format['format'];
diff --git a/core/modules/image/image.install b/core/modules/image/image.install
index ae80170622cb8c072c8371f16a5cc3bcb4cf2824..ec938f18d5b09c9a8a910b0b68bebde99c246819 100644
--- a/core/modules/image/image.install
+++ b/core/modules/image/image.install
@@ -5,8 +5,6 @@
  * Install, update and uninstall functions for the image module.
  */
 
-use Drupal\Component\Uuid\Uuid;
-
 /**
  * Implements hook_install().
  */
@@ -81,7 +79,7 @@ function _image_update_get_style_with_effects(array $style) {
     $effect['data'] = unserialize($effect['data']);
 
     // Generate a unique image effect ID for the effect.
-    $uuid = new Uuid();
+    $uuid = \Drupal::service('uuid');
     $effect['uuid'] = $uuid->generate();
 
     // Use 'id' instead of 'name'.
diff --git a/core/modules/image/lib/Drupal/image/ImageEffectBag.php b/core/modules/image/lib/Drupal/image/ImageEffectBag.php
index 0624183281e277c036b7118b8923982170131207..9370fff5fdcdf5f1113c5464d71cedcaf532c4f6 100644
--- a/core/modules/image/lib/Drupal/image/ImageEffectBag.php
+++ b/core/modules/image/lib/Drupal/image/ImageEffectBag.php
@@ -8,7 +8,6 @@
 namespace Drupal\image;
 
 use Drupal\Component\Utility\MapArray;
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Component\Plugin\DefaultPluginBag;
 
 /**
@@ -40,7 +39,7 @@ public function &get($instance_id) {
   public function updateConfiguration(array $configuration) {
     // Derive the instance ID from the configuration.
     if (empty($configuration['uuid'])) {
-      $uuid_generator = new Uuid();
+      $uuid_generator = \Drupal::service('uuid');
       $configuration['uuid'] = $uuid_generator->generate();
     }
     $instance_id = $configuration['uuid'];
diff --git a/core/modules/language/language.install b/core/modules/language/language.install
index c435c07fa0a8529d11e1a5005f3ec881d4460556..6a8c2282759d5d52ef46c5717ad04a786ec3226f 100644
--- a/core/modules/language/language.install
+++ b/core/modules/language/language.install
@@ -5,7 +5,6 @@
  * Install, update and uninstall functions for the language module.
  */
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Language\Language;
 
 /**
diff --git a/core/modules/menu/menu.install b/core/modules/menu/menu.install
index 6974d683bcc11a2c584dacd62c3b5c4cc030c782..61f73b24d29b2cdb621636776898836837cbe630 100644
--- a/core/modules/menu/menu.install
+++ b/core/modules/menu/menu.install
@@ -111,7 +111,7 @@ function menu_update_8003() {
  * @ingroup config_upgrade
  */
 function menu_update_8004() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $result = db_query('SELECT * FROM {menu_custom}');
   foreach ($result as $menu) {
     // Save the config object.
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
index 7330147dfdfe72078dea8c8ee11ec2764b75af10..1fa6140d38b0833bfd9ffebd3060332e02242416 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\menu_link;
 
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageException;
@@ -55,11 +56,13 @@ class MenuLinkStorageController extends DatabaseStorageController implements Men
    *   The database connection to be used.
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID Service.
    * @param \Symfony\Cmf\Component\Routing\RouteProviderInterface $route_provider
    *   The route provider service.
    */
-  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info, RouteProviderInterface $route_provider) {
-    parent::__construct($entity_type, $entity_info, $database, $field_info);
+  public function __construct($entity_type, array $entity_info, Connection $database, FieldInfo $field_info, UuidInterface $uuid_service, RouteProviderInterface $route_provider) {
+    parent::__construct($entity_type, $entity_info, $database, $field_info, $uuid_service);
 
     $this->routeProvider = $route_provider;
 
@@ -89,6 +92,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $entity_info,
       $container->get('database'),
       $container->get('field.info'),
+      $container->get('uuid'),
       $container->get('router.route_provider')
     );
   }
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index 3f5c370d139151acd53cbb385167b0b8025f57d4..2d2d1ecbc1ec32b6e3ba0584f0e8ac37a0c1e26f 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -1068,7 +1068,7 @@ function node_update_8019() {
  * @ingroup config_upgrade
 */
 function node_update_8020() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   // Properties to drop: custom, disabled.
   $locked = array();
   // Note: {node_type}.name was the label, .type the machine name.
diff --git a/core/modules/rdf/rdf.install b/core/modules/rdf/rdf.install
index bc984f5583f36bf408ce42c96edb90e29a1e98b1..3d060ed41cb83402f4d74f339ea817be8ab174d7 100644
--- a/core/modules/rdf/rdf.install
+++ b/core/modules/rdf/rdf.install
@@ -13,7 +13,7 @@
  * @ingroup config_upgrade
  */
 function rdf_update_8000() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $query = db_query("SELECT * FROM {rdf_mapping}");
 
   // Iterate through all the stored mappings.
diff --git a/core/modules/shortcut/shortcut.install b/core/modules/shortcut/shortcut.install
index 6c098a32935a3bef234ed17829dd8331909cea3b..420d8c2f43a7dff4fc742395b22d547b5c56d0db 100644
--- a/core/modules/shortcut/shortcut.install
+++ b/core/modules/shortcut/shortcut.install
@@ -68,7 +68,7 @@ function shortcut_schema() {
  * Migrate shortcuts into configuration.
  */
 function shortcut_update_8000() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   $result = db_query('SELECT * from {shortcut_set}');
   $ids = array();
   foreach ($result as $set) {
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
index b85dbc9c68786a6a0f92f2fa84ccea9459aa716d..7eb76fd2467b1d3f5fc404ea9f7ee6e020c3a260 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
@@ -1357,7 +1357,8 @@ public function configImporter() {
         $this->container->get('event_dispatcher'),
         $this->container->get('config.factory'),
         $this->container->get('entity.manager'),
-        $this->container->get('lock')
+        $this->container->get('lock'),
+        $this->container->get('uuid')
       );
     }
     // Always recalculate the changelist when called.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php
index b070026e0ed588209e2234556a270aec8dd505bf..500230a3046c33018b67547fe33e8ddf6ed2c005 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php
@@ -7,8 +7,9 @@
 
 namespace Drupal\system\Tests\Entity;
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Language\Language;
+use Drupal\Component\Uuid\Uuid;
+use Drupal\Component\Utility\String;
 
 /**
  * Tests Entity API default field value functionality.
@@ -33,7 +34,7 @@ public static function getInfo() {
   public function setUp() {
     parent::setUp();
     // Initiate the generator object.
-    $this->uuid = new Uuid();
+    $this->uuid = $this->container->get('uuid');
   }
 
   /**
@@ -54,8 +55,8 @@ public function testDefaultValues() {
    */
   protected function assertDefaultValues($entity_type) {
     $entity = entity_create($entity_type, array());
-    $this->assertEqual($entity->langcode->value, Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Default language', array('%entity_type' => $entity_type)));
-    $this->assertTrue($this->uuid->isValid($entity->uuid->value), format_string('%entity_type: Default UUID', array('%entity_type' => $entity_type)));
+    $this->assertEqual($entity->langcode->value, Language::LANGCODE_NOT_SPECIFIED, String::format('%entity_type: Default language', array('%entity_type' => $entity_type)));
+    $this->assertTrue(Uuid::isValid($entity->uuid->value), String::format('%entity_type: Default UUID', array('%entity_type' => $entity_type)));
     $this->assertEqual($entity->name->getValue(), array(0 => array('value' => NULL)), 'Field has one empty value by default.');
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php
index 0168bb3129230565e074a526254bf288d8d69133..86ae8330c77d7d09124f2161667eec70aa41db67 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\system\Tests\Entity;
 
-use Drupal\Component\Uuid\Uuid;
-
 /**
  * Tests creation, saving, and loading of entity UUIDs.
  */
@@ -54,7 +52,7 @@ function testCRUD() {
    */
   protected function assertCRUD($entity_type) {
     // Verify that no UUID is auto-generated when passing one for creation.
-    $uuid_service = new Uuid();
+    $uuid_service = $this->container->get('uuid');
     $uuid = $uuid_service->generate();
     $custom_entity = entity_create($entity_type, array(
       'name' => $this->randomName(),
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php
index cf3fb2cd2bd17e7504b357cdd5e257ef7cb735b6..3299d22f10db28e89048af69033c0375002973fc 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php
@@ -18,7 +18,7 @@
 class UuidUpgradePathTest extends UpgradePathTestBase {
   public static function getInfo() {
     return array(
-      'name'  => 'Uuid upgrade test',
+      'name'  => 'UUID upgrade test',
       'description'  => 'Upgrade tests for a node and user data.',
       'group' => 'Upgrade path',
     );
diff --git a/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php b/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php
deleted file mode 100644
index f2dcdcccbb48cb9ec732bf2ed1f6e8515ca41d3e..0000000000000000000000000000000000000000
--- a/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\system\Tests\Uuid\UuidUnitTest.
-*/
-
-namespace Drupal\system\Tests\Uuid;
-
-use Drupal\Component\Uuid\Uuid;
-use Drupal\simpletest\UnitTestBase;
-
-/**
- * Tests the Drupal\Component\Uuid\Uuid class.
- */
-class UuidUnitTest extends UnitTestBase {
-
-  /**
-   * The UUID object to be used for generating UUIDs.
-   *
-   * @var Drupal\Component\Uuid\UuidInterface
-   */
-  protected $uuid;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'UUID handling',
-      'description' => "Test the handling of Universally Unique IDentifiers (UUIDs).",
-      'group' => 'UUID',
-    );
-  }
-
-  public function setUp() {
-    // Initiate the generator object.
-    $this->uuid = new Uuid();
-    parent::setUp();
-  }
-
-  /**
-   * Tests generating a UUID.
-   */
-  public function testGenerateUuid() {
-    $uuid = $this->uuid->generate();
-    $this->assertTrue($this->uuid->isValid($uuid), 'UUID generation works.');
-  }
-
-  /**
-   * Tests that generated UUIDs are unique.
-   */
-  public function testUuidIsUnique() {
-    $uuid1 = $this->uuid->generate();
-    $uuid2 = $this->uuid->generate();
-    $this->assertNotEqual($uuid1, $uuid2, 'Same UUID was not generated twice.');
-  }
-
-  /**
-   * Tests UUID validation.
-   */
-  function testUuidValidation() {
-    // These valid UUIDs.
-    $uuid_fqdn = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
-    $uuid_min = '00000000-0000-0000-0000-000000000000';
-    $uuid_max = 'ffffffff-ffff-ffff-ffff-ffffffffffff';
-
-    $this->assertTrue($this->uuid->isValid($uuid_fqdn), format_string('FQDN namespace UUID (@uuid) is valid', array('@uuid' => $uuid_fqdn)));
-    $this->assertTrue($this->uuid->isValid($uuid_min), format_string('Minimum UUID value (@uuid) is valid', array('@uuid' => $uuid_min)));
-    $this->assertTrue($this->uuid->isValid($uuid_max), format_string('Maximum UUID value (@uuid) is valid', array('@uuid' => $uuid_max)));
-
-    // These are invalid UUIDs.
-    $invalid_format = '0ab26e6b-f074-4e44-9da-601205fa0e976';
-    $invalid_length = '0ab26e6b-f074-4e44-9daf-1205fa0e9761f';
-
-    $this->assertFalse($this->uuid->isValid($invalid_format), format_string('@uuid is not a valid UUID', array('@uuid' => $invalid_format)));
-    $this->assertFalse($this->uuid->isValid($invalid_length), format_string('@uuid is not a valid UUID', array('@uuid' => $invalid_length)));
-
-  }
-}
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index beaf2471915bc11f207fbbe440c6a9b6d05779cc..9718ab6c5e983e7b8f5ed73f9a997e54e2a3b3cd 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -6,7 +6,6 @@
  */
 
 use Drupal\Component\Utility\Crypt;
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Database\Database;
 use Drupal\Core\Language\Language;
 use Drupal\Core\StreamWrapper\PublicStream;
@@ -1897,7 +1896,7 @@ function system_update_8044() {
  * @ingroup config_upgrade
  */
 function system_update_8045() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
   // Fetch all date types from {date_format_type}.
   $date_formats = db_query('SELECT * FROM {date_format_type}')->fetchAllAssoc('type', PDO::FETCH_ASSOC);
   if (!empty($date_formats)) {
diff --git a/core/modules/taxonomy/taxonomy.install b/core/modules/taxonomy/taxonomy.install
index 775527da591523a091fbc5c650855d11ec5283cd..34899c37e6567c7029cd3ccd94cfc14ed39a136f 100644
--- a/core/modules/taxonomy/taxonomy.install
+++ b/core/modules/taxonomy/taxonomy.install
@@ -5,7 +5,6 @@
  * Install, update and uninstall functions for the taxonomy module.
  */
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\field\Entity\Field;
 
@@ -303,7 +302,7 @@ function taxonomy_update_8004() {
  * Convert vocabularies into configuration.
  */
 function taxonomy_update_8005() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   $result = db_query('SELECT * FROM {taxonomy_vocabulary}');
   foreach ($result as $vocabulary) {
diff --git a/core/modules/user/lib/Drupal/user/UserStorageController.php b/core/modules/user/lib/Drupal/user/UserStorageController.php
index 9cbcf0e57c858b6f52d12dab0d9aab1db27d7875..03d32b1b676b53e30412d3de09988e2558114f2c 100644
--- a/core/modules/user/lib/Drupal/user/UserStorageController.php
+++ b/core/modules/user/lib/Drupal/user/UserStorageController.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\user;
 
+use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Password\PasswordInterface;
 use Drupal\Core\Database\Connection;
@@ -40,21 +41,23 @@ class UserStorageController extends DatabaseStorageControllerNG implements UserS
   /**
    * Constructs a new UserStorageController object.
    *
-   * @param string $entityType
-   *   The entity type for which the instance is created.
+   * @param string $entity_type
+   *  The entity type for which the instance is created.
    * @param array $entity_info
    *   An array of entity info for the entity type.
    * @param \Drupal\Core\Database\Connection $database
    *   The database connection to be used.
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID Service.
    * @param \Drupal\Core\Password\PasswordInterface $password
    *   The password hashing service.
    * @param \Drupal\user\UserDataInterface $user_data
    *   The user data service.
    */
-  public function __construct($entity_type, $entity_info, Connection $database, FieldInfo $field_info, PasswordInterface $password, UserDataInterface $user_data) {
-    parent::__construct($entity_type, $entity_info, $database, $field_info);
+  public function __construct($entity_type, $entity_info, Connection $database, FieldInfo $field_info, UuidInterface $uuid_service, PasswordInterface $password, UserDataInterface $user_data) {
+    parent::__construct($entity_type, $entity_info, $database, $field_info, $uuid_service);
 
     $this->password = $password;
     $this->userData = $user_data;
@@ -69,6 +72,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $entity_info,
       $container->get('database'),
       $container->get('field.info'),
+      $container->get('uuid'),
       $container->get('password'),
       $container->get('user.data')
     );
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 8253ba6c5ce5f410abdb477b70a12dc9aa807b8b..eeb5e63845a9fbd04b60176453e84c1c46fd4905 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -5,7 +5,6 @@
  * Install, update and uninstall functions for the user module.
  */
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Language\Language;
 
 /**
@@ -635,7 +634,7 @@ function user_update_8011() {
     // of file_save_data() by updating an eventually existing record for that
     // file.
     file_unmanaged_save_data($default_image, $destination, FILE_EXISTS_REPLACE);
-    $uuid = new Uuid();
+    $uuid = \Drupal::service('uuid');
     db_merge('file_managed')
       ->key(array(
         'uri' => $destination,
@@ -1037,7 +1036,7 @@ function user_update_8017() {
  * @ingroup config_upgrade
  */
 function user_update_8018() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   $roles = db_select('role', 'r')
     ->fields('r')
@@ -1138,7 +1137,7 @@ function user_update_8020() {
  * Create the 'register' form mode.
  */
 function user_update_8021() {
-  $uuid = new Uuid();
+  $uuid = \Drupal::service('uuid');
 
   \Drupal::config("entity.form_mode.user.register")
     ->set('id', "user.register")
diff --git a/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php b/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..17349e16c9a1b51bb34cfa1b0cbf46b31470afb7
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Component\Uuid\UuidTest.
+ */
+
+namespace Drupal\Tests\Component\Uuid;
+
+use Drupal\Component\Uuid\Uuid;
+use Drupal\Component\Uuid\UuidInterface;
+use Drupal\Component\Uuid\Com;
+use Drupal\Component\Uuid\Pecl;
+use Drupal\Component\Uuid\Php;
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * Tests the Drupal\Component\Uuid\Uuid class.
+ *
+ * @group Drupal
+ * @group UUID
+ */
+class UuidTest extends UnitTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'UUID handling',
+      'description' => "Test the handling of Universally Unique Identifiers (UUIDs).",
+      'group' => 'UUID',
+    );
+  }
+
+  /**
+   * Tests generating valid UUIDs.
+   *
+   * @dataProvider providerUuidInstances
+   */
+  public function testGenerateUuid(UuidInterface $instance) {
+    $this->assertTrue(Uuid::isValid($instance->generate()), sprintf('UUID generation for %s works.', get_class($instance)));
+  }
+
+  /**
+   * Tests that generated UUIDs are unique.
+   *
+   * @dataProvider providerUuidInstances
+   */
+  public function testUuidIsUnique(UuidInterface $instance) {
+    $this->assertNotEquals($instance->generate(), $instance->generate(), sprintf('Same UUID was not generated twice with %s.', get_class($instance)));
+  }
+
+  /**
+   * Dataprovider for UUID instance tests.
+   *
+   * @return array
+   */
+  public function providerUuidInstances() {
+
+    $instances = array();
+    $instances[][] = new Php();
+
+    // If valid PECL extensions exists add to list.
+    if (function_exists('uuid_create') && !function_exists('uuid_make')) {
+      $instances[][] = new Pecl();
+    }
+
+    // If we are on Windows add the com implementation as well.
+    if (function_exists('com_create_guid')) {
+      $instances[][] = new Com();
+    }
+
+    return $instances;
+  }
+
+  /**
+   * Tests UUID validation.
+   *
+   * @param string $uuid
+   *   The uuid to check against.
+   * @param bool $is_valid
+   *   Whether the uuid is valid or not.
+   * @param string $message
+   *   The message to display on failure.
+   *
+   * @dataProvider providerTestValidation
+   */
+  public function testValidation($uuid, $is_valid, $message) {
+    $this->assertSame($is_valid, Uuid::isValid($uuid), $message);
+  }
+
+  /**
+   * Dataprovider for UUID instance tests.
+   *
+   * @return array
+   *  An array of arrays containing
+   *   - The Uuid to check against.
+   *   - (bool) Whether or not the Uuid is valid.
+   *   - Failure message.
+   */
+  public function providerTestValidation() {
+    return array(
+      // These valid UUIDs.
+      array('6ba7b810-9dad-11d1-80b4-00c04fd430c8', TRUE, 'Basic FQDN UUID did not validate'),
+      array('00000000-0000-0000-0000-000000000000', TRUE, 'Minimum UUID did not validate'),
+      array('ffffffff-ffff-ffff-ffff-ffffffffffff', TRUE, 'Maximum UUID did not validate'),
+      // These are invalid UUIDs.
+      array('0ab26e6b-f074-4e44-9da-601205fa0e976', FALSE, 'Invalid format was validated'),
+      array('0ab26e6b-f074-4e44-9daf-1205fa0e9761f', FALSE, 'Invalid length was validated'),
+    );
+  }
+}