The spark advance and fuelling of engines have generally been controlled by fixed open-loop schedules as functions of engine speed and load. Many engines have inferior fuel economy and emissions because of engine/controller mismatch and variations in parameters such as compression ratio. These errors manifest themselves as changes in the rate of burning. A controller is described that can detect these changes and compensate for them by adapting the schedules of spark advance or air:fuel ratio. A detection scheme utilizes engine speed signals to measure the slope of the torque versus spark advance curve without a torque sensor. Comparative fuel economy and emissions results are shown for a fleet of vehicles using an adaptive spark advance controller based on this method. Finally we show how a related fuelling controller can maintain a desired air:fuel ratio without an expensive sensor.