Index: Core/Events.cs
===================================================================
--- Core/Events.cs	(revision 13486)
+++ Core/Events.cs	(working copy)
@@ -429,20 +429,14 @@
             }
             _elements.Clear();
 
-            DependencyObject._Destroyed.Clear();
-            Clock._Completed.Clear();
-            CommandBinding._PreviewCanExecute.Clear();
-            CommandBinding._PreviewExecuted.Clear();
-            CommandBinding._CanExecute.Clear();
-            CommandBinding._Executed.Clear();
-            ItemContainerGenerator._ItemsChanged.Clear();
-            ItemContainerGenerator._StatusChanged.Clear();
-            Popup._Closed.Clear();
-            Popup._Opened.Clear();
-            Timeline._Completed.Clear();
-            VisualStateGroup._CurrentStateChanging.Clear();
-            VisualStateGroup._CurrentStateChanged.Clear();
-            View._Rendering.Clear();
+            DependencyObject.ResetEvents();
+            Clock.ResetEvents();
+            CommandBinding.ResetEvents();
+            ItemContainerGenerator.ResetEvents();
+            Popup.ResetEvents();
+            Timeline.ResetEvents();
+            VisualStateGroup.ResetEvents();
+            View.ResetEvents();
         }
 
         private static void OnElementDestroyed(IntPtr d)
Index: Core/View.cs
===================================================================
--- Core/View.cs	(revision 13486)
+++ Core/View.cs	(working copy)
@@ -435,7 +435,17 @@
             }
         }
 
-        internal static Dictionary<long, RenderingEventHandler> _Rendering =
+        internal static void ResetEvents()
+        {
+            foreach (var kv in _Rendering)
+            {
+                IntPtr cPtr = new IntPtr(kv.Key);
+                Noesis_View_UnbindRenderingEvent(new HandleRef(null, cPtr), _raiseRendering);
+            }
+            _Rendering.Clear();
+        }
+
+        private static Dictionary<long, RenderingEventHandler> _Rendering =
             new Dictionary<long, RenderingEventHandler>();
         #endregion
 
Index: Proxies/Clock.cs
===================================================================
--- Proxies/Clock.cs	(revision 13486)
+++ Proxies/Clock.cs	(working copy)
@@ -84,7 +84,15 @@
     }
   }
 
-  internal static Dictionary<long, CompletedHandler> _Completed =
+  internal static void ResetEvents() {
+    foreach (var kv in _Completed) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_Clock_Completed(_raiseCompleted, cPtr);
+    }
+    _Completed.Clear();
+  }
+
+  private static Dictionary<long, CompletedHandler> _Completed =
       new Dictionary<long, CompletedHandler>();
   #endregion
 
Index: Proxies/CommandBinding.cs
===================================================================
--- Proxies/CommandBinding.cs	(revision 13486)
+++ Proxies/CommandBinding.cs	(working copy)
@@ -83,7 +83,7 @@
     }
   }
 
-  internal static Dictionary<long, PreviewCanExecuteHandler> _PreviewCanExecute =
+  private static Dictionary<long, PreviewCanExecuteHandler> _PreviewCanExecute =
       new Dictionary<long, PreviewCanExecuteHandler>();
   #endregion
 
@@ -139,7 +139,7 @@
     }
   }
 
-  internal static Dictionary<long, CanExecuteHandler> _CanExecute =
+  private static Dictionary<long, CanExecuteHandler> _CanExecute =
       new Dictionary<long, CanExecuteHandler>();
   #endregion
 
@@ -195,7 +195,7 @@
     }
   }
 
-  internal static Dictionary<long, PreviewExecutedHandler> _PreviewExecuted =
+  private static Dictionary<long, PreviewExecutedHandler> _PreviewExecuted =
       new Dictionary<long, PreviewExecutedHandler>();
   #endregion
 
@@ -251,10 +251,36 @@
     }
   }
 
-  internal static Dictionary<long, ExecutedHandler> _Executed =
+  private static Dictionary<long, ExecutedHandler> _Executed =
       new Dictionary<long, ExecutedHandler>();
   #endregion
 
