updated type system