Can it ever be visible without being available? Maybe visible should check for availability as well, so then in places where you currently call isAvailable && isVisible you would have to just call isVisible.