diff --git a/core/lib/Drupal/Core/Cache/ApcuBackend.php b/core/lib/Drupal/Core/Cache/ApcuBackend.php
index 9bac79e..e96e888 100644
--- a/core/lib/Drupal/Core/Cache/ApcuBackend.php
+++ b/core/lib/Drupal/Core/Cache/ApcuBackend.php
@@ -96,7 +96,7 @@ public function getMultiple(&$cids, $allow_invalid = FALSE) {
       foreach ($result as $key => $item) {
         $item = $this->prepareItem($item, $allow_invalid);
         if ($item) {
-          $cache[$map[$key]] = $item;
+          $cache[$map[$key]] = new CacheItem($item->cid, $item->data, $item->expire, $item->tags, $item->created, $item->valid);
         }
       }
     }
diff --git a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
index faf2459..b95a411 100644
--- a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
+++ b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
@@ -38,7 +38,7 @@
    *   The "valid" property of the returned object indicates whether the item is
    *   valid or not. Defaults to FALSE.
    *
-   * @return object|false
+   * @return \Drupal\Core\Cache\CacheItem|false
    *   The cache item or FALSE on failure.
    *
    * @see \Drupal\Core\Cache\CacheBackendInterface::getMultiple()
@@ -60,7 +60,7 @@ public function get($cid, $allow_invalid = FALSE);
    *   "valid" property of the returned objects indicates whether the items are
    *   valid or not. Defaults to FALSE.
    *
-   * @return array
+   * @return \Drupal\Core\Cache\CacheItem[]
    *   An array of cache item objects indexed by cache ID.
    *
    * @see \Drupal\Core\Cache\CacheBackendInterface::get()
