This should also be abstract since it isn't "surface level"