diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index d3f2b77db13a8ac974f9d916e98a880dcc7cb19c..84a865aded99e6209e7ded8aeb0b0744011bbeda 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -107,7 +107,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 = tcv_help_parameters(fieldnames(gdat_data.gdat_params));
@@ -165,8 +168,8 @@ if nargin>=2 && ivarargin_first_char~=1
       error_status=3;
       return
     end
-    data_request.data_request = lower(data_request.data_request);
     data_request_eff = data_request.data_request;
+    data_request.data_request = lower(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
@@ -222,11 +225,10 @@ if (nargin>=ivarargin_first_char)
     return
   end
 end
-data_request_eff = gdat_params.data_request; % in case was defined in pairs
 
 % if it is a request_keyword copy it:
 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
@@ -309,7 +311,7 @@ if do_mdsopen_mdsclose
   if shot==-1 || liuqe_version_eff==-1
     ishot = mdsopen('pcs', shot);
   else
-    if length(data_request_eff)>7 && strcmp(data_request_eff(1:6),'\rtc::')
+    if length(data_request_eff)>7 && strcmp(lower(data_request_eff(1:6)),'\rtc::')
       ishot = mdsopen('rtc',shot); % sub-tree
       data_request_eff = data_request_eff(7:end);
       mapping_for_tcv.expression = data_request_eff;
@@ -677,6 +679,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
    case {'zgeom','z_geom'}
     % compute average minor or major radius (on z=zaxis normally)
     %
+    data_request_eff = 'zgeom';
+    gdat_data.gdat_request = data_request_eff;
+    gdat_data.gdat_params.gdat_request = gdat_data.gdat_request;
+    gdat_params = gdat_data.gdat_params;
     if liuqe_matlab==0
       nodenameeff=['tcv_eq(''z_contour'',''LIUQE' substr_liuqe_tcv_eq ''')'];
     else
@@ -1067,6 +1073,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if isfield(gdat_data.gdat_params,'channels') && ~isempty(gdat_data.gdat_params.channels)
       channels = gdat_data.gdat_params.channels;
     end
+    % '\base::pd:pd_001';
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'icds'}
@@ -1897,18 +1904,22 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'pprime', 'pprime_rho'}
     if liuqe_matlab==0
-      nodenameeff = ['tcv_eq(''' liuqefortran2liuqematlab('pprime_rho',1,0) ''',''LIUQE' substr_liuqe_tcv_eq ''')'];
+      nodenameeff = ['tcv_eq("' liuqefortran2liuqematlab('pprime_rho',1,0) '",''' psitbx_str ''')'];
       tracetdi=tdi(nodenameeff);
-      tracetdi.dim{1} = sqrt(tracetdi.dim{1}); % correct x-axis psi_norm to rhopol
-      tracetdi.data = tracetdi.data ./2 ./pi; % correct node assumption
+      if ~isempty(tracetdi.dim) && length(tracetdi.dim)>=1
+        tracetdi.dim{1} = sqrt(tracetdi.dim{1}); % correct x-axis psi_norm to rhopol
+      end
+      tracetdi.data = tracetdi.data ./2 ./pi; % correct node assumption (same for liuqe_fortran and fbte)
     else
-      nodenameeff = ['tcv_eq(''pprime_rho'',''LIUQE.M' substr_liuqe_tcv_eq ''')'];
+      nodenameeff = ['tcv_eq(''pprime_rho'',''' psitbx_str ''')'];
       tracetdi=tdi(nodenameeff);
     end
     gdat_data.data = tracetdi.data;
     gdat_data.dim = tracetdi.dim;
-    gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
-    gdat_data.x = gdat_data.dim{setdiff([1 2],mapping_for_tcv.gdat_timedim)};
+    if ~isempty(gdat_data.dim) && length(gdat_data.dim)>=2
+      gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
+      gdat_data.x = gdat_data.dim{setdiff([1 2],mapping_for_tcv.gdat_timedim)};
+    end
     gdat_data.data_fullpath=nodenameeff;
     gdat_data.dimunits = tracetdi.dimunits;
     gdat_data.units = tracetdi.units;
@@ -2489,6 +2500,30 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     end
     
 
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   case {'ttprime', 'ttprime_rho'}
+    if liuqe_matlab==0
+      nodenameeff = ['tcv_eq("' liuqefortran2liuqematlab('ttprime_rho',1,0) '",''' psitbx_str ''')'];
+      tracetdi=tdi(nodenameeff);
+      if ~isempty(tracetdi.dim) && length(tracetdi.dim)>=1
+        tracetdi.dim{1} = sqrt(tracetdi.dim{1}); % correct x-axis psi_norm to rhopol
+      end
+      tracetdi.data = tracetdi.data ./2 ./pi; % correct node assumption (same for liuqe_fortran and fbte)
+    else
+      nodenameeff = ['tcv_eq(''ttprime_rho'',''' psitbx_str ''')'];
+      tracetdi=tdi(nodenameeff);
+    end
+    gdat_data.data = tracetdi.data;
+    gdat_data.dim = tracetdi.dim;
+    if ~isempty(gdat_data.dim) && length(gdat_data.dim)>=2
+      gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
+      gdat_data.x = gdat_data.dim{setdiff([1 2],mapping_for_tcv.gdat_timedim)};
+    end
+    gdat_data.data_fullpath=nodenameeff;
+    gdat_data.dimunits = tracetdi.dimunits;
+    gdat_data.units = tracetdi.units;
+    gdat_data.request_description = 'ttprime=t*dt/dpsi';
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'profnerho','profterho'}
     % for backward compatibility but corresponds to ne_rho with param.fit_type='auto' (TCV special)
diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m
index 93b32b12741719fd3d59a45bd0f03c7884d6e370..b9b54e9c9eaed4809c1ce82cca177b191033c515 100644
--- a/crpptbx/TCV/tcv_requests_mapping.m
+++ b/crpptbx/TCV/tcv_requests_mapping.m
@@ -364,7 +364,7 @@ switch lower(data_request)
   mapping.method = 'switchcase';
  case {'ttprime', 'ttprime_rho'}
   mapping.timedim = 2;
-  mapping.label = 'pprime';
+  mapping.label = 'ttprime';
   mapping.method = 'switchcase';
  case 'vloop'
   mapping.timedim = 1;
diff --git a/crpptbx/gdat.m b/crpptbx/gdat.m
index ed5f95a8ab88911a75795742c186b44bcbc9ec35..e54cb69c37ab35666f0c43a4861ddd6804a586c0 100644
--- a/crpptbx/gdat.m
+++ b/crpptbx/gdat.m
@@ -51,6 +51,9 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request
 %    gd = gdat(48836,'ip','doplot',1,'machine','TCV'); % working call for TCV
 %    gd = gdat(35345,'ip','doplot',1,'machine','AUG'); % working call for AUG
 %
+%    gd = gdat; to get all available data_requests for the default machine
+%    gd = gdat('machine',machine); to get all available data_requests for a given machine
+%
 %    more detailed examples for specific machine: 
 %        help gdat_tcv; help gdat_aug; help gdat_jet; etc
 %
@@ -68,6 +71,9 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request
 % if nargin<=4 and >2 and 1st and 3rd are numeric, assume this is an old call and transform it to:
 % gdat(shot,'data_request','doplot',doplot','machine',machine)
 % and a warning
+
+nargin_eff = nargin;
+
 if nargin>2
   varargin_eff = varargin;
   if nargin>=3 && nargin<=4  && isnumeric(shot) && isnumeric(varargin{1})
@@ -102,6 +108,9 @@ if nargin>=2 % need at least 2 inputs to have 'machine','aug' as arguments (to a
   % in case start directly with pairs of options
   if ischar(shot) && strcmp(lower(shot),'machine') && ischar(data_request)
     machine_eff = data_request;
+    if nargin==2
+      nargin_eff = 0;
+    end
   elseif isstruct(shot) && isfield(shot,'machine')
     machine_eff = shot.machine;
   elseif isstruct(data_request) && isfield(data_request,'machine')
@@ -131,9 +140,9 @@ end
     
 % copy gdat present call:
 gdat_call = [];
-if nargin==0
+if nargin_eff==0
   subcall=['gdat;'];
-elseif nargin>=1
+elseif nargin_eff>=1
   if isnumeric(shot)
     subcall=['gdat(' num2str(shot) ];
   elseif ischar(shot)
@@ -143,14 +152,14 @@ elseif nargin>=1
     gdat_call = [];
     return
   end
-  if nargin>=2
+  if nargin_eff>=2
     if isempty(data_request)
       subcall = [subcall ',[]'];
     else
       substring = subcall_all2str(data_request);
       subcall = [subcall substring];
     end
-    if nargin>=3
+    if nargin_eff>=3
       substring = subcall_all2str(varargin_eff{:});
       subcall = [subcall substring];
     end
@@ -164,11 +173,11 @@ gdat_call = [subcall ' % nargout = ' num2str(nargout)];
 % Note: would need to check nargout to make call consistent, but to avoid this, each gdat_xxx should return at least an empty varargout: varargout{1}=cell(1);
 % copy subcall here so is last subnode
 try
-  if nargin==0
+  if nargin_eff==0
     args = {};
-  elseif nargin==1
+  elseif nargin_eff==1
     args = {shot};
-  elseif nargin==2  
+  elseif nargin_eff==2  
     args = {shot,data_request};
   else
     args = [{shot,data_request},varargin_eff];
diff --git a/crpptbx/gdatpaths.m b/crpptbx/gdatpaths.m
index 7c93c1836f02abb026f979b58d5db4e8b72fada0..8a25dd76468078238f5e76452b73acfb0aba9b78 100644
--- a/crpptbx/gdatpaths.m
+++ b/crpptbx/gdatpaths.m
@@ -14,7 +14,7 @@ a = fileparts(a);
 
 % machines=[{'JET'} {'TCV'} {'AUG'} {'D3D'}];
 % machines=[{'JET'} {'TCV'} {'AUG'} {'KSTAR'}];
-machines=[{'JET'} {'TCV'} {'AUG'} {'D3D'} {'KSTAR'} {'IMAS'}];
+machines=[{'JET'} {'TCV'} {'AUG'} {'D3D'} {'KSTAR'} {'TCV_IMAS'}];
 
 add_paths = cell(1,length(machines));
 for i=1:length(machines)
diff --git a/crpptbx/liuqefortran2liuqematlab.m b/crpptbx/liuqefortran2liuqematlab.m
index b5effd13341d8dfd9bcfeef771b9e475dea27806..623d6b520a83785ed10b2fa8b1ce7211ff4883a3 100644
--- a/crpptbx/liuqefortran2liuqematlab.m
+++ b/crpptbx/liuqefortran2liuqematlab.m
@@ -35,6 +35,7 @@ liuqe_fortran_matlab_table = [ ...
     {'r_min_psi'}     , {'r_in'}     ; ... % R inboard of rho flux surfaces
     {'r_max_psi'}     , {'r_out'}     ; ... % R outboard of rho flux surfaces
     {'total_energy'}  , {'w_mhd'}     ; ...
+    {'ttprime_psi'}   , {'ttprime_rho'} ; ... % warning on different x-mesh
     {'z_contour'}     , {'z_edge'}     ; ... % z_rho has all the flux surfaces
                    ];
 
diff --git a/crpptbx/test_all_requestnames.m b/crpptbx/test_all_requestnames.m
index dc2c85658a7d3d181129d24019f3ac22369593bb..6d0f440b02f866d49f891e1d03f61ba86e7950b9 100644
--- a/crpptbx/test_all_requestnames.m
+++ b/crpptbx/test_all_requestnames.m
@@ -27,7 +27,11 @@ else
 end
 
 %% get request list
-[gd0,gp0] = gdat;
+if isempty(machine)
+  [gd0,gp0] = gdat;
+else
+  [gd0,gp0] = gdat('machine',machine);
+end
 if isempty(machine)
   machine = gp0.machine;
 end
@@ -64,7 +68,7 @@ for ireq = 1:Nreq
   
   if ~ismember(myrequest,skip)
     % build request string
-    gdat_call{ireq} = sprintf('gdat_aug(%d,''%s'',''doplot'',%d,''machine'',''%s'')',shot,myrequest,doplot,machine);
+    gdat_call{ireq} = sprintf(['gdat_' machine '(%d,''%s'',''doplot'',%d)'],shot,myrequest,doplot);
     
     % eval call
     [err(ireq),telaps(ireq)] = do_gdat_call(gdat_call{ireq},nverbose);