How to Interpret OBD-II Trouble Codes (September 2026)?

When your check engine light comes on, the diagnostic trouble code (DTC) stored in your vehicle’s computer can tell you a lot, but only if you know which kind of code you are reading. Pending versus stored versus permanent trouble codes represent three distinct stages of fault confirmation in the OBD-II system, and each one tells a different story about what is happening under your hood. I have spent years poking at OBD-II data with budget scanners and shop-grade tools, and I can tell you from experience that confusing these code types leads to wasted repairs and failed emissions tests. In this guide, I will walk you through the format of a DTC, what each code type actually means, how they relate to your check engine light, and how to handle them when they show up.

Understanding DTC Format: What the Letters and Numbers Mean?

Every OBD-II diagnostic trouble code follows a five-character format: one letter, one number, then three more numbers, like P0420 or B1352. The first letter tells you which vehicle system is involved.

The four categories are P (Powertrain, covering engine and transmission), B (Body, covering airbags, lighting, and accessories), C (Chassis, covering brakes, steering, and suspension), and U (Network, covering communication between modules). The second digit shows whether the code is generic (0) or manufacturer-specific (1 through 9), and the last three digits point to the specific fault. So when someone says they have a P0420, that means a generic powertrain fault in the catalyst system, while P1A20 would be a manufacturer-specific powertrain code that requires a service manual to decode.

Two acronyms will come up constantly when you read DTCs: MIL, which stands for Malfunction Indicator Lamp (the technical name for the check engine light), and KOEO/KOER, meaning Key On Engine Off and Key On Engine Running, the two states your car uses to run self-tests. You will also see freeze frame data, a snapshot of sensor readings captured the moment a stored code was set. Freeze frame is gold because it tells you the exact conditions (engine temp, RPM, fuel trim) when the fault occurred, which speeds up diagnosis dramatically.

What Are Pending Codes and How Do They Work

A pending code is a one-trip fault code, which means the OBD-II system saw something abnormal during a single drive cycle but has not confirmed it yet. Think of a pending code as the engine computer raising its hand and saying, “I noticed something weird, but I want to see it again before I commit.”

The defining characteristic of a pending code is that it does not trigger the check engine light. It quietly lives in memory, waiting for either a second confirmation or enough trouble-free driving to age out. Pending codes are often the result of an intermittent issue, like a loose gas cap that triggered a vapor sensor once but sealed properly on the next drive. They can also be early warnings of a developing problem, like a catalytic converter that is starting to lose efficiency but has not yet failed an emissions threshold.

Common pending codes you might see include P0131 (oxygen sensor circuit low voltage), P0420 (catalyst efficiency below threshold), and P0455 (large evaporative emissions leak). If you scan your car and only see pending codes with no check engine light, do not panic. Drive normally for a few days. If the condition repeats, the pending code will mature into a stored code. If it does not repeat, the pending code will often clear on its own after 40 to 80 warm-up cycles, which is why the question “Will pending codes clear themselves?” has a real answer: yes, many of them will, but only if the underlying problem does not return.

What Are Stored (Confirmed) Codes and When the Check Engine Light Activates?

A stored code, sometimes called a confirmed code or active code, is the second-stage trouble code that triggers the check engine light. The logic behind it is two-trip fault detection: if the same fault shows up on two consecutive drive cycles, the OBD-II system confirms it as a real problem and stores it permanently (until cleared) while illuminating the MIL.

This two-trip logic exists to prevent false alarms. A single glitch, a brief sensor hiccup, or one cold-start misfire should not light up your dashboard and panic you into a repair shop. By requiring the fault to repeat, the system gives you reliable information. When the MIL comes on, the code behind it is almost always something the car has seen more than once.

