moving logic out of magic methods as per Insight's request