diff --git a/Demo/tix/BUGS.txt b/Demo/tix/BUGS.txt
deleted file mode 100644
index 052a1e6..0000000
--- a/Demo/tix/BUGS.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-$Id$
-
-1)	There seems to be a problem with ComboBox that shows up
-in the ExFileSelectBox demo. The popdown scrolled list widget
-is being created, then destroyed. This does not happen in Tcl Tix.
-This is probably a sympton in Tix from _tkinter; if you find the cause 
-of this, please post a patch on http://tix.sourceforge.net.
-
diff --git a/Demo/tix/tixwidgets.py b/Demo/tix/tixwidgets.py
index f6bb70e..ae7b063 100644
--- a/Demo/tix/tixwidgets.py
+++ b/Demo/tix/tixwidgets.py
@@ -560,6 +560,9 @@
     top.pack(expand=1, fill=Tix.BOTH)
     bot.pack(fill=Tix.BOTH)
 
+    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
+	     win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))
+
 def SWindow_reset(rh, win):
     win.place(x=30, y=150, width=190, height=120)
     win.update()
@@ -575,8 +578,18 @@
 		      text='The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.')
 
     win = Tix.ScrolledText(top, scrollbar='auto')
-#    win.text['wrap'] = 'none'
-    win.text.insert(Tix.END, 'This is a text widget embedded in a scrolled window. Although the original Tix demo does not have any text here, I decided to put in some so that you can see the effect of scrollbars etc.')
+    win.text['wrap'] = 'none'
+    win.text.insert(Tix.END, '''When -scrollbar is set to "auto", the
+scrollbars are shown only when needed. 
+Additional modifiers can be used to force a
+scrollbar to be shown or hidden. For example, 
+"auto -y" means the horizontal scrollbar 
+should be shown when needed but the vertical 
+scrollbar should always be hidden;
+"auto +x" means the vertical scrollbar
+should be shown when needed but the horizontal 
+scrollbar should always be shown, and so on.'''
+)
     win.place(x=30, y=150, width=190, height=100)
 
     rh = Tix.ResizeHandle(top, bg='black',
diff --git a/Lib/lib-tk/Tix.py b/Lib/lib-tk/Tix.py
index 5759356..98a06c2 100755
--- a/Lib/lib-tk/Tix.py
+++ b/Lib/lib-tk/Tix.py
@@ -203,12 +203,16 @@
             self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
             self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
         # Load Tix - this should work dynamically or statically
-        # If it's static, lib/tix8.1/pkgIndex.tcl should have
+        # If it's static, tcl/tix8.1/pkgIndex.tcl should have
         #               'load {} Tix'
-        # If it's dynamic under Unix, lib/tix8.1/pkgIndex.tcl should have
+        # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
         #               'load libtix8.1.8.3.so Tix'
         self.tk.eval('package require Tix')
 
+    def destroy(self):
+        # For safety, remove an delete_window binding before destroy
+        self.protocol("WM_DELETE_WINDOW", "")
+        Tkinter.Tk.destroy(self)
 
 # The Tix 'tixForm' geometry manager
 class Form:
@@ -1669,16 +1673,20 @@
 
 class _dummyComboBox(ComboBox, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
-        TixSubWidget.__init__(self, master, name, destroy_physically)
+        TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
+        self.subwidget_list['label'] = _dummyLabel(self, 'label')
         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
         self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
-        # I'm not sure about this destroy_physically=0 in all cases;
-        # it may depend on if -dropdown is true; I've added as a trial
+
         self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
-                                                                'slistbox',
-                                                                destroy_physically=0)
-        self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox',
-                                                       destroy_physically=0)
+                                                                'slistbox')
+        try:
+            self.subwidget_list['tick'] = _dummyButton(self, 'tick')
+            #cross Button : present if created with the fancy option
+            self.subwidget_list['cross'] = _dummyButton(self, 'cross')
+        except TypeError:
+            # unavailable when -fancy not specified
+            pass
 
 class _dummyDirList(DirList, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
@@ -1738,9 +1746,11 @@
 ### Utility Routines ###
 ########################
 
-# Returns the qualified path name for the widget. Normally used to set
-# default options for subwidgets. See tixwidgets.py
+#mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
+
 def OptionName(widget):
+    '''Returns the qualified path name for the widget. Normally used to set
+    default options for subwidgets. See tixwidgets.py'''
     return widget.tk.call('tixOptionName', widget._w)
 
 # Called with a dictionary argument of the form
@@ -1766,6 +1776,38 @@
     # FIXME: It should inherit -superclass tixScrolledWidget
     pass
 
+class Grid(TixWidget):
+    '''The Tix Grid command creates a new window  and makes it into a
+    tixGrid widget. Additional options, may be specified on the command
+    line or in the option database to configure aspects such as its cursor
+    and relief.
+
+    A Grid widget displays its contents in a two dimensional grid of cells.
+    Each cell may contain one Tix display item, which may be in text,
+    graphics or other formats. See the DisplayStyle class for more information
+    about Tix display items. Individual cells, or groups of cells, can be
+    formatted with a wide range of attributes, such as its color, relief and
+    border.
+
+    Subwidgets - None'''
+    pass
+
+    # def anchor option ?args ...?
+    # def bdtype
+    # def delete dim from ?to?
+    # def edit apply
+    # def edit set x y
+    # def entrycget x y option
+    # def entryconfigure x y ?option? ?value option value ...?
+    # def format
+    # def index
+    # def move dim from to offset
+    # def set x y ?-itemtype type? ?option value...?
+    # def size dim index ?option value ...?
+    # def unset x y
+    # def xview
+    # def yview
+    
 class ScrolledGrid(TixWidget):
     '''Scrolled Grid widgets'''
 
