Changed lots of things to use interface