refactor into a generator (based on suspenders)