fully implement delete