Can you verify that this actually works?  Do independent calls to this.onExtensionActivity.bind(BehaviorWindow) return objects that compare as equal so that removeListener can find and remove the earlier listener?  I'd think we might need to cache the value of activityListener in the object so we can remove it later.