I think this should be an interface