If the problem is that dataItem is holding a reference then just add an internal Reset method to TreeNodeNavigator which cleans that reference and call it after using the navigator. It will be more efficient than creating the whole object every time.