Small simplification
Remove unnecessary loop
Throw error on forbidden call instead of silently doing nothing
Small cleanups
Convert type/widget init to use exceptions
(back compat for returning false is provided)