extra types
Tidying and tighter type definitions
more types