Stored codes have a useful property: they come with freeze frame data, a snapshot of the engine conditions at the moment the code was set. Real examples I see regularly include P0171 (system too lean, bank 1), which usually points to a vacuum leak, dirty MAF sensor, or weak fuel pump, and P0301 (cylinder 1 misfire detected), which can be a bad spark plug, failing ignition coil, or low compression. When you see a stored code with freeze frame, you have a strong starting point for diagnosis, and the right repair usually makes both the code and the light go away.

One important nuance is that a stored code can exist with the MIL off. This happens when the fault stops occurring for enough drive cycles, the system clears the active status, and the check engine light turns off, but the code itself remains in long-term memory as a “history” record. So if you scan a car with no MIL and find a stored code, the car had a confirmed fault recently but is currently passing its own self-tests.

What Are Permanent Codes and Why They Resist Clearing?

A permanent DTC is a stored code that the OBD-II system will not let you erase with a scan tool. It exists specifically to enforce real repairs and prevent emissions fraud. Permanent codes were introduced with the 2010 OBD-II specification and have been standard on most vehicles since the early 2010s.

The behavior is intentional: once a stored code ages into permanent status, the only way to make it go away is to actually fix the underlying problem and let the vehicle’s own monitors verify the repair through a complete drive cycle. If you plug in a $20 scanner, clear all codes, and the underlying fault still exists, the code will come back, often within a single drive cycle, and re-enter permanent status. This is why permanent codes frustrate so many DIYers who expect a scanner button to fix everything.

A common example is P0420 (catalyst efficiency below threshold). The first time your car sees this fault twice, it becomes a stored code and lights the MIL. After enough driving with the fault active, it transitions into permanent status. From that point on, no scanner, no battery disconnect, no fuse pull will clear it. The only path forward is to replace or repair the catalytic converter issue and then complete a full drive cycle so the catalyst monitor runs and passes.

This brings up a question I see constantly on mechanic forums: can permanent DTC codes be cleared? The honest answer is yes, but not by you directly. The vehicle clears them when the OBD-II system runs the relevant monitor and the fault does not return. For most emissions-related codes, that means a specific pattern of cold starts, steady highway driving, and deceleration events. Some cars clear in a single 30-minute drive, others require a week of mixed driving.

Pending vs Stored vs Permanent: Side-by-Side Comparison

Here is a direct comparison of the three code types so you can see the differences at a glance.

FeaturePending CodeStored (Confirmed) CodePermanent Code
Trips required to setOneTwoFollows stored code after additional driving
Triggers check engine light?NoYesYes
Cleared by scanner?YesYesNo
Cleared by battery disconnect?YesYes (usually)No
Cleared by repair verification?YesYesYes
OBD-II Mode used to readMode $07Mode $03Mode $0A
Freeze frame data?NoYesYes
Fails emissions test?NoYes (MIL on)Yes

The key takeaway from this comparison is the relationship between scanner access and repair reality. Pending and stored codes respond to tools. Permanent codes respond only to fixing the actual problem.

OBD-II Modes $06, $07, and $0A: Where Each Code Type Lives

OBD-II scanners talk to your car using standardized service modes, and each code type has its own dedicated mode. Understanding this turns a confusing scanner screen into a logical map.

Mode $03 reads stored/confirmed codes. This is the screen most casual users see when they plug in a basic scanner. Mode $07 reads pending codes, which is what you check when the MIL is off but you want to know if anything is developing. Mode $0A reads permanent codes, the ones that refuse to clear, and Mode $06 reads continuous test results for specific monitors, useful for diagnosing borderline catalyst or evap system issues. If your scanner only shows Mode $03, it is hiding 70 percent of the diagnostic story. A scanner that supports Modes $06, $07, and $0A gives you full visibility into what your car is doing.

Drive Cycles and Monitor Readiness: What Repairs Require

A drive cycle is a specific pattern of driving conditions designed to run every OBD-II self-diagnostic monitor on the vehicle. Each monitor (catalyst, evap, O2 sensor, EGR, etc.) has its own trigger conditions, including minimum engine temperature, specific RPM ranges, and particular deceleration or fuel-cut events.

