Completely rewrote everything