Refactored destory method, make sure destoyed event is always called