Attached you'll find an example of ambiguous behavior with finalization. For one, the finalization is called when one pointer to a derived type is assigned to another pointer to the same derived type. When a derived type contains a pointer to another derived type and assignment occurs the finalization bound procedure for that type is not called. I'm not sure which is the correct behavior. Look at the scope() procedure and the comments within. Thanks.