The answer is surprisingly easy: Tell the object to release itself. I added a Release method to all of the classes in SFCTRLS.VCX, our base class library, that don’t natively have this method. Then, in the Release method, I put the following code (the last line isn’t required if the class has a native Release method): if This.lRelease nodefault return .F. endif This.lRelease This.Cleanup() release ThisWhen should the Release method be called? From where? I was thinking in the Destroy, but later in the article Doug mentions that the Cleanup method is called from the Destroy, so then I wasn't sure.