big refactor
fix bug
tweak