Since I've wrapped up my BMW ABS swap I figured I'd put together a thread with information since I'm pretty sure no one looks at my "build" thread in the k swap sub-forum. When reading through here pretty much everything applies to the MK60E1 or MK60E5 out of E90 BMWs, the MK60 out of the E46 exists but it doesn't really make any sense to use anymore. As always, don't screw with your brakes.
Unit options
MK60 from E46 M3 - Expensive due to scalpers, requires external pressure sensors, uses normal hall wheel speed sensors, CAN broadcast requires sending this to the ABS unit every two seconds or so:
MK60E1 from 4cyl E90 - Buy them from Europe on eBay for $35-40 shipped, internal input pressure sensor, same CAN protocol as E90 BMW and auto-broadcasts, can be coded to vehicle weight / yaw sensor offset / wheelbase / etc. Uses normal encoding wheel speed sensors / metal tooth tone ring, same as E46. Uses E90 style yaw sensor, both fat 6 pin and slim 4 pin types are compatible. Europe generally refers to these units as MK60P or MK60Psi.
MK60E5 from 6cyl E90 - Buy them on eBay for $35-40 shipped, internal input pressure sensor, internal output pressure sensors, same CAN protocol as E90 BMW and auto-broadcasts, can be coded to vehicle weight / yaw sensor offset / wheelbase / etc. Uses special wheel speed sensors that have direction and state encoded. There is the Happy Cactus Garage box that can convert VR wheel speed sensor signal to the one supported by the E5 but the stock S2 hubs are 29 tooth and will not work properly. Uses E90 style yaw sensor, both fat 6 pin and slim 4 pin types are compatible.
Some of the units are shaped a bit different for mounting consideration, here are three E90 MK60E5 that I have - all different in a way that can affect mounting them.
Unit option considerations for Eliges
Only certain E46 M3 units can be flashed and scalpers have marked them way up, they're the units that have 813.3 or 817.3 on them. The only real use here is that they're the suggested unit if you're going to run a balance bar with a Continental race flash or if you're bound by NASA TT4 rules. All E46 M3 units can take the "CSL parameters", it takes five minutes in NCSExpert / NCSDummy, don't pay to have it done.
The MK60E1 is the preferred option due to wheel speed sensor compatibility, they're also NASA TT4 legal.
There is a MK60E5 from certain BMW Z4 that uses the old style wheel speed sensors with metal rings, but they're rare and and have special considerations. You really, really probably don't want one, but they are desirable due to being able to be flashed with Continental software that has a knob - the normal E90 units can't get the true Z4 GT3 flash. Included for completeness.
Flashable MK60, all E1, and all E5 units can be flashed for front and rear wheel size, abs tone ring count, wheelbase, tire, aero load, etc. There are a few companies that offer the service but they seem to all end up in one place in the end, the shortest and cheapest route I've found is Mario at MK-Rennsporttechnik. His price is $1k EU plus shipping regardless of unit type or config. I was told the yaw sensor is not needed with the MK60E1 flash.
When I compared pre-post data for the flash the only difference I found was the Continental software version number, which isn't available with the normal scanning tools so there isn't a simple way to tell if a unit has been flashed.
Communications / Data
The MK60 (and z4 flashed e5) has a pin that can be used for an ABS failure light, the E1 and E5 have an ABS state that is broadcast over CAN but no failure light. There are people that sell mini boards that will provide a light output or you can handle it with a dash logger / ecu / etc.
Diagnostics are handled over CAN and you can use the usual BMW software suite (google around about this, not really safe to post) with a cable like: Amazon.com
E1 and E5 use the E90 CAN protocol, the only difference between the two is that the E1 doesn't broadcast output wheel pressures since it doesn't have the sensors to do it. This is a DBC that can be imported into AIM or whatever else. abs-docs/MK60e5_CAN.dbc at main · mck1117/abs-docs
Over CAN you get:
Individual wheel speeds
Individual calculated tire size percent offset
Input brake pressure
Individual wheel output brake pressures
Brake pedal switch state
Yaw rate
Long / lat g
ABS state (failure / fallback / normal)
ABS intervention state (electronic brake distribution, abs, etc)
The CAN rate is 500k so I personally use a Minton CAN Triple (CAN Triple by Minton Performance) to forward messages from my 500k ABS network to my 1000K AIM and Haltech network. You can emulate a Haltech PD16 or whatever and convert the ABS unit data to feed it into a Haltech, if you want too.
Wheel speed sensors
Buy S3 Elise hubs from Europe, they are 48 tooth hall type and bolt in directly to the S2. The SKF part number is VKBA 3650, I paid $500 EU shipped for a set of 5 from Spareto. Rockauto also carries the hubs but the brands aren't super reputable.
There are OEM adapters that will convert the plugs on these to the stock chassis plug but they're basically unobtanium now, I ended up cutting the plugs off and repinning them into the S2 style connector, I pinned them as:
Connector: 12162343 | Delphi Metri-Pack 150 2 Way Male Connector
Seal: 15324974 | Delphi Metri-Pack 150 24-20 AWG Cable Seal
Pin: 12077628-L | Delphi Metri-Pack 150 Male Terminal
Wiring
You can get an entire MK60/E1/E5 compatible set of connectors from Tulay Wireworks: Teves MK60 ABS Connector Kit – Tulay's Wire Werks
You'll want the .50mm pins, no speed sensor connectors, and need brake pressure connectors only if you're doing an E46 unit. I didn't bother with a cover.
The BMW unit handles brake signal differently than the stock unit, it is grounded normally and opens when the brake pedal is pressed. I opted to use this relay to convert that logic: Sealed Relay Kit
If you want to code the unit it is much easier if you have a BMW steering angle sensor (SZL) connected to the F-CAN, otherwise you need to use a roundabout way of reading the coding and remove a line from the data when you go to write the coding data back to the unit. This needs to be unplugged when actually driving the car, it is for coding ease only.
What this means is that I ended up pinning PTCAN high and low out to a DTM connector and I have a CAN hub that it plugs into. On this same CAN hub I have one of the networks from my CAN Triple and another plug that is 12v, ground, CAN high, CAN low and pinned into an OBD connector to do diagnostics on the MK60E1.
On the FCAN side I have a splice that allows me to connect both the SZL and the yaw sensor to the associated 12v, ground, CAN high, CAN low.
I opted to cut my stock ABS connector off and re-pin to the BMW connector. I pinned them as:
I pinned my 4 pin yaw sensor as:
I pinned my brake switch relay as:
I pinned a BMW E90 SZL as:
Unit placement
The E1 is too big to fit where the stock unit does, I ended up building a small platform out of aluminum with vibration isolators to place it in the center of the front of my car. I reused the fittings from the ABS unit that I bought, the stock Lotus fittings that go into the individual brake line unions around the front of the car, and the stock master cylinder fittings. I used 3/16 NiCopp line to route everything, it isn't very pretty but zero leaks.
The yaw sensor is mounted upside down with the plug facing foward, I mounted mine in the center of the car with a bracket that I 3d printed. I have personally preferred to have the yaw sensor unplugged so far.
Unit Coding / Lotus Specific Considerations
This unit has been put into a lot of different cars at this point and I've personally done it in a few, but the Lotus is about as far as it gets from the stock vehicle that they came out of. The E1 and E5 have vehicle parameters that can be adjusted with the usual BMW software suite to help this. There is very little information floating around about this, but these are the changes I made (but have not yet tested back to back) to try and help in my personal car.
C0F_BAUART - Custom ESM (01)
DRUCKMODELL_HA (Pressure model rear axle) - 0
DRUCKMODELL_VA (Pressure model front axle) - 0
C0F_BBV (Brake pad wear indication) - nich_aktiv
C0F_RPA (Tire puncture warning) - nich_aktiv
C0F_SDR_CTC (Cornering traction control) - nich_aktiv
C0F_PRE_USC (Pre-under/oversteer control) - nich_aktiv
UEBERSTUERN_MUE_0_2 (Oversteer friction coefficient 0 2) - CSL (D3)
UEBERSTUERN_MUE_1_2 (Oversteer friction coefficient 1 2) - CSL (80)
UNTERSTUERN_MUE_0_2 (Understeer friction coefficient 0 2) - CSL (60)
UNTERSTUERN_MUE_1_2 (Understeer friction coefficient 1 2) - CSL (20)
UNTERSTEURSCHWELLE_2 (Understeer threshold 2) - CSL (13)
C0F_LCL (Lane change logic) - nich_aktiv
C0F_ASL (Trailer stabilisation control) - nich_aktiv
C0F_CF_ESM_LB / C0F_CF_ESM_HB (Front lateral tire stiffness) - 6812n (guess based on available options)
C0F_CR_ESM_LB / C0F_CR_ESM_HB (Rear lateral tire stiffness) - 10397n (guess based on available options)
C0F_LM_ESM (Front axle to COG) - 68 / 44 hex (1360mm)
C0F_LR_ESM (Rear axle to COG) - 47 / 2F hex (940mm)
C0F_M_ESM (Mass incl 85kg driver) - 40 / 28 hex (792kg + 85 = 877kg)
C0F_THETA_ESM (Yaw moment of inertia) - 7A hex (E87)
C0F_SC_Y_ESM (Sensor cluster distance from front axle) - 28 / 1C hex (1400mm)
C0F_SC_X_ESM (Sensor cluster distance from vehicle center line) - 0 (0mm)
C0F_SPURWEITE (Track width difference) - 2 / 02 hex (40mm)
C0F_LWK_X2 (Steering wheel angle characteristic curve postion X2) - 06 (E87)
C0F_LWK_X3 (Steering wheel angle characteristic curve postion X3) - 3E (E87)
C0F_LWK_X4 (Steering wheel angle characteristic curve postion X4) - 88 (E87)
C0F_LWK_Y1 (Steering wheel angle characteristic curve postion Y1) - B7 (E87)
C0F_LWK_Y2 (Steering wheel angle characteristic curve postion Y2) - A2 (E87)
C0F_LWK_Y3 (Steering wheel angle characteristic curve postion Y3) - 9C (E87)
C0F_LWK_Y4 (Steering wheel angle characteristic curve postion Y4) - 8B (E87)
C0X_C8 (Send CAN message steering wheel angle) - nich_aktiv
I've only run unit the event at one event and on the stock E90 wagon coding so far but found that it was much more obvious that it was working in comparison to the stock Lotus Kelsey Hayes unit in terms of pedal feedback. I also found that it made significant use of the electronic brake bias distribution and made the car more stable on entry trail brake. I personally found I preferred how it felt with the yaw sensor unplugged, but this is likely due to the extreme difference in vehicle modeling. I have a 205/50/15 / 235/40/17 tire stagger on the car as-is and the E1 handled it fine, as well as output that the front tires were calculated to be smaller than the rears.
I have a Continental flashed unit and I have programmed the above parameter changes to my stock unit, I intend to back to back test them in a few weeks. I'll post back when I do. Update: It's absolute fantastic magic with the Conti flash.
Please don't make a this a thread about whether ABS belongs in race cars or whatever.
Unit options
MK60 from E46 M3 - Expensive due to scalpers, requires external pressure sensors, uses normal hall wheel speed sensors, CAN broadcast requires sending this to the ABS unit every two seconds or so:
Code:
0x610: [ 0x20, 0x08, 0x29, 0x54, 0x4a, 0x00, 0x00, 0x00 ]
0x329 [ 0x11, 0x8e, 0xc5, 0x08, 0x00, 0x00, 0x00, 0x00 ]
MK60E5 from 6cyl E90 - Buy them on eBay for $35-40 shipped, internal input pressure sensor, internal output pressure sensors, same CAN protocol as E90 BMW and auto-broadcasts, can be coded to vehicle weight / yaw sensor offset / wheelbase / etc. Uses special wheel speed sensors that have direction and state encoded. There is the Happy Cactus Garage box that can convert VR wheel speed sensor signal to the one supported by the E5 but the stock S2 hubs are 29 tooth and will not work properly. Uses E90 style yaw sensor, both fat 6 pin and slim 4 pin types are compatible.
Some of the units are shaped a bit different for mounting consideration, here are three E90 MK60E5 that I have - all different in a way that can affect mounting them.

