add create/update logic