support multiple operands
refactor