diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m
index d254b260610274e2e95fdf735b21ed2ced5ea9a8..e3767928b2bd2b60357658fb8f6abd25359d3f0d 100644
--- a/matlab/TCV/gdat_tcv.m
+++ b/matlab/TCV/gdat_tcv.m
@@ -80,7 +80,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req
 % Prepare some variables, etc
 
 varargout{1}=cell(1,1);
-error_status=1;
+error_status=-1;
 
 % construct main default parameters structure
 % parameters and defaults related to a specific request should be defined in the relevant switch case section
@@ -119,6 +119,7 @@ gdat_data.gdat_params = gdat_params;
 gdat_data.data_fullpath = [];
 gdat_data.help = '';
 gdat_data.status_mds = 2;
+gdat_data.status = error_status;
 
 
 % Treat inputs:
@@ -181,6 +182,7 @@ if nargin>=1
   else
     if gdat_params.nverbose>=1; warning('type of 1st argument unexpected, should be numeric or char'); end
     error_status=2;
+    gdat_data.status = error_status;
     return
   end
   if nargin==1
@@ -198,6 +200,7 @@ if nargin>=2 && ivarargin_first_char~=1
     if ~isfield(data_request,'data_request')
       if gdat_params.nverbose>=1; warning('expects field data_request in input parameters structure'); end
       error_status=3;
+      gdat_data.status = error_status;
       return
     end
     data_request_eff = data_request.data_request;
@@ -250,12 +253,14 @@ if (nargin>=ivarargin_first_char)
       else
         if gdat_params.nverbose>=1; warning(['input argument nb: ' num2str(i) ' is incorrect, expects a character string']); end
         error_status=401;
+        gdat_data.status = error_status;
         return
       end
     end
   else
     if gdat_params.nverbose>=1; warning('number of input arguments incorrect, cannot make pairs of parameters'); end
     error_status=402;
+    gdat_data.status = error_status;
     return
   end
 end
@@ -285,6 +290,7 @@ end
 if ~isfield(gdat_params,'data_request') || isempty(gdat_params.data_request)
   % warning('input for ''data_request'' missing from input arguments') % might be correct, asking for list of requests
   error_status=5;
+  gdat_data.status = error_status;
   return
 end
 gdat_data.gdat_params = gdat_params; % This means that before here it is gdat_params which should be updated
@@ -293,6 +299,7 @@ gdat_data.gdat_params = gdat_params; % This means that before here it is gdat_pa
 shot = gdat_data.shot;
 data_request_eff = gdat_data.gdat_params.data_request;
 error_status = 6; % at least reached this level
+gdat_data.status = error_status;
 
 mapping_for_tcv = tcv_requests_mapping(data_request_eff,shot);
 gdat_data.label = mapping_for_tcv.label;
@@ -442,6 +449,7 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi')
     else
       % empty or wrong expression
       error_status=701;
+      gdat_data.status = error_status;
       return
     end
   else
@@ -512,9 +520,13 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi')
   end
   gdat_data.help = aatmp.help;
   gdat_data.status_mds = aatmp.status;
+  error_status = 0;
+  gdat_data.status = error_status;
   if mod(gdat_data.status_mds,2) == 0
     if (gdat_params.nverbose>=1); warning(['problems loading data for ' eval_expr ' for data_request= ' data_request_eff]); end
     if (gdat_params.nverbose>=3); disp('check .gdat_request list'); end
+    error_status = 7;
+    gdat_data.status = error_status;
     return
   end
   gdat_data.data = aatmp.data;
@@ -614,6 +626,7 @@ elseif strcmp(mapping_for_tcv.method,'expression')
   if isempty(gdat_tmp) || (~isstruct(gdat_tmp) & ~isobject(gdat_tmp))
     if (gdat_params.nverbose>=1); warning(['expression does not create a gdat_tmp structure: ' mapping_for_tcv.expression]); end
     error_status=801;
+    gdat_data.status = error_status;
     return
   end
   tmp_fieldnames = setdiff(fieldnames(gdat_tmp),{'gdat_request','label'}); % could/should also remove label in any case
@@ -678,9 +691,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       rmaxpsi=tdi(nodenameeff);
       gdat_data.help = rmaxpsi.help;
       gdat_data.status_mds = rmaxpsi.status;
+      error_status = 0;
+      gdat_data.status = error_status;
       if mod(gdat_data.status_mds,2) == 0
         if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
         if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+        error_status = 90;
+        gdat_data.status = error_status;
         return
       end
       nodenameeff2=['tcv_eq("r_min_psi","' psitbx_str '")'];
@@ -690,6 +707,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       if mod(gdat_data.status_mds,2) == 0
         if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff2 ' for data_request= ' data_request_eff]); end
         if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+        error_status = 91;
+        gdat_data.status = error_status;
         return
       end
       ij=find(rmaxpsi.data<0.5 | rmaxpsi.data>1.2); % points outside TCV vessel
