refactor create, read, and update methods