crazy amounts of shifting code and refactoring. need sleep