fix and refactor
use Type::Registry
update prereqs
fix modifiers
fix and improve test