avoid using weakreference for listeners because they're often used with local variables