+  internal static void ResetEvents() {
+    foreach (var kv in _PreviewCanExecute) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_CommandBinding_PreviewCanExecute(_raisePreviewCanExecute, cPtr);
+    }
+    _PreviewCanExecute.Clear();
+
+    foreach (var kv in _CanExecute) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_CommandBinding_CanExecute(_raiseCanExecute, cPtr);
+    }
+    _CanExecute.Clear();
+
+    foreach (var kv in _PreviewExecuted) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_CommandBinding_PreviewExecuted(_raisePreviewExecuted, cPtr);
+    }
+    _PreviewExecuted.Clear();
+
+    foreach (var kv in _Executed) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_CommandBinding_Executed(_raiseExecuted, cPtr);
+    }
+    _Executed.Clear();
+  }
+
   #endregion
 
   public ICommand Command {
Index: Proxies/DependencyObjectExtend.cs
===================================================================
--- Proxies/DependencyObjectExtend.cs	(revision 13486)
+++ Proxies/DependencyObjectExtend.cs	(working copy)
@@ -970,7 +970,17 @@
             }
         }
 
-        internal static Dictionary<long, DestroyedHandler> _Destroyed =
+        internal static void ResetEvents()
+        {
+            foreach (var kv in _Destroyed)
+            {
+                IntPtr cPtr = new IntPtr(kv.Key);
+                Noesis_Dependency_Destroyed_Unbind(_raiseDestroyed, new HandleRef(null, cPtr));
+            }
+            _Destroyed.Clear();
+        }
+
+        private static Dictionary<long, DestroyedHandler> _Destroyed =
             new Dictionary<long, DestroyedHandler>();
         #endregion
 
Index: Proxies/ItemContainerGenerator.cs
===================================================================
--- Proxies/ItemContainerGenerator.cs	(revision 13486)
+++ Proxies/ItemContainerGenerator.cs	(working copy)
@@ -140,10 +140,24 @@
     }
   }
 
-  internal static Dictionary<long, StatusChangedHandler> _StatusChanged =
+  private static Dictionary<long, StatusChangedHandler> _StatusChanged =
       new Dictionary<long, StatusChangedHandler>();
   #endregion
 
+  internal static void ResetEvents() {
+    foreach (var kv in _ItemsChanged) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_ItemContainerGenerator_ItemsChanged(_raiseItemsChanged, cPtr);
+    }
+    _ItemsChanged.Clear();
+
+    foreach (var kv in _StatusChanged) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_ItemContainerGenerator_StatusChanged(_raiseStatusChanged, cPtr);
+    }
+    _StatusChanged.Clear();
+  }
+
   #endregion
 
   ItemContainerGenerator IItemContainerGenerator.GetItemContainerGeneratorForPanel(Panel panel) {
Index: Proxies/Popup.cs
===================================================================
--- Proxies/Popup.cs	(revision 13486)
+++ Proxies/Popup.cs	(working copy)
@@ -141,6 +141,20 @@
       new Dictionary<long, OpenedHandler>();
   #endregion
 
+  internal static new void ResetEvents() {
+    foreach (var kv in _Closed) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_Popup_Closed(_raiseClosed, cPtr);
+    }
+    _Closed.Clear();
+
+    foreach (var kv in _Opened) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_Popup_Opened(_raiseOpened, cPtr);
+    }
+    _Opened.Clear();
+  }
+
   #endregion
 
   public Popup() {
Index: Proxies/Timeline.cs
===================================================================
--- Proxies/Timeline.cs	(revision 13486)
+++ Proxies/Timeline.cs	(working copy)
@@ -88,6 +88,14 @@
       new Dictionary<long, CompletedHandler>();
   #endregion
 
+  internal static new void ResetEvents() {
+    foreach (var kv in _Completed) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_Timeline_Completed(_raiseCompleted, cPtr);
+    }
+    _Completed.Clear();
+  }
+
   #endregion
 
   public static int GetDesiredFrameRate(DependencyObject timeline) {
Index: Proxies/VisualStateGroup.cs
===================================================================
--- Proxies/VisualStateGroup.cs	(revision 13486)
+++ Proxies/VisualStateGroup.cs	(working copy)
@@ -141,6 +141,20 @@
       new Dictionary<long, CurrentStateChangedHandler>();
   #endregion
 
+  internal static new void ResetEvents() {
+    foreach (var kv in _CurrentStateChanging) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_VisualStateGroup_CurrentStateChanging(_raiseCurrentStateChanging, cPtr);
+    }
+    _CurrentStateChanging.Clear();
+
+    foreach (var kv in _CurrentStateChanged) {
+      IntPtr cPtr = new IntPtr(kv.Key);
+      NoesisGUI_PINVOKE.UnbindEvent_VisualStateGroup_CurrentStateChanged(_raiseCurrentStateChanged, cPtr);
+    }
+    _CurrentStateChanged.Clear();
+  }
+
   #endregion
 
   public VisualStateGroup() {
