Added interface, changed typehint, changed visibility and added exceptions for setting not predefined values.