diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m
index 39335b60211a3994a903582038c9c759e5822259..d3b9ec7b14e4874dad559fc822b22dabd6eff1ff 100644
--- a/crpptbx/AUG/gdat_aug.m
+++ b/crpptbx/AUG/gdat_aug.m
@@ -50,6 +50,11 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 %    a6=gdat(32827,'ip','Opt1',123,'Doplot',1,'opt2','Abc'); % standard call with a few options (note all lowercase in output)
 %    eqd = gdat(33134,'eqdsk','equil','IDE','time',2,'extra_arg_sf2sig','''-ed'',2');
 %
+% to get parameters, similar special signals use: 'XXX:name' with XXX in {'param:', 'param-set:', 'area-base:', 'time-base:'}
+%    gyrofreq=gdat(30594,{'ECS','P_sy2_g1','AUGD','param:gyr_freq'});
+%    or
+%    gyrofreq=gdat(30594,{'ECS','P_sy2_g1'},'special_signal',,'param:gyr_freq');
+%
 %    ip=gdat(shot,'ip'); % will show in ip.gdat_fullpath the effective signal used. In this case it is similar to ask:
 %    ip=gdat(shot,{'FPC','IpiFP','AUGD'}); % or ip=gdat(shot,{'FPC','IpiFP'});
 %
@@ -112,7 +117,10 @@ gdat_data.data_fullpath = [];
 % Treat inputs:
 ivarargin_first_char = 3;
 data_request_eff = '';
-if nargin>=2 && ischar(data_request); data_request = lower(data_request); end
+if nargin>=2 && ischar(data_request);
+  data_request_eff = data_request;
+  data_request = data_request; % should not lower until see if keyword
+end
 
 gdat_data.gdat_request = data_request_names_all; % so if return early gives list of possible request names
 gdat_data.gdat_params.help = aug_help_parameters(fieldnames(gdat_data.gdat_params));
@@ -159,6 +167,7 @@ if nargin>=2 && ivarargin_first_char~=1
     end
     %data_request.data_request = lower(data_request.data_request);
     data_request_eff = data_request.data_request;
+    data_request.data_request = data_request.data_request;
     gdat_params = data_request;
   else
     % since data_request is char check from nb of args if it is data_request or a start of pairs
@@ -191,12 +200,13 @@ if (nargin>=ivarargin_first_char)
   if mod(nargin-ivarargin_first_char+1,2)==0
     for i=1:2:nargin-ivarargin_first_char+1
       if ischar(varargin_eff{i})
-        % enforce lower case for any character driven input
-        if ischar(varargin_eff{i+1})
-          gdat_params.(lower(varargin_eff{i})) = lower(varargin_eff{i+1});
-        else
-          gdat_params.(lower(varargin_eff{i})) = varargin_eff{i+1};
-        end
+        varargin_eff{i} = lower(varargin_eff{i});
+        % enforce lower case for any character driven input (only for 1st part of pair...)
+% $$$         if ischar(varargin_eff{i+1})
+          gdat_params.(varargin_eff{i}) = varargin_eff{i+1};
+% $$$         else
+% $$$           gdat_params.(lower(varargin_eff{i})) = varargin_eff{i+1};
+% $$$         end
       else
         if gdat_params.nverbose>=1; warning(['input argument nb: ' num2str(i) ' is incorrect, expects a character string']); end
         error_status=401;
@@ -227,19 +237,18 @@ gdat_params.extra_arg_sf2sig = extra_arg_sf2sig;
 
 % if it is a request_keyword can obtain description:
 if ischar(data_request_eff) || length(data_request_eff)==1
-  ij=strmatch(data_request_eff,data_request_names_all,'exact');
+  ij=strmatch(lower(data_request_eff),data_request_names_all,'exact');
 else
   ij=[];
 end
 
 if ~isempty(ij);
   gdat_data.gdat_request = data_request_names_all{ij};
+  gdat_params.data_request = gdat_data.gdat_request;
   if isfield(data_request_names.all.(data_request_names_all{ij}),'description') && ~isempty(data_request_names.all.(data_request_names_all{ij}).description)
     % copy description of keyword
     gdat_data.request_description = data_request_names.all.(data_request_names_all{ij}).description;
   end
-else
-  if ~isempty(data_request_eff); gdat_data.gdat_request = data_request_eff; end
 end
 
 % special treatment if shot and data_request given within pairs
@@ -254,7 +263,7 @@ if ~isfield(gdat_params,'data_request') || isempty(gdat_params.data_request)
   error_status=5;
   return
 end
-gdat_data.gdat_params = gdat_params;
+gdat_data.gdat_params = gdat_params; % This means that before here it is gdat_params which should be updated
 
 % re-assign main variables to make sure use the one in gdat_data structure
 shot = gdat_data.shot;
@@ -284,7 +293,7 @@ if strcmp(mapping_for_aug.method,'signal')
       gdat_data.data_request_names_all = data_request_names_all;
     end
     return
-  elseif length(mapping_for_aug.expression)>=3
+  elseif length(mapping_for_aug.expression)>=3 && ~isempty(mapping_for_aug.expression{3})
     exp_location = mapping_for_aug.expression{3};
   elseif length(mapping_for_aug.expression)>=2
     mapping_for_aug.expression{3} = exp_location;
@@ -310,21 +319,22 @@ if strcmp(mapping_for_aug.method,'signal')
   gdat_data.gdat_params.exp_name = exp_location;
   % time interval
   time_interval = [];
-  % extra args for sf2sig
+  % extra args for rdaAUG_eff
   if length(mapping_for_aug.expression)>=4 && ~isempty(mapping_for_aug.expression{4})
-    gdat_data.gdat_params.extra_arg_sf2sig = mapping_for_aug.expression{4};
+    gdat_data.gdat_params.special_signal = mapping_for_aug.expression{4};
   end
   [aatmp,error_status]=rdaAUG_eff(shot,mapping_for_aug.expression{1},mapping_for_aug.expression{2},exp_location, ...
-          time_interval,gdat_data.gdat_params.extra_arg_sf2sig);
+          time_interval,gdat_data.gdat_params.extra_arg_sf2sig,gdat_data.gdat_params.special_signal);
   if error_status~=0
     if gdat_params.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.t = aatmp.t;
-  gdat_data.x = aatmp.x;
+  if isfield(aatmp,'data'); gdat_data.data = aatmp.data; end
+  if isfield(aatmp,'t'); gdat_data.t = aatmp.t; end
+  if isfield(aatmp,'x'); gdat_data.x = aatmp.x; end
   if isfield(aatmp,'dimunits'); gdat_data.dimunits = aatmp.dimunits; end
-  if isempty(aatmp.data)
+  gdat_data.data_fullpath=mapping_for_aug.expression;
+  if isempty(aatmp.data) || (isempty(gdat_data.t) && isempty(gdat_data.x))
     return
   end
   if mapping_for_aug.timedim<=0
@@ -390,7 +400,6 @@ if strcmp(mapping_for_aug.method,'signal')
   else
     mapping_for_aug.gdat_timedim = mapping_for_aug.timedim;
   end
-  gdat_data.data_fullpath=mapping_for_aug.expression;
   % end of method "signal"
 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1581,10 +1590,12 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
           labels{i} = ['EC_' num2str(i)];
         end
       end
+      sys1_source = 'P_sy1_g';
+      if shot > 33725; sys1_source = 'P_sy3_g'; end
       try
-        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+        [a,e]=rdaAUG_eff(shot,'ECS',[sys1_source num2str(i)],gdat_data.gdat_params.exp_name,[], ...
           gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'gyr_freq']);
-        % eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        % eval(['a = sf2par(''ECS'',shot,''gyr_freq'','sys1_source num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
         % gyr_freq not present (old shots for example)
         a=[];
@@ -1595,9 +1606,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
         gdat_data.freq_ec(i) = a.value;
       end
       try
-        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+        [a,e]=rdaAUG_eff(shot,'ECS',[sys1_source num2str(i)],gdat_data.gdat_params.exp_name,[], ...
           gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GPolPos']);
-        % eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        % eval(['a = sf2par(''ECS'',shot,''GPolPos'','sys1_source num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
         % GPolPos not present
         a=[];
@@ -1608,9 +1619,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
         gdat_data.polpos_ec(i) = a.value;
       end
       try
-        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+        [a,e]=rdaAUG_eff(shot,'ECS',[sys1_source num2str(i)],gdat_data.gdat_params.exp_name,[], ...
           gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GTorPos']);
-        % eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        % eval(['a = sf2par(''ECS'',shot,''GTorPos'','sys1_source num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
         a=[];
       end
diff --git a/crpptbx/AUG/geteqdskAUG.m b/crpptbx/AUG/geteqdskAUG.m
index bac1c980d641c68a809975755baffe7a0a63590a..d991b1048bb0aa5e8e6042bffcc7ad5f17ee32e5 100644
--- a/crpptbx/AUG/geteqdskAUG.m
+++ b/crpptbx/AUG/geteqdskAUG.m
@@ -102,7 +102,7 @@ end
 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;
+% (psimesh from 0 to 1) 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.01,[1 2],[0 equil.pressure(end,it)]);
 eqdsk.pprime = interpos(equil.rhopolnorm(:,it),equil.dpressuredpsi(:,it),eqdsk.rhopsi,-0.01,[1 2],[0 equil.dpressuredpsi(end,it)]);
diff --git a/crpptbx/AUG/rdaAUG_eff.m b/crpptbx/AUG/rdaAUG_eff.m
index 96998cd4758b709d7892a9792555b48587492b1d..558f9907c37efeb25111acc610c850273e1e6ede 100644
--- a/crpptbx/AUG/rdaAUG_eff.m
+++ b/crpptbx/AUG/rdaAUG_eff.m
@@ -11,6 +11,7 @@ function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin);
 %
 % varargin{1}: time interval or timevalue, will get data closest to that time or within that time interval
 % varargin{2}: extra args for sf2sig like '-raw'
+%              if starts as in varargin{3}, assume varargin{2} is actually varargin{3} (allows param:... set in gdat easily)
 %
 % varargin{3}: 'param:xxx' means get parameter (instead of signal) with xxx as parameter to get
 %              'param-set:xxx' means get parameter-set (at this stage available only with sf2ps)
@@ -58,15 +59,25 @@ adata.exp = shotfile_exp;
 adata.edition_in = [];
 adata.edition_out = [];
 
+varargin_eff = varargin;
+nargin_eff = nargin;
+% now use special_signal (4th input) to specify extra demand, so can remain with edition or raw in extra_arg
+% $$$ special_varargin3 = {'param:', 'param-set:', 'area-base:', 'time-base:'};
+% $$$ ab=regexpi(varargin_eff{2},special_varargin3);
+% $$$ if ~isempty(cell2mat(ab)) && (length(varargin_eff)<3 || isempty(varargin_eff{3}))
+% $$$   varargin_eff{3} = varargin_eff{2};
+% $$$   varargin_eff{2} = '';
+% $$$   nargin_eff = max(nargin,7);
+% $$$ end
+
 time_int=[];
-if nargin>=5 & ~isempty(varargin{1})
-  time_int=varargin{1};
+if nargin_eff>=5 & ~isempty(varargin_eff{1})
+  time_int=varargin_eff{1};
 end
 extra_arg_sf2sig=[];
-if nargin>=6 & ~isempty(varargin{2})
-  extra_arg_sf2sig=varargin{2};
+if nargin_eff>=6 & ~isempty(varargin_eff{2})
+  extra_arg_sf2sig=varargin_eff{2};
 end
-
 param_name=[];
 param_set_name=[];
 area_base=false;
@@ -75,34 +86,34 @@ area_base_dimof=[];
 time_base=false;
 time_base_name=[];
 time_base_dimof=[];
-if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
-           && length(varargin{3})>=7 && strcmp(lower(varargin{3}(1:6)),'param:')
-  param_name=varargin{3}(7:end);
+if nargin_eff>=7 && ~isempty(varargin_eff{3}) && ischar(varargin_eff{3}) ...
+           && length(varargin_eff{3})>=7 && strcmp(lower(varargin_eff{3}(1:6)),'param:')
+  param_name=varargin_eff{3}(7:end);
 end
-if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
-           && length(varargin{3})>=11 && strcmp(lower(varargin{3}(1:10)),'param-set:')
-  param_set_name=varargin{3}(11:end);
+if nargin_eff>=7 && ~isempty(varargin_eff{3}) && ischar(varargin_eff{3}) ...
+           && length(varargin_eff{3})>=11 && strcmp(lower(varargin_eff{3}(1:10)),'param-set:')
+  param_set_name=varargin_eff{3}(11:end);
 end
-if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
-           && length(varargin{3})>=9 && strcmp(lower(varargin{3}(1:9)),'area-base')
+if nargin_eff>=7 && ~isempty(varargin_eff{3}) && ischar(varargin_eff{3}) ...
+           && length(varargin_eff{3})>=9 && strcmp(lower(varargin_eff{3}(1:9)),'area-base')
   area_base = true;
-  ij=findstr(varargin{3},':');
+  ij=findstr(varargin_eff{3},':');
   if length(ij)==2
-    area_base_name=varargin{3}(ij(1)+1:ij(2)-1);
-    area_base_dimof = str2num(varargin{3}(ij(2)+1:end));
+    area_base_name=varargin_eff{3}(ij(1)+1:ij(2)-1);
+    area_base_dimof = str2num(varargin_eff{3}(ij(2)+1:end));
   elseif length(ij)==1
-    area_base_name=varargin{3}(ij(1)+1:end);
+    area_base_name=varargin_eff{3}(ij(1)+1:end);
   end
 end
-if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
-           && length(varargin{3})>=9 && strcmp(lower(varargin{3}(1:9)),'time-base')
+if nargin_eff>=7 && ~isempty(varargin_eff{3}) && ischar(varargin_eff{3}) ...
+           && length(varargin_eff{3})>=9 && strcmp(lower(varargin_eff{3}(1:9)),'time-base')
   time_base = true;
-  ij=findstr(varargin{3},':');
+  ij=findstr(varargin_eff{3},':');
   if length(ij)==2
-    time_base_name=varargin{3}(ij(1)+1:ij(2)-1);
-    time_base_dimof = str2num(varargin{3}(ij(2)+1:end));
+    time_base_name=varargin_eff{3}(ij(1)+1:ij(2)-1);
+    time_base_dimof = str2num(varargin_eff{3}(ij(2)+1:end));
   elseif length(ij)==1
-    time_base_name=varargin{3}(ij(1)+1:end);
+    time_base_name=varargin_eff{3}(ij(1)+1:end);
   end
 end
 
@@ -167,9 +178,9 @@ if usemdsplus
       area_time_base_dimof = time_base_dimof;
     end
     if ~isempty(area_time_base_name)
-      if nargin>=5 & ~isempty(varargin{1})
+      if nargin_eff>=5 & ~isempty(varargin_eff{1})
         eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_time_base_name '","' shotfile_exp ...
-              '",' ed_number ',' num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']);
+              '",' ed_number ',' num2str(varargin_eff{1}(1),'%.14f') ',' num2str(varargin_eff{1}(end),'%.14f') ')'');']);
       else
         eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_time_base_name '","' shotfile_exp ...
               '",' ed_number ',,,_oshot' user diagname ',_oed' user diagname ')'');']);
@@ -201,7 +212,6 @@ if usemdsplus
   nb_xpoints_m1 = 4;
   if strcmp(sigtype,'Lpf')
     if (min(adata.data)<0*100000+3 && min(adata.data)~=0) || max(adata.data)>100000*20
-      keyboard
       disp(['seems to be a problem with Lpf assume 1 sol point and ' num2str(nb_surfaces_m1+1) ' surfaces'])
       adata.data(:) = 100000 + nb_surfaces_m1;
     end
@@ -401,7 +411,7 @@ else
       end
       adata.data = adata.value;
     catch ME
-      trhow(ME)
+      throw(ME)
     end
   elseif ~area_base && ~time_base
     % use sf2ps
diff --git a/crpptbx/subcall_all2str.m b/crpptbx/subcall_all2str.m
index a87eff3a3767bb855d26d6f42cd6d92ff5524838..6e5d1ee125d25ccaad650eb1ba91d844a6c8ebd4 100644
--- a/crpptbx/subcall_all2str.m
+++ b/crpptbx/subcall_all2str.m
@@ -19,7 +19,9 @@ end
 subcall = '';
 for i_in=1:length(varargin)
   var_to_treat = varargin{i_in};
-  if isstruct(var_to_treat)
+  if isempty(var_to_treat)
+    subcall = [subcall ',[]'];
+  elseif isstruct(var_to_treat)
     % explode structure into 'childname',childvalues
     param_names = fieldnames(var_to_treat);
     for i=1:length(param_names)
@@ -53,6 +55,14 @@ for i_in=1:length(varargin)
     end
   elseif ischar(var_to_treat)
     subcall = [subcall ',''' var_to_treat ''''];
+  elseif iscell(var_to_treat)
+    subcall = [subcall ',{''' var_to_treat{1} ''''];
+    for i=2:length(var_to_treat)
+      subcall = [subcall ','''  var_to_treat{i} ''''];
+    end
+    subcall = [subcall '}'];
+  else
+    warning('in subcall_all2str: case not foreseen');
   end
 end