Start by identifying your EJ20
This guide covers the turbocharged EJ20 as fitted to the WRX. Subaru changed trigger wheels, coils, idle control and cam hardware several times over the years, so before you order parts or start pinning connectors, work out exactly which engine and model year you're dealing with. Swapped engines are common in these cars, so check the hardware on the engine rather than trusting the chassis code alone.
| Basic spec | EJ20 turbo |
|---|---|
| Layout | Flat four (boxer), horizontally opposed |
| Capacity | 1994 cc (121.7 ci) |
| Firing order | 1-3-2-4 |
| Cylinder numbering | Cylinders 1 and 3 on the right bank, 2 and 4 on the left. Cylinder 1 is the front right one as seen from the driver's seat |
Variant cheat sheet
| Engine code | What sets it apart |
|---|---|
| EJ20G | 8.0:1 compression, direct fire ignition, three-pin idle air valve |
| EJ20K | Waste spark ignition. Regular versions have cast pistons, the STI versions got forged ones |
| EJ205 | US-market engine from 2001 to 2006, 9.0:1 compression, direct fire ignition |
| EJ207 | 8.0:1 compression, top-feed injectors. Early Australian and Japanese 1999-2000 WRX versions have a stepper idle motor on the throttle body |
| EJ207 v7 | Adds AVCS variable intake cams, a two-pin idle valve and a single scroll turbo |
| EJ207 v8 | Drops the tumble generator valves (TGVs) and uses a twin scroll turbo |
Cars from 2006 onward also run a CAN network linking the dash, ABS and body control. The Haltech Elite range supports this, which keeps factory gauges and systems alive after the swap.
Crank and cam triggers
Every EJ20 in this family uses magnetic reluctor sensors for crank and cam position, but the tooth patterns come in two main flavors.
- EJ20G and EJ20K: the crank wheel has six teeth, and the cam signal comes from seven teeth on the back of the cylinder 2 intake cam pulley.
- EJ207: the crank wheel is based on 36 teeth with several gaps. On one side there's a single gap of two missing teeth; directly opposite are two gaps of two missing teeth with one tooth between them. You'll find the same pattern on some Ford, Mazda and Suzuki engines. Early EJ207 cam wheels have two teeth 90 degrees apart, later ones have three, still at 90 degree spacing.
The crank sensor sits at the front of the engine near the crank pulley. The cam sensor is also at the front, tucked behind the cylinder 2 intake cam gear, and the same part is used across all models. Wiring is identical for both sensors apart from which shielded cable you use:
| Sensor pin | Signal | Crank sensor goes to | Cam sensor goes to |
|---|---|---|---|
| 1 | Positive side of the reluctor | Yellow wire, Trigger 4-core | Yellow wire, Home 4-core |
| 2 | Negative side of the reluctor | Green wire, Trigger 4-core | Green wire, Home 4-core |
The trigger settings in the software differ between the EJ20G/EJ20K layout and the EJ207 layout. Haltech's configuration screenshots for both are something we can send you, and we'd rather check your settings against a real sync test than have you guess. See how engine trigger systems work if reluctor signals are new to you.
Ignition
The ignition hardware is where the variants differ most:
- Early EJ20G: individual coils on each plug, fired by an external four-channel igniter module. Each coil has a yellow wire for switched 12V; the other wire runs to the igniter. If the factory module is missing or tired, a Haltech HPI4 igniter does the same job.
- EJ20K: waste spark. Two dual-post coils are built into one assembly and driven by an external two-channel igniter. Several versions of this coil exist, but they all work the same way.
- EJ205 and EJ207 with coil-on-plug: each coil has its own built-in igniter, so it can be driven straight from the ECU's ignition outputs.
EJ20K waste spark wiring
| Connection | Wire it like this |
|---|---|
| Coil pin 2 | Switched 12V |
| Coil pin 1 (cylinders 1 and 2) | Igniter pin 5 |
| Coil pin 3 (cylinders 3 and 4) | Igniter pin 6 |
| Igniter pins 1 and 2 | Haltech Ignition Outputs 1 and 2 |
| Igniter pin 3 | Ground at the cylinder head |
| Igniter pin 4 | Unused |
Smart coil wiring (EJ205 / EJ207)
With pin 1 being the one closest to the locking tab: pin 1 takes the ECU ignition output, pin 2 grounds to the cylinder head, and pin 3 is switched 12V. Dwell values for each coil type were published by Haltech as charts. Ask us and we'll pass on the right figures for your coils.
Throttle, MAP and AVCS
All of these engines use a cable throttle with a three-wire position sensor, but the pin order changed, which catches people out:
| Function | EJ20G / EJ20K pin | EJ207 pin |
|---|---|---|
| 5V supply | 3 | 1 |
| Signal ground | 1 | 2 |
| Position signal (to an AVI) | 2 | 3 |
The factory MAP sensor lives on the right side of the engine bay near the strut tower. Subaru only used it for boost control, and it can't read the full vacuum range the engine produces, so we don't tune off it. Run a vacuum line from the intake manifold to the MAP sensor built into your Haltech ECU, or for higher boost fit an external sensor such as the 5 bar TI MAP sensor on a spare AVI. If you do want to read the EJ207 factory sensor, pin 1 is signal, pin 2 is ground and pin 3 is the 5V feed.
AVCS (Subaru's variable cam timing) arrived on the late-2002 EJ207, on the intake cams only. Those engines keep the normal crank and cam sensors and add one extra reluctor sensor per intake cam, plus a duty-controlled solenoid on each cam actuator. Wire each extra cam sensor's positive pin to a spare SPI and its negative pin to signal ground. Each solenoid gets switched 12V on pin 1 and its pin 2 goes to any spare output that isn't an ignition output.
Idle control by model year
- MY93-97 (GC8A to GC8E, EJ20G): a three-pin valve on the intake manifold. Pin B is switched 12V, and pins A (open) and C (close) each go to a spare output. Set it up as a BAC 3-wire Bi-Directional valve. The base airflow can be adjusted by loosening the Phillips screws and turning the plastic section of the valve.
- MY99-00 (GC8F to GC8G): a stepper motor on the throttle body. This needs an Elite 1000 or larger. The Elite 550, 750 and 950 can't drive it. Pins 2 and 5 take switched 12V; pins 6, 4, 1 and 3 go to Stepper outputs 1, 2, 3 and 4 respectively. Use 200 steps at a speed of 80, and set the drive type to Low Side when the 12V feed is connected, or Both when it isn't. The stepper output guide covers the ECU side.
- MY01-05 (GD, EJ207): a three-pin valve on the throttle body, but only one wire goes to the ECU. Pin 1 is the signal to a spare output, pin 2 is switched 12V and pin 3 grounds to the head. Configure it as BAC 2-wire.
Temperature, knock, MAF and speed sensors
Coolant temperature: the EJ20G and earlier engines use an ordinary two-wire sensor. The EJ20K sensor is odd: it has three pins, takes a 5V feed on pin 1, grounds through the block, and outputs two separate signals. Pin 2 is the one the ECU needs, on any spare AVI; pin 3 feeds the dash gauge.
Air temperature: early cars have no intake air sensor, and later ones build it into the MAF. That location reads the air temperature where the factory ECU measured load, not where a MAP-based Haltech tune needs it. We fit a separate sensor such as the Haltech air temp sensor as close to the plenum as practical. These sensors aren't polarity sensitive: one pin to an AVI with its pull-up enabled (or add an external 1k pull-up resistor to 5V), the other to signal ground.
Knock: every version has a non-resonant donut knock sensor, which is well suited to knock monitoring with a Haltech. Pin 1 goes to the knock input and pin 2 to signal ground; the sensor body grounds through the block.
MAF: most Haltech installs delete it, but it can be used. The EJ20G/EJ20K three-pin unit has signal on pin 1 (to an AVI), signal ground on pin 2 and 12V on pin 3. The EJ207 five-pin unit has switched 12V on pin 1, MAF ground on pin 2, MAF signal on pin 3, the air temp signal on pin 4 (to an AVI with pull-up) and the air temp ground on pin 5.
Vehicle speed: a three-wire Hall effect sensor. Grey/yellow is signal, grey/white is signal ground and grey/black is 12V. A calibration of about 2500 pulses per km (roughly 4,020 per mile) gets you close; fine-tune it against GPS.
Oxygen sensors: where most WRX installs go wrong
The EJ20G and EJ20K have a narrowband sensor at the top of the downpipe. It's fine for idle and cruise, useless for tuning under load, and the heaters are known to fail, so plenty of cars already have a dead one.
The EJ207 moved to a limited-range four-wire wideband mounted in the exhaust manifold, ahead of the turbo. Subaru put it there for faster response and corrected the reading with a predicted exhaust back-pressure model. On a modified engine that model no longer matches reality, so the reading can't be trusted for tuning.
On EJ207 engines, never screw a Haltech wideband sensor into the factory pre-turbo location. It will read wrong and can kill the sensor or lead you into a lean tune. Weld the bung supplied with the kit into the downpipe after the turbo instead.
We recommend a Haltech WB1 wideband kit on every EJ20 build. On the earlier engines its LSU 4.9 sensor can replace the factory sensor in the downpipe. Access is from under the car, and a 22 mm socket or wrench does the job.
Injectors, the factory ECU and base maps
Flow rates are measured with the injector held fully open, and dead time accounts for the delay while the injector opens and closes. If your fuel pressure isn't referenced to manifold pressure, the flow needs to be mapped against manifold pressure too. Haltech's base maps for these engines include flow and dead time data for the factory injectors, so you don't need to find it yourself.
The factory ECU is in the passenger footwell, under the carpet near the firewall. Remove the kick panel, peel back the carpet and undo the 10 mm bolts on the sheet metal cover.
Base maps were built around Haltech's Elite plug-in adaptor harnesses, such as the Elite 2500 GDB WRX MY01-05 plug-in kit. Import the map into your ECU rather than opening it as a file; base map basics explains why. Owners of the later engine should read our EJ25 engine guide, and the EZ30 guide covers the six-cylinder.
EJ20 FAQ
Can I use the factory Subaru MAP sensor with a Haltech?
It will work electrically, but it can't read the full vacuum range, so we don't recommend tuning off it. Use the ECU's built-in sensor or an external one sized for your boost.
Which Elite runs the MY99-00 stepper idle valve?
You need an Elite 1000 or larger. The Elite 550, 750 and 950 don't support it.
Where should the wideband go on a WRX?
After the turbo, in the downpipe. Never in the EJ207's pre-turbo location.
Not sure which version you have, or want us to check your wiring plan? Book a free 30-minute consultation.




