Hmm, the only reason Access Violation occurs is because PowerDraw memory is freed (that is, it doesn't exist in OnDestroy event). Finalize method frees politely its stuff by "nil" comparison. The event order I've told you about was found practically. You might want to check it out by adding some logging or simply ShowMessage, put it in PowerDraw.Finalize method, and then another one in Destroy method. You'll notice that PowerDraw gets destroyed and finalized BEFORE OnDestroy method occurs (well, that's how I found it out).
Finally, thanks a lot for pointing out some bugs and any suggestions you have made