moved things around. tried to remove some interfaces
refactor commit