works for everything except add and delete