In retrospect, one last thing that I might do is add a Dereference() method to your TEntity object. This would just remove that entity from the application's list. Once again, this wont change anything except for how you delete your objects, I just find the method slightly cleaner