Introduce "offenders" framework

Resolves #140