@@ -710,6 +729,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         gdat_data.data_fullpath=[nodenameeff ' + ' nodenameeff2 ' /2'];
       else
         if (gdat_params.nverbose>=1); warning(['should not be in this case with data_request_eff = ' data_request_eff]); end
+        error_status = 92;
+        gdat_data.status = error_status;
         return
       end
       if strcmp(data_request_eff(end-3:end),'_rho')
@@ -748,8 +769,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       aatmp = tdi(nodenameeff);
       gdat_data.help = aatmp.help;
       gdat_data.status_mds = aatmp.status;
+      error_status = 0;
+      gdat_data.status = error_status;
+      if mod(gdat_data.status_mds,2) == 0
+        error_status = 101;
+        gdat_data.status = error_status;
+      end
       if strcmp(data_request_eff(end-3:end),'_rho')
         aatmp2 = tdi(nodenameeff2);
+        if mod(aatmp2.status_mds,2) == 0
+          error_status = 102;
+          gdat_data.status = error_status;
+        end
         if strcmp(data_request_eff,'a_minor_rho')
           gdat_data.data = 0.5.*(aatmp.data-aatmp2.data);
         elseif strcmp(data_request_eff,'rgeom_rho')
@@ -791,9 +822,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     zcontour=tdi(nodenameeff);
     gdat_data.help = zcontour.help;
     gdat_data.status_mds = zcontour.status;
+    error_status = 0;
+    gdat_data.status = error_status;
     if mod(gdat_data.status_mds,2) == 0
       if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
       if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+      error_status = 111;
+      gdat_data.status = error_status;
       return
     end
     if strcmp(data_request_eff,'zgeom')
@@ -803,6 +838,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.dimunits{1} = zcontour.dimunits{2};
     else
       if (gdat_params.nverbose>=1); warning(['should not be in this case with data_request_eff = ' data_request_eff]); end
+      error_status = 112;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
@@ -853,8 +890,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     end
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    error_status = 0;
+    gdat_data.status = error_status;
     if mod(gdat_data.status_mds,2) == 0
       if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
+      error_status =121;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.data_fullpath=[added_correction_str nodenameeff];
@@ -952,6 +993,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
        gdat_data.t = time_in;
        gdat_data.x = x_in;
        gdat_data.label = 'Total magnetic field map in (R,Z)';
+       gdat_data.status_mds = 1;
+       error_status = 0;
+       gdat_data.status = error_status;
 
      catch
 
@@ -960,6 +1004,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
        gdat_data.Br   = [];
        gdat_data.Bz   = [];
        gdat_data.Btot = [];
+       error_status = 151;
+       gdat_data.status = error_status;
 
      end
 
@@ -980,13 +1026,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % use beta as time base
     if isempty(b0.data) || isempty(b0.dim) || isempty(ip.data) || isempty(ip.dim) || isempty(a_minor.data) || isempty(a_minor.dim) || isempty(beta.data) || isempty(beta.dim)
       if (gdat_params.nverbose>=1); warning(['problems loading data for data_request= ' data_request_eff]); end
+      gdat_data.status_mds = 2;
+      error_status = 161;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.dim = beta.dim;
     gdat_data.t = beta.dim{1};
     gdat_data.data = beta.data;
     gdat_data.help = beta.help;
-    gdat_data.status_mds = beta.status_mds;
+    gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       % should already have all data at times time_out since called gdat_tcv above
     end
@@ -998,6 +1049,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       ip_t = ip.data(ij);
     else
       warning('no valid data for ip, cannot fit')
+      error_status = 162;
+      gdat_data.status = error_status;
       return
     end
     ij=find(isfinite(b0.data));
@@ -1007,6 +1060,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       b0_t = b0.data(ij);
     else
       warning('no valid data for b0, cannot fit')
+      error_status = 163;
+      gdat_data.status = error_status;
       return
     end
     ij=find(isfinite(a_minor.data));
@@ -1016,6 +1071,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       a_minor_t = a_minor.data(ij);
     else
       warning('no valid data for a_minor, cannot fit')
+      error_status = 164;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.data = 100.*beta.data ./ abs(ip_t).*1.e6 .* abs(b0_t) .* a_minor_t;
@@ -1098,6 +1155,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.cxrs_params = cxrs_profiles.param;
     if isempty(cxrs_profiles.Times) || ~isfield(cxrs_profiles,'proffit')
       gdat_data.status_mds = 2;
+      error_status = 171;
+      gdat_data.status = error_status;
       gdat_data.help = ['problems loading data with CXRS_get_profiles for data_request= ' data_request_eff];
       if (gdat_params.nverbose>=1); warning(gdat_data.help); end
       for i=1:length(sub_nodes)
@@ -1172,6 +1231,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.dimunits{2} = 's';
     gdat_data.help = '';
     gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
     % add grids_1d to have rhotor, etc if cxrs_rho was asked for
     if strcmp(data_request_eff,'cxrs_rho')
       gdat_data = get_grids_1d(gdat_data,2,1,gdat_params.nverbose);
