completed with save and update functionality