see cs.cmu.edu/~ecavallo