@@ -1213,6 +1274,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'eqdsk'}
     %
+    gdat_data.help = '';
+    gdat_data.status_mds = 2;
+    error_status = 181;
+    gdat_data.status = error_status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time)
         disp('time_out parameter not used for eqdsk, uses time')
@@ -1222,8 +1287,6 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         return;
       end
     end
-    gdat_data.help = '';
-    gdat_data.status_mds = 2;
     time=1.; % default time
     if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time)
       time = gdat_data.gdat_params.time;
@@ -1290,6 +1353,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if gdat_params.nverbose>=1;
           warning(['could not create eqdsk file from read_results_for_chease with data_request= ' data_request_eff]);
         end
+        error_status = 182;
+        gdat_data.status = error_status;
         return
       end
       ii = regexpi(fnames_readresults{4},'eqdsksigns');
@@ -1297,6 +1362,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         eqdskval=read_eqdsk(fnames_readresults{4},cocos_read_results_for_chease,0,[],[],1); % read_results now has relevant cocos LIUQE= 17
       else
         disp('wrong name check order of eqdsk outputs')
+        error_status = 183;
+        gdat_data.status = error_status;
         return
       end
       for i=1:length(fnames_readresults)
@@ -1382,6 +1449,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.request_description = ['data=psi, x=(R,Z), eqdsk contains eqdsk structure with which ' ...
                     'plot_eqdsk, write_eqdsk, read_eqdsk can be used'];
     gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'gas', 'gas_flux', 'gas_request', 'gas_feedforward','gas_valve', 'gas_fluxes'}
@@ -1395,6 +1464,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.gas_flux = gasflux;
     gdat_data.help = gasflux.help;
     gdat_data.status_mds = gasflux.status_mds;
+    error_status = 0; % since many options below, mark error if problem below
+    gdat_data.status = error_status;
     params_eff.data_request = '\hybrid::mat_m_signals:output_019';
     gasrequest = gdat_tcv(gdat_data.shot,params_eff);
     gdat_data.gas_request_volt = gasrequest;
@@ -1468,6 +1539,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
      case {'gas_fluxes'}
        gdat_data.help = 'cell array';
        gdat_data.status_mds = 2;
+       error_status = 191;
+       gdat_data.status = error_status;
        try
          if shot > 82186
            for i=1:20
@@ -1502,7 +1575,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
        catch
        end
      otherwise
-      error('gas option not defined')
+       gdat_data.status_mds = 2;
+       error_status = 192;
+       gdat_data.status = error_status;
+       error('gas option not defined')
     end
     if ~strcmp(data_request_eff,'gas_valve')
       gdat_data.dim{1} = gdat_data.t;
@@ -1513,7 +1589,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
-    gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'halphas'}
@@ -1540,6 +1617,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         disp(halphas.help);
       end
     end
+    if mod(gdat_data.status_mds,2) == 0
+      error_status = 211;
+    else
+      error_status = 0;
+    end
+    gdat_data.status = error_status;
     gdat_data.label = ['\base::pd:pd_' num2str(min(channels),'%.3d') ' to ' num2str(max(channels),'%.3d')];
     gdat_data.x = channels;
     gdat_data.dim{1} = gdat_data.x;
@@ -1560,6 +1643,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     params_eff = gdat_data.gdat_params;
     gdat_data.help = '';
     gdat_data.status_mds = 2;
+    error_status = 221;
+    gdat_data.status = error_status;
     if isfield(params_eff,'source') && ~isempty(params_eff.source)
       ids_top_name = params_eff.source;
     else
@@ -1650,6 +1735,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       rethrow(ME_tcv_get_ids)
     end
     gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ec_data', 'aux', 'h_cd', 'nbi_data', 'ic_data', 'lh_data','ohm_data', 'bs_data'}
@@ -1672,6 +1759,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     end
     gdat_data.help = '';
     gdat_data.status_mds = 2;
+    error_status = 1;
+    gdat_data.status = error_status;
     % specific parameters check and default settings
     if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source)
       switch data_request_eff
@@ -1691,12 +1780,16 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           if (gdat_params.nverbose>=1)
             warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]);
           end
+          error_status = 231;
+          gdat_data.status = error_status;
           return
         else
           gdat_data.gdat_params.source = {gdat_data.gdat_params.source};
         end
       else
         if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end
+        error_status = 232;
+        gdat_data.status = error_status;
         return
       end
     else
@@ -1946,11 +2039,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if isempty(ec_data.cd_tot.data) || isempty(ec_data.cd_tot.t) || ischar(ec_data.cd_tot.data)
           if (gdat_params.nverbose>=1)
             gdat_data.status_mds = 2;
+            error_status = 233;
+            gdat_data.status = error_status;
             warning(['problems loading data for ' source_icd.ec ...
                       ' for data_request= ' data_request_eff]);
           end
         else
           gdat_data.status_mds = 1;
