restructure
try to detect visibility change, actually call announceChange()