diff --git a/modules/system/system.queue.inc b/modules/system/system.queue.inc
index 47d8e7c..055846c 100644
--- a/modules/system/system.queue.inc
+++ b/modules/system/system.queue.inc
@@ -111,8 +111,8 @@ interface DrupalQueueInterface {
    * @param $data
    *   Arbitrary data to be associated with the new task in the queue.
    * @return
-   *   TRUE if the item was successfully created and was (best effort) added
-   *   to the queue, otherwise FALSE. We don't guarantee the item was
+   *   A unique ID if the item was successfully created and was (best effort)
+   *   added to the queue, otherwise FALSE. We don't guarantee the item was
    *   committed to disk etc, but as far as we know, the item is now in the
    *   queue.
    */
@@ -151,6 +151,11 @@ interface DrupalQueueInterface {
    *   item it returns false. This implies a best effort to retrieve an item
    *   and either the queue is empty or there is some other non-recoverable
    *   problem.
+   *
+   *   If returned, the object will have at least the following properties:
+   *   - data: the same as what what passed into createItem().
+   *   - item_id: the unique ID returned from createItem().
+   *   - created: timestamp when the item was put into the queue.
    */
   public function claimItem($lease_time = 3600);
 
@@ -225,7 +230,8 @@ class SystemQueue implements DrupalReliableQueueInterface {
         // by a single request which takes longer than 1 second.
         'created' => time(),
       ));
-    return (bool) $query->execute();
+    // Return the new serial ID, or FALSE on failure.
+    return $query->execute();
   }
 
   public function numberOfItems() {
@@ -327,6 +333,7 @@ class MemoryQueue implements DrupalQueueInterface {
     $item->created = time();
     $item->expire = 0;
     $this->queue[$item->item_id] = $item;
+    return $item->item_id;
   }
 
   public function numberOfItems() {
