needs to be final because it's used in anon class