P0016 on 2013-2020 Subaru Impreza: Camshaft Correlation Causes & Fixes
On a 2013-2020 Subaru Impreza, P0016 is most often caused by low or dirty engine oil, a faulty oil control valve (OCV), or an ECM that needs reprogramming per TSB 09-120-24R. Always check your oil level and condition first. If the oil is fine, suspect the Bank 1 (passenger side) intake OCV. Replacing an OCV costs about $100-$200 for the part.
- Your first and easiest check is the engine oil. Low or dirty oil is the #1 cause of P0016 on these cars.
- The second most likely culprit is a faulty Oil Control Valve (OCV) for the Bank 1 intake camshaft.
- Before performing expensive mechanical repairs, ask a dealer to check if your car needs the ECM software update mentioned in TSB #09-120-24R.
- Do not immediately replace the camshaft or crankshaft sensors; they are usually reporting a real problem, not causing one.
What's Unique About the 2013-2020 Subaru IMPREZA

The Subaru FB20 boxer engine in this generation of Impreza is known for its variable valve timing system (AVCS) being particularly sensitive to oil level and condition. Running the engine low on oil can starve the AVCS system, leading to this code. Furthermore, Subaru has issued Technical Service Bulletins (TSBs) specifically for P0016, indicating that the fix may be a simple ECM software update rather than a mechanical repair. In some cases, even after a mechanical repair, the ECM retains learned incorrect values and may need to be reset using a specific procedure or replaced.
🎬 See why your ECM might need a reset after repairs.Diagnostic Flowchart

Tap your situation to follow the diagnostic path that matches what you're seeing on this vehicle.
Generation note: This range covers the end of the fourth generation (2013-2016) and the beginning of the fifth generation (2017-2020) Impreza. Both generations use a version of the 2.0L FB20 engine (FB20B and the direct-injection FB20D) and share the same common causes and TSBs related to code P0016. The FB20D used from 2017 onward features direct injection and was about 80% new parts, but the fundamental AVCS design and P0016 causes remain similar.
Symptoms You May Notice

- Check Engine Light is on
- Rough or unstable idle
- Engine stalling, especially at low speeds or when coming to a stop
- Reduced engine power and poor acceleration
- Decreased fuel economy
- Engine cranks but may have trouble starting
- Engine rattling or ticking noises, especially on startup
- Replacing the camshaft position sensor without testing it. The sensor is usually just reporting the timing discrepancy, not causing it.
- Replacing the crankshaft position sensor. This sensor is very reliable and rarely the cause of this specific correlation code.
- Performing a costly timing chain replacement before thoroughly diagnosing the OCVs and checking for relevant TSBs regarding ECM updates.
Most Likely Causes

