diff --git a/crpptbx/AUG/aug_requests_mapping.m b/crpptbx/AUG/aug_requests_mapping.m
index 15b98dd61e0063c58bb5c8662cd6c503e6a8b8d0..17dc0dffcc70c9fe6fb99e004ee763b329a881f0 100644
--- a/crpptbx/AUG/aug_requests_mapping.m
+++ b/crpptbx/AUG/aug_requests_mapping.m
@@ -1,14 +1,19 @@
 function mapping = aug_requests_mapping(data_request)
+%
+% Information pre-defined for gdat_aug, you can add cases here to match official cases in gdat_aug, allowing backward compatibility
+%
 
 % Defaults
 mapping = struct(...
     'label', '', ...
     'method', '', ...
     'expression','', ...
-    'timedim', -1, ...     % dim which is the time, to copy in .t, the other dims are in .x (-1 means last dimension)
-    'new_timedim',0, ...  % if need to reshape data and dim orders to have timedim as new_timedim (shifting time to new_timedim)
+    'timedim', -1, ...     % dim which is the time is the database, to copy in .t, the other dims are in .x (-1 means last dimension)
+    'gdat_timedim',[], ...  % if need to reshape data and dim orders to have timedim as gdat_timedim (shifting time to gdat_timedim)
     'min', -inf, ...
     'max', inf);
+% Note that gdat_timedim is set to timedim at end of this function if empty
+% gdat_timedim should have effective index of the time dimension in gdat
 
 if ~exist('data_request') || isempty(data_request)
   return
@@ -18,78 +23,140 @@ end
 mapping.label = data_request;
 
 % for AUG, following choices are set so far:
-% method = 'tdi' and then expression is the string within tdi (usual case when there is a direct link to an existing signal)
-%                with tdi, if expression cell array, call tdi(cell{1},cell{2},...)
-% method = 'function', then expression is the funtion to call which should return the correct structure
+% method = 'signal' then expression contains the shotfile, diagnostic and if needed the experiment
+%                expression is a cell array
+% method = 'expression', then expression is the expression to return gdat_tmp...
 % method = 'switchcase', then there will be a specific case within gdat_aug (usual case when not directly a signal)
 %
 % label is used for plotting
+if iscell(data_request) % || (~ischar(data_request) && length(data_request)>1)
+  mapping.label = data_request;
+  mapping.method = 'signal'; % assume a full tracename is given, so just try with tdi (could check there are some ":", etc...)
+  mapping.expression = data_request;
+  mapping.gdat_timedim = mapping.timedim;
+  return
+end
+
 switch lower(data_request)
