http://hackingon.net/post/NET-Minimizing-the-cost-of-change.aspx