Index: /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlotTable.class.php
===================================================================
--- /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlotTable.class.php	(revision 4379)
+++ /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlotTable.class.php	(revision 4388)
@@ -22,3 +22,27 @@
     return $this->createQuery('r')->where('r.page_id = ? AND r.area_name = ? AND r.permid = ?', array($page_id, $area_name, $permid))->fetchOne();
   }
+  
+  /**
+   * Accepts an aReusableSlot or an array hydrated with the same columns. Returns the
+   * actual Apostrophe slot being reused, or null if its page no longer exists or
+   * it does not exist in the current version of its area on the page
+   */
+  static public function getReusedSlot($reusableSlot)
+  {
+    $q = aPageTable::queryWithSlot($reusableSlot['area_name']);
+    $q->andWhere('p.id = ?', $reusableSlot['page_id']);
+    $q->andWhere('avs.permid = ?', $reusableSlot['permid']);
+    $page = $q->fetchOne();
+    if (!$page)
+    {
+      return null;
+    }
+    $slots = $page->getSlotsByAreaName($reusableSlot['area_name']);
+    if (!isset($slots[$reusableSlot['permid']]))
+    {
+      return null;
+    }
+    $slot = $slots[$reusableSlot['permid']];
+    return $slot;
+  }
 }
Index: /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlideshowSlot.class.php
===================================================================
--- /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlideshowSlot.class.php	(revision 4379)
+++ /plugins/apostropheExtraSlotsPlugin/trunk/lib/model/doctrine/PluginaReusableSlideshowSlot.class.php	(revision 4388)
@@ -33,23 +33,13 @@
     if (isset($values['reuse']))
     {
-      // This isn't terrible but it could be more efficient if I used
-      // array hydration. The trouble with that is that I have to walk the
-      // results of that join which would be a lot easier if I refactored
-      // some of the code for that purpose that lives in PluginaPageTable
-      $q = aPageTable::queryWithSlot($values['reuse']['area_name']);
-      $q->andWhere('p.id = ?', $values['reuse']['page_id']);
-      $q->andWhere('avs.permid = ?', $values['reuse']['permid']);
-      $page = $q->fetchOne();
-      if (!$page)
+      $slot = aReusableSlotTable::getReusedSlot($values['reuse']);
+      if ($slot)
+      {
+        return $slot->getOrderedMediaItems();
+      }
+      else
       {
         return array();
       }
-      $slots = $page->getSlotsByAreaName($values['reuse']['area_name']);
-      if (!isset($slots[$values['reuse']['permid']]))
-      {
-        return array();
-      }
-      $slot = $slots[$values['reuse']['permid']];
-      return $slot->getOrderedMediaItems();
     }
     return parent::getOrderedMediaItems();
Index: /plugins/apostropheExtraSlotsPlugin/trunk/lib/form/aReusableSlideshowSlotEditForm.class.php
===================================================================
--- /plugins/apostropheExtraSlotsPlugin/trunk/lib/form/aReusableSlideshowSlotEditForm.class.php	(revision 4379)
+++ /plugins/apostropheExtraSlotsPlugin/trunk/lib/form/aReusableSlideshowSlotEditForm.class.php	(revision 4388)
@@ -56,4 +56,16 @@
     $this->setValidator('label', new sfValidatorPass(array('required' => false)));
     $reusableSlots = Doctrine::getTable('aReusableSlot')->createQuery('r')->where('r.type = ? AND r.id <> ?', array($this->slot->type, $this->aReusableSlot ? $this->aReusableSlot->id : 0))->orderBy('r.label')->fetchArray();
+    
+    // Filter to make sure only slots that currently exist remain on the list
+    $filteredSlots = array();
+    foreach ($reusableSlots as $reusableSlot)
+    {
+      if (aReusableSlotTable::getReusedSlot($reusableSlot))
+      {
+        $filteredSlots[] = $reusableSlot;
+      }
+    }
+    $reusableSlots = $filteredSlots;
+    
     $this->reuseChoices = array();
     foreach ($reusableSlots as $reusableSlot)
Index: /plugins/apostropheExtraSlotsPlugin/trunk/modules/aReusableSlideshowSlot/actions/components.class.php
===================================================================
--- /plugins/apostropheExtraSlotsPlugin/trunk/modules/aReusableSlideshowSlot/actions/components.class.php	(revision 4382)
+++ /plugins/apostropheExtraSlotsPlugin/trunk/modules/aReusableSlideshowSlot/actions/components.class.php	(revision 4388)
@@ -22,5 +22,13 @@
     {
       $values = $this->slot->getArrayValue();
-      $this->label = isset($values['label']) ? $values['label'] : null;
+      if (isset($values['reuse']['id']))
+      {
+        $aReusableSlot = Doctrine::getTable('aReusableSlot')->find($values['reuse']['id']);
+        $this->label = $aReusableSlot->label;
+      }
+      else
+      {
+        $this->label = isset($values['label']) ? $values['label'] : null;
+      }
     }
     else
