we are not guaranteed that data is non-empty at this point.