more refactoring, use less blitting