repo needs to be abstract