--- ../../generic/tixGrid.c.orig	Wed May 17 13:08:42 2000
+++ ../../generic/tixGrid.c	Tue Dec  2 21:16:48 2003
@@ -801,7 +801,7 @@
 		    cellDone = TixGrDataNextCell(&cellSearch)) {
 
 		TixGridDataDeleteSearchedEntry(&cellSearch);
-		Tix_GrFreeElem((TixGrEntry*)cellSearch.data);
+		Tix_GrFreeElem(wPtr, (TixGrEntry*)cellSearch.data);
 	    }
 	}
 
@@ -1760,6 +1760,10 @@
     iPtr->base.clientData = (ClientData)wPtr;     /* %%%% */
 
     if (chPtr->iPtr) {
+      if (Tix_DItemType(chPtr->iPtr) == TIX_DITEM_WINDOW) {
+	Tix_WindowItemListRemove(&wPtr->mappedWindows,
+				 chPtr->iPtr);
+      }
 	Tix_DItemFree(chPtr->iPtr);
     }
     chPtr->iPtr = iPtr;
@@ -1803,7 +1807,7 @@
     chPtr = Tix_GrFindElem(interp, wPtr, x, y);
     if (chPtr != NULL) {
 	TixGridDataDeleteEntry(wPtr->dataSet, x, y);
-	Tix_GrFreeElem(chPtr);
+	Tix_GrFreeElem(wPtr, chPtr);
 	Tix_GrDoWhenIdle(wPtr, TIX_GR_RESIZE);
     }
     return TCL_OK;
@@ -3011,10 +3015,15 @@
  */
 
 void
-Tix_GrFreeElem(chPtr)
+Tix_GrFreeElem(wPtr, chPtr)
+    WidgetPtr wPtr;
     TixGrEntry * chPtr;		/* The element fo free */
 {
     if (chPtr->iPtr) {
+	if (Tix_DItemType(chPtr->iPtr) == TIX_DITEM_WINDOW) {
+	    Tix_WindowItemListRemove(&wPtr->mappedWindows,
+		chPtr->iPtr);
+	}
 	Tix_DItemFree(chPtr->iPtr);
     }
     ckfree((char*)chPtr);
--- ../../generic/tixGrid.h.orig	Wed May 17 13:08:42 2000
+++ ../../generic/tixGrid.h	Tue Dec  2 21:16:48 2003
@@ -394,7 +394,8 @@
 EXTERN void		Tix_GrDoWhenIdle _ANSI_ARGS_((WidgetPtr wPtr,
 			    int type));
 EXTERN void		Tix_GrCancelDoWhenIdle _ANSI_ARGS_((WidgetPtr wPtr));
-EXTERN void		Tix_GrFreeElem _ANSI_ARGS_((TixGrEntry * chPtr));
+EXTERN void		Tix_GrFreeElem _ANSI_ARGS_((WidgetPtr wPtr,
+			    TixGrEntry * chPtr));
 EXTERN void		Tix_GrFreeUnusedColors _ANSI_ARGS_((WidgetPtr wPtr,
 			    int freeAll));
 EXTERN void		Tix_GrScrollPage _ANSI_ARGS_((WidgetPtr wPtr,
--- ../../generic/tixGrData.c.orig	Wed May 17 13:08:42 2000
+++ ../../generic/tixGrData.c	Tue Dec  2 21:16:48 2003
@@ -780,7 +780,7 @@
 		    chPtr = (TixGrEntry *)Tcl_GetHashValue(toDel);
 		    if (chPtr) {
 			deleted = 1;
-			Tix_GrFreeElem(chPtr);
+			Tix_GrFreeElem(wPtr, chPtr);
 		    }
 
 		    Tcl_DeleteHashEntry(toDel);