+          error_status = 0;
+          gdat_data.status = error_status;
           % now default is icdtot, will depend on request and data_out param of some kind
           data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), all results in .ec_data, subfield=' field_for_main_data ...
                            'in ec.data, .x, .t, .dim, .dimunits, .label, .units'];
@@ -1999,6 +2096,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         ec_data.cd_dens_doublewidth_label = [];
         ec_data.rho_tor_norm = [];
         gdat_data.ec.ec_data = ec_data;
+        error_status = 234;
+        gdat_data.status = error_status;
         return
       end
 
@@ -2179,6 +2278,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
+    error_status = 0;
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'mhd'}
@@ -2194,6 +2295,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % load n=1, 2 and 3 Bdot from magnetic measurements
     n3.data = [];
     mhd_source_list = {'0', '0full', '23', '23full', '-23', 'ltcc', 'ltcc-dbpol', 'ltcc-dbrad', 'ltcc-dbtor'};
+    gdat_data.status_mds = 2;
+    error_status = 1;
+    gdat_data.status = error_status;
     if shot< 50926
       n1=tdi('abs(mhdmode("LFS",1,1))');
       n2=tdi('abs(mhdmode("LFS",2,1))');
@@ -2207,6 +2311,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           t2=sprintf('''%s'', ',mhd_source_list{1:end-1});
           t3=sprintf('or ''%s''',mhd_source_list{end});
           fprintf('%s %s %s\n',t1,t2,t3);
+          error_status = 241;
+          gdat_data.status = error_status;
           return
         end
       else
@@ -2304,6 +2410,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         n3.data = [];
       else
         disp('should not be here in ''mhd'', ask O. Sauter')
+        error_status = 242;
+        gdat_data.status = error_status;
         return
       end
     end
@@ -2329,6 +2437,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.help = n1.help;
       gdat_data.status_mds = n1.status;
     end
+    if mod(gdat_data.status_mds,2) == 0
+      error_status = 243;
+    else
+      error_status = 0;
+    end
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ne','te'}
@@ -2338,6 +2452,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.gdat_params.systems = {'all'};
     end
     [gdat_data] = get_thomson_raw_data(shot,data_request_eff,gdat_data,gdat_data.gdat_params.systems,gdat_params.nverbose,0);
+    if mod(gdat_data.status_mds,2) == 0
+      error_status = 1;
+    else
+      error_status = 0;
+    end
+    gdat_data.status = error_status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       [gdat_data] = gdat2time_out(gdat_data,1,{'error_bar'});
     elseif ~isfield(gdat_data.gdat_params,'time_out')
@@ -2376,6 +2496,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       ab_r = gdat_tcv(gdat_data.shot,'\diagz::fir_array:radii');
       gdat_data.r_center_chord = ab_r.data(ab_index.data+1);
     end
+    if mod(gdat_data.status_mds,2) == 0
+      error_status = 1;
+    else
+      error_status = 0;
+    end
+    gdat_data.status = error_status;
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ne_rho', 'te_rho', 'nete_rho'}
     % if nete_rho, do first ne, then Te later (so fir stuff already done)
@@ -2519,6 +2646,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           disp('should not be in switch gdat_data.gdat_params.fit_type')
           disp('ask olivier.sauter@epfl.ch')
         end
+        error_status = 251;
+        gdat_data.status = error_status;
         return
       end
       if strcmp(gdat_data.gdat_params.fit_type,'conf')
@@ -2558,6 +2687,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           else
             gdat_data.fit.data_fullpath = [nodenameeff ' is empty'];
           end
+          error_status = 252;
+          gdat_data.status = error_status;
           return
         end
       else
@@ -2568,6 +2699,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
             disp([nodenameeff ' with trialindx=' num2str(trialindx) ' is empty, thus no fits, check hldsi(shot) and may need to run anaprofs?'])
           end
           gdat_data.fit.data_fullpath = [nodenameeff ' with trialindx=' num2str(trialindx) ' is empty'];
+          error_status = 253;
+          gdat_data.status = error_status;
           return
         end
       end
@@ -2621,6 +2754,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           if ~isempty(tracetdi.data) && size(tracetdi.data,3)>=trialindx+1
             gdat_data.fit.te.data = tracetdi.data(:,:,trialindx+1);
           else
+          error_status = 254;
+          gdat_data.status = error_status;
             return
           end
         end
@@ -2677,6 +2812,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
+    if mod(gdat_data.status_mds,2) == 0
+      error_status = 255;
+    else
+      error_status = 0;
+    end
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'powers'}
@@ -2684,6 +2825,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % At this stage fill just ech, later add nbi
     gdat_data.help = '';
     gdat_data.status_mds = 2;
