even further abstracting to make sure it works