pulled out the fluff from the type system