+    error_status = 1;
+    gdat_data.status = error_status;
     sources_avail = {'ohm','ec','nbi1','nbi2','dnbi','rad'}; % note should allow ech, nbh, ohmic in parameter sources
     % create empty structures for all, so in return one always have same substructres
     for i=1:length(sources_avail)
@@ -2705,12 +2848,16 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           if (gdat_params.nverbose>=1)
             warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]);
           end
+          error_status = 261;
+          gdat_data.status = error_status;
           return
         else
           gdat_data.gdat_params.source = {gdat_data.gdat_params.source};
         end
       else
         if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end
+        error_status = 262;
+        gdat_data.status = error_status;
         return
       end
     else
@@ -2730,6 +2877,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     ptot_ohm = tdi('\results::conf:ptot_ohm');
     gdat_data.ohm.help = ptot_ohm.help;
     gdat_data.ohm.status_mds = ptot_ohm.status;
+    gdat_data.ohm.status = 1 - mod(gdat_data.ohm.status_mds,2);
     if mod(gdat_data.ohm.status_mds,2) == 1
       gdat_data.ohm.data = ptot_ohm.data;
       gdat_data.ohm.t = ptot_ohm.dim{1};
@@ -2774,6 +2922,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       tracetdi=tdi(nodenameeff);
       gdat_data.ec.help = tracetdi.help;
       gdat_data.ec.status_mds = tracetdi.status;
+      gdat_data.ec.status = 1 - mod(gdat_data.ec.status_mds,2);
       if mod(gdat_data.ec.status_mds,2) == 0
         if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
       else
@@ -2802,6 +2951,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       nbh_data_tdi = tdi(nodenameeff);
       gdat_data.nbi1.help = nbh_data_tdi.help;
       gdat_data.nbi1.status_mds = nbh_data_tdi.status;
+      gdat_data.nbi1.status = 1 - mod(gdat_data.nbi1.status_mds,2);
       if mod(gdat_data.nbi1.status_mds,2) == 1
         nbi_neutral_power_tot = nbh_data_tdi.data.*1e6; % in W
         ij = nbi_neutral_power_tot<100;
@@ -2849,6 +2999,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       tracetdi=tdi(nodenameeff);
       gdat_data.rad.help = tracetdi.help;
       gdat_data.rad.status_mds = tracetdi.status;
+      gdat_data.rad.status = 1 - mod(gdat_data.rad.status_mds,2);
       if mod(gdat_data.rad.status_mds,2) == 0
         if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
       else
@@ -2874,6 +3025,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       nb2_data_tdi = tdi(nodenameeff);
       gdat_data.nbi2.help = nb2_data_tdi.help;
       gdat_data.nbi2.status_mds = nb2_data_tdi.status;
+      gdat_data.nbi2.status = 1 - mod(gdat_data.nbi2.status_mds,2);
       if mod(gdat_data.nbi2.status_mds,2) == 1
         nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W
         ij = nbi_neutral_power_tot<100;
@@ -2916,6 +3068,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       nb2_data_tdi = tdi(nodenameeff);
       gdat_data.dnbi.help = nb2_data_tdi.help;
       gdat_data.dnbi.status_mds = nb2_data_tdi.status;
+      gdat_data.dnbi.status = 1 - mod(gdat_data.dnbi.status_mds,2);
       if mod(gdat_data.dnbi.status_mds,2) == 1
         nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W
         ij = nbi_neutral_power_tot<100;
@@ -2963,6 +3116,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.gdat_params.time_out = [];
     end
     gdat_data.status_mds = 1;
+    error_status = 0;
+    gdat_data.status = error_status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'q_rho'}
@@ -2978,6 +3133,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     tracetdi=tdi(nodenameeff);
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
     if liuqe_matlab==1 && liuqe_version_eff==-1
       % may have problems with dim{1} being indices instead of rhopol
       if max(tracetdi.dim{1}) > 2
@@ -2991,6 +3147,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if mod(gdat_data.status_mds,2) == 0
       if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
       if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+      error_status = 271;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.data = tracetdi.data;
@@ -3020,20 +3178,28 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % R*Bphi(rho,t) from F from FFprime
     if liuqe_matlab==0
       fprintf('\n***** not yet implemented for liuqe fortran ******\n');
+      error_status = 281;
+      gdat_data.status = error_status;
       return
     else
       nodenameeff=['tcv_eq("rbtor_rho","' psitbx_str '")'];
     end
     if liuqe_version_eff==-1
       disp('not yet implemented for fbte')
+      error_status = 282;
+      gdat_data.status = error_status;
       return
     end
     tracetdi=tdi(nodenameeff);
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    error_status = 0;
+    gdat_data.status = error_status;
     if mod(gdat_data.status_mds,2) == 0
       if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
       if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+      error_status = 283;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.data = tracetdi.data;
@@ -3058,6 +3224,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
+
    case {'phi_tor', 'phitor', 'toroidal_flux'}
     % Phi(LCFS) = int(Bphi dSphi), can use Eq.(11) of "Tokamak coordinate conventions: COCOS" paper:
     % O. Sauter, S.Yu. Medvedev, Comput. Phys. Commun. 184 (2013) 293???302
