Source: http://hal.inria.fr/docs/00/88/20/81/PDF/hal-00882081.pdf