P0016 on 2012-2016 Subaru Impreza 2.0L: Crank-Cam Correlation Causes and Fixes
On a 2012-2016 Impreza, P0016 is most often caused by low or dirty engine oil. Before buying parts, check your oil level and condition. If the oil is fine, the next most likely cause is a faulty passenger-side intake Oil Control Valve (OCV), which costs about $80-$150 to replace. In some cases, even after a fix, the ECM retains fault memory and requires a special reset procedure to clear the code permanently.
- Your first and most important check is the engine oil level and condition. This solves the problem in many cases.
- Do not immediately buy camshaft or crankshaft sensors; they are rarely the cause.
- If the oil is fine, the next logical step is to inspect or swap the passenger-side intake Oil Control Valve (OCV).
- If you recently had a low oil situation, be aware that the ECM may need a special reset at a dealership even if the mechanical parts are now fine.
- This is an interference engine; do not ignore the code indefinitely as a jumped timing chain can destroy the engine.
What's Unique About the 2012-2016 Subaru Impreza
The FB20B engine's variable valve timing (AVCS) is notoriously sensitive to oil level and quality. Many P0016 codes on this platform are triggered simply by running the engine low on oil, which starves the hydraulic AVCS actuators. Furthermore, Subaru has acknowledged in TSB 02-163-16R that the ECM can retain incorrect timing values in its memory after a low oil event or even after a mechanical repair. Manufacturer service bulletin TSB Bulletin #11-127-13R also highlights the availability of updated ECM reprogramming files specifically designed to address these correlation DTCs. The official dealer solution sometimes involves replacing the entire ECM, but a widely documented fix among independent mechanics and owners involves using an aftermarket scan tool to put the car in 'test mode' and perform a VVT learned value reset 🎬 Watch: How to reset VVT values using an Autel scan tool., which avoids the high cost of a new ECM.
Symptoms You May Notice
- Check Engine Light is on
- Rough or unstable idle
- Reduced engine power and sluggish acceleration
- Poor fuel economy
- Engine may stall unexpectedly
- Rattling noise from the front of the engine (timing cover area)
- Cruise control and/or traction control system disabled 🎬 See a quick breakdown of P0016 symptoms and common solutions.
- Replacing the camshaft or crankshaft position sensors. These sensors are usually accurately reporting a real mechanical or hydraulic problem; they are rarely the cause of P0016 itself.
Most Likely Causes
- Low or Dirty Engine Oil 🔴 High Probability The AVCS (variable valve timing) system is hydraulic and extremely sensitive to oil pressure and cleanliness. The FB20 engine can consume oil, and low oil levels will starve the system, causing timing correlation faults.
How to confirm: Check the engine oil dipstick. The oil should be between the 'low' and 'full' marks and should not appear overly dark, thick, or sludgy. This is the #1 cause and the first check to perform.
Typical fix: Top off the oil to the correct level or perform a complete oil and filter change using the manufacturer-recommended 0W-20 synthetic oil.
Est. part cost: $40-$80 - Faulty Oil Control Valve (OCV) / VVT Solenoid 🟡 Medium Probability Sludge from infrequent oil changes or metal shavings from prior oil starvation can clog the small internal filter screen on the OCV, causing it to stick or respond slowly.
How to confirm: A common diagnostic technique is to swap the Bank 1 (passenger side) intake OCV with the Bank 2 (driver's side) intake OCV. Clear the codes and drive the vehicle. If the code changes to P0018 (the Bank 2 equivalent), the OCV is faulty.
Typical fix: Replace the Bank 1 intake Oil Control Valve. The OEM part number is 10921AA231, which supersedes 10921AA230 and 10921AA220.
Est. part cost: $80-$150 - Stretched Timing Chain ⚪ Low Probability While designed to last the life of the engine, wear can occur over 100,000-120,000 miles, especially if oil maintenance has been poor, leading to slack in the chain that the tensioner cannot compensate for.
How to confirm: This is a complex diagnosis requiring removal of the timing cover to physically inspect the chain for slack and verify timing marks. A rattling noise from the front of the engine on startup is a strong indicator. An advanced scan tool can also be used to read the learned VVT values, where a large deviation can indicate a stretched chain.
Typical fix: Replace the timing chain, tensioners, and guides. This is a labor-intensive job often costing over $2,000 at a dealership.
Est. part cost: $300-$600
Rare But Worth Checking
- Failed Camshaft Sprocket (AVCS Actuator): The hydraulic actuator on the end of the camshaft can fail internally, getting stuck in one position. This often requires replacement of the sprocket itself and can be a very expensive repair. Diagnosis involves checking VVT learned values with a scan tool; values outside the normal range after ruling out the OCV point to a failed sprocket.
- ECM Software/Memory Issue: The ECM can store incorrect timing values learned during a low oil event and may not be able to relearn on its own, causing the P0016 to persist even after mechanical repairs. TSB 02-163-16R outlines the diagnostic path. Instead of replacing the ECM, mechanics have found success using an aftermarket scan tool (like Autel or ThinkDiag) to enter 'test mode' and perform a 'VVT learning value reset'.
- Failed Timing Chain Tensioner: The hydraulic tensioner can fail or weaken, allowing for excess slack in the timing chain, which causes the correlation error. This is typically replaced as part of a full timing chain service.
Diagnosis Steps
- Check Engine Oil: Verify the oil level is correct and the oil condition is good. If low or dirty, perform an oil change with 0W-20 synthetic oil, clear the code, and drive to see if it returns. This is the most common and cheapest fix.
- Inspect the Oil Control Valve (OCV): Locate the intake OCV on Bank 1 (passenger side). Check its wiring connector for damage or oil intrusion. Remove the valve and inspect its filter screen for sludge or metallic debris.
- Swap OCVs: Swap the Bank 1 and Bank 2 intake OCVs. They are interchangeable. Clear the codes and drive. If the code returns as P0018, you have confirmed a bad OCV. Replace it with OEM part 10921AA231.
- Advanced Scan Tool Diagnosis: If the code persists, use an advanced scan tool (like Subaru Select Monitor or a capable Autel/Launch) to view live data for 'VVT Advance Angle' and 'VVT Learned Values' as per TSB 02-163-16R. Large, abnormal values can point towards a stretched chain or faulty cam sprocket.
- Mechanical Timing Inspection: If scan data suggests a base timing issue, the problem is likely mechanical. This requires removing the timing cover to inspect the timing chain, guides, tensioners, and sprockets. This is best left to a professional.
- Perform VVT Learned Value Reset: After any mechanical repair (OCV, timing chain, etc.), if the code returns, the ECM's retained memory must be cleared. This can be done with a capable scan tool by entering 'Test Mode' and using the special function to reset the VVT learned values. This step can prevent unnecessary ECM replacement.
Parts You'll Likely Need
- Intake Oil Control Valve (OCV) / VVT Solenoid (Bank 1)
(OEM #10921AA231 (supersedes 10921AA230, 10921AA220))— This solenoid controls oil flow to the AVCS cam phaser and is a frequent failure point due to clogging or electrical malfunction.
Trusted brands: Subaru (OEM), Denso, Dorman
OEM price range: $120-$180
Aftermarket price range: $70-$120 - Timing Chain Kit — If the chain has stretched, it must be replaced along with its guides and tensioners to restore correct mechanical timing. 🎬 Watch: Step-by-step timing chain installation guide for FB engines. A dealership quote for this job can exceed $2,000.
Trusted brands: Subaru (OEM), Cloyes, DNJ Engine Components
OEM price range: $400-$600
Aftermarket price range: $250-$400
Related Codes That Often Appear With This One
- P0018 — This is the same correlation error but for Bank 2 (driver's side). If P0016 and P0018 appear together, it strongly points to a systemic issue like low/dirty oil or a stretched timing chain. It will also appear if you swap a bad Bank 1 OCV to Bank 2 for diagnosis.
- P0011 — This code indicates 'Camshaft Position 'A' - Timing Over-Advanced' for Bank 1. It shares the same root causes, such as a bad OCV or oil issues, and points to a problem within the AVCS system.
- P000A — This code indicates a slow response from the Bank 1 intake camshaft phaser. It is often seen with P0016 and points directly to a hydraulic or mechanical issue with the AVCS system, such as a clogged OCV or failing cam sprocket.
Technical Service Bulletins (TSBs) & Recalls
- TSB 02-163-16R: Provides the official Subaru diagnostic procedure for P0016/P0018 codes, detailing how to use a scan tool to check learned values and diagnose between electrical, hydraulic, and mechanical faults. It is frequently referenced in forum discussions.
- TSB Bulletin #11-127-13R: This bulletin details the diagnostic procedure and the availability of updated ECM reprogramming files to address DTCs P0017 and P0019, noting that the procedure is also applicable to P0016 and P0018.
- TSB Bulletin #09-120-24R: This bulletin announces the availability of new reprogramming files for the Engine Control Module (ECM) developed specifically to remedy DTCs P0016 and P0017.
Platform-Specific Known Issues
- The ECM on this platform can enter a state where it retains learned incorrect timing values after an oil starvation event. This 'memory' issue can cause P0016 to return immediately after a mechanical fix. While Subaru's TSB 02-163-16R may lead to a recommendation to replace the ECM, a known procedure exists to fix this. Mechanics and owners have successfully used advanced aftermarket scan tools to enter a 'test mode' and perform a 'VVT Learning Value Reset', which clears the memory and resolves the code without replacing the computer.
Mechanic-Grade Diagnostic Values
- Engine Oil Pressure (Warm Engine) — expected: >10 PSI at idle; >30 PSI at 3000 RPM. Failure: Pressure below the specified values indicates a systemic oiling problem (e.g., bad oil pump, clogged pickup tube) that must be addressed before diagnosing AVCS components.
- Oil Control Valve (OCV) Solenoid Resistance — expected: 6.9 - 7.9 Ohms (General spec for Denso-style solenoids). Failure: A reading significantly outside this range, or an open/short circuit (0 or infinite ohms), indicates a failed solenoid coil.
- VVT Advance Angle Amount (Live Data at Idle, OCVs Unplugged) — expected: Close to 0 degrees. Failure: A value of +/- 10 degrees or more suggests a base mechanical timing issue, such as a stretched timing chain or jumped tooth.
- VVT Initial Position Learning Value (Live Data) — expected: Values for Bank 1 and Bank 2 should be within 10 degrees of each other. For the similar FA20 engine, intake spec is -52 to -72.. Failure: A value far outside the expected range (e.g., 46 as seen in one case) or a large discrepancy between banks points towards a faulty AVCS cam sprocket (phaser).
Scan Tool Commands That Help
- Subaru Select Monitor (SSM), Autel, Launch, ThinkDiag 2: VVT Learned Value Reset (via Test Mode) — This procedure is critical after a mechanical repair (like replacing an OCV or timing components) if the P0016 code returns immediately. It clears incorrect timing values stored in the ECM's permanent memory, which can prevent unnecessary ECM replacement.
- Subaru Select Monitor (SSM), Autel, Launch, ThinkDiag 2: Test Mode Change & Clear Fault Memory — This is the specific sequence to perform the VVT reset. 1) Install a fuse in the 'inspection mode' slot in the underhood fuse box. 2) Turn key on. 3) Use the scan tool's 'Test Mode Change' special function, which will cause the CEL to flash rapidly. 4) While in test mode, use the 'Clear Fault Memory' function. 5) Turn key off and remove the fuse.
Wiring & Ground Locations
- Main Engine Ground — Attaches to the engine block via the top starter mounting bolt on the transmission bell housing.. A poor main engine ground can cause a host of unpredictable electrical issues, including erratic sensor readings. While not a direct cause of P0016, ensuring this ground is clean and tight is a fundamental step in any electrical diagnosis.
- ECU Ground Path (Intake Manifold) — The ECU grounds through the intake manifold to the engine block.. If non-conductive spacers (like for a TGV delete) are installed between the manifold and the block, it can interrupt the ECU's ground path, leading to bizarre issues. This requires a dedicated grounding strap to be added to ensure a stable ground for the engine computer.
Real Owner Repair Stories
- YouTube user comment on ThinkDiag 2 video (Subaru Crosstrek with FB20 engine) — Initially had P0011. After replacing the passenger intake phaser and timing chain, the codes changed to P0016 and P0017.
❌ Tried (didn't work) Replacing the AVCS phaser (cam sprocket), Replacing the timing chain and tensioner
✅ What actually fixed it Performing the VVT Learned Values Reset using a ThinkDiag 2 scanner. The user confirmed the codes did not return after 1,000 miles of driving. - Reddit user Heres_To_Brew_Kid in r/WRX (Subaru WRX (FA20 engine, but same AVCS logic and P0018 code)) — P0018 code. Dealer quoted $5,100 for four cam sprockets and a new ECM.
❌ Tried (didn't work) Dealer diagnosis recommended replacing all cam sprockets and the ECM.
✅ What actually fixed it The user was seeking advice before trying the VVT reset procedure themselves, based on another user's success who fixed a P0016 by replacing the bad sprocket and then performing the VVT reset with an Autel scanner, successfully avoiding the $1000 ECM replacement. - Reddit user DragonfruitLeading44 in r/subaru (2012 Subaru Impreza, 170,000 miles) — P0016 code, engine has less power when accelerating.
❌ Tried (didn't work) Initial post was seeking advice before trying any fixes.
✅ What actually fixed it The confirmed diagnostic path from veteran users was: 1) Change oil with 0W-20 and use an OEM filter. 2) Swap the Bank 1 and Bank 2 intake OCVs. If the code changes to P0018, the OCV is the confirmed failure point. This story highlights the community-accepted diagnostic flow before escalating to major repairs.
"I Checked Everything" — The Actual Cause
- For code P0016, the equivalent of a 'smoke test clean' scenario is when an oil change and OCV swap do not resolve the issue. In these cases, the fault is almost always one of two things: 1) A deeper mechanical issue like a stretched timing chain or a failed AVCS cam sprocket, which requires scan tool data analysis and physical inspection. 2) The ECM has stored incorrect 'learned values' from the previous fault and requires the specific 'VVT Learned Value Reset' procedure to be performed after the mechanical repair is complete.
When the Usual Fixes Don't Work
- While Pass 2 correctly identifies the common causes, the most critical 'master tech' detail is that fixing the mechanical cause (like a bad OCV or even a stretched chain) often does NOT fix the car. The P0016 code will frequently return immediately upon startup due to the ECM retaining the old fault data in non-volatile memory. Multiple real-world repair stories confirm that the final, mandatory step is to perform the 'VVT Learned Value Reset' using a capable scan tool in 'Test Mode'. Skipping this step leads to unnecessarily replacing the ECM, as outlined in Subaru's own TSB as a potential (and expensive) final step.
OEM Part Supersession History
10921AA220, 10921AA230→10921AA231— Standard part revision and improvement by the manufacturer.
Heads up: The new part number (10921AA231) is a direct replacement for the older versions. However, the required O-rings (Subaru PNs 806944060 and 16677AA040) are often sold separately and must be purchased to ensure a leak-free installation.
Model Year Variations Within This Range
- 2012-2016: These model years use the port-injected FB20B engine. The diagnostic information is consistent across this range. Starting in 2017, the Impreza switched to the FB20D engine, which uses direct injection and has a much higher compression ratio (12.5:1 vs 10.5:1), making it a mechanically different system.
Diagnostic Flowchart
Real Owner Stories
Aggregated from forums and TSBs cited above. Mileages and costs reflect what owners reported in those sources.
2013 Subaru XV Crosstrek 2.0L — 130000 miles
Symptoms: Check Engine Light with code P0016, but the car runs and drives fine with no weird noises, stalling, or rough idle.
What fixed it: The user cleared the code and it had not returned after two days of driving. The dealership had quoted a timing chain replacement requiring an engine pull, but the user did not proceed with it.
Cost: $2800
Source hint: subaruxvforum.com
2016 Subaru Crosstrek 2.0L
Symptoms: Persistent P0016 code remaining active even after a mechanical timing job was completed.
What fixed it: Using a fuse and a scan tool to enter 'test mode' and clear the retained memory (VVT Learned Value Reset) in the ECM, successfully fixing the code without replacing the computer.
Source hint: YouTube - '2016 Subaru crosstrek P0016... do you need to replace the ECM???'
Subaru WRX FA20DIT
Symptoms: Persistent P0016 code where dealers suggested an expensive ECM replacement based on TSB 02-163-16R.
What fixed it: Resetting the VVT learned values with an aftermarket scanner (Autel, Launch) in test mode, saving over $1000.
Source hint: Reddit - r/WRX - 'Important information on code P0016 for the FA20DIT'
Subaru BRZ / Scion FR-S / Toyota 86 (FA20)
Symptoms: Escalating diagnosis from sensors to OCVs to cam phasers and potentially the ECU, described as a 'nightmare code'.
What fixed it: Unresolved in the citation, but highlights the escalating diagnostic path and potential for thousands in repair costs.
Cost: $1035
Source hint: Reddit - r/ft86 - 'Subaru quoting $1035 to fix oil sensor... for a p0016 code?'
Related OBD-II Codes
Frequently Asked Questions
Does TSB 02-163-16R mean I have to replace the ECM on my 2012-2016 Impreza to fix P0016?
What is the correct replacement part number for the Bank 1 intake OCV on the FB20B engine?
Why did P0016 return immediately after I replaced the timing chain and OCV on my Impreza?
Can simply having low engine oil cause a P0016 code on the 2.0L FB20B?
How can I test if the Oil Control Valve is the problem before buying a new one?
Helpful Videos
We Have This Part in Stock
The information in this article is provided for general reference and educational purposes only. Vehicle specifications, procedures, and part compatibility can vary by production date, trim level, and region. Always consult your vehicle's factory service manual and verify part numbers before purchasing or performing repairs. Safety-critical components such as airbags, seat belts, and braking systems should be installed by a qualified professional.
- Subaru Impreza:
- 🎬 Helpful Videos
- 🛍️ Shop This Part
- What's Unique About the 2012-2016 Subaru Impreza
- Symptoms You May Notice
- Most Likely Causes
- Rare But Worth Checking
- Diagnosis Steps
- Parts You'll Likely Need
- Related Codes That Often Appear With This One
- Technical Service Bulletins (TSBs) & Recalls
- Platform-Specific Known Issues
- Mechanic-Grade Diagnostic Values
- Scan Tool Commands That Help
- Wiring & Ground Locations
- Real Owner Repair Stories
- "I Checked Everything" — The Actual Cause
- When the Usual Fixes Don't Work
- OEM Part Supersession History
- Model Year Variations Within This Range
- Diagnostic Flowchart
- Real Owner Stories
- 2013 Subaru XV Crosstrek 2.0L — 130000 miles
- 2016 Subaru Crosstrek 2.0L
- Subaru WRX FA20DIT
- Subaru BRZ / Scion FR-S / Toyota 86 (FA20)
- Related OBD-II Codes
- Frequently Asked Questions
- 🎟️ Get 5% Off