added +isVisible, added return value (for further customization)