http://www.cs.york.ac.uk/plasma/publications/pdf/Plump.CAI.09.pdf