changed from primitives to complex data types to allow null