Author: Michel Join-Lambert.