Unit option considerations for Eliges
Only certain E46 M3 units can be flashed and scalpers have marked them way up, they're the units that have 813.3 or 817.3 on them. The only real use here is that they're the suggested unit if you're going to run a balance bar with a Continental race flash or if you're bound by NASA TT4 rules. All E46 M3 units can take the "CSL parameters", it takes five minutes in NCSExpert / NCSDummy, don't pay to have it done.
The MK60E1 is the preferred option due to wheel speed sensor compatibility, they're also NASA TT4 legal.
There is a MK60E5 from certain BMW Z4 that uses the old style wheel speed sensors with metal rings, but they're rare and and have special considerations. You really, really probably don't want one, but they are desirable due to being able to be flashed with Continental software that has a knob - the normal E90 units can't get the true Z4 GT3 flash. Included for completeness.
Flashable MK60, all E1, and all E5 units can be flashed for front and rear wheel size, abs tone ring count, wheelbase, tire, aero load, etc. There are a few companies that offer the service but they seem to all end up in one place in the end, the shortest and cheapest route I've found is Mario at MK-Rennsporttechnik. His price is $1k EU plus shipping regardless of unit type or config. I was told the yaw sensor is not needed with the MK60E1 flash.
When I compared pre-post data for the flash the only difference I found was the Continental software version number, which isn't available with the normal scanning tools so there isn't a simple way to tell if a unit has been flashed.
Communications / Data
The MK60 (and z4 flashed e5) has a pin that can be used for an ABS failure light, the E1 and E5 have an ABS state that is broadcast over CAN but no failure light. There are people that sell mini boards that will provide a light output or you can handle it with a dash logger / ecu / etc.
Diagnostics are handled over CAN and you can use the usual BMW software suite (google around about this, not really safe to post) with a cable like: Amazon.com
E1 and E5 use the E90 CAN protocol, the only difference between the two is that the E1 doesn't broadcast output wheel pressures since it doesn't have the sensors to do it. This is a DBC that can be imported into AIM or whatever else. abs-docs/MK60e5_CAN.dbc at main · mck1117/abs-docs
Over CAN you get:
Individual wheel speeds
Individual calculated tire size percent offset
Input brake pressure
Individual wheel output brake pressures
Brake pedal switch state
Yaw rate
Long / lat g
ABS state (failure / fallback / normal)
ABS intervention state (electronic brake distribution, abs, etc)
The CAN rate is 500k so I personally use a Minton CAN Triple (CAN Triple by Minton Performance) to forward messages from my 500k ABS network to my 1000K AIM and Haltech network. You can emulate a Haltech PD16 or whatever and convert the ABS unit data to feed it into a Haltech, if you want too.

