added lazy and optional types