Source: http://www.cs.cmu.edu/~aldrich/FOOL09/malayeri.pdf