Change a lot of types to fit real world cases