optimization: reduced consing (still allocates too much).
simplified ORELSE.