some serious refactors, lost jumping :(