moved types to separate files