better extrapolation, todo: 3D