initial commit with all of the implementation