see http://blogs.msdn.com/nigel/archive/2005/06/01/424006.aspx