Initial Commit (Needs lots of refactoring)

This is initial checkin, needs lots of work to beautify code.