See http://www.cmu.edu/me/ddl/jmichalek/