http://www.ibm.com/developerworks/rational/library/edge/08/feb08/lines_barnes_holmes_ambler/index.html