Change the design so that it's abstract