completed CRUD functionality