1. fix deprecations 2. fix generics 3. use lambda instead of anonymous class 4. mark some fields as final