Ported to C#, VB just didnt cut it for me