+ case 'a_minor'
+  mapping.timedim = 1;
+  mapping.label = 'a\_minor';
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''r_inboard'';' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);gdat_tmp.r_inboard=gdat_tmp.data;' ...
+		    'params_eff.data_request=''r_outboard'';' ...
+		   'gdat_tmp2=gdat_aug(shot,params_eff);gdat_tmp.r_outboard=gdat_tmp2.data;' ...
+		    'gdat_tmp.data = 0.5.*(gdat_tmp2.data-gdat_tmp.data);gdat_tmp.label=''' mapping.label ''';' ...
+		   'gdat_tmp.gdat_request=''' data_request ''';'];
  case 'b0'
+  mapping.timedim = 1;
   mapping.label = 'B_0';
-  mapping.method = 'switchcase';
-  mapping.expression = '';
+  mapping.method = 'signal';
+  mapping.expression = [{'FPC'},{'BTF'}];
+ case 'beta'
+  mapping.timedim = 1;
+  mapping.label = '\beta';
+  mapping.method = 'signal';
+  mapping.expression = [{'TOT'},{'beta'}];
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''betan'';' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);' ...
+		    'params_eff.data_request=''ip'';gdat_tmp2=gdat_aug(shot,params_eff);' ...
+		    'params_eff.data_request=''b0'';gdat_tmp3=gdat_aug(shot,params_eff);' ...
+		    'params_eff.data_request=''a_minor'';gdat_tmp4=gdat_aug(shot,params_eff);' ...
+		    'tmp_data_ip=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+		    'tmp_data_b0=interp1(gdat_tmp3.t,gdat_tmp3.data,gdat_tmp.t,[],NaN);' ...
+		    'tmp_data_a=interp1(gdat_tmp4.t,gdat_tmp4.data,gdat_tmp.t,[],NaN);' ...
+		    'gdat_tmp.data = 0.01.*abs(gdat_tmp.data.*tmp_data_ip./1e6./tmp_data_a./tmp_data_b0);' ...
+		    'gdat_tmp.label=''' mapping.label ''';gdat_tmp.gdat_request=''' data_request ''';'];
  case 'betan'
+  mapping.timedim = 1;
   mapping.label = '\beta_N';
-  mapping.method = 'switchcase';
-  mapping.expression = '';
+  mapping.method = 'signal';
+  mapping.expression = [{'TOT'},{'beta_N'}];
  case 'betap'
+  mapping.timedim = 1;
   mapping.label = '\beta_p';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::beta_pol';
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'betpol'}];
  case 'cxrs'
+  mapping.timedim = 2;
   mapping.label = 'cxrs';
   mapping.method = 'switchcase';
   mapping.expression = '';
  case 'delta'
-  mapping.method = 'tdi';
-  mapping.expression = '\results::delta_edge';
-  mapping.method = 'function';
-  mapping.expression = ['tdi(''\results::q_psi'');'];
+  mapping.timedim = 1;
+  mapping.label = 'delta';
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''delta_bottom''; ' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);params_eff.data_request=''delta_top'';' ...
+		   'gdat_tmp2=gdat_aug(shot,params_eff);gdat_tmp.data = 0.5.*(gdat_tmp.data+gdat_tmp2.data);'];
  case 'delta_top'
   mapping.label = 'delta\_top';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::delta_ed_top';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'delRoben'}];
  case 'delta_bottom'
   mapping.label = 'delta\_bottom';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::delta_ed_bot';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'delRuntn'}];
  case 'ece'
+  mapping.timedim = 2;
   mapping.method = 'switchcase';
   mapping.expression = '';
  case 'eqdsk'
+  mapping.timedim = 2;
+  mapping.method = 'switchcase'; % could use function make_eqdsk directly?
+  mapping.expression = '';
+ case 'equil'
+  mapping.timedim = 3;
   mapping.method = 'switchcase'; % could use function make_eqdsk directly?
   mapping.expression = '';
  case 'halpha'
+  mapping.timedim = 1;
   mapping.label = 'Halpha';
-  mapping.method = 'tdi';
-  mapping.expression = '\base::pd:pd_011';
+  mapping.method = 'signal';
+  mapping.expression = [{'POT'},{'ELMa-Han'}];
  case 'ioh'
+  mapping.timedim = 1;
   mapping.label = 'I ohmic transformer';
-  mapping.method = 'tdi';
-  mapping.expression = [{'\magnetics::ipol[*,$1]'} {'OH_001'}];
+  mapping.method = 'signal';
+  mapping.expression = [{'MBI'},{'IOH'}];
  case 'ip'
+  mapping.timedim = 1;
   mapping.label = 'Plasma current';
-  mapping.method = 'tdi';
-  mapping.expression = '\magnetics::iplasma:trapeze';
+  mapping.method = 'signal';
+  mapping.expression = [{'MAG'},{'Ipa'}];
  case 'kappa'
-  mapping.method = 'tdi';
-  mapping.expression = '\results::kappa_edge';
+  mapping.timedim = 1;
+  mapping.label = '\kappa';
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'k'}];
  case 'mhd'
+  mapping.timedim = 1;
   mapping.label = 'n=1,2, etc';
   mapping.method = 'switchcase';
   mapping.expression = '';
  case 'ne'
+  mapping.timedim = 2;
   mapping.method = 'switchcase';
  case 'neint'
+  mapping.timedim = 1;
   mapping.label = 'line integrated el. density';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::fir:lin_int_dens';
+  mapping.method = 'signal';
+  mapping.expression = [{'DCN'},{'H-1'},{'AUGD'}];
  case 'nel'
+  mapping.timedim = 1;
   mapping.label = 'line-averaged el. density';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::fir:n_average';
- case 'nerho'
+  mapping.expression = [{'FPG'},{'lenH-1'},{'AUGD'}];
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''neint'';' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);params_eff.data_request=[{''FPG''},{''lenH-1''},{''AUGD''}];' ...
+		   'gdat_tmp2=gdat_aug(shot,params_eff);ij=find(gdat_tmp2.data==0);gdat_tmp2.data(ij)=NaN;' ...
+		    'tmp_data=interp1(gdat_tmp2.t,gdat_tmp2.data,gdat_tmp.t,[],NaN);' ...
+		    'gdat_tmp.data = gdat_tmp.data./(tmp_data+1e-5);'];
+ case 'ne_rho'
   mapping.label = 'ne';
   mapping.method = 'switchcase';
  case 'neterho'
@@ -101,69 +168,117 @@ switch lower(data_request)
   mapping.label = 'various powers';
   mapping.method = 'switchcase';
  case 'q0'
-  mapping.method = 'tdi';
-  mapping.expression = '\results::q_zero';
+  mapping.timedim = 1;
+  mapping.label = 'q_0';
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'q0'},{'AUGD'}];
  case 'q95'
-  mapping.method = 'tdi';
-  mapping.expression = '\results::q_95';
- case 'qedge'
-  mapping.method = 'tdi';
-  mapping.expression = '\results::q_edge';
- case 'qrho'
+  mapping.timedim = 1;
+  mapping.label = 'q_{95}';
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'q95'},{'AUGD'}];
+ case 'q_edge'
+  mapping.timedim = 1;
+  mapping.label = 'q_{edge}}';
+  mapping.method = 'expression';
+  mapping.method = 'switchcase';
+  mapping.expression = [{'FPG'},{'q95'},{'AUGD'}];
+  mapping.expression = [];
+ case 'q_rho'
   mapping.label = 'q';
   mapping.method = 'switchcase';
  case 'rgeom'
   mapping.label = 'Rgeom';
-  mapping.method = 'switchcase';
+  mapping.timedim = 1;
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''r_inboard'';' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);gdat_tmp.r_inboard=gdat_tmp.data;' ...
+		    'params_eff.data_request=''r_outboard'';' ...
+		   'gdat_tmp2=gdat_aug(shot,params_eff);gdat_tmp.r_outboard=gdat_tmp2.data;' ...
+		    'gdat_tmp.data = 0.5.*(gdat_tmp2.data+gdat_tmp.data);gdat_tmp.label=''' mapping.label ''';' ...
+		   'gdat_tmp.gdat_request=''' data_request ''';'];
+ case 'r_inboard'
+  mapping.label = 'R\_inboard';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'Rin'},{'AUGD'}];
+ case 'r_outboard'
+  mapping.label = 'R\_outboard';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'Raus'},{'AUGD'}];
  case 'rhovol'
   mapping.label = 'rhovol\_norm';
   mapping.method = 'switchcase'; % from conf if exist otherwise computes it
  case 'rmag'
   mapping.label = 'R\_magaxis';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::r_axis';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'Rmag'},{'AUGD'}];
  case 'sxr'
   mapping.method = 'switchcase';
  case 'te'
   mapping.label = 'Te';
   mapping.method = 'switchcase';
- case 'terho'
+ case 'te_rho'
   mapping.label = 'Te';
   mapping.method = 'switchcase';
  case 'ti'
   mapping.label = 'Ti';
   mapping.method = 'switchcase';
- case 'transp'
-  mapping.label = 'transp output';
-  mapping.method = 'switchcase';
  case 'vloop'
-  mapping.label = '';
-  mapping.method = 'tdi';
-  mapping.expression = '';
- case 'vol'
+  mapping.label = 'Vloop';
+  mapping.timedim = 1;
+  % mapping.method = 'signal';
+  % mapping.expression = [{'MAG'},{'ULid12'},{'AUGD'}];
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''MAG''},{''ULid12''},{''AUGD''}];' ...
+		   'gdat_tmp=gdat_aug(shot,params_eff);ij=find(~isnan(gdat_tmp.data));' ...
+		    'tmp_data=interpos(gdat_tmp.t,gdat_tmp.data,-3e4);' ...
+		    'gdat_tmp.data_smooth = tmp_data;gdat_tmp.gdat_request=''vloop'';gdat_tmp.gdat_params.data_request=gdat_tmp.gdat_request;'];
+ case 'volume'
   mapping.label = 'Volume';
-  mapping.method = 'switchcase';
-  % mapping.expression = '\results::psitbx:vol'; (if exists for liuqe2 and 3 as well)
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'Vol'},{'AUGD'}];
  case 'zeff'
-  mapping.label = 'zeff from Ip-Ibs';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::ibs:z_eff';
+  mapping.label = 'zeff from cxrs';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'ZES'},{'Zeff'},{'AUGD'}];
  case 'zgeom'
   mapping.label = 'Zgeom';
-  mapping.method = 'switchcase';
+  mapping.timedim = 1;
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''FPG''},{''Zoben''},{''AUGD''}];' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);gdat_tmp.z_top=gdat_tmp.data;' ...
+		    'params_eff.data_request=[{''FPG''},{''Zunt''},{''AUGD''}];' ...
+		   'gdat_tmp2=gdat_aug(shot,params_eff);gdat_tmp.z_bottom=gdat_tmp2.data;' ...
+		    'gdat_tmp.data = 0.5.*(gdat_tmp2.data+gdat_tmp.data);gdat_tmp.label=''' mapping.label ''';' ...
+		   'gdat_tmp.gdat_request=''' data_request ''';'];
+
  case 'zmag'
-  mapping.label = 'Zmagaxis';
-  mapping.method = 'tdi';
-  mapping.expression = '\results::z_axis';
-% $$$  case ''
-% $$$   mapping.label = '';
-% $$$   mapping.method = 'tdi';
-% $$$   mapping.expression = '';
+  mapping.label = 'Z\_magaxis';
+  mapping.timedim = 1;
+  mapping.method = 'signal';
+  mapping.expression = [{'FPG'},{'Zmag'},{'AUGD'}];
+  %
+  % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % extra AUG cases (not necessarily in official data_request name list)
+  % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %
+ case 'transp'
+  mapping.label = 'transp output';
+  mapping.method = 'switchcase';
+
+
  otherwise
   mapping.label = data_request;
-  mapping.method = 'tdi'; % assume a full tracename is given, so just try with tdi (could check there are some ":", etc...)
+  mapping.method = 'signal'; % assume a full tracename is given, so just try with tdi (could check there are some ":", etc...)
   mapping.expression = data_request;
   
 end
 
-
+if isempty(mapping.gdat_timedim)
+  mapping.gdat_timedim = mapping.timedim;
+end
diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m
index f070e344b769bc1899c876c9521ebcf19883fdd3..083a28ea4c4fc8e72a890f72f00ec4475bb3433b 100644
--- a/crpptbx/AUG/gdat_aug.m
+++ b/crpptbx/AUG/gdat_aug.m
@@ -32,7 +32,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 % gdat_data.shot: shot number
 % gdat_data.machine: machine providing the data
 % gdat_data.gdat_request: keyword for gdat if relevant
-% gdat_data.data_fullpath: full path to the data node if known and relevant, or expression, or relevant function called if relevant
+% gdat_data.data_fullpath: full path to the data node if known and relevant, or relevant expression called if relevant
 % gdat_data.gdat_params: copy gdat_params for completeness
 % gdat_data.xxx: any other relevant information
 %
@@ -58,6 +58,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 
 varargout{1}=cell(1,1);
 error_status=1;
+nverbose = 1;
 
 % construct default parameters structure
 gdat_params.data_request = '';
@@ -65,9 +66,11 @@ default_machine = 'aug';
 
 gdat_params.machine=default_machine;
 gdat_params.doplot = 0;
+gdat_params.exp_name = 'AUGD';
+gdat_params.equil = 'EQI';
 
 % construct list of keywords from global set of keywords and specific AUG set
-% get data_request names from centralized function
+% get data_request names from centralized table
 data_request_names = get_data_request_names;
 
 % add AUG specific to all:
@@ -115,8 +118,9 @@ do_mdsopen_mdsclose = 1;
 if nargin>=1
   if isempty(shot)
     % means mdsopen(shot) already performed
-    shot = mdsipmex(2,'$SHOT');
-    gdat_data.shot = shot;
+% $$$     shot = mdsipmex(2,'$SHOT');
+% $$$     gdat_data.shot = shot;
+    shot=0;
     do_mdsopen_mdsclose = 0;
   elseif isnumeric(shot)
     gdat_data.shot = shot;
@@ -144,7 +148,7 @@ if nargin>=2 && ivarargin_first_char~=1
       error_status=3;
       return
     end
-    data_request.data_request = lower(data_request.data_request);
+    %data_request.data_request = lower(data_request.data_request);
     data_request_eff = data_request.data_request;
     gdat_params = data_request;
   else
@@ -199,8 +203,14 @@ if (nargin>=ivarargin_first_char)
 end
 data_request_eff = gdat_params.data_request; % in case was defined in pairs
 
-% if it is a request_keyword copy it:
-ij=strmatch(data_request_eff,data_request_names_all,'exact');
+% if it is a request_keyword can obtain description:
+if length(data_request_eff)==1
+  ij=strmatch(data_request_eff,data_request_names_all,'exact');
+else
+  ij=[];
+end
+gdat_data.gdat_request = data_request_eff;
+
 if ~isempty(ij); 
   gdat_data.gdat_request = data_request_names_all{ij};
   if isfield(data_request_names.all.(data_request_names_all{ij}),'description') && ~isempty(data_request_names.all.(data_request_names_all{ij}).description)
@@ -233,103 +243,115 @@ error_status = 6; % at least reached this level
 mapping_for_aug = aug_requests_mapping(data_request_eff);
 gdat_data.label = mapping_for_aug.label;
 
-ishot=NaN;
-if do_mdsopen_mdsclose
-  mdsdefaultserver aug1.epfl.ch; % should be in aug general path, but set-it in the meantime...
-  ishot = mdsopen(shot); % if ishot equal to shot, then mdsclose at the end
-  if ishot~=shot
-    warning(['cannot open shot= ' num2str(shot)])
-    return
-  end
-end
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% 1st treat the simplest method: "tdi"
-if strcmp(mapping_for_aug.method,'tdi')
-  % need to treat liuqe2, model, etc from options....
-  if iscell(mapping_for_aug.expression)
-    if length(mapping_for_aug.expression)>0
-      % series of arguments for tdi given in each cell
-      eval_expr = ['aatmp=tdi(''' mapping_for_aug.expression{1} ''''];
-      for i=2:length(mapping_for_aug.expression)
-        eval_expr = [eval_expr ',''' mapping_for_aug.expression{i} ''''];
-      end
-      eval_expr = [eval_expr ');'];
-      eval(eval_expr);
-    else
-      % empty or wrong expression
-      error_status=701;
-      return
-    end
+% 1st treat the simplest method: "signal"
+if strcmp(mapping_for_aug.method,'signal')
+  exp_location = gdat_data.gdat_params.exp_name;
+  if ~isempty(mapping_for_aug.expression) && iscell(mapping_for_aug.expression) && length(mapping_for_aug.expression)>=3
+    exp_location = mapping_for_aug.expression{3};
+  elseif ~isempty(mapping_for_aug.expression) && length(mapping_for_aug.expression)>=2
+    mapping_for_aug.expression{3} = exp_location;
   else
-    eval_expr = ['aatmp=tdi(''' mapping_for_aug.expression ''');'];
-    eval(eval_expr);
+    error_status = 101;
+    disp(['expects at least 2 cells in expression, mapping_for_aug.expression = ' mapping_for_aug.expression]);
+    return
+  end
+  gdat_data.gdat_params.exp_name = exp_location;
+  [aatmp,error_status]=rdaAUG_eff(shot,mapping_for_aug.expression{1},mapping_for_aug.expression{2},exp_location);
+  if error_status~=0
+    if nverbose>=3; disp(['error after rdaAUG in signal with data_request_eff= ' data_request_eff]); end
+    return
   end
   gdat_data.data = aatmp.data;
-  gdat_data.dim = aatmp.dim;
-  nbdims = length(gdat_data.dim);
-  if mapping_for_aug.timedim==-1; 
-    mapping_for_aug.timedim = nbdims;
-    if (size(gdat_data.data,nbdims)==1 && nbdims>1); mapping_for_aug.timedim = nbdims-1; end
+  gdat_data.t = aatmp.t;
+  if isempty(aatmp.data)
+    return
   end
-  dim_nontim = setdiff([1:nbdims],mapping_for_aug.timedim);
-  if ~isempty(dim_nontim)
-    % since most cases have at most 2d, copy as array if data is 2D and as cell if 3D or more
-    if length(dim_nontim)==1
-      gdat_data.x = gdat_data.dim{dim_nontim(1)};
+  if mapping_for_aug.timedim<=0
+    % need to guess timedim
+    if prod(size(aatmp.data)) == length(aatmp.data)
+      mapping_for_aug.timedim = 1;
+    elseif length(size(aatmp.data))==2
+      % 2 true dimensions
+      if length(aatmp.t) == size(aatmp.data,1)
+	mapping_for_aug.timedim = 1;
+      else
+	mapping_for_aug.timedim = 2;
+      end
     else
-      gdat_data.x = gdat_data.dim(dim_nontim);
+      % more than 2 dimensions, find the one with same length to define timedim
+      mapping_for_aug.timedim = find(size(aatmp.data)==length(aatmp.t));
+      if length(mapping_for_aug.timedim); mapping_for_aug.timedim = mapping_for_aug.timedim(1); end
     end
+    mapping_for_aug.gdat_timedim = mapping_for_aug.timedim
   end
-  gdat_data.t = gdat_data.dim{mapping_for_aug.timedim};
+  if length(size(aatmp.data))==1 | (length(size(aatmp.data))==2 & size(aatmp.data,2)==1)
+    gdat_data.dim=[{aatmp.t}];
+    gdat_data.dimunits={'time [s]'};
+  elseif length(size(aatmp.data))==2
+    gdat_data.dim{mapping_for_aug.timedim} = gdat_data.t;
+    gdat_data.dimunits{mapping_for_aug.timedim} = 'time [s]';
+    gdat_data.dim{setdiff([1:2],mapping_for_aug.timedim)} = gdat_data.x;
+  else
+    gdat_data.dim{mapping_for_aug.timedim} = gdat_data.t;
+    gdat_data.dimunits{mapping_for_aug.timedim} = 'time [s]';
+    nbdims = length(size(gdat_data.data));
+    for i=1:nbdims
+      if i~=mapping_for_aug.timedim
+	ieff=i;
+	if i>mapping_for_aug.timedim; ieff=i-1; end
+	gdat_data.dim{i} = gdat_data.x{ieff};
+      end
+    end
+  end
+  nbdims = length(gdat_data.dim);
   gdat_data.units = aatmp.units;
-  gdat_data.dimunits = aatmp.dimunits;
-  if mapping_for_aug.new_timedim>0 && mapping_for_aug.new_timedim ~= mapping_for_aug.timedim
-    % shift timedim to new_timedim data(i,j,...itime,k,...) -> data(i,inewtime,j,...,k,...)
+  if mapping_for_aug.gdat_timedim>0 && mapping_for_aug.gdat_timedim ~= mapping_for_aug.timedim
+    % shift timedim to gdat_timedim data(i,j,...itime,k,...) -> data(i,inewtime,j,...,k,...)
     % note that this means that gdat_data.x and gdat_data.t are same and correct, 
     % only .data, .dim and .dimunits need to be changed
     iprev=[1:nbdims];
-    ij=find(dim_nontim>mapping_for_aug.new_timedim-1);
-    inew=[1:mapping_for_aug.new_timedim-1 mapping_for_aug.timedim dim_nontim(ij)];
+    ij=find(dim_nontim>mapping_for_aug.gdat_timedim-1);
+    inew=[1:mapping_for_aug.gdat_timedim-1 mapping_for_aug.timedim dim_nontim(ij)];
     data_sizes = size(aatmp.data);
     gdat_data.data = NaN*ones(data_sizes(inew));
     abcol=ones(1,nbdims)*double(':'); abcomma=ones(1,nbdims)*double(',');
     dimstr_prev=['(' repmat(':,',1,mapping_for_aug.timedim-1) 'it,' ...
                  repmat(':,',1,nbdims-mapping_for_aug.timedim-1) ':)'];
-    dimstr_new=['(' repmat(':,',1,mapping_for_aug.new_timedim-1) 'it,' ...
-                repmat(':,',1,nbdims-mapping_for_aug.new_timedim-1) ':)'];
+    dimstr_new=['(' repmat(':,',1,mapping_for_aug.gdat_timedim-1) 'it,' ...
+                repmat(':,',1,nbdims-mapping_for_aug.gdat_timedim-1) ':)'];
     % eval gdat_data.data(;,:,...,it,...) = aatmp.data(:,:,:,it,...);
     for it=1:size(aatmp.data,mapping_for_aug.timedim)
       shift_eval = ['gdat_data.data' dimstr_new ' = aatmp.data'  dimstr_prev ';'];
       eval(shift_eval);
     end
     gdat_data.dim = aatmp.dim(inew);
-    gdat_data.dimunits = aatmp.dimunits(inew);
+    % gdat_data.dimunits = aatmp.dimunits(inew);
   end
   gdat_data.data_fullpath=mapping_for_aug.expression;
-  % end of method "tdi"
+  % end of method "signal"
 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-elseif strcmp(mapping_for_aug.method,'function')
-  % 2nd: method="function"
-  % assume expression contains function to call and which returns a structure
+elseif strcmp(mapping_for_aug.method,'expression')
+  % 2nd: method="expression"
+  % assume expression contains an expression to evaluate and which cretaes a local structure into variable gdat_tmp
   % we copy the structure, to make sure default nodes are defined and to avoid if return is an closed object like tdi
-  eval_expr = ['aatmp=' mapping_for_aug.expression ';'];
-  eval(eval_expr);
-  if isempty(aatmp) || (~isstruct(aatmp) & ~isobject(aatmp))
-    warning(['function expression does not return a structure: ' eval_expr])
+  % eval_expr = [mapping_for_aug.expression ';'];
+  eval([mapping_for_aug.expression ';']);
+  if isempty(gdat_tmp) || (~isstruct(gdat_tmp) & ~isobject(gdat_tmp))
+    warning(['expression does not create a gdat_tmp structure: ' mapping_for_aug.expression])
     error_status=801;
     return
   end
-  tmp_fieldnames = fieldnames(aatmp);
-  if sum(strcmp(tmp_fieldnames,'data'))==0 % note: cannot do isfield since aatmp might be an object
-    warning(['function does not return a child name ''data'' for ' data_request_eff])
+  tmp_fieldnames = fieldnames(gdat_tmp);
+  if sum(strcmp(tmp_fieldnames,'data'))==0 % note: cannot do isfield since gdat_tmp might be an object
+    warning(['expression does not return a child name ''data'' for ' data_request_eff])
   end
   for i=1:length(tmp_fieldnames)
-    gdat_data.(tmp_fieldnames{i}) = aatmp.(tmp_fieldnames{i});
+    gdat_data.(tmp_fieldnames{i}) = gdat_tmp.(tmp_fieldnames{i});
   end
   % add .t and .x in case only dim is provided
-  % do not allow shifting of timedim since should be treated in the relevant function
+  % do not allow shifting of timedim since should be treated in the relevant expression
   ijdim=find(strcmp(tmp_fieldnames,'dim')==1);
   if ~isempty(ijdim)
     nbdims = length(gdat_data.dim);
@@ -355,55 +377,432 @@ elseif strcmp(mapping_for_aug.method,'function')
     end
     gdat_data.data_fullpath=mapping_for_aug.expression;
   end
-  % end of method "function"
+  % end of method "expression"
 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 elseif strcmp(mapping_for_aug.method,'switchcase')
   switch data_request_eff % not lower(...) since data_request_eff should be lower case already at this stage
-   case {'ne','te'}
-    % ne or Te from Thomson data on raw z mesh vs (z,t)
-    mdsopen(shot);
-    nodenameeff=['\results::thomson:' data_request_eff];
-    tracetdi=tdi(nodenameeff);
-    tracestd=tdi(['\results::thomson:' data_request_eff ':error_bar']);
-    trace_fir_rat=tdi('\results::thomson:fir_thom_rat');
-    gdat_data.data=tracetdi.data'; % Thomson data as (t,z)
-    gdat_data.error_bar=tracestd.data';
-    gdat_data.data_fullpath=[nodenameeff];
-    % add correct dimensions
-    try
-      time=mdsdata('\results::thomson:times');
-    catch
-      warning('Problems with \results::thomson:times')
-      disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff])
+   case {'eqdsk'}
+    %
+    time_eqdsks=1.; % default time
+    if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time)
+      time_eqdsks = gdat_data.gdat_params.time;
+    else
+      gdat_data.gdat_params.time = time_eqdsks;
+      disp(['"time" is expected as an option, choose default time = ' num2str(time_eqdsks)]);
+    end
+    gdat_data.gdat_params.time = time_eqdsks;
+    gdat_data.t = time_eqdsks;
+    zshift = 0.;
+    if isfield(gdat_data.gdat_params,'zshift') && ~isempty(gdat_data.gdat_params.zshift)
+      zshift = gdat_data.gdat_params.zshift;
+    else
+      gdat_data.gdat_params.zshift = zshift;
+    end
+    gdat_data.gdat_params.zshift = zshift;
+    params_equil = gdat_data.gdat_params;
+    params_equil.data_request = 'equil';
+    [equil,params_equil,error_status] = gdat_aug(shot,params_equil);
+    if error_status>0
+      if nverbose>=3; disp(['problems with ' params_equil.data_request]); end
       return
     end
-    if isempty(time) || ischar(time)
-      thomsontimes=time
-      warning('!!!!!!!!!!!!!!!!!!!!!!!!!\results::thomson:times  is empty? Check')
-      disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff])
+    gdat_data.gdat_params = params_equil;
+    gdat_data.equil = equil;
+    for itime=1:length(time_eqdsks)
+      time_eff = time_eqdsks(itime);
+      % use read_results updated to effectively obtain an eqdsk with sign correct with COCOS=2
+      [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(equil,time_eff,gdat_data.gdat_params.zshift);
+      eqdskAUG.fnamefull = fullfile(['/tmp/' getenv('USER')],['EQDSK_' num2str(shot) 't' num2str(time_eff,'%.4f')]);
+      cocos_out = equil.cocos;
+      if isfield(gdat_data.gdat_params,'cocos') && ~isempty(gdat_data.gdat_params.cocos)
+        cocos_out = gdat_data.gdat_params.cocos;
+      else
+        gdat_data.gdat_params.cocos = cocos_out;
+      end
+      if equil.cocos ~= cocos_out
+	[eqdsk_cocosout, eqdsk_cocosout_IpB0pos,cocos_inout]=eqdsk_cocos_transform(eqdskAUG,[equil.cocos cocos_out]);
+      else
+	eqdsk_cocosout = eqdskAUG;
+      end
+      % for several times, use array of structure for eqdsks, 
+      % cannot use it for psi(R,Z) in .data and .x since R, Z might be different at different times,
+      % so project psi(R,Z) on Rmesh, Zmesh of 1st time
+      if length(time_eqdsks) > 1
+        gdat_data.eqdsk{itime} = write_eqdsk(eqdskAUG.fnamefull,eqdsk_cocosout);
+        if itime==1
+          gdat_data.data(:,:,itime) = gdat_data.eqdsk{itime}.psi;
+          gdat_data.dim{1} = gdat_data.eqdsk{itime}.rmesh;
+          gdat_data.dim{2} = gdat_data.eqdsk{itime}.zmesh;
+        else
+	  xx=repmat(reshape(gdat_data.dim{1},length(gdat_data.dim{1}),1),1,size(gdat_data.eqdsk{itime}.psi,2));
+	  yy=repmat(reshape(gdat_data.dim{2},1,length(gdat_data.dim{2})),size(gdat_data.eqdsk{itime}.psi,1),1);
+	  aa = interpos2Dcartesian(gdat_data.eqdsk{itime}.rmesh,gdat_data.eqdsk{itime}.zmesh ...
+	  ,gdat_data.eqdsk{itime}.psi,xx,yy,-1,-1);
+          gdat_data.data(:,:,itime) = aa;
+        end
+      else
+        gdat_data.eqdsk = write_eqdsk(eqdskAUG.fnamefull,eqdsk_cocosout);
+        gdat_data.data = gdat_data.eqdsk.psi;
+        gdat_data.dim{1} = gdat_data.eqdsk.rmesh;
+        gdat_data.dim{2} = gdat_data.eqdsk.zmesh;
+      end
+    end
+    gdat_data.dim{3} = gdat_data.t;
+    gdat_data.x = gdat_data.dim(1:2);
+    gdat_data.data_fullpath=['psi(R,Z) and eqdsk from geteqdskAUG with ' gdat_data.gdat_params.equil ' ;zshift=' num2str(zshift)];
+    gdat_data.units = 'T m^2';
+    gdat_data.dimunits = {'m','m','s'};
+    gdat_data.request_description = ['data=psi, x=(R,Z), eqdsk contains eqdsk structure with which ' ...
+                    'plot_eqdsk, write_eqdsk, read_eqdsk can be used'];
+    
+   case {'equil'}
+    exp_name_eff = gdat_data.gdat_params.exp_name;
+    gdat_data.gdat_params.equil = upper(gdat_data.gdat_params.equil);
+    DIAG = gdat_data.gdat_params.equil; % 'EQI' by default at this stage, should become EQH?
+    M_Rmesh_par = sf2par(DIAG,shot,'M','PARMV');
+    M_Rmesh = M_Rmesh_par.value + 1; % nb of points
+    N_Zmesh_par = sf2par(DIAG,shot,'N','PARMV');
+    N_Zmesh = N_Zmesh_par.value + 1; % nb of points
+    NTIME_par = sf2par(DIAG,shot,'NTIME','PARMV');
+    NTIME = NTIME_par.value; % nb of points
+    Lpf_par = rdaAUG_eff(shot,DIAG,'Lpf',exp_name_eff);
+    % since June, nb of time points in EQ results is not consistent with NTIME and time
+    % It seems the first NTIME points are correct, so use this explicitely
+    NTIME_Lpf = length(Lpf_par.value);
+    if (NTIME < NTIME_Lpf)
+      if nverbose>=3; disp('WARNING: nb of times points smaller then equil results, use first NTIME points'); end
+    elseif (NTIME > NTIME_Lpf)
+      if nverbose >= 1
+	disp('ERROR: nb of times points LARGER then equil results')
+	disp('this is unexpected, so stop there and ask Olivier.Sauter@epfl.ch')
+      end
       return
     end
-    if strcmp(data_request_eff(1:2),'ne')
-      tracefirrat_data = get_fir_thom_rat_data('thomson',time);
-      gdat_data.data_abs = gdat_data.data * diag(tracefirrat_data);
-      gdat_data.error_bar_abs = gdat_data.error_bar * diag(tracefirrat_data);
-      gdat_data.firrat=tracefirrat_data;
-      gdat_data.data_fullpath=[gdat_data.data_fullpath ' ; _abs includes *firrat'];
+    Lpf_tot = Lpf_par.value(1:NTIME); % nb of points: 100000*nb_SOL points + nb_core
+    Lpf_SOL = fix(Lpf_tot/100000);
+    Lpf1_t = mod(Lpf_tot,100000)+1; % nb of Lpf points
+    % since Lpf depends on time, need to load all first and then loop over time for easier mapping
+    [qpsi,e]=rdaAUG_eff(shot,DIAG,'Qpsi',exp_name_eff);
+    ndimrho = size(qpsi.data,2);
+    if ndimrho==NTIME_Lpf
+      % data seems to be transposed
+      ndimrho = size(qpsi.data,1);
+      itotransposeback = 1; % seems x,time inverted so transpose and exchange .x and .t
+    else
+      itotransposeback = 0;
     end
-    z=mdsdata('\diagz::thomson_set_up:vertical_pos');
-    gdat_data.dim=[{z};{time}];
-    gdat_data.dimunits=[{'Z [m]'} ; {'time [s]'}];
-    gdat_data.x=z;
-    gdat_data.t=time;
-    % isfield does not work since tracetdi is not a 'struct' but a tdi object, thus use fieldnames
-    if any(strcmp(fieldnames(tracetdi),'units'))
-      gdat_data.units=tracetdi.units;
+    qpsi=adapt_rda(qpsi,NTIME,ndimrho,itotransposeback);
+    ijnan=find(isnan(qpsi.value));
+    qpsi.value(ijnan)=0;
+    [psi_tree,e]=rdaAUG_eff(shot,DIAG,'PFL',exp_name_eff);
+    psi_tree=adapt_rda(psi_tree,NTIME,ndimrho,itotransposeback);
+    [phi_tree,e]=rdaAUG_eff(shot,DIAG,'TFLx',exp_name_eff);
+    phi_tree=adapt_rda(phi_tree,NTIME,ndimrho,itotransposeback);
+    [Vol,e]=rdaAUG_eff(shot,DIAG,'Vol',exp_name_eff);
+    Vol=adapt_rda(Vol,NTIME,2*ndimrho,itotransposeback);
+    [Area,e]=rdaAUG_eff(shot,DIAG,'Area',exp_name_eff);
+    Area=adapt_rda(Area,NTIME,2*ndimrho,itotransposeback);
+    [Ri,e]=rdaAUG_eff(shot,DIAG,'Ri',exp_name_eff);
+    Ri=adapt_rda(Ri,NTIME,M_Rmesh,itotransposeback);
+    [Zj,e]=rdaAUG_eff(shot,DIAG,'Zj',exp_name_eff);
+    Zj=adapt_rda(Zj,NTIME,N_Zmesh,itotransposeback);
+    [PFM_tree,e]=rdaAUG_eff(shot,DIAG,'PFM',exp_name_eff);
+    PFM_tree=adaptPFM_rda(PFM_tree,M_Rmesh,N_Zmesh,NTIME);
+    [Pres,e]=rdaAUG_eff(shot,DIAG,'Pres',exp_name_eff);
+    Pres=adapt_rda(Pres,NTIME,2*ndimrho,itotransposeback);
+    [Jpol,e]=rdaAUG_eff(shot,DIAG,'Jpol',exp_name_eff);
+    Jpol=adapt_rda(Jpol,NTIME,2*ndimrho,itotransposeback);
+    [FFP,e]=rdaAUG_eff(shot,DIAG,'FFP',exp_name_eff);
+    if ~isempty(FFP.value)
+      FFP=adapt_rda(FFP,NTIME,ndimrho,itotransposeback);
+    else
+      FFP.value=NaN*ones(NTIME,max(Lpf1_t));
     end
-
+    if strcmp(DIAG,'EQI') || strcmp(DIAG,'EQH')
+      [Rinv,e]=rdaAUG_eff(shot,DIAG,'Rinv',exp_name_eff);
+      Rinv=adapt_rda(Rinv,NTIME,ndimrho,itotransposeback);
+      [R2inv,e]=rdaAUG_eff(shot,DIAG,'R2inv',exp_name_eff);
+      R2inv=adapt_rda(R2inv,NTIME,ndimrho,itotransposeback);
+      [Bave,e]=rdaAUG_eff(shot,DIAG,'Bave',exp_name_eff);
+      Bave=adapt_rda(Bave,NTIME,ndimrho,itotransposeback);
+      [B2ave,e]=rdaAUG_eff(shot,DIAG,'B2ave',exp_name_eff);
+      B2ave=adapt_rda(B2ave,NTIME,ndimrho,itotransposeback);
+      [FTRA,e]=rdaAUG_eff(shot,DIAG,'FTRA',exp_name_eff);
+      FTRA=adapt_rda(FTRA,NTIME,ndimrho,itotransposeback);
+    else
+      Rinv.value=[]; R2inv.value=[]; Bave.value=[]; B2ave.value=[]; FTRA.value=[];
+    end
+    [LPFx,e]=rdaAUG_eff(shot,DIAG,'LPFx',exp_name_eff);
+    LPFx.value=LPFx.value(1:NTIME); LPFx.data=LPFx.value; LPFx.t=LPFx.t(1:NTIME);
+    [PFxx,e]=rdaAUG_eff(shot,DIAG,'PFxx',exp_name_eff);
+    PFxx=adapt_rda(PFxx,NTIME,max(LPFx.value)+1,itotransposeback);
+    [RPFx,e]=rdaAUG_eff(shot,DIAG,'RPFx',exp_name_eff);
+    RPFx=adapt_rda(RPFx,NTIME,max(LPFx.value)+1,itotransposeback);
+    [zPFx,e]=rdaAUG_eff(shot,DIAG,'zPFx',exp_name_eff);
+    zPFx=adapt_rda(zPFx,NTIME,max(LPFx.value)+1,itotransposeback);
+    % seems "LCFS" q-value is far too large, limit to some max (when diverted)
+    max_qValue = 30.; % Note could just put a NaN on LCFS value since ill-defined when diverted
+    for it=1:NTIME
+      Lpf1 = Lpf1_t(it);
+      % Qpsi and similar data is on (time,radius) with radius being: LCFS..Lpf_points dummy LCFS..SOL part
+      % change it to (radial,time) and use only Lpf+1 points up to LCFS
+      ijok=find(qpsi.value(:,1)); % note: eqr fills in only odd points radially
+      % set NaNs to zeroes
+      if qpsi.value(ijok(1),1)<0
+	gdat_data.qvalue(:,it) = max(qpsi.value(it,Lpf1:-1:1)',-max_qValue);
+      else
+	gdat_data.qvalue(:,it) = min(qpsi.value(it,Lpf1:-1:1)',max_qValue);
+      end
+      % get x values
+      gdat_data.psi(:,it)=psi_tree.value(it,Lpf1:-1:1)';
+      gdat_data.psi_axis(it)= gdat_data.psi(1,it);
+      gdat_data.psi_lcfs(it)= gdat_data.psi(end,it);
+      gdat_data.rhopolnorm(:,it) = sqrt(abs((gdat_data.psi(:,it)-gdat_data.psi_axis(it)) ./(gdat_data.psi_lcfs(it)-gdat_data.psi_axis(it))));
+      if strcmp(DIAG,'EQR');
+	% q value has only a few values and from center to edge, assume they are from central rhopol values on
+	% But they are every other point starting from 3rd
+	ijk=find(gdat_data.qvalue(:,it)~=0);
+	if length(ijk)>2
+	  % now shots have non-zero axis values in eqr
+	  rhoeff=gdat_data.rhopolnorm(ijk,it);
+	  qeff=gdat_data.qvalue(ijk,it); % radial order was already inverted above
+	  if ijk(1)>1
+	    rhoeff = [0.; rhoeff];
+	    qeff = [qeff(1) ;qeff];
+	  end
+	  ij_nonan=find(~isnan(gdat_data.rhopolnorm(:,it)));
+	  qfit = zeros(size(gdat_data.rhopolnorm(:,it)));
+	  qfit(ij_nonan)=interpos(rhoeff,qeff,gdat_data.rhopolnorm(ij_nonan,it),-0.01,[1 0],[0 0],[300; ones(size(qeff(1:end-1)))]);
+	else
+	  qfit = zeros(size(gdat_data.rhopolnorm(:,it)));
+	end
+	gdat_data.qvalue(:,it) = qfit;
+      end    
+      % get rhotor values
+      gdat_data.phi(:,it) = phi_tree.value(it,Lpf1:-1:1)';
+      gdat_data.rhotornorm(:,it) = sqrt(abs(gdat_data.phi(:,it) ./ gdat_data.phi(end,it)));
+      % get rhovol values
+      gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.dvoldpsi(:,it)=Vol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
+      gdat_data.rhovolnorm(:,it) = sqrt(abs(gdat_data.vol(:,it) ./ gdat_data.vol(end,it)));
+      gdat_data.area(:,it)=Area.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.dareadpsi(:,it)=Area.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
+      gdat_data.Rmesh(:,it) = Ri.value(it,1:M_Rmesh);
+      gdat_data.Zmesh(:,it) = Zj.value(it,1:N_Zmesh);
+      gdat_data.psi2D(1:M_Rmesh,1:N_Zmesh,it) = PFM_tree.value(1:M_Rmesh,1:N_Zmesh,it);
+      gdat_data.pressure(:,it)=Pres.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.dpressuredpsi(:,it)=Pres.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
+      if ~isempty(Jpol.value)
+	gdat_data.jpol(:,it)=Jpol.value(it,2*Lpf1-1:-2:1)'; 
+	gdat_data.djpolpsi(:,it)=Jpol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
+      else
+	gdat_data.jpol = [];
+	gdat_data.djpolpsi = [];
+      end
+      gdat_data.ffprime(:,it) = FFP.value(it,Lpf1:-1:1)';
+      gdat_data.Xpoints.psi(1:LPFx.value(it)+1,it) = PFxx.value(it,1:LPFx.value(it)+1);
+      gdat_data.Xpoints.Rvalue(1:LPFx.value(it)+1,it) = RPFx.value(it,1:LPFx.value(it)+1);
+      gdat_data.Xpoints.Zvalue(1:LPFx.value(it)+1,it) = zPFx.value(it,1:LPFx.value(it)+1);
+      if ~isempty(Rinv.value)
+	gdat_data.rinv(:,it) = Rinv.value(it,Lpf1:-1:1)';
+      else
+	gdat_data.rinv = [];
+      end
+      if ~isempty(R2inv.value)
+	gdat_data.r2inv(:,it) = R2inv.value(it,Lpf1:-1:1)';
+      else
+	gdat_data.r2inv = [];
+      end
+      if ~isempty(Bave.value)
+	gdat_data.bave(:,it) = Bave.value(it,Lpf1:-1:1)';
+      else
+	gdat_data.bave = [];
+      end
+      if ~isempty(B2ave.value)
+	gdat_data.b2ave(:,it) = B2ave.value(it,Lpf1:-1:1)';
+      else
+	gdat_data.b2ave = [];
+      end
+      if ~isempty(FTRA.value)
+	gdat_data.ftra(:,it) = FTRA.value(it,Lpf1:-1:1)';
+      else
+	gdat_data.ftra = [];
+      end
+      %
+    end
+    gdat_data.x = gdat_data.rhopolnorm;
+    %
+    [equil_Rcoil,e]=rdaAUG_eff(shot,DIAG,'Rcl',exp_name_eff);
+    gdat_data.Rcoils=equil_Rcoil.value;
+    [equil_Zcoil,e]=rdaAUG_eff(shot,DIAG,'Zcl',exp_name_eff);
+    gdat_data.Zcoils=equil_Zcoil.value;
+    % get time values
+    [equil_time,e]=rdaAUG_eff(shot,DIAG,'time',exp_name_eff);
+    gdat_data.t = equil_time.value(1:NTIME);
+    %
+    [IpiPSI,e]=rdaAUG_eff(shot,DIAG,'IpiPSI',exp_name_eff);
+    gdat_data.Ip = IpiPSI.value(1:NTIME);
+    %
+    gdat_data.data = gdat_data.qvalue; % put q in data
+    gdat_data.units=[]; % not applicable
+    gdat_data.data_fullpath = [DIAG ' from expname: ' gdat_data.gdat_params.exp_name '; q(rhopolnorm,t) in .data(.x,.t)'];
+    gdat_data.cocos = 17; % should check FPP
+    gdat_data.dim{1} = gdat_data.x;
+    gdat_data.dim{2} = gdat_data.t;
+    gdat_data.dimunits{1} = '';
+    gdat_data.dimunits{2} = 's';
     
-   case 'nerho'
+   case {'ne','te'}
+    exp_name_eff = gdat_data.gdat_params.exp_name;
+    % ne or Te from Thomson data on raw z mesh vs (z,t)
+    nodenameeff = [upper(data_request_eff(1)) 'e_c'];
+    node_child_nameeff = [upper(data_request_eff(1)) 'e_core'];
+    [a,error_status]=rdaAUG_eff(shot,'VTA',nodenameeff,exp_name_eff);
+    if isempty(a.data) || isempty(a.t) || error_status>0
+      if nverbose>=3;
+	a
+	disp(['with data_request= ' data_request_eff])
+      end
+      return
+    end
+    gdat_data.(lower(node_child_nameeff)).data = a.data;
+    gdat_data.(lower(node_child_nameeff)).t = a.t;
+    gdat_data.t = a.t;
+    if any(strcmp(fieldnames(a),'units'))
+      gdat_data.units=a.units;
+    end
+    [alow,e]=rdaAUG_eff(shot,'VTA',[upper(data_request_eff(1)) 'elow_c'],exp_name_eff);
+    [aup,e]=rdaAUG_eff(shot,'VTA',[upper(data_request_eff(1)) 'eupp_c'],exp_name_eff);
+    gdat_data.(lower(node_child_nameeff)).error_bar = max(aup.value-gdat_data.(lower(node_child_nameeff)).data,gdat_data.(lower(node_child_nameeff)).data-alow.value);
+    [a,error_status]=rdaAUG_eff(shot,'VTA','R_core',exp_name_eff);
+    gdat_data.(lower(node_child_nameeff)).r = repmat(a.data,size(gdat_data.(lower(node_child_nameeff)).data,1),1);
+    [a,error_status]=rdaAUG_eff(shot,'VTA','Z_core',exp_name_eff);
+    gdat_data.(lower(node_child_nameeff)).z = repmat(a.data',1,size(gdat_data.(lower(node_child_nameeff)).data,2));
+    gdat_data.dimunits=[{'Z [m]'} ; {'time [s]'}];
+    gdat_data.data_fullpath=[data_request_eff ' from VTA/' upper(data_request_eff(1)) 'e_c and ' upper(data_request_eff(1)) 'e_e'];
+    nb_core = size(gdat_data.(lower(node_child_nameeff)).z,1);
+    gdat_data.data = [];
+    gdat_data.data(1:nb_core,:) = gdat_data.(lower(node_child_nameeff)).data(1:nb_core,:);
+    gdat_data.dim=[{gdat_data.(lower(node_child_nameeff)).z};{gdat_data.(lower(node_child_nameeff)).t}];
+    gdat_data.error_bar(1:nb_core,:) = gdat_data.(lower(node_child_nameeff)).error_bar(1:nb_core,:);
+
+    % add edge part
+    nodenameeff_e = [upper(data_request_eff(1)) 'e_e'];
+    node_child_nameeff_e = [upper(data_request_eff(1)) 'e_edge'];
+    [a,error_status]=rdaAUG_eff(shot,'VTA',nodenameeff_e,exp_name_eff);
+    gdat_data.(lower(node_child_nameeff_e)).data = a.data;
+    ij_edge_notok = find(a.data>5e21);
+    gdat_data.(lower(node_child_nameeff_e)).data(ij_edge_notok) = NaN;
+    gdat_data.(lower(node_child_nameeff_e)).t = a.t;
+    if ~isempty(a.data)
+      [a,error_status]=rdaAUG_eff(shot,'VTA','R_edge',exp_name_eff);
+      gdat_data.(lower(node_child_nameeff_e)).r = repmat(a.data,size(gdat_data.(lower(node_child_nameeff_e)).data,1),1);
+      [a,error_status]=rdaAUG_eff(shot,'VTA','Z_edge',exp_name_eff);
+      gdat_data.(lower(node_child_nameeff_e)).z = repmat(a.data',1,size(gdat_data.(lower(node_child_nameeff_e)).data,2));
+      nb_edge = size(gdat_data.(lower(node_child_nameeff_e)).z,1);
+      iaaa=iroundos(gdat_data.(lower(node_child_nameeff_e)).t,gdat_data.(lower(node_child_nameeff)).t);
+      gdat_data.data(nb_core+1:nb_core+nb_edge,:) = gdat_data.(lower(node_child_nameeff_e)).data(1:nb_edge,iaaa);
+      gdat_data.dim{1}(nb_core+1:nb_core+nb_edge,:)=gdat_data.(lower(node_child_nameeff_e)).z(1:nb_edge,iaaa);
+      [alow,e]=rdaAUG_eff(shot,'VTA',[upper(data_request_eff(1)) 'elow_e'],exp_name_eff);
+      [aup,e]=rdaAUG_eff(shot,'VTA',[upper(data_request_eff(1)) 'eupp_e'],exp_name_eff);
+      gdat_data.(lower(node_child_nameeff_e)).error_bar = max(aup.value-gdat_data.(lower(node_child_nameeff_e)).data, ...
+	  gdat_data.(lower(node_child_nameeff_e)).data-alow.value);
+      gdat_data.error_bar(nb_core+1:nb_core+nb_edge,:) = gdat_data.(lower(node_child_nameeff_e)).error_bar(1:nb_edge,iaaa);
+    else
+      gdat_data.(lower(node_child_nameeff_e)).data = [];
+      gdat_data.(lower(node_child_nameeff_e)).t = [];
+      gdat_data.(lower(node_child_nameeff_e)).error_bar = [];
+      gdat_data.(lower(node_child_nameeff_e)).r = [];
+      gdat_data.(lower(node_child_nameeff_e)).z = [];
+    end
+    gdat_data.x=gdat_data.dim{1};
     
+   case {'ne_rho', 'te_rho'}
+    params_eff = gdat_data.gdat_params;
+    params_eff.data_request=data_request_eff(1:2); 
+    % get raw data
+    [gdat_data,params_kin,error_status]=gdat_aug(shot,params_eff);
+    if error_status>0
+      if nverbose>=3; disp(['problems with ' params_eff.data_request]); end
+      return
+    end
+    % add rho coordinates
+    params_eff.data_request='equil'; 
+    [equil,params_equil,error_status]=gdat_aug(shot,params_eff);
+    if error_status>0
+      if nverbose>=3; disp(['problems with ' params_eff.data_request]); end
+      return
+    end
+    gdat_data.gdat_params.equil = params_equil.equil;
+
+    % core
+    node_child_nameeff = [upper(data_request_eff(1)) 'e_core'];
+    inb_chord_core=size(gdat_data.(lower(node_child_nameeff)).r,1);
+    inb_time_core=size(gdat_data.(lower(node_child_nameeff)).r,2);
+    psi_out_core = NaN*ones(inb_chord_core,inb_time_core);
+    rhopsinorm_out_core = NaN*ones(inb_chord_core,inb_time_core);
+    rhotornorm_out_core = NaN*ones(inb_chord_core,inb_time_core);
+    rhovolnorm_out_core = NaN*ones(inb_chord_core,inb_time_core);
+    % edge
+    node_child_nameeff_e = [upper(data_request_eff(1)) 'e_edge'];
+    inb_chord_edge=size(gdat_data.(lower(node_child_nameeff_e)).r,1);
+    inb_time_edge=size(gdat_data.(lower(node_child_nameeff_e)).r,2);
+    psi_out_edge = NaN*ones(inb_chord_edge,inb_time_edge);
+    rhopsinorm_out_edge = NaN*ones(inb_chord_edge,inb_time_edge);
+    rhotornorm_out_edge = NaN*ones(inb_chord_edge,inb_time_edge);
+    rhovolnorm_out_edge = NaN*ones(inb_chord_edge,inb_time_edge);
+    % constructs intervals within which a given equil is used: [time_equil(i),time_equil(i+1)]
+    time_equil=[1.5*equil.t(1)-0.5*equil.t(2) 0.5.*(equil.t(1:end-1)+equil.t(2:end)) 1.5*equil.t(end)-0.5*equil.t(end-1)];
+    for itequil=1:length(time_equil)-1
+      rr=equil.Rmesh(:,itequil);
+      zz=equil.Zmesh(:,itequil);
+      psirz_in = equil.psi2D(:,:,itequil);
+      it_core_inequil = find(gdat_data.(lower(node_child_nameeff)).t>=time_equil(itequil) & gdat_data.(lower(node_child_nameeff)).t<=time_equil(itequil+1));
+      if ~isempty(it_core_inequil)
+	rout_core=gdat_data.(lower(node_child_nameeff)).r(:,it_core_inequil);
+	zout_core=gdat_data.(lower(node_child_nameeff)).z(:,it_core_inequil);
+	psi_at_routzout = interpos2Dcartesian(rr,zz,psirz_in,rout_core,zout_core);
+	psi_out_core(:,it_core_inequil) = reshape(psi_at_routzout,inb_chord_core,length(it_core_inequil));
+	rhopsinorm_out_core(:,it_core_inequil) = sqrt((psi_out_core(:,it_core_inequil)-equil.psi_axis(itequil))./(equil.psi_lcfs(itequil)-equil.psi_axis(itequil)));
+	for it_cx=1:length(it_core_inequil)
+	  rhotornorm_out_core(:,it_core_inequil(it_cx)) = ...
+	      interpos(equil.rhopolnorm(:,itequil),equil.rhotornorm(:,itequil),rhopsinorm_out_core(:,it_core_inequil(it_cx)),-3,[2 2],[0 1]);
+	  rhovolnorm_out_core(:,it_core_inequil(it_cx)) = ...
+	      interpos(equil.rhopolnorm(:,itequil),equil.rhovolnorm(:,itequil),rhopsinorm_out_core(:,it_core_inequil(it_cx)),-3,[2 2],[0 1]);
+	end
+      end
+      % edge
+      it_edge_inequil = find(gdat_data.(lower(node_child_nameeff_e)).t>=time_equil(itequil) & gdat_data.(lower(node_child_nameeff_e)).t<=time_equil(itequil+1));
+      if ~isempty(it_edge_inequil)
+	rout_edge=gdat_data.(lower(node_child_nameeff_e)).r(:,it_edge_inequil);
+	zout_edge=gdat_data.(lower(node_child_nameeff_e)).z(:,it_edge_inequil);
+	psi_at_routzout = interpos2Dcartesian(rr,zz,psirz_in,rout_edge,zout_edge);
+	psi_out_edge(:,it_edge_inequil) = reshape(psi_at_routzout,inb_chord_edge,length(it_edge_inequil));
+	rhopsinorm_out_edge(:,it_edge_inequil) = sqrt((psi_out_edge(:,it_edge_inequil)-equil.psi_axis(itequil))./(equil.psi_lcfs(itequil)-equil.psi_axis(itequil)));
+	for it_cx=1:length(it_edge_inequil)
+	  rhotornorm_out_edge(:,it_edge_inequil(it_cx)) = ...
+	      interpos(equil.rhopolnorm(:,itequil),equil.rhotornorm(:,itequil),rhopsinorm_out_edge(:,it_edge_inequil(it_cx)),-3,[2 2],[0 1]);
+	  rhovolnorm_out_edge(:,it_edge_inequil(it_cx)) = ...
+	      interpos(equil.rhopolnorm(:,itequil),equil.rhovolnorm(:,itequil),rhopsinorm_out_edge(:,it_edge_inequil(it_cx)),-3,[2 2],[0 1]);
+	end
+      end
+    end
+    gdat_data.(lower(node_child_nameeff)).psi = psi_out_core;
+    gdat_data.(lower(node_child_nameeff)).rhopsinorm = rhopsinorm_out_core;
+    gdat_data.(lower(node_child_nameeff)).rhotornorm = rhotornorm_out_core;
+    gdat_data.(lower(node_child_nameeff)).rhovolnorm = rhovolnorm_out_core;
+    gdat_data.(lower(node_child_nameeff_e)).psi = psi_out_edge;
+    gdat_data.(lower(node_child_nameeff_e)).rhopsinorm = rhopsinorm_out_edge;
+    gdat_data.(lower(node_child_nameeff_e)).rhotornorm = rhotornorm_out_edge;
+    gdat_data.(lower(node_child_nameeff_e)).rhovolnorm = rhovolnorm_out_edge;
+    % put values of rhopsinorm for dim{1} by default
+    gdat_data.x = gdat_data.(lower(node_child_nameeff)).rhopsinorm;
+    iaaa=iroundos(gdat_data.(lower(node_child_nameeff_e)).t,gdat_data.(lower(node_child_nameeff)).t);
+    gdat_data.x(inb_chord_core+1:inb_chord_core+inb_chord_edge,:) = gdat_data.(lower(node_child_nameeff_e)).rhopsinorm(:,iaaa);
+    gdat_data.dim{1} = gdat_data.x;
+    gdat_data.dimunits{1} = 'rhopsinorm';
+    gdat_data.data_fullpath = [gdat_data.data_fullpath ' projected on equilibrium ' gdat_data.gdat_params.equil];
     
    otherwise
     warning(['switchcase= ' data_request_eff ' not known in gdat_aug'])
@@ -417,8 +816,6 @@ else
   return
 end
 
-if ishot==shot; mdsclose; end
-
 gdat_data.mapping_for_aug = mapping_for_aug;
 error_status=0;
 
diff --git a/crpptbx/AUG/geteqdskAUG.m b/crpptbx/AUG/geteqdskAUG.m
index d96a944d3cc10f36700f2ab4b45b48d25d1ae967..fc6a8a3ce734c9c0a33b086f6a2d38a5cbbba17c 100644
--- a/crpptbx/AUG/geteqdskAUG.m
+++ b/crpptbx/AUG/geteqdskAUG.m
@@ -1,32 +1,38 @@
-function [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(shot,time,NR,NZ,savedir,deltaz,varargin);
+function [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(shot,time,zshift,varargin);
 %
-% [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(shot,time,NR,NZ,savedir,deltaz,varargin);
+% [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(shot,time,zshift,varargin);
+%
+% if shot is a structure assumes obtained from gdat(shot,'equil',...);
 %
 % you can then do:
-%     write_eqdsk('fname',eqdskAUG,17); % EQI is COCOS=17 by default, use [17,11] if you want an ITER version
+%     write_eqdsk('fname',eqdskAUG,17); % EQI is COCOS=17 by default
 %     write_eqdsk('fname',eqdskAUG,[17 11]); % if you want an ITER version with COCOS=11
 %
 
 
+if ~exist('shot') || isempty(shot); 
+  disp('requires a shot or equil structure from gdat(shot,''equil'',...) in geteqdskAUG')
+  return
+end
+
 if ~exist('time'); 
   time_eff = 2.0;
 else
   time_eff = time;
 end
 
-if ~exist('savedir')
-  savedir_eff = '.';
+if ~exist('zshift')
+  zshift_eff = 0.; % no shift
 else
-  savedir_eff = savedir;
+  zshift_eff = zshift;
 end
 
-if ~exist('deltaz')
-  deltaz_eff = NaN; % no shift
+if isnumeric(shot)
+  equil=gdat(shot,'equil');
 else
-  deltaz_eff = deltaz;
+  equil = shot;
+  shot = equil.shot;
 end
-
-equil=gdat(shot,'equil');
 [zz it]=min(abs(equil.t-time_eff));
 
 equil_all_t = equil;
@@ -36,13 +42,8 @@ eqdsk.cocos=17;
 eqdsk.nr = size(equil.Rmesh,1);
 eqdsk.nz = size(equil.Zmesh,1);
 eqdsk.rmesh = equil.Rmesh(:,it);
-eqdsk.zmesh = equil.Zmesh(:,it);
-eqdsk.p = equil.pressure(:,it);
-eqdsk.pprime = equil.dpressuredpsi(:,it);
-eqdsk.FFprime = equil.ffprime(:,it);
-eqdsk.q = equil.qvalue(:,it);
-eqdsk.psimesh = equil.psi(:,it);
-eqdsk.rhopsi = equil.rhopolnorm(:,it);
+eqdsk.zmesh = equil.Zmesh(:,it) - zshift_eff;
+eqdsk.zshift = zshift_eff;
 eqdsk.psi = equil.psi2D(:,:,it);
 eqdsk.psirz = equil.psi2D(:,:,it);
 eqdsk.rboxlen = equil.Rmesh(end,it) - equil.Rmesh(1,it) ;
@@ -51,8 +52,19 @@ eqdsk.zboxlen = equil.Zmesh(end,it) - equil.Zmesh(1,it) ;
 eqdsk.zmid = 0.5*(equil.Zmesh(end,it) + equil.Zmesh(1,it)) ;
 eqdsk.psiaxis = equil.psi_axis(it);
 eqdsk.psiedge = equil.psi_lcfs(it);
+% need psimesh ot be equidistant and same nb of points as nr
+eqdsk.psimesh=linspace(0,1,eqdsk.nr)';
+eqdsk.rhopsi = sqrt(eqdsk.psimesh);
+% psimesh assumed from 0 on axis (so psi_edge is delta_psi) to have correct d/dpsi but to have sign(dpsi) easily
+eqdsk.psimesh = (eqdsk.psiedge-eqdsk.psiaxis) .* eqdsk.psimesh;
+nrho = size(equil.pressure,1);
+eqdsk.p = interpos(equil.rhopolnorm(:,it),equil.pressure(:,it),eqdsk.rhopsi,-0.03,[1 2],[0 equil.pressure(end,it)]);
+eqdsk.pprime = interpos(equil.rhopolnorm(:,it),equil.dpressuredpsi(:,it),eqdsk.rhopsi,-0.03,[1 2],[0 equil.dpressuredpsi(end,it)]);
+eqdsk.FFprime = interpos(equil.rhopolnorm(:,it),equil.ffprime(:,it),eqdsk.rhopsi,-0.03,[1 2],[0 equil.ffprime(end,it)]);
+eqdsk.q = interpos(equil.rhopolnorm(:,it),equil.qvalue(:,it),eqdsk.rhopsi,-0.03,[1 2],[0 equil.qvalue(end,it)]);
+
 eqdsk.ip = equil.Ip(it);
-eqdsk.stitle=['AUGD equil_cliste t=' num2str(time_eff)];
+eqdsk.stitle=['#' num2str(shot) ' t=' num2str(time_eff) ' from ' equil.gdat_params.exp_name '/' equil.gdat_params.equil];
 eqdsk.ind1=1;
 
 psisign = sign(eqdsk.psimesh(end)-eqdsk.psimesh(1));
@@ -70,7 +82,7 @@ rmag=gdat(shot,'rmag');
 [zz itrmag]=min(abs(rmag.t-time_eff));
 eqdsk.raxis = rmag.data(itrmag);
 zmag=gdat(shot,'zmag');
-eqdsk.zaxis = zmag.data(itrmag);
+eqdsk.zaxis = zmag.data(itrmag) - eqdsk.zshift;
 
 % get plasma boundary
 figure
@@ -108,4 +120,6 @@ eqdsk.rlim=AUG_innerouterwall(:,1);
 eqdsk.zlim=AUG_innerouterwall(:,2);
 plot(eqdsk.rlim,eqdsk.zlim,'k-')
 
+title(eqdsk.stitle)
+
 eqdskAUG = eqdsk;
diff --git a/crpptbx/AUG/loadAUGdata.m b/crpptbx/AUG/loadAUGdata.m
index 8978a6eb833f50eed5eeb9365993d5d43f7c8f66..0d557599bf837b6fd9ba90a0a5b8d82bb77d5dd1 100644
--- a/crpptbx/AUG/loadAUGdata.m
+++ b/crpptbx/AUG/loadAUGdata.m
@@ -1072,7 +1072,7 @@ switch AUGkeywrdcase{index}
   %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   case {'te', 'ne'}
 
-    shotfile_exp_eff = AUGexplocation{index};
+    shotfile_exp_eff = AUGexplocation{index}
     
     if strcmp(AUGkeywrdcase{index},'te')
       [a,e]=rdaAUG_eff(shot,'YPR','Te',shotfile_exp_eff);
diff --git a/crpptbx/AUG/rdaAUG_eff.m b/crpptbx/AUG/rdaAUG_eff.m
index 6feeeee393e7293b37da7551b7ba2a4decbe834d..6bf1e8efa5169d8355b1cf85d5cf366f62ce34d6 100644
--- a/crpptbx/AUG/rdaAUG_eff.m
+++ b/crpptbx/AUG/rdaAUG_eff.m
@@ -19,8 +19,7 @@ function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin);
 %
 
 global usemdsplus
-if isempty(usemdsplus); usemdsplus=1; end
-
+if ~exist('usemdsplus') || isempty(usemdsplus); usemdsplus=0; end
 error=1;
 
 time_int=[];
diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index 56637e10510691f8df6bbec8cf92b77a19ee9a6d..1093b7adc9b45555329a7a4b6f3e83cdc251d496 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -32,7 +32,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req
 % gdat_data.shot: shot number
 % gdat_data.machine: machine providing the data
 % gdat_data.gdat_request: keyword for gdat if relevant
-% gdat_data.data_fullpath: full path to the data node if known and relevant, or expression, or relevant function called if relevant
+% gdat_data.data_fullpath: full path to the data node if known and relevant, or relevant expression called if relevant
 % gdat_data.gdat_params: copy gdat_params for completeness
 % gdat_data.xxx: any other relevant information
 %
@@ -69,7 +69,7 @@ gdat_params.doplot = 0;
 gdat_params.liuqe = 1;
 
 % construct list of keywords from global set of keywords and specific TCV set
-% get data_request names from centralized function
+% get data_request names from centralized table
 data_request_names = get_data_request_names;
 % add TCV specific to all:
 if ~isempty(data_request_names.tcv)
@@ -354,24 +354,24 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi')
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 elseif strcmp(mapping_for_tcv.method,'expression')
   % 2nd: method="expression"
-  % assume expression contains function to call and which returns a structure into variable gdat_tmp
+  % assume expression contains an expression to evaluate and which creates a local structure into variable gdat_tmp
   % we copy the structure, to make sure default nodes are defined and to avoid if return is an closed object like tdi
   % eval_expr = [mapping_for_tcv.expression ';'];
   eval([mapping_for_tcv.expression ';']);
   if isempty(gdat_tmp) || (~isstruct(gdat_tmp) & ~isobject(gdat_tmp))
-    warning(['function expression does not return a structure: ' mapping_for_tcv.expression])
+    warning(['expression does not create a gdat_tmp structure: ' mapping_for_tcv.expression])
     error_status=801;
     return
   end
   tmp_fieldnames = fieldnames(gdat_tmp);
   if sum(strcmp(tmp_fieldnames,'data'))==0 % note: cannot do isfield since gdat_tmp might be an object
-    warning(['function does not return a child name ''data'' for ' data_request_eff])
+    warning(['expression does not return a child name ''data'' for ' data_request_eff])
   end
   for i=1:length(tmp_fieldnames)
     gdat_data.(tmp_fieldnames{i}) = gdat_tmp.(tmp_fieldnames{i});
   end
   % add .t and .x in case only dim is provided
-  % do not allow shifting of timedim since should be treated in the relevant function
+  % do not allow shifting of timedim since should be treated in the relevant expression
   ijdim=find(strcmp(tmp_fieldnames,'dim')==1);
   if ~isempty(ijdim)
     nbdims = length(gdat_data.dim);
@@ -397,7 +397,7 @@ elseif strcmp(mapping_for_tcv.method,'expression')
     end
     gdat_data.data_fullpath=mapping_for_tcv.expression;
   end
-  % end of method "function"
+  % end of method "expression"
 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 elseif strcmp(mapping_for_tcv.method,'switchcase')
@@ -592,8 +592,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
           gdat_data.dim{1} = gdat_data.eqdsk{itime}.rmesh;
           gdat_data.dim{2} = gdat_data.eqdsk{itime}.zmesh;
         else
-          aa=interpos2Dcartesian(gdat_data.eqdsk{itime}.rmesh,gdat_data.eqdsk{itime}.zmesh, ...
-          gdat_data.eqdsk{itime}.psi,repmat(gdat_data.dim{1}',1,129),repmat(gdat_data.dim{2},129,1),-1,-1);
+	  xx=repmat(reshape(gdat_data.dim{1},length(gdat_data.dim{1}),1),1,size(gdat_data.eqdsk{itime}.psi,2));
+	  yy=repmat(reshape(gdat_data.dim{2},1,length(gdat_data.dim{2})),size(gdat_data.eqdsk{itime}.psi,1),1);
+	  aa = interpos2Dcartesian(gdat_data.eqdsk{itime}.rmesh,gdat_data.eqdsk{itime}.zmesh ...
+	  ,gdat_data.eqdsk{itime}.psi,xx,yy,-1,-1);
           gdat_data.data(:,:,itime) = aa;
         end
       else
diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m
index 94fe43f84ec911e3a1ac24f2eb73dcf8a9b20ad6..1cb4e89bdfd32fd3fdb787c4e312b33d237d0b39 100644
--- a/crpptbx/TCV/tcv_requests_mapping.m
+++ b/crpptbx/TCV/tcv_requests_mapping.m
@@ -248,6 +248,7 @@ switch lower(data_request)
   mapping.label = 'Zmagaxis';
   mapping.method = 'tdiliuqe';
   mapping.expression = '\results::z_axis';
+  %
   % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % extra TCV cases (not necessarily in official data_request name list)
   % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/crpptbx/gdat_plot.m b/crpptbx/gdat_plot.m
index 04a3c9b4c4a07e91d50ea8400cd1ccfc36019fb7..2997459709f6cc0d3f06edc787d175e56cff7003 100644
--- a/crpptbx/gdat_plot.m
+++ b/crpptbx/gdat_plot.m
@@ -11,9 +11,8 @@ if ~isfield(gdat_data.gdat_params,'doplot') || gdat_data.gdat_params.doplot ==0
   return
 end
 
-fighandle = get(0,'CurrentFigure');
-
 if prod(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty(gdat_data.t)
+  fighandle = get(0,'CurrentFigure');
   if gdat_data.gdat_params.doplot == 1
     fighandle = figure;
   elseif gdat_data.gdat_params.doplot > 1
@@ -25,7 +24,17 @@ if prod(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty
     fighandle = figure(abs(gdat_data.gdat_params.doplot));
     hold all
   end
-  if any(find(size(gdat_data.data)==length(gdat_data.t)))
+  if strcmp(gdat_data.gdat_request,'eqdsk')
+    % special case, plot contours of first equil
+    endstr = '';
+    if iscell(gdat_data.eqdsk); endstr = '{1}'; end
+    eval(['contour(gdat_data.eqdsk' endstr '.rmesh,gdat_data.eqdsk' endstr '.zmesh,gdat_data.eqdsk' endstr '.psi'',100);'])
+    hold on
+    eval(['plot(gdat_data.eqdsk' endstr '.rplas,gdat_data.eqdsk' endstr '.zplas,''k'');'])
+    eval(['plot(gdat_data.eqdsk' endstr '.rlim,gdat_data.eqdsk' endstr '.zlim,''k'');'])
+    axis equal;
+    title(eval(['gdat_data.eqdsk' endstr '.stitle']));
+  elseif any(find(size(gdat_data.data)==length(gdat_data.t)))
     plot(gdat_data.t,gdat_data.data);
     title([gdat_data.gdat_params.machine ' #' num2str(gdat_data.shot)]);
     if isfield(gdat_data,'mapping_for')
@@ -33,7 +42,13 @@ if prod(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty
     else
       xlabel(['time']);
     end
-    ylabel([gdat_data.label '[' gdat_data.units ']']);
+    ylabel_eff = gdat_data.label;
+    if iscell(gdat_data.label) && length(gdat_data.label)>=2; ylabel_eff = gdat_data.label{2}; end
+    if ~isempty(gdat_data.units)
+      ylabel([ylabel_eff '[' gdat_data.units ']']);
+    else
+      ylabel(ylabel_eff);
+    end
     zoom on;
   end
 else