merge 2.0.0 branch (with 3.0 breaking changes)

merging 2.0.0-release branch including 3.0.0 breaking changes, to master