fixed the design a bit, added some functionality from it to the compiler