add xor, fix bug