Mike

Merged all the changes and solutions.
Looks good. All we need now are unit test i think.