diff --git a/plugins/entityqueue/handler/SimpleEntityQueueHandler.class.php b/plugins/entityqueue/handler/SimpleEntityQueueHandler.class.php
index 579c1c8..03eeec1 100644
--- a/plugins/entityqueue/handler/SimpleEntityQueueHandler.class.php
+++ b/plugins/entityqueue/handler/SimpleEntityQueueHandler.class.php
@@ -39,6 +39,49 @@ class SimpleEntityQueueHandler extends EntityQueueHandlerBase {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function validateItems($field, $instance, $langcode, $items, &$errors) {
+    $min_size = $queue->settings['min_size'];
+    $max_size = $queue->settings['max_size'];
+    $act_as_queue = isset($queue->settings['act_as_queue']) ? $queue->settings['act_as_queue'] : 0;
+
+    $empty_target_id = create_function('$value', 'return (!empty($value["target_id"])) ? TRUE : FALSE;');
+    $eq_items = array_filter($items, $empty_target_id);
+
+    if (count($eq_items) < $min_size && $entity->op != t('Add item')) {
+      $errors[$field['field_name']][$langcode][0][] = array(
+        'error' => 'entityqueue_min_size',
+        'message' => t("The minimum number of items in this queue is @min_size.", array('@min_size' => $min_size)),
+      );
+    }
+    elseif (!$act_as_queue && count($eq_items) > $max_size && $max_size > 0) {
+      $errors[$field['field_name']][$langcode][count($items) - 1][] = array(
+        'error' => 'entityqueue_max_size',
+        'message' => t("The maxinum number of items in this queue is @max_size.", array('@max_size' => $max_size)),
+      );
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function preSaveItems($field, $instance, $langcode, &$items) {
+    $max_size = $queue->settings['max_size'];
+    $act_as_queue = isset($queue->settings['act_as_queue']) ? $queue->settings['act_as_queue'] : 0;
+
+    if ($act_as_queue) {
+      $empty_target_id = create_function('$value', 'return (!empty($value["target_id"])) ? TRUE : FALSE;');
+      $eq_items = array_filter($items, $empty_target_id);
+
+      if (count($eq_items) > $max_size && $max_size > 0) {
+        // Keep up to $max_size items
+        $items = array_slice($eq_items, -$max_size);
+      }
+    }
+  }
+
+  /**
    * Makes sure that every simple queue has a subqueue.
    */
   protected function ensureSubqueue() {
diff --git a/plugins/entityqueue/handler/base.inc b/plugins/entityqueue/handler/base.inc
index 7b3bc95..0993fa2 100644
--- a/plugins/entityqueue/handler/base.inc
+++ b/plugins/entityqueue/handler/base.inc
@@ -89,6 +89,16 @@ interface EntityQueueHandlerInterface {
    * Act after deleting a queue.
    */
   public function postDelete();
+
+  /**
+   * Ensure the items being saved to the queue are valid.
+   */
+  public function validateItems($field, $instance, $langcode, $items, &$errors);
+
+  /**
+   * Act on items in the queue before they are saved.
+   */
+  public function preSaveItems($field, $instance, $langcode, &$items);
 }
 
 /**
@@ -179,6 +189,10 @@ abstract class EntityQueueHandlerBase implements EntityQueueHandlerInterface {
   public function preDelete() {}
 
   public function postDelete() {}
+
+  public function validateItems($field, $instance, $langcode, $items, &$errors) {}
+
+  public function preSaveItems($field, $instance, $langcode, &$items) {}
 }
 
 /**
diff --git a/plugins/entityreference/behavior/EntityReferenceBehavior_EntityQueue.class.php b/plugins/entityreference/behavior/EntityReferenceBehavior_EntityQueue.class.php
index 1703d89..a318d43 100644
--- a/plugins/entityreference/behavior/EntityReferenceBehavior_EntityQueue.class.php
+++ b/plugins/entityreference/behavior/EntityReferenceBehavior_EntityQueue.class.php
@@ -11,25 +11,9 @@ class EntityReferenceBehavior_EntityQueue extends EntityReference_BehaviorHandle
   public function validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
     if ($entity_type == 'entityqueue_subqueue') {
       $queue = entityqueue_queue_load($entity->queue);
-
-      $min_size = $queue->settings['min_size'];
-      $max_size = $queue->settings['max_size'];
-      $act_as_queue = isset($queue->settings['act_as_queue']) ? $queue->settings['act_as_queue'] : 0;
-
-      $empty_target_id = create_function('$value', 'return (!empty($value["target_id"])) ? TRUE : FALSE;');
-      $eq_items = array_filter($items, $empty_target_id);
-
-      if (count($eq_items) < $min_size && $entity->op != t('Add item')) {
-        $errors[$field['field_name']][$langcode][0][] = array(
-          'error' => 'entityqueue_min_size',
-          'message' => t("The minimum number of items in this queue is @min_size.", array('@min_size' => $min_size)),
-        );
-      }
-      elseif (!$act_as_queue && count($eq_items) > $max_size && $max_size > 0) {
-        $errors[$field['field_name']][$langcode][count($items) - 1][] = array(
-          'error' => 'entityqueue_max_size',
-          'message' => t("The maxinum number of items in this queue is @max_size.", array('@max_size' => $max_size)),
-        );
+      if ($queue) {
+        $handler = entityqueue_get_handler($queue);
+        $handler->validateItems($field, $instance, $langcode, $items, $errors);
       }
     }
   }
@@ -40,19 +24,11 @@ class EntityReferenceBehavior_EntityQueue extends EntityReference_BehaviorHandle
   public function presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
     if ($entity_type == 'entityqueue_subqueue') {
       $queue = entityqueue_queue_load($entity->queue);
-
-      $max_size = $queue->settings['max_size'];
-      $act_as_queue = isset($queue->settings['act_as_queue']) ? $queue->settings['act_as_queue'] : 0;
-
-      if ($act_as_queue) {
-        $empty_target_id = create_function('$value', 'return (!empty($value["target_id"])) ? TRUE : FALSE;');
-        $eq_items = array_filter($items, $empty_target_id);
-
-        if (count($eq_items) > $max_size && $max_size > 0) {
-          // Keep up to $max_size items
-          $items = array_slice($eq_items, -$max_size);
-        }
+      if ($queue) {
+        $handler = entityqueue_get_handler($queue);
+        $handler->preSaveItems($field, $instance, $langcode, $items);
       }
     }
   }
+
 }
