Source: https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-185.pdf