Finished Draft

Needs lots of refactoring.