add toString
handle perspective setActive(false), handle perspective replacement
update perspective shutdown