added abstractions for types