I think you need to make the following change to the last method, maybe. Because I think parents need to be called first before anything else is done when you overwrite
Protected Overrides Sub Finalize( )
MyBase.Finalize( )
Dispose( )
End Sub
Not a hundred percent sure about this, but I think that is how it works.