Using freaky async stuff I grabbed off msdn