finishd commutative, half done with associative