diff --git a/core/lib/Drupal/Core/Cache/CacheItem.php b/core/lib/Drupal/Core/Cache/CacheItem.php
new file mode 100644
index 0000000..ebb8e78
--- /dev/null
+++ b/core/lib/Drupal/Core/Cache/CacheItem.php
@@ -0,0 +1,177 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Cache\CacheItem.
+ */
+
+namespace Drupal\Core\Cache;
+
+/**
+ * Provides a default cache item.
+ *
+ */
+class CacheItem extends \stdClass {
+
+  /**
+   * The key of this cache item.
+   *
+   * @var string
+   */
+  public $cid;
+
+  /**
+   * The raw value of this cache item.
+   *
+   * @var mixed
+   */
+  public $data;
+
+  /**
+   * The Unix timestamp of when this cache item was created.
+   *
+   * @var int
+   */
+  public $created = 0;
+
+  /**
+   * The Unix timestamp of when this cache item will expire.
+   *
+   * @var int
+   *   Either a Unix timestamp, or
+   *   \Drupal\Core\Cache\CacheBackendInterface::CACHE_PERMANENT when the item
+   *   will never expire automatically.
+   */
+  public $expire = 0;
+
+  /**
+   * Whether the cache item is valid or not.
+   *
+   * @var bool
+   */
+  public $valid = FALSE;
+
+  /**
+   * Cache tags of this cache item.
+   *
+   * @var array[] $tags
+   *   An associative array of cache tags whose keys are the cache tag names and
+   *   whose values are arrays containing the tag values.
+   */
+  public $tags = array();
+
+  /**
+   * The current checksum.
+   *
+   * @var int
+   */
+  public $checksum = 0;
+
+  /**
+   * Constructs a new class instance.
+   *
+   * @param string $cid
+   *   The item's unique key within the cache bin it was stored.
+   * @param $data
+   *   The data of the cache item
+   * @param int $expire
+   *   Either a Unix timestamp, or
+   *   \Drupal\Core\Cache\CacheBackendInterface::CACHE_PERMANENT when the item
+   *   will never expire automatically.
+   * @param array[] $tags
+   *   An associative array of cache tags whose keys are the cache tag names and
+   *   whose values are arrays containing the tag values.
+   * @param int $created
+   *   The Unix timestamp of when this cache item was created.
+   * @param bool $valid
+   *   Whether the cache item is valid.
+   */
+  public function __construct($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANENT, array $tags = array(), $created = 0, $valid = FALSE) {
+    $this->cid = $cid;
+    $this->created = $created;
+    $this->data = $data;
+    $this->expire = $expire;
+    $this->tags = $tags;
+    $this->valid = $valid;
+  }
+
+  /**
+   * Returns the key for the current cache item.
+   *
+   * @return string
+   *   The key string for this cache item.
+   */
+  public function getKey() {
+    return $this->cid;
+  }
+
+  /**
+   * Retrieves the value of the item from the cache associated with this objects key.
+   *
+   * @return mixed
+   *   The value corresponding to this cache item's key, or NULL if not found.
+   */
+  public function getData() {
+    return $this->data;
+  }
+
+  /**
+   * Gets cache entry creation Unix timestamp.
+   *
+   * @return int
+   *   The Unix timestamp when the entry was created.
+   */
+  public function getCreationTimestamp() {
+    return $this->created;
+  }
+
+  /**
+   * Gets cache entry expiration Unix timestamp.
+   *
+   * @return int
+   *   The Unix timestamp when the entry expires.
+   */
+  public function getExpirationTimestamp() {
+    return $this->expire;
+  }
+
+  /**
+   * Is this entry expired.
+   *
+   * The computed return is based upon the local site time (depending on the configured locale) which means that the
+   * entry may already have expire or is still valid in the backend while this tells the opposite.
+   *
+   * @return int
+   *   TRUE if the entry has expired.
+   */
+  public function isExpired() {
+    if (CacheBackendInterface::CACHE_PERMANENT === $this->expire) {
+      return FALSE;
+    }
+    else {
+      return time() >= $this->expire;
+    }
+  }
+
+  /**
+   * Gets entry tags.
+   *
+   * @return array[] $tags
+   *   An associative array of cache tags whose keys are the cache tag names and whose values are arrays containing the
+   *   tag values.
+   */
+  public function getTags() {
+    return $this->tags;
+  }
+
+  /**
+   * Checks if the cache item is valid.
+   *
+   * @return bool $valid
+   *   TRUE if the item is valid, FALSE otherwise.
+   */
+  public function isValid() {
+    return $this->valid;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
index b1144e4..81b7e1e 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
@@ -95,9 +95,8 @@ public function getMultiple(&$cids, $allow_invalid = FALSE) {
     foreach ($result as $item) {
       // Map the cache ID back to the original.
       $item->cid = $cid_mapping[$item->cid];
-      $item = $this->prepareItem($item, $allow_invalid);
-      if ($item) {
-        $cache[$item->cid] = $item;
+      if ($item = $this->prepareItem($item, $allow_invalid)) {
+        $cache[$item->cid] = new CacheItem($item->cid, $item->data, $item->expire, $item->tags, $item->created, $item->valid);
       }
     }
     $cids = array_diff($cids, array_keys($cache));
diff --git a/core/lib/Drupal/Core/Cache/MemoryBackend.php b/core/lib/Drupal/Core/Cache/MemoryBackend.php
index 63b56c2..af46a3c 100644
--- a/core/lib/Drupal/Core/Cache/MemoryBackend.php
+++ b/core/lib/Drupal/Core/Cache/MemoryBackend.php
@@ -56,7 +56,7 @@ public function getMultiple(&$cids, $allow_invalid = FALSE) {
     foreach ($items as $item) {
       $item = $this->prepareItem($item, $allow_invalid);
       if ($item) {
-        $ret[$item->cid] = $item;
+        $ret[$item->cid] = new CacheItem($item->cid, $item->data, $item->expire, $item->tags, $item->created, $item->valid);
       }
     }
 
diff --git a/core/lib/Drupal/Core/Cache/PhpBackend.php b/core/lib/Drupal/Core/Cache/PhpBackend.php
index 761e394..e663d17 100644
--- a/core/lib/Drupal/Core/Cache/PhpBackend.php
+++ b/core/lib/Drupal/Core/Cache/PhpBackend.php
@@ -100,7 +100,7 @@ public function getMultiple(&$cids, $allow_invalid = FALSE) {
 
     foreach ($cids as $cid) {
       if ($item = $this->get($cid, $allow_invalid)) {
-        $ret[$item->cid] = $item;
+        $ret[$item->cid] = new CacheItem($item->cid, $item->data, $item->expire, $item->tags, $item->created, $item->valid);
       }
     }
 
