mostly functioning CRUD