@@ -3065,6 +3232,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0
     % need to get q_rho but to avoid loop for rhotor in grids_1d, get q_rho explicitely here
     params_eff = gdat_data.gdat_params;
+    gdat_data.status_mds = 2;
+    error_status = 1;
+    gdat_data.status = error_status;
     if liuqe_matlab==1
       nodenameeff = ['tcv_eq("tor_flux_tot","' psitbx_str '")'];
       phi_tor = tdi(nodenameeff);
@@ -3114,11 +3284,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       % assume same dimensions, check. Note data dims can be different from dim{} when there is a problem with liuqe run
       if numel(phi_tor.data) ~= numel(q_rho.data) || numel(psi_axis.data) ~= numel(phi_tor.dim{2})
         warning(['problems in gdat_tcv with ' data_request_eff ' with unexpected dimensions'])
+        error_status =291;
+        gdat_data.status = error_status;
         return;
       end
       % check time sizes since can happen problems with old liuqe runs
       if size(q_rho.data,2) ~= size(phi_tor.data,2)
         warning(['time sizes between q_rho and phi_tor do not match: ' num2str(size(q_rho.data,2)) ' and ' num2str(size(phi_tor.data,2))]);
+        error_status =292;
+        gdat_data.status = error_status;
         return
       end
       if size(q_rho.data,2) ~= length(psi_axis.data)
@@ -3131,10 +3305,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
                  num2str(length(psi_axis.data))]);
         disp('WARNING: should have been caught, so probably q_rho.dim not the same as data(:,:) dims')
         disp('should run: >> liuqe_default_run_sequence(shot)')
+        error_status =293;
+        gdat_data.status = error_status;
         return
       end
       if size(q_rho.data,1) ~= size(phi_tor.data,1)
         warning(['radial sizes between q_rho and phi_tor do not match: ' num2str(size(q_rho.data,1)) ' and ' num2str(size(phi_tor.data,1))]);
+        error_status = 294;
+        gdat_data.status = error_status;
         return
       end
       for it=1:size(q_rho.data,2)
@@ -3158,6 +3336,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.units = phi_tor.units;
     gdat_data.help = phi_tor.help;
     gdat_data.status_mds = phi_tor.status;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if (length(gdat_data.dim)>=mapping_for_tcv.gdat_timedim); gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; end
     if (length(gdat_data.dim)>0); gdat_data.x = gdat_data.dim{1}; end
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
@@ -3197,6 +3377,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
+
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'pressure', 'pressure_rho', 'p_rho'}
     if liuqe_matlab==0
       nodenameeff = ['tcv_eq("' liuqefortran2liuqematlab('p_rho',1,0) '","' psitbx_str '")'];
@@ -3221,6 +3403,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.request_description = 'pressure';
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       [gdat_data] = gdat2time_out(gdat_data,1);
     elseif ~isfield(gdat_data.gdat_params,'time_out')
@@ -3232,37 +3416,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % psi at edge, 0 by construction in Liuqe, thus not given
     % add surface_psi from surface_flux and d(surface_flux)/dt = vloop
     warning('now psi_edge expression in tcv_requests_mapping, so should not come here')
-    keyboard
-    nodenameeff=['\results::psi_axis' substr_liuqe];
-    if liuqe_version_eff==-1
-      nodenameeff=[begstr 'q_psi' substr_liuqe];
-    end
-    tracetdi=tdi(nodenameeff);
-    if isempty(tracetdi.data) || isempty(tracetdi.dim) || ~any(isfinite(tracetdi.data)) % || ischar(tracetdi.data) (to add?)
-      if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end
-      if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
-      return
-    end
-    gdat_data.data = tracetdi.data.*0;
-    gdat_data.dim = tracetdi.dim;
-    gdat_data.t = gdat_data.dim{1};
-    gdat_data.data_fullpath=[' zero '];
-    gdat_data.dimunits = tracetdi.dimunits;
-    gdat_data.units = tracetdi.units;
-    gdat_data.request_description = '0 since LIUQE construct psi to be zero at LCFS';
-    %
-    params_eff.data_request='\results::surface_flux';
-    surface_psi=gdat_tcv([],params_eff);
-    ij=[isfinite(surface_psi.data)];
-    [aa,vsurf] = interpos(63,surface_psi.t(ij),surface_psi.data(ij),-3);
-    gdat_data.surface_psi = surface_psi.data;
-    gdat_data.vsurf = vsurf;
-    gdat_data.vsurf_description = ['time derivative from surface_psi, obtained from \results::surface_flux'];
-    if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
-      [gdat_data] = gdat2time_out(gdat_data,1);
-    elseif ~isfield(gdat_data.gdat_params,'time_out')
-      gdat_data.gdat_params.time_out = [];
-    end
+    gdat_data.status_mds = 2;
+    gdat_data.status = -1;
+    error_status = gdat_data.status;
+    return
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'r_contour_edge', 'z_contour_edge'}
@@ -3284,6 +3441,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.units = tracetdi.units;
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       [gdat_data] = gdat2time_out(gdat_data,1);
     elseif ~isfield(gdat_data.gdat_params,'time_out')
