What P0304 actually means in plain English
P0304 fires when your BMW's engine control unit detects that cylinder 4 is misfiring - meaning it's not firing consistently or at all during the combustion cycle. Here's what's happening under the hood: your engine is running, the ECU monitors each cylinder's combustion event by watching ignition timing, fuel injection, and crankshaft acceleration patterns. When cylinder 4 doesn't ignite the fuel-air mixture properly, or ignites it late, the engine stumbles. The crankshaft sensor picks up this hesitation, the ECU logs the misfire count for that specific cylinder, and once it crosses the threshold - usually within one or two driving cycles - you get this code and the check engine light.
The reason BMW's engine management specifically calls out cylinder 4 (rather than just saying "one of your cylinders is misfiring") is that modern OBD2 systems can pinpoint exactly which cylinder is lazy. This is actually a huge diagnostic advantage because it narrows your search immediately. You're not hunting through eight cylinders - you're looking at one specific spot on your engine.
How to diagnose P0304 step by step
I've seen people throw spark plugs, coil packs, and fuel injectors at this code without ever checking the obvious stuff first. Don't be that person. Here's the real diagnostic sequence:
- Visual inspection of cylinder 4 components: Pop your hood and look at the ignition coil sitting directly on top of cylinder 4's spark plug. Check for oil leaks, carbon buildup, or cracks in the coil pack. Run your hand over it - does it feel hot compared to the other three? Pull the spark plug and inspect it. A fouled plug (black and wet), a plug with massive electrode gap, or one that's been in the engine for 40,000 miles is often your culprit. Check the vacuum lines and intake seals around cylinder 4 as well.
- Scan for live misfire data: Don't just read the fault code and assume. Pull detailed live data on your scanner (see our BMW OBD scanner guide for solid tool recommendations). Check the misfire counters for each cylinder under load and at idle. If cylinder 4 is consistently showing misfire events and the other three are clean, you've got confirmation. If all four cylinders are showing misfire counts, your problem might be fuel pressure, ignition timing, or a vacuum leak affecting the whole engine.
- Check fuel pressure and injector pulse: Using a fuel pressure gauge on the fuel rail, verify that fuel pressure is holding steady at spec for your model year - typically 50-60 psi at idle on BMW N-series and newer engines. If pressure is low or fluctuating, your fuel pump or filter might be the real problem, and the misfire just happens to show up on cylinder 4 first. Use your scanner or a scope to watch the fuel injector pulse width on cylinder 4. It should match the pulse width on cylinders 1, 2, and 3 almost exactly.
- Compression test on cylinder 4: This is the step most DIY folks skip, but it's fast and tells you whether you've got an internal engine problem. Disconnect all four ignition coils and fuel pump relay, screw a compression tester into cylinder 4's spark plug hole, crank the engine over (cold, no starting), and record the reading. Healthy compression is usually 150-180 psi depending on your engine. If cylinder 4 is reading 80 psi while the others are at 170, you've got a bent valve, bad rings, or a cracked piston - and that engine needs serious work.
- Smoke test for vacuum leaks: A vacuum leak that specifically affects cylinder 4's intake runner will cause a lean misfire. Rent or borrow a smoke machine, cap the fuel pressure regulator vent, and watch for smoke escaping near cylinder 4's intake ports or gasket seals. Alternatively, spray carburetor cleaner around suspected vacuum leak areas while watching your idle RPM in real-time - if RPM climbs when you spray, you've found the leak.
DIY fix for P0304
The good news: P0304 sits at a 1/5 difficulty for DIY on most BMW models. The most common fix is spark plug and coil pack replacement, and that's genuinely something you can handle in your driveway with basic tools.
Start by removing the plastic engine cover if your model has one. Disconnect the ignition coil connector on top of cylinder 4 - it's a simple push-tab connector. Unscrew the coil pack (usually one 10mm bolt) and pull it straight up. The spark plug is right underneath. Use a spark plug socket (14mm typically) and unscrew the old plug. If it's fouled, black, or gapped beyond spec, that was probably your problem. Drop in a fresh OEM-spec spark plug and reinstall the coil pack. Reconnect, clear your faults, and test drive.
If that doesn't stick and the code returns, move to step two: fuel injector flow test at the dealership level, or compression testing if you've got the tools. If you find low compression, injector failure, or a confirmed vacuum leak, that's when you should hand it off to a shop - internal engine work and vacuum system repairs require specialized equipment or significant engine disassembly.
When P0304 comes back after repair
Code returns after you replaced the spark plug and coil pack? A few reasons this happens.
First, you might have replaced the spark plug with the wrong heat range or gap specification - BMW is picky about this. Pull the plug again and verify it's the exact OEM part number for your engine and year. Second, the coil pack you installed could be a dud out of the box (rare but happens). Third, and most likely - you actually had two problems. The spark plug was worn, but there's also a vacuum leak or low fuel pressure that was causing the misfire even with a fresh plug. In this scenario, run through the diagnostic sequence again, specifically the fuel pressure and smoke test.
If the code is intermittent - it clears for a week, then comes back - you're probably looking at a marginal compression issue or an intermittent fuel injector. Those need a dealership diagnosis or specialist engine work.
My take on P0304
This is a real fault that deserves respect, but it's not a catastrophic engine failure waiting to happen. I've cleared P0304 on my G20 330i more times than I want to admit, always from worn spark plugs on the higher-mileage coils.
Severity tier: Yellow to Red. Don't drive cross-country on this. Your engine is misfiring, which means unburned fuel is heading into the catalytic converter and potentially damaging it. If you've got the code, spend 30 minutes diagnosing before you spend $800 on a cat replacement. Pull over if the misfire is severe (rough idle, obvious power loss) and you can't identify the cause immediately - get it on a scanner that day.
The dealership will charge you $200-400 in labor just to diagnose this properly. If you've got basic mechanical confidence and a scanner (check our scanner and coding guide if you need one), you can narrow this down yourself in an hour. Plug and coil are a 20-minute job. Do that first, clear the code, and drive.
Need more help decoding BMW faults? Check out our full BMW fault codes explained resource, or jump back to our code search tool to look up other codes you're seeing.