$230 oxygen sensor replaced (bank 1) by iddy. Car was shaking significantly at idle when warm and p2231 was a solid code (had been pending for ~1 year on and off).