this bit needs pushing and poping of conditional scopes