- Low or Dirty Engine Oil 🔴 High Probability The AVCS (variable valve timing) system uses oil pressure to adjust cam timing. Low or sludgy oil prevents the system from working correctly, immediately causing correlation faults. This is the most common cause across all platforms with VVT.
How to confirm: Check the oil dipstick for level and examine the oil's color and consistency. If it's low, black, or thick, this is your likely starting point. An oil change is the cheapest first step.
Typical fix: Top off the oil or perform a complete oil and filter change using the manufacturer-specified viscosity (0W-20).
Est. part cost: $30-$70 - Faulty Oil Control Valve (OCV) / AVCS Solenoid 🔴 High Probability → Shop Engine Variable Valve Timing (VVT) Solenoid These solenoids control oil flow to the cam phasers. They can get clogged with sludge or fail electrically, causing them to stick. The Bank 1 (passenger side) intake solenoid is the specific one for P0016.
How to confirm: A mechanic can command the solenoid with a scan tool to check its operation. A common DIY diagnostic is to swap the Bank 1 intake solenoid with the Bank 2 intake solenoid (if accessible and identical) and see if the code changes to P0018. Oil found inside the electrical connector is also a strong indicator of failure.
Typical fix: Replace the faulty Oil Control Valve for Bank 1 Intake.
Est. part cost: $80-$200 - Outdated Engine Control Module (ECM) Software 🟡 Medium Probability Subaru has released TSBs to address this specific code, indicating the original ECM logic may be too sensitive or may not properly clear learned bad values after an oil-related fault.
How to confirm: A Subaru dealership or a well-equipped independent shop can check your vehicle's current software version against the TSBs. TSB 09-120-24R specifically addresses P0016 on 2017-2020 Imprezas.
Typical fix: Reprogram the ECM with the updated software files as specified in TSB #09-120-24R. This is a dealer or specialist-level job.
Est. part cost: $0-$200 (Labor for reprogramming) - Stretched Timing Chain or Failed Tensioner ⚪ Low Probability → Shop Engine Timing Chain While less common than oil issues, timing chains can stretch over time, especially on higher mileage vehicles (typically over 100k miles), causing a permanent timing mismatch. A failing tensioner can also cause slack.
How to confirm: This is a complex diagnosis requiring a mechanic to measure timing chain slack or perform a physical inspection, which involves significant engine disassembly (removing the front timing cover).
Typical fix: Replace the timing chain, tensioners, and guides. This is a major and expensive repair.
Est. part cost: $500-$1000+
Rare But Worth Checking
- Faulty Camshaft or Crankshaft Position Sensor: → Shop Engine Crankshaft Position Sensor While these sensors are named in the code, they are often misdiagnosed. They are more likely to be reporting an actual mechanical issue than to have failed themselves. Only replace a sensor if it has been specifically tested and proven to be faulty.
- Clogged OCV Filter Screens: Small mesh filters protect the OCVs. If the engine has a history of poor oil maintenance, these screens can become clogged with sludge, restricting oil flow even if the OCV itself is functional. They are sometimes located in banjo bolts in the oil supply lines.
- Failed Camshaft Sprocket (AVCS Phaser): → Shop Engine Camshaft The phaser itself can fail mechanically, getting stuck in one position. This is less common than an OCV failure but is a known issue, as reported by owners who have had the issue resolved by replacing the sprockets after trying other fixes.
Diagnosis Steps
- Check Engine Oil Level and Condition: This is the first and most important step. If low, top it off. If dirty, change the oil and filter with 0W-20 synthetic oil. Clear the code and drive to see if it returns.
- Scan for Other Codes: Check for other related codes (like P0017, P0011, or sensor circuit codes) that can provide more clues.
- Check for TSBs: Ask a dealer or search online for TSBs related to your VIN and code P0016. TSB 09-120-24R specifically calls for an ECM reprogram on 2017-2020 models.
- Inspect and Test the Oil Control Valve (OCV): Locate the Bank 1 (passenger side) intake OCV. Check the wiring and connector for damage or oil contamination. A professional can test the solenoid's function with a scan tool. A DIY approach is to swap it with the Bank 2 intake solenoid to see if the code changes to P0018.
- Test Camshaft/Crankshaft Sensors: If other steps don't resolve the issue, a mechanic can use an oscilloscope to test the sensors' output signals to ensure they are working correctly. A constant 5v reading from a cam sensor when it should be pulsing indicates a failed sensor.
- Check for Retained ECM Values: In some cases, after a repair, the ECM holds onto old 'learned' bad data. A specialized scan tool may be needed to perform a reset procedure, sometimes called a 'Test Mode' clear.
- Perform a Mechanical Timing Inspection: If all else fails, a mechanic must inspect the timing chain for stretching or damage. This is the most labor-intensive and costly step.
Parts You'll Likely Need
- Engine Oil Control Valve (AVCS Solenoid)
(OEM #10921AA231 (Verify with VIN))— This solenoid is a common failure point, either by getting clogged with debris or failing electrically. It directly controls the cam timing that triggers the code. Part number 10921AA231 supersedes 10921AA230 and 10921AA220.
Trusted brands: Subaru (OEM), Denso
OEM price range: $90-$150
Aftermarket price range: $50-$100 - Camshaft Position Sensor
(OEM #22056AA250 (Verify with VIN))— This part is often replaced but is rarely the true cause. Only replace if it has been specifically tested and confirmed as faulty.
Trusted brands: Subaru (OEM), NTK, Denso
OEM price range: $80-$110
Aftermarket price range: $40-$80 - Timing Chain Kit — For higher-mileage vehicles where oil issues and OCVs have been ruled out, a stretched timing chain is the next logical, albeit expensive, cause.
Related Codes That Often Appear With This One
- P0017 — This is the same correlation error but for the exhaust camshaft ('Sensor B') on the same bank. It often appears with P0016 if the underlying cause (like low oil pressure or a stretched chain) affects the entire bank.
- P0011 — This code indicates 'Camshaft Position 'A' - Timing Over-Advanced'. It points to a problem within the AVCS system's ability to control the cam phaser, often sharing root causes like a bad OCV or oil issues.
- P0018 — This is the same correlation error as P0016 but for Bank 2 (driver's side). If both P0016 and P0018 appear, it strongly suggests a systemic issue like low/dirty oil or a stretched timing chain affecting the entire engine.
Technical Service Bulletins (TSBs) & Recalls
- 09-120-24R: Announces new ECM reprogramming files to fix P0016 and other codes.
- 11-127-13R: Provides an updated diagnostic procedure applicable to P0016.
Platform-Specific Known Issues
- Subaru TSB #09-120-24R announces the availability of new reprogramming files for the Engine Control Module (ECM) to specifically remedy DTC P0016, P0017, P0018, and P0019 on 2017-22 Impreza and other models. This indicates the factory logic may be too sensitive. [⭐ MANUFACTURER TSB — highest authority]
- Subaru TSB #11-127-13R provides a diagnostic procedure applicable to DTC P0016, highlighting a known issue that required manufacturer guidance for 2012+ models. [⭐ MANUFACTURER TSB — highest authority]
- Some owners and technicians report that even after replacing mechanical parts like OCVs or timing components, the P0016 code can persist. This is due to the ECM storing 'learned values' from when the fault was active. A special procedure using a scan tool to enter 'Test Mode' is sometimes required to fully clear this memory, avoiding an unnecessary ECM replacement.
Mechanic-Grade Diagnostic Values
- Oil Control Valve (OCV) / VVT Solenoid Resistance — expected: 6.9 - 7.9 Ohms (This is a general Mazda spec but widely cited as a baseline for Denso-style solenoids). Failure: A reading significantly outside this range, or an open/short circuit. Note that resistance can change with temperature, so inconsistent readings on different days can also indicate a failing solenoid.
- Camshaft Position Sensor Signal (Oscilloscope) — expected: A clean square wave pattern, switching between approximately 0v and 5v as the engine runs.. Failure: A constant 5v or 0v reading, or a distorted/noisy pattern, indicates a failed sensor or wiring issue.
- VVT Advance Angle Amount (Live Data with OCV unplugged) — expected: Close to 0 degrees at idle.. Failure: A value of +/- 10 degrees or more suggests the timing chain has jumped a tooth, as each tooth on the cam sprocket represents 10 degrees of rotation.
- Mode $06, Monitor ID $35, TID $8B & $8C (Bank 1 Intake) — expected: A diagnostic value less than 1000.. Failure: A value of 1000 or greater indicates a failure in the AVCS system for Bank 1 Intake. This data can be used to verify a repair after a drive cycle.
Scan Tool Commands That Help
- Subaru Select Monitor (SSM) or capable aftermarket scanner: Clear Memory / Reset Learned Values ('Test Mode' clear) — This is critical after a mechanical repair (like replacing an OCV or timing components). The ECM can store 'learned' incorrect correlation values from when the fault was active. Even with new parts, the code can return until this memory is cleared. A specific procedure involving putting the car in 'test mode' may be required.
- Subaru Select Monitor (SSM) or capable aftermarket scanner: Active Test for Oil Control Valve (OCV) — To test the OCV's mechanical function. The scan tool commands the solenoid to activate, and the technician should observe a corresponding change in engine idle (it should become rough or stall) and live data for cam advance. This confirms the solenoid is working mechanically.
Wiring & Ground Locations
- Main Engine Ground — The main engine-to-chassis ground strap typically bolts to the top of the engine block or transmission bell housing, often sharing a bolt with the starter motor.. A poor engine ground can cause erratic behavior in all engine sensors, including the camshaft and crankshaft position sensors. This can lead to incorrect signals and trigger correlation codes like P0016. The ECU itself grounds through the intake manifold, which must have a good connection to the block and chassis.
- Bank 1 Camshaft Position Sensor Connector — On the front of the cylinder head for Bank 1 (passenger side), near the top of the timing cover.. This is the primary sensor for the 'Sensor A' part of the code. The connector and its wiring are a key point for inspection for damage, corrosion, or oil contamination from a leaking OCV.
- Bank 1 Intake Oil Control Valve (OCV) Connector — On the front timing cover, corresponding to the intake camshaft for Bank 1 (passenger side).. This connector provides power and control signals to the solenoid. Unplugging it is a key diagnostic step to check the base mechanical timing. It should be inspected for oil intrusion, which is a sign of a failed OCV.
Real Owner Repair Stories
- YouTube channel 'Final Stop Mobile Auto Tech LLC' (2016 Subaru Crosstrek (uses FB20 engine)) — Persistent P0016 code after timing components were replaced.
❌ Tried (didn't work) Replacing timing components. The timing was verified as correct with an oscilloscope, but the code kept returning.
✅ What actually fixed it The technician found that the ECM had 'retained memory' of the fault. He had to enter 'Test Mode' by placing a fuse in a specific slot in the fuse box, turn the ignition on, and use a scan tool's special function to perform a 'test mode change'. This cleared the learned values, flashed the check engine light rapidly, and after clearing codes and removing the fuse, the fault was resolved. - Reddit user in r/subaru (Year not specified, Impreza with FB20 engine.) — P0016 code appeared after replacing the timing chain cover gasket.
❌ Tried (didn't work) Visual inspection of sensors and connections.
✅ What actually fixed it The user tested the Bank 1 camshaft position sensor with a multimeter and found it was outputting a constant 5v instead of a pulsing 0v-5v signal. This indicated the sensor itself had failed or was damaged during the timing cover service. Replacing the sensor fixed the issue.
OEM Part Supersession History
10921AA220→10921AA230, then 10921AA231— Revisions to improve reliability and performance of the Oil Control Valve.
Heads up: While the parts are generally interchangeable, it is always recommended to use the latest revision (10921AA231) when replacing a failed unit. Some owners report that after replacing a faulty OCV, the ECM may need a few drive cycles or a specific reset to 're-learn' the behavior of the new part.
Model Year Variations Within This Range
- 2017-2020: These models use the direct-injection FB20D engine. While mechanically similar in the AVCS system, Subaru issued TSB #09-120-24R specifically for these years, calling for an ECM reprogram to fix P0016/P0017 codes, suggesting the software logic was a primary issue for this generation.
- 2013-2016: These models use the port-injected FB20B engine. While the ECM reprogram TSB is for later models, these earlier models are subject to TSB #11-127-13R and #02-163-16R, which provide updated diagnostic procedures for AVCS codes, including P0016.
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:
- 🧭 Diagnostic Flowchart
- 🎬 Helpful Videos
- 🛍️ Shop This Part
- What's Unique About the 2013-2020 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
- OEM Part Supersession History
- Model Year Variations Within This Range
- 🎟️ Get 5% Off