diff --git a/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php b/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php
index 256ce74..cb06707 100644
--- a/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php
+++ b/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php
@@ -6,53 +6,15 @@
  */
 
 namespace Drupal\Core\DependencyInjection;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a dependency injection friendly methods for serialization.
+ *
+ * @deprecated As of Drupal 8.0, use
+ * \Drupal\Core\DependencyInjection\DependencySerializationTrait instead.
  */
 abstract class DependencySerialization {
 
-  /**
-   * An array of service IDs keyed by property name used for serialization.
-   *
-   * @var array
-   */
-  protected $_serviceIds = array();
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __sleep() {
-    $this->_serviceIds = array();
-    $vars = get_object_vars($this);
-    foreach ($vars as $key => $value) {
-      if (is_object($value) && isset($value->_serviceId)) {
-        // If a class member was instantiated by the dependency injection
-        // container, only store its ID so it can be used to get a fresh object
-        // on unserialization.
-        $this->_serviceIds[$key] = $value->_serviceId;
-        unset($vars[$key]);
-      }
-      // Special case the container, which might not have a service ID.
-      elseif ($value instanceof ContainerInterface) {
-        $this->_serviceIds[$key] = 'service_container';
-        unset($vars[$key]);
-      }
-    }
-
-    return array_keys($vars);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __wakeup() {
-    $container = \Drupal::getContainer();
-    foreach ($this->_serviceIds as $key => $service_id) {
-      $this->$key = $container->get($service_id);
-    }
-    unset($this->_serviceIds);
-  }
+  use DependencySerializationTrait;
 
 }
diff --git a/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php b/core/lib/Drupal/Core/DependencyInjection/DependencySerializationTrait.php
similarity index 90%
copy from core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php
copy to core/lib/Drupal/Core/DependencyInjection/DependencySerializationTrait.php
index 256ce74..b16a659 100644
--- a/core/lib/Drupal/Core/DependencyInjection/DependencySerialization.php
+++ b/core/lib/Drupal/Core/DependencyInjection/DependencySerializationTrait.php
@@ -6,12 +6,13 @@
  */
 
 namespace Drupal\Core\DependencyInjection;
+
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Provides a dependency injection friendly methods for serialization.
+ * Provides dependency injection friendly methods for serialization.
  */
-abstract class DependencySerialization {
+trait DependencySerializationTrait {
 
   /**
    * An array of service IDs keyed by property name used for serialization.
@@ -52,7 +53,7 @@ public function __wakeup() {
     foreach ($this->_serviceIds as $key => $service_id) {
       $this->$key = $container->get($service_id);
     }
-    unset($this->_serviceIds);
+    $this->_serviceIds = array();
   }
 
 }
diff --git a/core/lib/Drupal/Core/Plugin/PluginBase.php b/core/lib/Drupal/Core/Plugin/PluginBase.php
index f0bce24..b4c0194 100644
--- a/core/lib/Drupal/Core/Plugin/PluginBase.php
+++ b/core/lib/Drupal/Core/Plugin/PluginBase.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Plugin;
 
 use Drupal\Component\Plugin\PluginBase as ComponentPluginBase;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -16,15 +17,7 @@
  */
 abstract class PluginBase extends ComponentPluginBase {
 
-  /**
-   * An array of service IDs keyed by property name used for serialization.
-   *
-   * @todo Remove when Drupal\Core\DependencyInjection\DependencySerialization
-   * is converted to a trait.
-   *
-   * @var array
-   */
-  protected $_serviceIds = array();
+  use DependencySerializationTrait;
 
   /**
    * The translation manager service.
@@ -69,45 +62,4 @@ public function setTranslationManager(TranslationInterface $translation_manager)
     return $this;
   }
 
-  /**
-   * {@inheritdoc}
-   *
-   * @todo Remove when Drupal\Core\DependencyInjection\DependencySerialization
-   * is converted to a trait.
-   */
-  public function __sleep() {
-    $this->_serviceIds = array();
-    $vars = get_object_vars($this);
-    foreach ($vars as $key => $value) {
-      if (is_object($value) && isset($value->_serviceId)) {
-        // If a class member was instantiated by the dependency injection
-        // container, only store its ID so it can be used to get a fresh object
-        // on unserialization.
-        $this->_serviceIds[$key] = $value->_serviceId;
-        unset($vars[$key]);
-      }
-      // Special case the container, which might not have a service ID.
-      elseif ($value instanceof ContainerInterface) {
-        $this->_serviceIds[$key] = 'service_container';
-        unset($vars[$key]);
-      }
-    }
-
-    return array_keys($vars);
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * @todo Remove when Drupal\Core\DependencyInjection\DependencySerialization
-   * is converted to a trait.
-   */
-  public function __wakeup() {
-    $container = \Drupal::getContainer();
-    foreach ($this->_serviceIds as $key => $service_id) {
-      $this->$key = $container->get($service_id);
-    }
-    unset($this->_serviceIds);
-  }
-
 }
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php
deleted file mode 100644
index 1cf99cc..0000000
--- a/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Tests\Core\DependencyInjection\DependencySerializationTest.
- */
-
-namespace Drupal\Tests\Core\DependencyInjection;
-
-use Drupal\Core\DependencyInjection\Container;
-use Drupal\Core\DependencyInjection\DependencySerialization;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Component\DependencyInjection\ContainerAwareInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Tests the dependency serialization base class.
- *
- * @see \Drupal\Core\DependencyInjection\DependencySerialization
- */
-class DependencySerializationTest extends UnitTestCase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getInfo() {
-    return array(
-      'name' => 'Service dependency serialization',
-      'description' => 'Tests the dependency serialization base class.',
-      'group' => 'System'
-    );
-  }
-
-  /**
-   * Tests serialization and unserialization.
-   */
-  public function testSerialization() {
-    // Create a pseudo service and dependency injected object.
-    $service = new \stdClass();
-    $service->_serviceId = 'test_service';
-    $container = new Container();
-    $container->set('test_service', $service);
-    $container->set('service_container', $container);
-    \Drupal::setContainer($container);
-
-    $dependencySerialization = new TestClass($service);
-    $dependencySerialization->setContainer($container);
-
-    $string = serialize($dependencySerialization);
-    $object = unserialize($string);
-
-    // The original object got _serviceIds added so removing it to check
-    // equality.
-    unset($dependencySerialization->_serviceIds);
-
-    // Ensure dependency injected object remains the same after serialization.
-    $this->assertEquals($dependencySerialization, $object);
-
-    // Ensure that _serviceIds does not exist on the object anymore.
-    $this->assertFalse(isset($object->_serviceIds));
-
-    // Ensure that both the service and the variable are in the unserialized
-    // object.
-    $this->assertSame($service, $object->service);
-    $this->assertSame($container, $object->container);
-  }
-
-}
-
-/**
- * Defines a test class which has a single service as dependency.
- */
-class TestClass extends DependencySerialization implements ContainerAwareInterface {
-
-  /**
-   * A test service.
-   *
-   * @var \stdClass
-   */
-  public $service;
-
-  /**
-   * The container.
-   *
-   * @var \Symfony\Component\DependencyInjection\ContainerInterface
-   */
-  public $container;
-
-  /**
-   * {@inheritdoc}
-   *
-   * Make the property accessible for the test.
-   */
-  public $_serviceIds;
-
-  /**
-   * Constructs a new TestClass object.
-   *
-   * @param \stdClass $service
-   *   A test service.
-   */
-  public function __construct(\stdClass $service) {
-    $this->service = $service;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setContainer(ContainerInterface $container = NULL) {
-    $this->container = $container;
-  }
-}
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTraitUnitTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTraitUnitTest.php
new file mode 100644
index 0000000..c29310b
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTraitUnitTest.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\DependencyInjection\DependencySerializationTraitUnitTest.
+ */
+
+namespace Drupal\Tests\Core\DependencyInjection;
+
+use Drupal\Core\DependencyInjection\Container;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @coversDefaultClass \Drupal\Core\DependencyInjection\DependencySerializationTrait
+ */
+class DependencySerializationTraitUnitTest extends UnitTestCase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => '\Drupal\Core\DependencyInjection\DependencySerializationTrait unit test',
+      'description' => '',
+      'group' => 'System'
+    );
+  }
+
+  /**
+   * @covers ::__sleep
+   * @covers ::__wakeup
+   */
+  public function testSerializaion() {
+    // Create a pseudo service and dependency injected object.
+    $service = new \stdClass();
+    $service->_serviceId = 'test_service';
+    $container = new Container();
+    $container->set('test_service', $service);
+    $container->set('service_container', $container);
+    \Drupal::setContainer($container);
+
+    $stub = new DependencySerializationTraitUnitTestStub($service);
+    $stub->setContainer($container);
+
+    $string = serialize($stub);
+    /** @var \Drupal\Tests\Core\DependencyInjection\DependencySerializationTraitUnitTestStub $object */
+    $stub = unserialize($string);
+
+    $this->assertSame($service, $stub->service);
+    $this->assertSame($container, $stub->container);
+    $this->assertEmpty($stub->getServiceIds());
+  }
+
+}
+
+/**
+ * Defines a test class which has a single service as dependency.
+ */
+class DependencySerializationTraitUnitTestStub implements ContainerAwareInterface {
+
+  use DependencySerializationTrait;
+
+  /**
+   * A test service.
+   *
+   * @var \stdClass
+   */
+  public $service;
+
+  /**
+   * The container.
+   *
+   * @var \Symfony\Component\DependencyInjection\ContainerInterface
+   */
+  public $container;
+
+  /**
+   * Constructs a new class instance.
+   *
+   * @param \stdClass $service
+   *   A test service.
+   */
+  public function __construct(\stdClass $service) {
+    $this->service = $service;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContainer(ContainerInterface $container = NULL) {
+    $this->container = $container;
+  }
+
+  /**
+   * Gets the stored service IDs.
+   */
+  public function getServiceIds() {
+    return $this->_serviceIds;
+  }
+}
