I would even remove the "visible" setter and have "leave" and "exit" methods that would set the visible property.

Should make the calling code easier to read.