diff --git a/etg/menuitem.py b/etg/menuitem.py
index ac6cdb38f..ba7940390 100644
--- a/etg/menuitem.py
+++ b/etg/menuitem.py
@@ -136,11 +136,12 @@ def run():
 
 
     c.find('GetDisabledBitmap').type = 'const wxBitmap*'
+    c.find('GetDisabledBitmap').transferBack = True  # Python takes ownership of the return value
     c.find('GetDisabledBitmap').setCppCode("""\
         #ifdef __WXMSW__
-            return &self->GetDisabledBitmap();
+            return new wxBitmap(self->GetDisabledBitmap());
         #else
-            return &wxNullBitmap;
+            return new wxBitmap(wxNullBitmap);
         #endif
         """)
 
diff --git a/docs/sphinx/itemToModuleMap.json b/docs/sphinx/itemToModuleMap.json
index ce1b856c9..dd7959386 100644
--- a/docs/sphinx/itemToModuleMap.json
+++ b/docs/sphinx/itemToModuleMap.json
@@ -1261,7 +1261,16 @@
 "FileCtrlNameStr":"wx.",
 "FileDataObject":"wx.",
 "FileDialog":"wx.",
+"FileDialogButton":"wx.",
+"FileDialogCheckBox":"wx.",
+"FileDialogChoice":"wx.",
+"FileDialogCustomControl":"wx.",
+"FileDialogCustomize":"wx.",
+"FileDialogCustomizeHook":"wx.",
 "FileDialogNameStr":"wx.",
+"FileDialogRadioButton":"wx.",
+"FileDialogStaticText":"wx.",
+"FileDialogTextCtrl":"wx.",
 "FileDirPickerEvent":"wx.",
 "FileDropTarget":"wx.",
 "FileHistory":"wx.",
@@ -6832,6 +6841,7 @@
 "SetDisplayName":"wx.",
 "SetEnv":"wx.",
 "SettableHeaderColumn":"wx.",
+"SharedClientDataContainer":"wx.",
 "Shell":"wx.",
 "ShowEffect":"wx.",
 "ShowEvent":"wx.",
@@ -7903,6 +7913,8 @@
 "wxEVT_GRID_RANGE_SELECT":"wx.grid.",
 "wxEVT_GRID_RANGE_SELECTED":"wx.grid.",
 "wxEVT_GRID_RANGE_SELECTING":"wx.grid.",
+"wxEVT_GRID_ROW_AUTO_SIZE":"wx.grid.",
+"wxEVT_GRID_ROW_MOVE":"wx.grid.",
 "wxEVT_GRID_ROW_SIZE":"wx.grid.",
 "wxEVT_GRID_SELECT_CELL":"wx.grid.",
 "wxEVT_GRID_TABBING":"wx.grid.",
@@ -8212,6 +8224,7 @@
 "wxEVT_WEBVIEW_NAVIGATING":"wx.html2.",
 "wxEVT_WEBVIEW_NEWWINDOW":"wx.html2.",
 "wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED":"wx.html2.",
+"wxEVT_WEBVIEW_SCRIPT_RESULT":"wx.html2.",
 "wxEVT_WEBVIEW_TITLE_CHANGED":"wx.html2.",
 "wxEVT_WINDOW_MODAL_DIALOG_CLOSED":"wx.",
 "wxEVT_WIZARD_BEFORE_PAGE_CHANGED":"wx.adv.",
diff --git a/etg/_core.py b/etg/_core.py
index 220c13711..04d47438c 100644
--- a/etg/_core.py
+++ b/etg/_core.py
@@ -196,6 +196,7 @@
               'dirdlg',
               'dirctrl',
               'filedlg',
+              'filedlgcustomize',
               'frame',
               'msgdlg',
               'richmsgdlg',
diff --git a/etg/clntdatactnr.py b/etg/clntdatactnr.py
index 69364a7b6..a2c3c8bc1 100644
--- a/etg/clntdatactnr.py
+++ b/etg/clntdatactnr.py
@@ -17,7 +17,8 @@
 
 # The classes and/or the basename of the Doxygen XML files to be processed by
 # this script.
-ITEMS  = [ 'wxClientDataContainer' ]
+ITEMS  = [ 'wxClientDataContainer',
+           'wxSharedClientDataContainer' ]
 
 #---------------------------------------------------------------------------
 
