diff --git a/TCV/loadTCVdata.m b/TCV/loadTCVdata.m
index 75915aa84f9bc542f5df29af1d31d7fc676c93c6..2121424849a62b0bb7a1d53136cf3e828d028997 100644
--- a/TCV/loadTCVdata.m
+++ b/TCV/loadTCVdata.m
@@ -30,112 +30,151 @@
 %         [zmag,error]=loadTCVdata(shot,'zmag');
 %
 
-TCVsigkeywrd=[{'Ip'} ; {'zmag'} ; {'rmag'}];
-TCVsigtimeindx=['1'   ;    '1'   ;   '1'];
+varargout=cell(1,1);
+
+% all keywords and corresponding case to run below
+TCVkeywrdall=[{'Ip'} {'zmag'} {'rmag'} {'sxr'} {'sxR'} {'ece'}];
 TCVsig.iip=1;
 TCVsig.izmag=2;
 TCVsig.irmag=3;
-TCVsiglocation=[{'\results::i_p'} ; {'\results::z_axis'} ; {'\results::r_axis'}];
- % setting location of the required data
-index_sig=strmatch(data_type,TCVsigkeywrd);
-if ~isempty(index_sig);
-  location={TCVsiglocation{index_sig} TCVsigtimeindx(index_sig)}; 
-elseif strcmp(data_type(1:1),'\')
-  index_sig=strmatch(data_type,TCVsiglocation);
-  if ~isempty(index_sig)
-   fprintf(['Note: you can also get this data simply with gdat(shot,' ...
-   char(TCVsigkeywrd(index_sig)) ') instead of the full node name' ' ' data_type]);
-    location={data_type ; '1'};
-  else
-%    eval(['!mailto_Andrea ''from loadTCVdata, data_type= ' data_type ''''])
-  end  
+TCVsig.isxr=4;
+TCVsig.isxR=5;
+TCVsig.iece=6;
+% For each keyword, specify which case to use. As most common is 'simpletdi', fill in with this and change
+% only indices needed. Usually use name of case same as keyword name
+TCVkeywrdcase=cell(size(TCVkeywrdall));
+TCVkeywrdcase(:)={'simpletdi'};
+TCVkeywrdcase(TCVsig.isxr)=TCVkeywrdall(TCVsig.isxr);
+TCVkeywrdcase(TCVsig.isxR)=TCVkeywrdall(TCVsig.isxR);
+TCVkeywrdcase(TCVsig.iece)=TCVkeywrdall(TCVsig.iece);
+
+% For the 'simpletdi' cases, we need the full node in case gdat was called with full location directly
+% for the other cases, leave this location empty
+TCVsiglocation=cell(size(TCVkeywrdall));
+TCVsiglocation(:)={''};
+TCVsiglocation(TCVsig.iip)={'\results::i_p'};
+TCVsiglocation(TCVsig.izmag)={'\results::z_axis'};
+TCVsiglocation(TCVsig.irmag)={'\results::r_axis'};
+
+% Information about which dimension has time, always return 2D data as (x,t) array
+% as most are 1D arrays with time as first index, fill in with ones and change only those needed
+TCVsigtimeindx=ones(size(TCVkeywrdall));
+
+% find index of signal called upon
+if strcmp(data_type(1:1),'\')
+  % in case full node name was given
+  index=strmatch(data_type,TCVsiglocation,'exact');
+  if ~strcmp(TCVkeywrdcase{index},'simpletdi')
+    msgbox(['Problem in loadTCVdata with data_type = ' data_type ...
+          '. Full paths of nodes should only be for case simpletdi'],'in loadTCVdata','error')
+    error('in loadTCVdata')
+  end
 else
-  disp(['this data_type' ' ' data_type ' ' 'not yet programmed in loadTCVdata, ask Andrea.Scarabosio@epfl.ch']);
+  index=strmatch(data_type,TCVkeywrdall,'exact');
 end
 disp(['loading' ' ' data_type ' from TCV shot #' num2str(shot)]); 
+disp(['case ' TCVkeywrdcase{index}])
+switch TCVkeywrdcase{index}
 
+  case 'simpletdi'
 
-% LOAD DATA
-if (strcmp(data_type,'sxr') | strcmp(data_type,'sxR'))
-%  load TCV soft x-ray data  
- % camera selection: 1-10. each camera has 20 channels
-  icamera=[0 1 0 0 0 0 0 0 0 0];  %index of the camera to use
-  status=varargin{1};
-  if ~isempty(find(status(1:20*icamera*ones(10,1)) == 1))
-    [fans,vangle,xchord,ychord,aomega,angfact]=xtomo_geometry(1,icamera);
-% calculating intersection of the view lines with magnetic axis 
-    if strcmp(data_type,'sxR')
-      zmag=varargin{3};
-      varargout={VsxrTCVradius(zmag.data,xchord,ychord)};
-      t_1=zmag.t(1);
-      t_2=zmag.t(end);
-    else
-      t_1=0.001;
-      t_2=3;
-      varargout={};
-    end
-    [xtomo_signal,t]=get_xtomo_data(shot,t_1,t_2,13e-6*16, ...
-    icamera,angfact);
-  end  
-  for i=1:(20*icamera*ones(10,1))
-    trace.t(:,i)=t';
-  end  
-  trace.data=xtomo_signal';          
-  error=0;
-%  load TCV ECE data
-elseif (strcmp(data_type,'ece'))
-  status=varargin{2};
-% Status=1 => Not Read Yet  
-  if ~isempty(find(status == 1))
-    [TE_ECE,TE_ECE_ERR,RHO,R,T,TE_THOM,TE_THOM_ERR,Fcentral,CAL]=ece_te ...
-    (shot,[0.1 0.29],10,10);
-  end  
-  a=min(find(R(:,1)>=0));
-  b=max(find(R(:,1)>=0));
-  for i=1:size(TE_ECE,2)
-    trace.t(:,i)=T(a:b);
-  end  
-  trace.data=TE_ECE(a:b,:);
-  radius.t=trace.t; 
-  radius.data=R(a:b,:);
-  varargout={radius};
-  error=0;
-%  load TCV MPX data
-elseif (strcmp(data_type,'MPX'))
-  status=varargin{1};
-% Status=1 => Not Read Yet 
-  zmag=varargin{3};
-  t_1=zmag.t(1);
-  t_2=zmag.t(end);
-  if ~isempty(find(status == 1))
+    %  load TCV other data 
     mdsopen(shot);
-    signal=get_mds_mio('MPX',[t_1 t_2]); 
+    tracetdi=tdi(TCVsiglocation{index});
     mdsclose(shot)
-    trace.data=signal.data;
-    for i=1:size(signal.dim{2},2)
-      trace.t(:,i)=signal.dim{1};
+    trace.data=tracetdi.data;
+    trace.t=tracetdi.dim{TCVsigtimeindx(index)};
+    if (length(tracetdi.dim)>1)
+      ix=2;
+      if TCVsigtimeindx(index)==2; ix=1; end;
+      trace.x=tracetdi.dim{ix};
+      % make sure data is of (x,t)
+      if ix==2
+        % transpose data
+        if length(size(trace.data))==2
+          trace.data=trace.data';
+        else
+          msgbox(['data more than 2D (data_type=' data_type ...
+                '), check how to save it, contact andrea.scarabosio@epfl.ch or olivier.sauter@epfl.ch'],...
+              'in simpletdi','warning')
+          warning('in simpletdi of loadTCVdata')
+        end
+      end
+    else
+      trace.x=[]; 
+    end 
+    error=0;
+   
+  case {'sxr','sxR'}
+    %  load TCV soft x-ray data  
+    % camera selection: 1-10. each camera has 20 channels
+    icamera=[0 1 0 0 0 0 0 0 0 0];  %index of the camera to use
+    status=varargin{1};
+    if ~isempty(find(status(1:20*icamera*ones(10,1)) == 1))
+      [fans,vangle,xchord,ychord,aomega,angfact]=xtomo_geometry(1,icamera);
+      % calculating intersection of the view lines with magnetic axis 
+      if strcmp(data_type,'sxR')
+        zmag=varargin{3};
+        varargout={VsxrTCVradius(zmag.data,xchord,ychord)};
+        t_1=zmag.t(1);
+        t_2=zmag.t(end);
+      else
+        t_1=0.001;
+        t_2=3;
+      end
+      [xtomo_signal,t]=get_xtomo_data(shot,t_1,t_2,13e-6*16, ...
+          icamera,angfact);
     end  
-  end  
-  [xchord,ychord]=mpx_geometry;
-  varargout={VsxrTCVradius(zmag.data,xchord,ychord)};
-  
-  
-  error=0;  
-else 
-%  load TCV other data 
-  varargout={[]};
-  mdsopen(shot);
-  tracetdi=tdi(location{1});
-  mdsclose(shot)
-  trace.data=tracetdi.data;
-  time_pos=str2num(location{2});
-  trace.t=tracetdi.dim{time_pos};
-  if (length(tracetdi.dim)>1)
-    ii=2;
-    if time_pos==2; ii=1; end;
-    trace.x=tracetdi.dim{ii};
-  else
-    trace.x=[]; 
-  end 
-  error=0;
+    for i=1:(20*icamera*ones(10,1))
+      trace.t(:,i)=t';
+    end  
+    trace.data=xtomo_signal';          
+    error=0;
+
+  case 'ece'
+    %  load TCV ECE data
+    status=varargin{2};
+    % Status=1 => Not Read Yet  
+    if ~isempty(find(status == 1))
+      [TE_ECE,TE_ECE_ERR,RHO,R,T,TE_THOM,TE_THOM_ERR,Fcentral,CAL]=ece_te ...
+          (shot,[0.1 0.29],10,10);
+    end  
+    a=min(find(R(:,1)>=0));
+    b=max(find(R(:,1)>=0));
+    for i=1:size(TE_ECE,2)
+      trace.t(:,i)=T(a:b);
+    end  
+    trace.data=TE_ECE(a:b,:);
+    radius.t=trace.t; 
+    radius.data=R(a:b,:);
+    varargout={radius};
+    error=0;
+ 
+  case 'MPX'
+    %  load TCV MPX data
+    status=varargin{1};
+    % Status=1 => Not Read Yet 
+    zmag=varargin{3};
+    t_1=zmag.t(1);
+    t_2=zmag.t(end);
+    if ~isempty(find(status == 1))
+      mdsopen(shot);
+      signal=get_mds_mio('MPX',[t_1 t_2]); 
+      mdsclose(shot)
+      trace.data=signal.data;
+      for i=1:size(signal.dim{2},2)
+        trace.t(:,i)=signal.dim{1};
+      end  
+    end  
+    [xchord,ychord]=mpx_geometry;
+    varargout={VsxrTCVradius(zmag.data,xchord,ychord)};
+    error=0;  
+    
+  otherwise
+    % eval(['!mailto_Andrea ''from loadTCVdata, data_type= ' data_type ''''])
+    disp(['this data_type' ' ' data_type ' ' 'not yet programmed in loadTCVdata, ask Andrea.Scarabosio@epfl.ch']);
+
 end
+
+
+