more type system stuff