Ported to .NET 2.0