complete refactor .. things are simple now