implement all operators