backported to .net 4.0