diff --git a/etg/event.py b/etg/event.py
index 5f79d8881..4a5c30e1e 100644
--- a/etg/event.py
+++ b/etg/event.py
@@ -100,11 +100,6 @@ def run():
     #endif
     """)
 
-    # Missing in 3.1.6
-    module.addItem(etgtools.WigCode("""\
-        wxEventType wxEVT_FULLSCREEN /PyName=wxEVT_FULLSCREEN/;
-        """))
-
 
     module.addPyClass('PyEventBinder', ['object'],
         doc="""\
diff --git a/etg/filedlgcustomize.py b/etg/filedlgcustomize.py
new file mode 100644
index 000000000..9f8e72cff
--- /dev/null
+++ b/etg/filedlgcustomize.py
@@ -0,0 +1,86 @@
+#---------------------------------------------------------------------------
+# Name:        etg/filedlgcustomize.py
+# Author:      Scott Talbert
+#
+# Created:     07-Jun-2022
+# Copyright:   (c) 2022 by Total Control Software
+# License:     wxWindows License
+#---------------------------------------------------------------------------
+
+import etgtools
+import etgtools.tweaker_tools as tools
+
+PACKAGE   = "wx"
+MODULE    = "_core"
+NAME      = "filedlgcustomize"   # Base name of the file to generate to for this script
+DOCSTRING = ""
+
+# The classes and/or the basename of the Doxygen XML files to be processed by
+# this script.
+ITEMS  = [ 'wxFileDialogButton',
+           'wxFileDialogChoice',
+           'wxFileDialogCheckBox',
+           'wxFileDialogCustomControl',
+           'wxFileDialogCustomize',
+           'wxFileDialogCustomizeHook',
+           'wxFileDialogRadioButton',
+           'wxFileDialogStaticText',
+           'wxFileDialogTextCtrl',
+          ]
+
+#---------------------------------------------------------------------------
+
+def run():
+    # Parse the XML file(s) building a collection of Extractor objects
+    module = etgtools.ModuleDef(PACKAGE, MODULE, NAME, DOCSTRING)
+    etgtools.parseDoxyXML(module, ITEMS)
+
+    #-----------------------------------------------------------------
+    # Tweak the parsed meta objects in the module object as needed for
+    # customizing the generated code and docstrings.
+
+    c = module.find('wxFileDialogButton')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogChoice')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogCheckBox')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogCustomControl')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogCustomize')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogCustomizeHook')
+    assert isinstance(c, etgtools.ClassDef)
+
+    c = module.find('wxFileDialogRadioButton')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogStaticText')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+    c = module.find('wxFileDialogTextCtrl')
+    assert isinstance(c, etgtools.ClassDef)
+    c.noDefCtor = True
+
+
+    #-----------------------------------------------------------------
+    tools.doCommonTweaks(module)
+    tools.runGenerators(module)
+
+
+#---------------------------------------------------------------------------
+if __name__ == '__main__':
+    run()
+
diff --git a/etg/propgridpagestate.py b/etg/propgridpagestate.py
index 0799adb53..adf085f52 100644
--- a/etg/propgridpagestate.py
+++ b/etg/propgridpagestate.py
@@ -46,6 +46,8 @@ def run():
 
     c = module.find('wxPropertyGridPageState')
     tools.ignoreConstOverloads(c)
+    # Incorrectly documented in 3.1.7
+    c.find('GetColumnFullWidth.p').type = 'wxPGProperty *'
 
 
     module.find('wxPG_IT_CHILDREN').ignore()
diff --git a/etg/webview.py b/etg/webview.py
index 6fec50458..4a6bde2d3 100644
--- a/etg/webview.py
+++ b/etg/webview.py
@@ -103,13 +103,6 @@ def run():
                             'wxVersionInfo': 'wxVersionInfo()',
                             })
 
-    # Missing in 3.1.6
-    module.addItem(etgtools.WigCode("""\
-        wxEventType wxEVT_WEBVIEW_FULLSCREEN_CHANGED /PyName=wxEVT_WEBVIEW_FULLSCREEN_CHANGED/;
-        wxEventType wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED /PyName=wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED/;
-        wxEventType wxEVT_WEBVIEW_SCRIPT_RESULT /PyName=wxEVT_WEBVIEW_SCRIPT_RESULT/;
-        """))
-
     c = module.find('wxWebView')
     assert isinstance(c, etgtools.ClassDef)
     tools.fixWindowClass(c)