functional read