levels have been abstracted into their own class