halfway through overhaul, completely rewrote everything