working version (add,change,delete)