functional with CRUD