tons of changes to implementation, interface is the same. serialized lots of things in the yaml file