I'm a bit rusty so I don't see what I'm doing wrong here. I'm having some issues where the finalization order seems to depend on Application.Run being executed or not. In my setup, Unit1 uses Unit2 in the interface section. Unit1 contains a form which accesses a global pointer variable in Unit2 in the OnDestroy handler. Unit2 has an initialization and finalization section, and it nils the pointer in the finalization section. Now, by default, this works fine. However if I do not call Application.Run in the DPR file, then the finalization section in Unit2 is called before the form is destroyed. Sample code is here, add/remove a command line parameter to trigger the error. Alternatively just comment out Application.Run. https://www.dropbox.com/s/ky3ob758xofer1f/FinalizationError.zip In my real-world case, the "Unit2" is actually Data.SqlTimSt, and the global variable is it's internal SQLTimeStampVariantType variable, which is used indirectly through Data.DB, ...