Start of rewrite #2. This time trying to utilize more C# features and avoiding over complicating things.