added new type system