a lot of shacking, cleaning, refactoring...