mostly good, delete not implemented