Source: https://cups.cs.cmu.edu/soups/2011/proceedings/a10_Wang.pdf