diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m
index 8ce621c5708f9a2b75df0b45afb5920ee67795b5..f528917d4766db1abe4807377f1a0328b8003a5e 100644
--- a/matlab/TCV/gdat_tcv.m
+++ b/matlab/TCV/gdat_tcv.m
@@ -2568,7 +2568,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.units = 'W';
       tension = -1e5;
       vloop_smooth=interpos(-63,vloop.t,vloop.data,gdat_data.ohm.t,tension);
-      ip_t = interp1(ip.t,ip.data,gdat_data.ohm.t);
+      ip_t = interpos(21,ip.t,ip.data,gdat_data.ohm.t);
       gdat_data.ohm.data = -vloop_smooth.*ip_t; % TCV has wrong sign for Vloop
       gdat_data.ohm.raw_data = -vloop.data.*ip_t;
       gdat_data.ohm.data_fullpath = 'from vloop*Ip, smoothed vloop in data, unsmoothed in raw_data';
@@ -3108,7 +3108,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       psi_axis=gdat_tcv(shot,params_eff);
       params_eff.data_request='b0';
       b0=gdat_tcv(shot,params_eff);
-      b0tpsi = interp1(b0.t,b0.data,psi_axis.t); %q_rho on same time base as psi_axis
+      b0tpsi = interpos(21,b0.t,b0.data,psi_axis.t); %q_rho on same time base as psi_axis
       if isempty(psi_axis.data) || isempty(psi_axis.dim) || isempty(q_rho.data) || isempty(q_rho.dim)
         if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
         return
@@ -3560,7 +3560,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         % invert index of time and channel (rho)
         gdat_data.data = mpx.(gdat_data.gdat_params.camera(1:3)).signal.data';
         gdat_data.t = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
-        gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t)';
+        gdat_data.dim{1} = interpos(21,mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t)';
         gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
         gdat_data.x = gdat_data.dim{1};
         gdat_data.(gdat_data.gdat_params.camera).data = gdat_data.data;
@@ -3571,14 +3571,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       else
         gdat_data.data = mpx.signal.data';
         gdat_data.t = mpx.signal.dim{1};
-        gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t);
+        gdat_data.dim{1} = interpos(21,mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t);
         gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
         %
         gdat_data.top.data = mpx.top.signal.data';
         gdat_data.top.x = gdat_data.dim{1};
         gdat_data.top.channel = mpx.top.signal.dim{2};
         gdat_data.bottom.data = mpx.bot.signal.data;
-        gdat_data.bottom.x = interp1(mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t);
+        gdat_data.bottom.x = interpos(21,mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t);
         gdat_data.bottom.channel = mpx.bottom.signal.dim{2};
         gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2};
         gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ...
@@ -3849,7 +3849,7 @@ end
 
 if ~isempty(tracefirrat.data) && ~ischar(tracefirrat.data) && any(isfinite(tracefirrat.data)) ...
       && ~isempty(tracefirrat.dim) && ~isempty(tracefirrat.dim{1})
-  firthomratio = interp1(tracefirrat.dim{1},tracefirrat.data,timebase);
+  firthomratio = interpos(21,tracefirrat.dim{1},tracefirrat.data,timebase);
 end
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -4062,7 +4062,7 @@ switch numel(zshifteff)
   case 1
     zshifteff=zshifteff * ones(size(t_th));
   case numel(t_psi)
-    zshifteff=interp1(t_psi,zshifteff,t_th);
+    zshifteff=interpos(21,t_psi,zshifteff,t_th);
   case numel(t_th)
     % ok
   otherwise
diff --git a/matlab/TCV/tcv_requests_mapping.m b/matlab/TCV/tcv_requests_mapping.m
index 824348abb9c6997c13fe4206e93a67bdc80ab41f..7ac36f74ed46c4592e3f2c931c6916b3aa1a3f5f 100644
--- a/matlab/TCV/tcv_requests_mapping.m
+++ b/matlab/TCV/tcv_requests_mapping.m
@@ -280,10 +280,12 @@ switch lower(data_request)
   mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''nel'';' ...
                     'gdat_tmp=gdat_tcv(shot,params_eff);params_eff.data_request=''ip'';' ...
                     'gdat_tmp2=gdat_tcv(shot,params_eff);ij=find(gdat_tmp2.data==0);gdat_tmp2.data(ij)=NaN;' ...
-                    'tmp_data2=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+                    'if numel(gdat_tmp2.t)>1;tmp_data2=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+                    'else;tmp_data2=gdat_tmp2.data;end;' ...
                     'params_eff.data_request=''a_minor'';' ...
                     'gdat_tmp3=gdat_tcv(shot,params_eff);ij=find(gdat_tmp3.data==0);gdat_tmp3.data(ij)=NaN;' ...
-                    'tmp_data3=interp1(gdat_tmp3.t,gdat_tmp3.data,gdat_tmp.t,[],NaN);' ...
+                    'if numel(gdat_tmp3.t)>1;tmp_data3=interp1(gdat_tmp3.t,gdat_tmp3.data,gdat_tmp.t,[],NaN);' ...
+                    'else;tmp_data3=gdat_tmp3.data;end;' ...
                     'gdat_tmp.data = abs(tmp_data2*1e-6./pi./(tmp_data3.^2+1e-5));' ...
                     'ij=find(gdat_tmp.data<0 | gdat_tmp.data>4);gdat_tmp.data(ij)=NaN;gdat_tmp.data = gdat_tmp.data * 1e20;'];
  case {'ngf','greenwald_fraction','f_greenwald','ng_fraction'}
