diff --git a/src/zmapWindow/zmapWindowDrawFeatures.c b/src/zmapWindow/zmapWindowDrawFeatures.c
index 917aeafdf16de3c97e543b1cab7e271dd377dfe1..f53a00628ebab454f0cd4f0a3691569e2cb2dade 100755
--- a/src/zmapWindow/zmapWindowDrawFeatures.c
+++ b/src/zmapWindow/zmapWindowDrawFeatures.c
@@ -26,9 +26,9 @@
  *              
  * Exported functions: 
  * HISTORY:
- * Last edited: Jun 10 14:51 2009 (rds)
+ * Last edited: Jun 11 15:07 2009 (rds)
  * Created: Thu Jul 29 10:45:00 2004 (rnc)
- * CVS info:   $Id: zmapWindowDrawFeatures.c,v 1.246 2009-06-10 14:01:24 rds Exp $
+ * CVS info:   $Id: zmapWindowDrawFeatures.c,v 1.247 2009-06-11 14:13:59 rds Exp $
  *-------------------------------------------------------------------
  */
 
@@ -596,8 +596,8 @@ void zmapWindowDrawFeatureSet(ZMapWindow window,
                               FooCanvasGroup *reverse_col_wcp,
                               ZMapFrame frame)
 {
-  ZMapWindowContainerGroup forward_container;
-  ZMapWindowContainerGroup reverse_container;
+  ZMapWindowContainerGroup forward_container = NULL;
+  ZMapWindowContainerGroup reverse_container = NULL;
   CreateFeatureSetDataStruct featureset_data = {NULL} ;
   ZMapFeatureSet view_feature_set = NULL;
   gboolean bump_required = TRUE;
@@ -678,7 +678,7 @@ void zmapWindowDrawFeatureSet(ZMapWindow window,
        * already loaded in this column a COMPRESS_ALL will bump the whole column
        * _not_ just the newly loaded ones... */
 
-      if (forward_container)
+      if (forward_col_wcp)
 	{
 	  if ((bump_mode = zmapWindowContainerFeatureSetGetBumpMode((ZMapWindowContainerFeatureSet)forward_container)) != ZMAPBUMP_UNBUMP)
 	    zmapWindowColumnBumpRange(FOO_CANVAS_ITEM(forward_col_wcp), bump_mode, ZMAPWINDOW_COMPRESS_ALL) ;
@@ -688,7 +688,7 @@ void zmapWindowDrawFeatureSet(ZMapWindow window,
 	  zmapWindowColumnSetState(window, forward_col_wcp, ZMAPSTYLE_COLDISPLAY_INVALID, FALSE) ;
 	}
 
-      if (reverse_container)
+      if (reverse_col_wcp)
 	{
 	  if ((bump_mode = zmapWindowContainerFeatureSetGetBumpMode((ZMapWindowContainerFeatureSet)reverse_container)) != ZMAPBUMP_UNBUMP)
 	    zmapWindowColumnBumpRange(FOO_CANVAS_ITEM(reverse_col_wcp), bump_mode, ZMAPWINDOW_COMPRESS_ALL) ;
@@ -893,7 +893,6 @@ void zmapWindowDraw3FrameFeatures(ZMapWindow window)
 {
   ZMapCanvasDataStruct canvas_data = {NULL};
   ZMapFeatureContext full_context;
-  FooCanvasItem *root_group_item = NULL;
 
   full_context = window->feature_context;
 
@@ -904,9 +903,6 @@ void zmapWindowDraw3FrameFeatures(ZMapWindow window)
   canvas_data.full_context  = full_context;
   canvas_data.frame_mode    = TRUE;
 
-  root_group_item = zmapWindowFToIFindItemFull(window->context_to_item, 
-					       0, 0, 0, ZMAPSTRAND_NONE, ZMAPFRAME_NONE, 0);
-
   canvas_data.curr_root_group = zmapWindowContainerGetFeatures(window->feature_root_group) ;
  
 
@@ -949,9 +945,15 @@ static void purge_hide_frame_specific_columns(ZMapWindowContainerGroup container
 
 	      column_strand = zmapWindowContainerFeatureSetGetStrand(container_set);
 
+	      zMapLogMessage("column %s [%s]", 
+			     g_quark_to_string(container_set->unique_id),
+			     zMapFeatureStrand2Str(column_strand));
+
 	      if ((column_strand != ZMAPSTRAND_REVERSE) ||
 		  (column_strand == ZMAPSTRAND_REVERSE && window->show_3_frame_reverse))
 		{
+		  zMapLogMessage("hiding %s", g_quark_to_string(container_set->unique_id));
+
 		  zmapWindowColumnHide((FooCanvasGroup *)container) ;
 
 		  zmapWindowContainerFeatureSetRemoveAllItems(container_set) ;
@@ -1775,6 +1777,8 @@ static FooCanvasGroup *createColumnFull(ZMapWindowContainerFeatures parent_group
       
       /* needs to accept style_list */
       zmapWindowContainerFeatureSetAugment((ZMapWindowContainerFeatureSet)container, window, 
+					   align->unique_id,
+					   block->unique_id,
 					   feature_set_unique_id, 0, 
 					   style_list, strand, frame);
       
@@ -2323,17 +2327,21 @@ static gboolean containerDestroyCB(FooCanvasItem *item, gpointer user_data)
   ZMapFeatureAny feature_any;
   gboolean status = FALSE ;
   gboolean result = FALSE ;				    /* Always return FALSE ?? check this.... */
-  
+  gboolean log_all = FALSE ;
+
+  if(log_all)
+    zMapLogMessage("gobject type = '%s'", G_OBJECT_TYPE_NAME(item));
 
   /* Some items may not have features attached...e.g. empty cols....I should revisit the empty
    * cols bit, it keeps causing trouble all over the place.....column creation would be so much
    * simpler without it.... */
   if ((ZMAP_IS_CONTAINER_GROUP(item) == TRUE) && 
-      (container   = ZMAP_CONTAINER_GROUP(item)) &&
-      (feature_any = container->feature_any))
+      (container   = ZMAP_CONTAINER_GROUP(item)))
     {
       context_to_item = window->context_to_item;
 
+      feature_any = container->feature_any;
+
       switch (container->level)
 	{
 	case ZMAPCONTAINER_LEVEL_ROOT:
@@ -2341,7 +2349,7 @@ static gboolean containerDestroyCB(FooCanvasItem *item, gpointer user_data)
 	    zMapAssert(feature_any->struct_type == ZMAPFEATURE_STRUCT_CONTEXT);
 
 	    status = zmapWindowFToIRemoveRoot(context_to_item) ;
-	    
+
 	    break ;
 	  }
 	case ZMAPCONTAINER_LEVEL_ALIGN:
@@ -2361,18 +2369,31 @@ static gboolean containerDestroyCB(FooCanvasItem *item, gpointer user_data)
 					       feature_any->parent->unique_id,
 					       feature_any->unique_id) ;
 	    
-	    break ;
 	  }
+	  break ;
 	case ZMAPCONTAINER_LEVEL_FEATURESET:
 	  {
-	    zMapAssert(feature_any->struct_type == ZMAPFEATURE_STRUCT_FEATURESET);
-	    zMapAssert(feature_any->parent);
-	    zMapAssert(feature_any->parent->parent);
+	    container_set = (ZMapWindowContainerFeatureSet)container;
+
+	    if(feature_any)
+	      {
+		zMapAssert(feature_any->struct_type == ZMAPFEATURE_STRUCT_FEATURESET);
+		zMapAssert(feature_any->parent);
+		zMapAssert(feature_any->parent->parent);
+		zMapAssert(feature_any->unique_id == container_set->unique_id);
+	      }
+
+	    status = zmapWindowFToIRemoveSet(context_to_item,
+					     container_set->align_id,
+					     container_set->block_id,
+					     container_set->unique_id,
+					     container_set->strand, 
+					     container_set->frame) ;
 
 	    /* If the focus column goes then so should the focus items as they should be in step. */
 	    if (zmapWindowFocusGetHotColumn(window->focus) == group)
 	      zmapWindowFocusReset(window->focus) ;
-
+	    
 	    /* get rid of the overlay manager */
 	    if((overlay_manager = g_object_get_data(G_OBJECT(group), ITEM_FEATURE_OVERLAY_DATA)))
 	      {
@@ -2380,31 +2401,20 @@ static gboolean containerDestroyCB(FooCanvasItem *item, gpointer user_data)
 		zmapWindowFocusRemoveOverlayManager(window->focus, overlay_manager);
 		overlay_manager = zmapWindowOverlayDestroy(overlay_manager);
 	      }
-
-	    container_set = (ZMapWindowContainerFeatureSet)item;
-
-	    status = zmapWindowFToIRemoveSet(context_to_item,
-					     feature_any->parent->parent->unique_id,
-					     feature_any->parent->unique_id,
-					     feature_any->unique_id,
-					     container_set->strand, container_set->frame) ;
-
-	    break ;
 	  }
+	  break ;
 	default:
 	  {
 	    zMapAssertNotReached() ;
 	  }
 	}
 
-#ifdef RDS_DEBUG_ITEM_IN_HASH_DESTROY
       if(!status)
-	printf("containerDestroyCB (%p): remove failed\n", group);
-#endif /* RDS_DEBUG_ITEM_IN_HASH_DESTROY */
+	zMapLogCritical("containerDestroyCB (%p): remove failed", group);
     }
   else
     {
-      zMapLogCritical("containerDestroyCB (%p): no Feature Data\n", group);
+      zMapLogCritical("containerDestroyCB (%p): no Feature Data", group);
     }
 
 #ifdef RDS_REMOVED