This matters because clearing a stored code resets the monitors to “incomplete,” and many state emissions programs will fail your car for inspection if the monitors are not ready, even with no codes present. After a repair or a battery disconnect, you may need to complete a full drive cycle, which on most cars means a cold start, a mix of city and highway driving, steady cruise, and a coast-down deceleration, before everything resets and your car is “ready” again.

How to Clear Each Type of Code (and Why Permanent Codes Won’t Budge)?

Clearing pending and stored codes is straightforward: plug in an OBD-II scanner, navigate to “Erase Codes” or “Clear DTCs,” and confirm. The MIL goes off, the codes disappear from Mode $03, and pending codes clear from Mode $07. A battery disconnect can achieve a similar result for stored codes, though I do not recommend it because it also wipes your radio presets, idle learn values, and transmission adaptive memory.

Permanent codes are a different animal. As we covered earlier, they cannot be cleared by any tool or manual reset. The only way to clear a permanent code is to repair the underlying fault and let the OBD-II system verify it through a complete drive cycle. This is the entire point of permanent codes, and it is also why they are valuable during a used car inspection.

When you scan a used car and see only Mode $03 (stored) clean, you cannot be sure the seller did not just clear codes minutes before you arrived. But if Mode $0A shows permanent codes, no amount of scanner button-pressing will hide them. This is the practical pre-purchase inspection angle that most guides miss: permanent codes are honest, and their presence tells you the car has unresolved emissions faults the seller cannot erase.

Emissions Testing, Smog Checks, and How Code Types Affect You

At a smog check or state emissions inspection, the testing station plugs into your OBD-II port and runs a quick check. The tester looks at three things: whether the MIL is commanded on, whether stored codes are present, and whether the monitors are complete.

A pending code alone will not fail you, because pending codes do not illuminate the MIL. A stored code with MIL on will fail you instantly. A permanent code will also fail you, even if the MIL is off, because it represents a confirmed unresolved emissions fault. Many smog-check stations now run Mode $0A checks specifically to catch cars with cleared MIL but unresolved permanent codes.

This is the real-world frustration forum users describe over and over: “I fixed the problem, cleared the codes, but my permanent DTC is still there.” The answer is patience. Complete a proper drive cycle. Let the relevant monitor run and pass. The permanent code will disappear on its own, and your car will be both emissions-compliant and genuinely fixed.

Frequently Asked Questions

Will pending codes clear themselves?

Yes, many pending codes clear themselves after 40 to 80 warm-up cycles if the underlying fault does not repeat. A single trip is enough to set a pending code, but the system needs repeated confirmation before it becomes a stored code, and absence of the fault eventually erases the pending record.

Can permanent DTC codes be cleared with a scanner?

No. Permanent DTC codes are designed to resist manual clearing. They disappear only after the OBD-II system verifies that the underlying fault no longer exists by running the relevant monitor through a complete drive cycle.

Why does my scanner show both a stored and a pending code for the same fault?

This happens when a stored code was cleared but the fault returned. The OBD-II system logs the new detection as a pending code first, and if it repeats on the next drive cycle, it will become stored again and likely transition to permanent status.

How long does it take for a permanent DTC to clear after repair?

It depends on the code and the vehicle. Some permanent codes clear after a single 30-minute drive cycle once the monitor runs and passes. Others require a week of mixed driving. The car decides, not the scanner.

Final Thoughts on Reading DTC Code Types

Pending, stored, and permanent trouble codes each serve a different purpose in the OBD-II system. Pending codes are early warnings, stored codes are confirmed faults with freeze frame data, and permanent codes are the system’s way of forcing real repairs before clearing. Once you understand the difference, your scanner becomes a far more useful tool, your check engine light stops being a mystery, and your emissions tests become much less stressful.

Leave a Comment