Found this:
So knowing all of this what should we check when we have those pesky rich or lean codes? The most common issues for lean codes are:
1. Vacuum leaks - check for failed or loose vacuum lines, leaking intake gaskets, intake air tubes loose or any other source of un-metered air leaks (leaks after the Mass Air Flow Sensor)
2. Restricted fuel filter or bent/pinched fuel system lines
3. Incorrect input from other sensors, such as the Mass Air Flow Sensor, which may not always drop a separate code
4. Engine misfire – Yes I know this one may seem weird. You might think that if there is a misfire then you will have all that unburned fuel and it should read rich; right? Well the O2 sensors read only oxygen content in the exhaust, so if you have all that unburned fuel from incomplete combustion then, you guessed it, you also have all that unburned oxygen. High O2 content in exhaust equals a lean reading!
There are also some other possibilities such as an internally leaking EGR system, (but this will typically set a separate code). A leak in the exhaust system before the O2 sensor will also cause incorrect readings. And always check for after- market modifications. These can throw a wrench into the works! The only other possibilities (however unlikely), are wiring issues, computer concerns or a bad O2 sensor! There now that I’ve said it, on to rich codes.
The possible causes of rich codes are:
1. A leaking or faulty fuel injector
2. Fuel injector driver in computer shorted, or wiring short for injectors (likely a ground short)
3. Leaking or faulty fuel pressure regulator or restricted return line
4. Faulty evaporative emissions system - bleeding fuel vapors into engine (not commanded by computer)
5. On newer models a faulty fuel pump or fuel pump driver module
6. Faulty readings from other sensors such as a Mass Air Flow Sensor. You may actually be getting more air than the MAF tells the computer
7. Exhaust leaks before the sensor will cause erratic readings
8. After market components or performance chips
9. And yes, if I dare say it, possibly a computer, wiring issue or even a faulty O2 sensor!