public override void Accept(IExecutableObject obj) { var alt = obj as AlternativeUnit; // Assert that obj == null || !InAlternate if (alt != null) { InAlternateState = true; Alternate = alt; } else { if (InAlternateState) { Alternate.Accept(obj); } else { base.Accept(obj); } } }