@@ -293,7 +295,8 @@ switch lower(data_request)
   mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''nel'';' ...
                     'gdat_tmp=gdat_tcv(shot,params_eff);params_eff.data_request=''n_greenwald'';' ...
                     'gdat_tmp2=gdat_tcv(shot,params_eff);ij=find(gdat_tmp2.data==0);gdat_tmp2.data(ij)=NaN;' ...
-                    'tmp_data2=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+                    'if numel(gdat_tmp2.t)>1;tmp_data2=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+                    'else;tmp_data2=gdat_tmp2.data;end;' ...
                     'gdat_tmp.data = gdat_tmp.data./(tmp_data2+1e-5);' ...
                     'gdat_tmp.units='''';gdat_tmp.dimunits{1}=''s'';'];
  case {'ec_data', 'aux', 'h_cd', 'nbi_data', 'ic_data', 'lh_data', 'ohm_data', 'bs_data'}
diff --git a/matlab/TCV_IMAS/tcv_get_ids_summary.m b/matlab/TCV_IMAS/tcv_get_ids_summary.m
index e24b4ee20f0e52a73dd2b1751032eda58bc3efc7..5bc8827a0b5156424da1422b1d71fca80eb90783 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_summary.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_summary.m
@@ -99,7 +99,7 @@ for i=1:numel(boundary_fieldnames)
   if ~any(strcmp(boundary_fieldnames{i},special_fields))
     if ~isstruct(ids_summary.boundary.(boundary_fieldnames{i}).value)
       ids_summary.boundary.(boundary_fieldnames{i}).value = boundary.(boundary_fieldnames{i}).data;
-      ids_summary.boundary.(boundary_fieldnames{i}).value = interp1(boundary.(boundary_fieldnames{i}).t, ...
+      ids_summary.boundary.(boundary_fieldnames{i}).value = interpos(21,boundary.(boundary_fieldnames{i}).t, ...
           boundary.(boundary_fieldnames{i}).data,ids_summary.time,'linear',NaN);
       ids_summary.boundary.(boundary_fieldnames{i}).source = ['gdat request: ' boundary_desc.(boundary_fieldnames{i})];
     else
@@ -138,7 +138,7 @@ special_fields = {}; % fields needing non-automatic treatments
 for i=1:numel(gas_injection_rates_fieldnames)
   if ~any(strcmp(gas_injection_rates_fieldnames{i},special_fields))
     if ~isstruct(ids_summary.gas_injection_rates.(gas_injection_rates_fieldnames{i}).value)
-      ids_summary.gas_injection_rates.(gas_injection_rates_fieldnames{i}).value = interp1( ...
+      ids_summary.gas_injection_rates.(gas_injection_rates_fieldnames{i}).value = interpos(21, ...
           gas_injection_rates.(gas_injection_rates_fieldnames{i}).t,gas_injection_rates.(gas_injection_rates_fieldnames{i}).data, ...
           ids_summary.time,'linear',NaN);
       ids_summary.gas_injection_rates.(gas_injection_rates_fieldnames{i}).source = ['gdat request: ' gas_injection_rates_desc.(gas_injection_rates_fieldnames{i})];
@@ -253,7 +253,7 @@ for i=1:numel(global_quantities_fieldnames)
   if ~any(strcmp(global_quantities_fieldnames{i},special_fields))
     if ~isstruct(ids_summary.global_quantities.(global_quantities_fieldnames{i}).value) && ...
         ~isempty(global_quantities.(global_quantities_fieldnames{i}).data)
-      ids_summary.global_quantities.(global_quantities_fieldnames{i}).value = interp1( ...
+      ids_summary.global_quantities.(global_quantities_fieldnames{i}).value = interpos(21, ...
           global_quantities.(global_quantities_fieldnames{i}).t,global_quantities.(global_quantities_fieldnames{i}).data, ...
           ids_summary.time,'linear',NaN);
       ids_summary.global_quantities.(global_quantities_fieldnames{i}).source = ['gdat request: ' global_quantities_desc.(global_quantities_fieldnames{i})];
@@ -278,7 +278,7 @@ volume_average_fieldnames = fieldnames(volume_average);
 for i=1:numel(volume_average_fieldnames)
   if ~any(strcmp(volume_average_fieldnames{i},special_fields))
     if ~isstruct(ids_summary.volume_average.(volume_average_fieldnames{i}).value)
-      ids_summary.volume_average.(volume_average_fieldnames{i}).value = interp1( ...
+      ids_summary.volume_average.(volume_average_fieldnames{i}).value = interpos(21, ...
           volume_average.(volume_average_fieldnames{i}).t,volume_average.(volume_average_fieldnames{i}).data, ...
           ids_summary.time,'linear',NaN);
       ids_summary.volume_average.(volume_average_fieldnames{i}).source = ['gdat request: ' volume_average_desc.(volume_average_fieldnames{i})];