Wheel speed sensors
Buy S3 Elise hubs from Europe, they are 48 tooth hall type and bolt in directly to the S2. The SKF part number is VKBA 3650, I paid $500 EU shipped for a set of 5 from Spareto. Rockauto also carries the hubs but the brands aren't super reputable.
There are OEM adapters that will convert the plugs on these to the stock chassis plug but they're basically unobtanium now, I ended up cutting the plugs off and repinning them into the S2 style connector, I pinned them as:
Sensor Pin | Color | Use |
A | Black | Signal |
B | Brown | Power |
Connector: 12162343 | Delphi Metri-Pack 150 2 Way Male Connector
Seal: 15324974 | Delphi Metri-Pack 150 24-20 AWG Cable Seal
Pin: 12077628-L | Delphi Metri-Pack 150 Male Terminal


Wiring
You can get an entire MK60/E1/E5 compatible set of connectors from Tulay Wireworks: Teves MK60 ABS Connector Kit – Tulay's Wire Werks
You'll want the .50mm pins, no speed sensor connectors, and need brake pressure connectors only if you're doing an E46 unit. I didn't bother with a cover.
The BMW unit handles brake signal differently than the stock unit, it is grounded normally and opens when the brake pedal is pressed. I opted to use this relay to convert that logic: Sealed Relay Kit
If you want to code the unit it is much easier if you have a BMW steering angle sensor (SZL) connected to the F-CAN, otherwise you need to use a roundabout way of reading the coding and remove a line from the data when you go to write the coding data back to the unit. This needs to be unplugged when actually driving the car, it is for coding ease only.
What this means is that I ended up pinning PTCAN high and low out to a DTM connector and I have a CAN hub that it plugs into. On this same CAN hub I have one of the networks from my CAN Triple and another plug that is 12v, ground, CAN high, CAN low and pinned into an OBD connector to do diagnostics on the MK60E1.
On the FCAN side I have a splice that allows me to connect both the SZL and the yaw sensor to the associated 12v, ground, CAN high, CAN low.
I opted to cut my stock ABS connector off and re-pin to the BMW connector. I pinned them as:
ABS Pin | Purpose | Source / Destination | Legacy Color | Notes |
1 | Power | Existing ABS harness 17 | Brown / Blue | 12v 40 amps |
2 | ||||
3 | Brake Fluid Level | Splice to ground | Splice to ground | |
4 | Brake Switch Input | Brake switch relay 87 | Ground normally, open on pedal press | |
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 | F CAN High | Yaw sensor 3 | Yaw Sensor CAN High | |
12 | ||||
13 | ||||
14 | ||||
15 | PT CAN Low | Cabin signal distribution | For Diag / Datalog | |
16 | Ground | Existing ABS harness 16 | Black | |
17 | Switched Power | Existing ABS harness 15 | Green | 12v 5 amps, spliced to 29 |
18 | ||||
19 | ||||
20 | ||||
21 | ||||
22 | ||||
23 | ||||
24 | ||||
25 | ||||
26 | F CAN Low | Yaw sensor 2 | Yaw Sensor CAN Low | |
27 | Yaw Sensor Ground | Yaw sensor 1 | ||
28 | ||||
29 | Switched Power | Existing ABS harness 15 | Green | 12v 5 amps, wakeup, spliced to 17 |
30 | PT CAN High | Cabin signal distribution | For Diag / Datalog | |
31 | ||||
32 | Power | Existing ABS harness 18 | Brown / Blue | 12v 30 amps |
33 | FR Wheel Speed Signal | Existing ABS harness 12 | Gray | Goes to black / signal / A |
34 | FR Wheel Speed Power | Existing ABS harness 13 | Green | Goes to brown / power / B |
35 | ||||
36 | RL Wheel Speed Power | Existing ABS harness 23 | Brown | Goes to brown / power / B |
37 | RL Wheel Speed Signal | Existing ABS harness 22 | Purple | Goes to black / signal / A |
38 | ||||
39 | Yaw Sensor Power | Yaw sensor 4 | ||
40 | ||||
41 | ||||
42 | RR Wheel Speed Signal | Existing ABS harness 9 | Red | Goes to black / signal / A |
43 | RR Wheel Speed Power | Existing ABS harness 10 | Blue | Goes to brown / power / B |
44 | ||||
45 | FL Wheel Speed Power | Existing ABS harness 25 | Pink | Goes to brown / power / B |
46 | FL Wheel Speed Signal | Existing ABS harness 14 | Yellow | Goes to black / signal / A |
47 | Ground | Existing ABS harness 19 | Black |
I pinned my 4 pin yaw sensor as:
1 | Ground | MK60E1 27 |
2 | F CAN Low | MK60E1 26 |
3 | F CAN High | MK60E1 11 |
4 | Power | MK60E1 39 |
I pinned my brake switch relay as:
30 | Ground | Black | ||
87a | ABS Module Output | MK60E1 pin 4 | Gray | Normally closed (ground), opens on brake input |
85 | Ground | Black | ||
86 | Brake Input | Existing ABS harness 24 | Purple |
I pinned a BMW E90 SZL as:
6 | F CAN Low | White / Blue | |
7 | Ground | Brown / Black | |
9 | Power | Red / Black | |
10 | Power | Green / Red | |
12 | F CAN High | White / Yellow |
Unit placement
The E1 is too big to fit where the stock unit does, I ended up building a small platform out of aluminum with vibration isolators to place it in the center of the front of my car. I reused the fittings from the ABS unit that I bought, the stock Lotus fittings that go into the individual brake line unions around the front of the car, and the stock master cylinder fittings. I used 3/16 NiCopp line to route everything, it isn't very pretty but zero leaks.

