initial checkin, after code refactor