Should probably be done after #2 is done. It may be a good idea to reorganize around an abstract baseclass for engine interfaces before this as well.