The yaw sensor is mounted upside down with the plug facing foward, I mounted mine in the center of the car with a bracket that I 3d printed. I have personally preferred to have the yaw sensor unplugged so far.

Unit Coding / Lotus Specific Considerations
This unit has been put into a lot of different cars at this point and I've personally done it in a few, but the Lotus is about as far as it gets from the stock vehicle that they came out of. The E1 and E5 have vehicle parameters that can be adjusted with the usual BMW software suite to help this. There is very little information floating around about this, but these are the changes I made (but have not yet tested back to back) to try and help in my personal car.
C0F_BAUART - Custom ESM (01)
DRUCKMODELL_HA (Pressure model rear axle) - 0
DRUCKMODELL_VA (Pressure model front axle) - 0
C0F_BBV (Brake pad wear indication) - nich_aktiv
C0F_RPA (Tire puncture warning) - nich_aktiv
C0F_SDR_CTC (Cornering traction control) - nich_aktiv
C0F_PRE_USC (Pre-under/oversteer control) - nich_aktiv
UEBERSTUERN_MUE_0_2 (Oversteer friction coefficient 0 2) - CSL (D3)
UEBERSTUERN_MUE_1_2 (Oversteer friction coefficient 1 2) - CSL (80)
UNTERSTUERN_MUE_0_2 (Understeer friction coefficient 0 2) - CSL (60)
UNTERSTUERN_MUE_1_2 (Understeer friction coefficient 1 2) - CSL (20)
UNTERSTEURSCHWELLE_2 (Understeer threshold 2) - CSL (13)
C0F_LCL (Lane change logic) - nich_aktiv
C0F_ASL (Trailer stabilisation control) - nich_aktiv
C0F_CF_ESM_LB / C0F_CF_ESM_HB (Front lateral tire stiffness) - 6812n (guess based on available options)
C0F_CR_ESM_LB / C0F_CR_ESM_HB (Rear lateral tire stiffness) - 10397n (guess based on available options)
C0F_LM_ESM (Front axle to COG) - 68 / 44 hex (1360mm)
C0F_LR_ESM (Rear axle to COG) - 47 / 2F hex (940mm)
C0F_M_ESM (Mass incl 85kg driver) - 40 / 28 hex (792kg + 85 = 877kg)
C0F_THETA_ESM (Yaw moment of inertia) - 7A hex (E87)
C0F_SC_Y_ESM (Sensor cluster distance from front axle) - 28 / 1C hex (1400mm)
C0F_SC_X_ESM (Sensor cluster distance from vehicle center line) - 0 (0mm)
C0F_SPURWEITE (Track width difference) - 2 / 02 hex (40mm)
C0F_LWK_X2 (Steering wheel angle characteristic curve postion X2) - 06 (E87)
C0F_LWK_X3 (Steering wheel angle characteristic curve postion X3) - 3E (E87)
C0F_LWK_X4 (Steering wheel angle characteristic curve postion X4) - 88 (E87)
C0F_LWK_Y1 (Steering wheel angle characteristic curve postion Y1) - B7 (E87)
C0F_LWK_Y2 (Steering wheel angle characteristic curve postion Y2) - A2 (E87)
C0F_LWK_Y3 (Steering wheel angle characteristic curve postion Y3) - 9C (E87)
C0F_LWK_Y4 (Steering wheel angle characteristic curve postion Y4) - 8B (E87)
C0X_C8 (Send CAN message steering wheel angle) - nich_aktiv
I've only run unit the event at one event and on the stock E90 wagon coding so far but found that it was much more obvious that it was working in comparison to the stock Lotus Kelsey Hayes unit in terms of pedal feedback. I also found that it made significant use of the electronic brake bias distribution and made the car more stable on entry trail brake. I personally found I preferred how it felt with the yaw sensor unplugged, but this is likely due to the extreme difference in vehicle modeling. I have a 205/50/15 / 235/40/17 tire stagger on the car as-is and the E1 handled it fine, as well as output that the front tires were calculated to be smaller than the rears.
I have a Continental flashed unit and I have programmed the above parameter changes to my stock unit, I intend to back to back test them in a few weeks. I'll post back when I do. Update: It's absolute fantastic magic with the Conti flash.
Please don't make a this a thread about whether ABS belongs in race cars or whatever.