@@ -3298,6 +3457,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0
     % need to get q_rho but to avoid loop for rhotor in grids_1d, get q_rho explicitely here
     params_eff = gdat_data.gdat_params;
+    gdat_data.status_mds = 2;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if liuqe_matlab==0
       nodenameeff=['tcv_eq("q_psi","' psitbx_str '")'];
       if liuqe_version_eff==-1
@@ -3307,6 +3469,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       if isempty(q_rho.data) || isempty(q_rho.dim) % || ischar(q_rho.data) (to add?)
         if (gdat_params.nverbose>=1); warning(['problems loading data for q_rho for data_request= ' data_request_eff]); end
         if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end
+        error_status = 301;
+        gdat_data.status = error_status;
         return
       end
       rhopol_eff = ones(size(q_rho.dim{1}));
@@ -3319,6 +3483,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       b0tpsi = interpos_nan(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
+        error_status = 302;
+        gdat_data.status = error_status;
         return
       end
       rhoequal = linspace(0,1,length(q_rho.dim{1}));
@@ -3360,6 +3526,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.psi_axis = reshape(psi_axis.data,length(psi_axis.data),1);
       if length(gdat_data.psi_axis) ~= length(gdat_data.t)
         disp('problems of time between qrho and psi_axis?')
+        error_status = 303;
+        gdat_data.status = error_status;
         return
       end
       gdat_data.b0 = b0tpsi;
@@ -3380,6 +3548,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           gdat_data.data(:,it) = dataeff;
         else
           disp(['problem in gdat_tcv rhotor with unknown data_request_eff = ' data_request_eff]);
+          error_status = 304;
+          gdat_data.status = error_status;
           return
         end
       end
@@ -3421,6 +3591,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           gdat_data.data_fullpath=['rhotor=sqrt(Phi/pi/B0) from phi_tor'];
         else
           disp(['data_request_eff = ' data_request_eff ' not defined within rhotor block in gdat_tcv.m']);
+          error_status = 305;
+          gdat_data.status = error_status;
           return
         end
       else
@@ -3428,6 +3600,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         gdat_data.rhotor_edge = [];
       end
     end
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       % nothing to do since above uses gdat call getting reduced time already
     end
@@ -3440,7 +3614,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if liuqe_matlab==0
       nodenameeff=['\results::psitbx:vol'];
       if liuqe_version_eff > 1
-        disp('needs to construct volume');
+        disp('needs liuqe_version_eff > 1 to construct volume');
+        error_status = 311;
+        gdat_data.status = error_status;
         return
       end
     else
@@ -3466,6 +3642,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
     if mod(gdat_data.status_mds,2) == 0
+      error_status = 312;
+      gdat_data.status = error_status;
       return
     end
     gdat_data.units = tracetdi.units;
@@ -3502,10 +3680,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if (gdat_params.nverbose>=1)
           disp(['should not be here in vol cases with data_request = ' data_request_eff]);
         end
+        error_status = 313;
+        gdat_data.status = error_status;
         return
       end
     end
     gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out)
       [gdat_data] = gdat2time_out(gdat_data,1,{'volume_edge'});
     elseif ~isfield(gdat_data.gdat_params,'time_out')
@@ -3548,6 +3730,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     catch
       % to make sure close and disconnect even if error, since connects to scd
     end
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
     mdsclose;
     mdsdisconnect; % because connected to rtc/scd
 
@@ -3571,6 +3755,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       if gdat_data.gdat_params.nverbose>=1
         warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff])
       end
+      error_status = 321;
+      gdat_data.status = error_status;
       return
     end
     % time_out: times at which to provide output data, if 2 values provided, return all values within that time interval
@@ -3743,6 +3929,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           gdat_data.gdat_params.camera{i},numel(gdat_data.(gdat_data.gdat_params.camera{i}).x));
       end
       gdat_data.status_mds = 1;
+      gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+      error_status = gdat_data.status;
 
      case {'mpx', 'dmpx'}
       gdat_data.help = '';
@@ -3757,6 +3945,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if gdat_data.gdat_params.nverbose>=3
           disp(['liuqe_version = ' liuqe_version ' not supported for data_request= ' data_request_eff]);
         end
+        error_status = 331;
+        gdat_data.status = error_status;
         return
       end
       t_int = [0 10]; % starts from 0 otherwise mpxdata gives data from t<0
@@ -3774,6 +3964,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if gdat_data.gdat_params.nverbose>=1
           warning('problem with mpxdata')
         end
