modulized destroy()