On all modern vehicles there is a computer that controls the way the engine operates, this computer is called Electronic Control Module, or ECM. The purpose of the ECM is to maintain the engine running within emissions limits and at top efficiency. With the very strict emission regulations of today, this is not an easy task to achieve. Precise and constant adjustments to match various conditions of the engine must be made by the ECM in regards to speed, load, engine temperature and others. How the ECM works: A number of sensors are available that provide the ECM with the information it needs, such inputs are engine and ambient temperature, vehicle speed and load. The ECM makes adjustments by advancing or retarding the ignition timing, adds or subtracts fuel or increases and decreases the idle speed. In the exhaust, before the catalytic converter, an oxygen sensor monitors the quality of the combustion produced in the cylinders. The sensor produces a feedback that is then used by the ECM to make fine adjustments to the fuel-air mixture with the objective to reduce emissions. After the catalytic converter, another sensor in the exhaust monitors it's efficiency Other additional emission control systems exist, such as the Evaporative System, or EVAP. The objective of EVAP is to prevent vapors of gasoline, from the gas tank, from being released into the atmosphere. There are also a number of sensors and actuators that are controlled by the ECM. The operation of sensors and other engine components is constantly tested by the self-diagnostic capability of the ECM. If one of the signals is missing or if it's not in the normal range then the Check Engine light is illuminated and the Diagnostic Trouble Code, DTC, is stored in the memory of the ECM. The Check Engine light will be illuminated also if a mechanical component, such as the EGR valve, fails. With a special scan tool, the stored code can be retrieved by a technician, that will then know only a direction where to look for. The code doesn't tell specific information about the failure, certain tests have to be performed for each code, in order to find the exact cause of the problem.