diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m
index fdeff219e61bc49e51ddfa76a63dfa7227415d71..65c4e01c93d26e85cad9b4494c144ba42849f042 100644
--- a/matlab/TCV/gdat_tcv.m
+++ b/matlab/TCV/gdat_tcv.m
@@ -812,14 +812,36 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.t = beta.dim{1};
     gdat_data.data = beta.data;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
-      [gdat_data] = gdat2time_out(gdat_data,1);
+      % should already have all data at times time_out since called gdat_tcv above
     end
     ij=find(isfinite(ip.data));
-    ip_t = interp1(ip.dim{1}(ij),ip.data(ij),gdat_data.t);
+    % use interpos linear with option 21 to have cst extrapolation
+    if numel(ij) > 1
+      ip_t = interpos(21,ip.dim{1}(ij),ip.data(ij),gdat_data.t);
+    elseif numel(ij) == 1
+      ip_t = ip.data(ij);
+    else
+      warning('no valid data for ip, cannot fit')
+      return
+    end
     ij=find(isfinite(b0.data));
-    b0_t = interp1(b0.dim{1}(ij),b0.data(ij),gdat_data.t);
+    if numel(ij) > 1
+      b0_t = interpos(21,b0.dim{1}(ij),b0.data(ij),gdat_data.t);
+    elseif numel(ij) == 1
+      b0_t = b0.data(ij);
+    else
+      warning('no valid data for b0, cannot fit')
+      return
+    end
     ij=find(isfinite(a_minor.data));
-    a_minor_t = interp1(a_minor.dim{1}(ij),a_minor.data(ij),gdat_data.t);
+    if numel(ij) > 1
+      a_minor_t = interpos(21,a_minor.dim{1}(ij),a_minor.data(ij),gdat_data.t);
+    elseif numel(ij) == 1
+      a_minor_t = a_minor.data(ij);
+    else
+      warning('no valid data for a_minor, cannot fit')
+      return
+    end
     gdat_data.data = 100.*beta.data ./ abs(ip_t).*1.e6 .* abs(b0_t) .* a_minor_t;
     gdat_data.data_fullpath='100*beta/ip*1e6*b0*a_minor, each from gdat_tcv';
     gdat_data.units = '';