A ton of changes - now using protocols, and have dynamic 'if' working