implementat dependent destroy