so broken, major refactoring