+        error_status = 332;
+        gdat_data.status = error_status;
         return
       end
       gdat_data.units = {'au'}; % not known at this stage
@@ -3809,6 +4001,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         gdat_data.x = gdat_data.dim{1};
       end
       gdat_data.status_mds = 1;
+      gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+      error_status = gdat_data.status;
 
      case 'xtomo'
       gdat_data.help = '';
@@ -3849,6 +4043,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         if gdat_data.gdat_params.nverbose>=1
           warning('problem with XTOMOGetData, no data')
         end
+        error_status = 341;
+        gdat_data.status = error_status;
         return
       end
       gdat_data.t = t;
@@ -3869,12 +4065,17 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         gdat_data.dimunits = {'chords where floor(dim{1}/10) gives camera nb and mod(dim{1},10) chord nb'; 's'};
       end
       gdat_data.dim = {gdat_data.x; gdat_data.t};
+      gdat_data.status_mds = 1;
+      gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+      error_status = gdat_data.status;
 
      otherwise
       if gdat_data.gdat_params.nverbose>=1
         warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff])
       end
-      gdat_data.status_mds = 1;
+      gdat_data.status_mds = 2;
+      error_status = 351;
+      gdat_data.status = error_status;
       return
 
     end
@@ -3911,6 +4112,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     gdat_data.data_fullpath = ['.transp structure obtained from cdf2mat(gdat_data.gdat_params.source)'];
     gdat_data.help='Can use transp_gui(gdat_data.transp) to browse and plot';
     gdat_data.status_mds = 1;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ttprime', 'ttprime_rho'}
@@ -3942,6 +4145,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     elseif ~isfield(gdat_data.gdat_params,'time_out')
       gdat_data.gdat_params.time_out = [];
     end
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'profnerho','profterho'}
@@ -4002,16 +4207,20 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     end
     gdat_data.help = tracetdi.help;
     gdat_data.status_mds = tracetdi.status;
+    gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+    error_status = gdat_data.status;
 
    otherwise
     if (gdat_params.nverbose>=1); warning(['switchcase= ' data_request_eff ' not known in gdat_tcv']); end
-    error_status=901;
+    error_status = 901;
+    gdat_data.status = error_status;
     return
   end
 
 else
   if (gdat_params.nverbose>=1); warning(['TCV method=' mapping_for_tcv.method ' not known yet, contact Olivier.Sauter@epfl.ch']); end
   error_status=602;
+  gdat_data.status = error_status;
   return
 end
 
@@ -4021,6 +4230,7 @@ gdat_data.gdat_params.help = tcv_help_parameters(fieldnames(gdat_data.gdat_param
 gdat_data.mapping_for.tcv = mapping_for_tcv;
 gdat_params = gdat_data.gdat_params;
 error_status=0;
+gdat_data.status = error_status;
 
 return
 
@@ -4104,6 +4314,8 @@ try
 catch
   gdat_data.error_bar = [];
   gdat_data.status_mds = 2;
+  error_status = 1001;
+  gdat_data.status = error_status;
   if strcmp(data_request_eff(1:2),'ne')
     tracefirrat_data = [];
     gdat_data.firrat=tracefirrat_data;
@@ -4122,6 +4334,8 @@ if isempty(time) || ischar(time)
     warning('!!!!!!!!!!!!!!!!!!!!!!!!!\results::thomson:times  is empty? Check')
     disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff])
   end
+  error_status = 1002;
+  gdat_data.status = error_status;
   return
 end
 
@@ -4144,6 +4358,8 @@ for is = 1:nsys
     otherwise
       warning('Unrecognised thomson scattering system name: %s',systems{is});
       disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff])
+      error_status = 1003;
+      gdat_data.status = error_status;
       return
   end
 
@@ -4212,6 +4428,8 @@ if strcmp(data_request_eff(1:2),'ne')
     disp('***********************************************************************')
   end
 end
+gdat_data.status = 1 - mod(gdat_data.status_mds,2);
+error_status = gdat_data.status;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 function [psiscatvol,psi_max] = get_thomson_psiscatvol(shot,systems,substr_liuqe,nverbose)
diff --git a/matlab/tests/test_tcv_get_ids.m b/matlab/tests/test_tcv_get_ids.m
index e0f9cac149cde9ff74d0d0ee2e6116a72e2fd54c..a187d5f8ee377294765eef927af42fd8ad94a197 100644
--- a/matlab/tests/test_tcv_get_ids.m
+++ b/matlab/tests/test_tcv_get_ids.m
@@ -13,7 +13,7 @@ classdef (TestTags={'tcv_imas'},SharedTestFixtures={...
   methods(Test)
     function test_get_ids_list(testCase,shot)
       gg = gdat(shot,'ids');
-      testCase.assertTrue(mod(gg.status_mds,2)==0);
+      testCase.assertTrue(gg.status~=0);
 
       testCase.assertTrue(iscell(gg.gdat_params.sources_available));
     end