initial checkin. unit tests coming soon.