Original code by St├ęphane Ginier.