--- ../../generic/tixGrid.c.orig	Thu Feb 11 18:11:44 1999
+++ ../../generic/tixGrid.c	Wed Aug  9 19:15:03 2000
@@ -798,7 +798,7 @@
 		    cellDone = TixGrDataNextCell(&cellSearch)) {
 
 		TixGridDataDeleteSearchedEntry(&cellSearch);
-		Tix_GrFreeElem((TixGrEntry*)cellSearch.data);
+		Tix_GrFreeElem(wPtr, (TixGrEntry*)cellSearch.data);
 	    }
 	}
 
@@ -1757,6 +1757,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;
@@ -1800,7 +1804,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;
@@ -3008,10 +3012,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	Thu Feb 11 18:11:44 1999
+++ ../../generic/tixGrid.h	Tue Aug  8 13:23:17 2000
@@ -391,7 +391,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 Apr  7 01:40:13 1999
+++ ../../generic/tixGrData.c	Wed Aug  9 16:57:40 2000
@@ -777,7 +777,7 @@
 		    chPtr = (TixGrEntry *)Tcl_GetHashValue(toDel);
 		    if (chPtr) {
 			deleted = 1;
-			Tix_GrFreeElem(chPtr);
+			Tix_GrFreeElem(wPtr, chPtr);
 		    }
 
 		    Tcl_DeleteHashEntry(toDel);
