updated interpolate