The instant fuel-consumption gauge, known in Germany as KVA, has always been one of those BMW features that looks useful but often tells you very little in everyday driving. On many BMW E60, E61, E90 and E91 models, that gauge can be reprogrammed to display engine oil temperature instead.
For many BMW owners, this is a far more valuable upgrade. Oil temperature gives you a better idea of how hard the engine is working, whether the car is fully warmed up and when it is safe to use higher engine speeds or increased boost pressure.
This guide explains the general coding process using an OBD2 interface and BMW Standard Tools. The procedure is aimed at experienced BMW coders who are already comfortable working with Tool32, EDIABAS and hexadecimal coding data.
Important: This coding procedure is performed at your own risk. A mistake in the instrument-cluster data, a low vehicle voltage or the wrong PRG file can cause communication problems or coding errors. Always connect a suitable battery charger and keep a backup of the original coding data.
What You Need Before Starting
Before connecting the car, make sure the following equipment and software are ready:
- A compatible BMW OBD2 or DCAN interface
- BMW Standard Tools
- EDIABAS, including Tool32
- NCS Expert, if required for your vehicle setup
- A stable battery charger or power supply
- A Windows laptop
- Basic knowledge of hexadecimal values
- Experience reading and writing BMW control-unit data
A commonly used interface is a DCAN diagnostic cable suitable for BMW vehicles from around 2006 onward. Earlier vehicles may require a suitable pin adapter.
The instrument cluster must also support the required oil-temperature function. Not every BMW model or instrument cluster variant will accept the same data structure, so do not copy a coding buffer from another vehicle without checking your own original data first.
Why Oil Temperature Is More Useful Than KVA
The coolant-temperature gauge in many BMW models is heavily damped. It can remain in the middle of the scale across a fairly wide temperature range, which means it may not immediately reveal a thermostat problem or an engine that is running colder than it should.
Oil temperature is more informative when you are:
- Driving a turbocharged diesel BMW
- Using the car for long motorway journeys
- Driving enthusiastically
- Towing or carrying heavy loads
- Checking whether the engine has reached operating temperature
- Monitoring the vehicle after performance modifications
A coolant thermostat can be faulty without making the dashboard gauge look obviously wrong. An oil-temperature display gives you another useful piece of information, although it should not be treated as a replacement for proper mechanical diagnosis.
How the Original Gauge Scale Works
The standard KVA gauge is normally marked in litres per 100 kilometres. When the display is reprogrammed for oil temperature, the physical scale remains unchanged.
The gauge can then be interpreted approximately as follows:
Gauge MarkingOil Temperature0 litres50°C5 litres75°C10 litres100°C15 litres125°C20 litres150°C
The gauge face does not need to be replaced for the conversion to work. You simply read the needle using the new temperature scale.
For a cleaner result, some owners choose to install a modified gauge face later. However, the coding itself can be tested using the original instrument-cluster markings.
Step 1: Read the Original Coding Data
Start Tool32. On a standard installation, the program is usually located at:
C:\Ediabas\Bin\Tool32.exe
Open:
File → Load SGBD, Group File
For many E60 and E61 models, select:
C:\Ediabas\ECU\Kombi60.prg
For many E90 and E91 vehicles, the required file may be:
C:\Ediabas\ECU\Kombi87.prg
The correct PRG file depends on the instrument-cluster version. Confirm the correct control unit before continuing.
In the job list on the left, select:
c_c_lesen
Enter the original buffer as the data argument:
01 01 01 01 00 00 00 00 00 00 00 00 00 18 00 00 00 00 05 31 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03
Enable the Data option and run the job with F5.
Tool32 should return the current coding data. The returned buffer will be 46 bytes long. It may look similar to this:
01 01 01 01 00 00 00 00 00 00 00 00 00 18 00 00 00 00 05 31 00 73 12 0D 00 00 36 00 67 00 98 00 CA 00 00 00 BC 01 78 03 35 05 F1 06 6E 03
Your values may be different. That is normal.
Copy the complete coding buffer into a text editor such as Notepad++. Remove the address numbers at the beginning of each line and the ASCII characters at the end. You should be left with one continuous line of hexadecimal values.
Save this original buffer somewhere safe. It is your backup and allows you to restore the factory KVA display later.
Step 2: Identify the Important Bytes
In the coding buffer, several bytes determine the gauge scale. In the example above, the relevant values are:
00 36 67 98 CA
These values represent the original KVA scale.
The byte:
6E
selects the standard instant fuel-consumption display.
To activate the oil-temperature display, this value must be changed to:
6F
The rest of the buffer should remain unchanged unless you have confirmed that your specific instrument cluster uses a different structure.
Step 3: Convert the Gauge Scale to Oil Temperature
The new scale must be calculated using a correction value. A correction value between 46 and 48 decimal is commonly used, depending on the instrument cluster and how accurately the needle aligns with the markings.
The basic calculation is:
Temperature + correction value = decimal value
The decimal result is then converted into hexadecimal.
Correction Value 46
Oil TemperatureDecimal ResultHex Value50°C966075°C12179100°C14692125°C171AB150°C196C4
Correction Value 47
Oil TemperatureDecimal ResultHex Value50°C976175°C1227A100°C14793125°C172AC150°C197C5
Correction Value 48
Oil TemperatureDecimal ResultHex Value50°C986275°C1237B100°C14894125°C173AD150°C198C6
A correction value of 48 may give better alignment on some clusters, but there is no universal value that works perfectly for every BMW. The correct result must be checked on the vehicle.
Using the example values and a correction value of 46, the modified buffer becomes:
01 01 01 01 00 00 00 00 00 00 00 00 00 18 00 00 00 00 05 31 00 73 12 0D 60 00 79 00 92 00 AB 00 C4 00 00 00 BC 01 78 03 35 05 F1 06 6F 03
Notice the two main changes:
- The scale values have been changed
- 6E has been changed to 6F
Do not alter unrelated bytes from your original vehicle data.
Step 4: Calculate the New Checksum
After changing the coding values, the checksum must be recalculated. Without a correct checksum, the instrument cluster may reject the new data.
In this example, the checksum byte is located after:
05 31 00
The original checksum is shown as:
73
With the modified values, select the Tool32 job:
c_checksumme
Paste the complete 46-byte buffer into the argument field, enable Data and run the job with F5.
Tool32 will return a new output buffer. In the example, the new checksum is:
95
The corrected buffer is therefore:
01 01 01 01 00 00 00 00 00 00 00 00 00 18 00 00 00 00 05 31 00 95 12 0D 60 00 79 00 92 00 AB 00 C4 00 00 00 BC 01 78 03 35 05 F1 06 6F 03
The checksum shown here is only an example. Always calculate the checksum from your own modified buffer.
Step 5: Write the New Data to the Instrument Cluster
In Tool32, select:
c_c_schreiben
Paste the corrected 46-byte buffer into the argument field:
01 01 01 01 00 00 00 00 00 00 00 00 00 18 00 00 00 00 05 31 00 95 12 0D 60 00 79 00 92 00 AB 00 C4 00 00 00 BC 01 78 03 35 05 F1 06 6F 03
Enable Data and run the job with F5.
A successful operation should return a status such as:
OKAY
If Tool32 reports an error, stop and check the following:
- Battery voltage
- Correct PRG file
- Correct data length
- Correct checksum
- OBD connection
- Ignition position
- Vehicle communication settings
Do not repeatedly write random data to the instrument cluster. That is a good way to turn a small coding project into a much larger repair bill.
Step 6: Reset the Instrument Cluster
After writing the new data, the cluster needs to be restarted.
Select:
steuergeraete_reset
Clear the argument field. Do not enable Data.
Run the job with F5.
The instrument cluster should restart and apply the updated coding values. The date and time may be reset during this process.
Step 7: Restore the Date and Time
To set the clock and date from the connected computer, select:
uhrzeit_datum_stellen
Leave the argument field empty. Make sure Data is not enabled, then run the job with F5.
The instrument cluster should receive the current date and time from the PC.
Step 8: Check the Temperature Scale
On instrument clusters using Kombi60.prg, the oil-temperature output can be tested with:
steuern_oeltemp
Select the job and enter a test value, such as:
100
Do not enable Data. Run the job with F5.
The gauge needle should move to approximately the 10-litre marking, which now represents around 100°C.
If the needle does not line up correctly, the correction value may need adjustment. For example, changing the correction value from 46 to 48 changes the hexadecimal scale values and requires a new checksum.
After testing, exit the test mode with:
steuer_oeltemp_aus
The test function is not available on every instrument-cluster version.
BMW Models Reported as Compatible
The following vehicles have been reported as working with this type of conversion:
- BMW E61 525dA LCI, January 2010, M57 engine
- BMW E61 535d with the M57 engine
- BMW E90 330i VFL, April 2006, low instrument cluster
- BMW E90 320i VFL, July 2005, N46 engine
- BMW E90 320i VFL, 2006, low instrument cluster
- BMW E91 325i VFL with the N52B25 engine
Compatibility can vary even between vehicles of the same model year. The instrument-cluster hardware, software version and engine-control-unit configuration all matter.
Important Safety and Coding Advice
Always connect a battery charger before reading or writing control-unit data. Voltage drops during coding can interrupt communication and may leave the module in an unusable state.
Keep the following backups:
- The original 46-byte coding buffer
- A screenshot of the original Tool32 response
- The original checksum
- The modified buffer before checksum calculation
- The final corrected buffer
Never use another vehicle’s complete buffer as a direct replacement. Use your own original buffer and change only the confirmed bytes.
The oil-temperature display is also not a substitute for proper servicing. If the engine warms slowly, runs too cool or shows unusual temperature behaviour, inspect the thermostat, coolant system, oil level and temperature sensors.
A Simpler Alternative: PerfektToolbox
For owners who do not want to edit hexadecimal buffers manually, tools such as PerfektToolbox are designed to make selected BMW instrument-cluster changes easier.
The advantage is convenience. The downside is that third-party tools may not support every vehicle or cluster version, and no coding application can guarantee compatibility with every BMW.
Use any coding tool carefully, connect a charger and save the original configuration before making changes.
For more advanced BMW ECU, DME programming, coding and retrofit work, the referenced BMW Advanced Programming Course focuses on hands-on training for technicians and experienced BMW enthusiasts. The course page describes training in BMW ECU/DME programming, coding and retrofit work.