Add interfaces for clarify why developer needs to declare methods like these
Merge pull request #1150 in master
Merge pull request #1060
Merge pull request #1060 in develop