diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index 84a865aded99e6209e7ded8aeb0b0744011bbeda..f521f6fda1a608e3912cdff14b6b84245f801754 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -56,6 +56,8 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req
 %    a5=gdat(48836,'ip'); % standard call
 %    a6=gdat(48836,'ip','Opt1',123,'Doplot',1,'opt2','Abc'); % standard call with a few options (note all lowercase in output)
 %    a7 = gdat(48836,'static("r_m")[$1]'',''001'); % note first and last quote of tdi argument added by gdat
+%    a7 = gdat(48836,'tcv_eq(''''psi'''',''''liuqe.m'''')'); % do not use double quote char so 'liuqe',11 will work
+%
 
 %
 % Comments for local developer:
diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m
index b9b54e9c9eaed4809c1ce82cca177b191033c515..821097a4d053cc8c844393c9f36de4563bab2085 100644
--- a/crpptbx/TCV/tcv_requests_mapping.m
+++ b/crpptbx/TCV/tcv_requests_mapping.m
@@ -232,6 +232,11 @@ switch lower(data_request)
   % node not filled in and in any case need special case for
   mapping.label = 'toroidal_flux';
   mapping.method = 'switchcase';
+ case 'psi'
+  mapping.timedim = 1;
+  mapping.label = 'psi(R,Z)';
+  mapping.method = 'tdiliuqe';
+  mapping.expression = 'tcv_eq(''''psi'''',''''LIUQE.M'''')';
  case 'powers'
   mapping.timedim = 1;
   mapping.label = 'various powers';
diff --git a/crpptbx/TCV_IMAS/get_ids_equilibrium_fixed_boundary.m b/crpptbx/TCV_IMAS/get_ids_equilibrium_fixed_boundary.m
index 2f10dbc8bb18603c5e95b859a1ad9fc04560aed7..98473a895e5849763bb54225c3910ddba4b6faa3 100644
--- a/crpptbx/TCV_IMAS/get_ids_equilibrium_fixed_boundary.m
+++ b/crpptbx/TCV_IMAS/get_ids_equilibrium_fixed_boundary.m
@@ -294,3 +294,50 @@ for it=1:length(ids_equilibrium.time)
       global_quantities.psi_boundary.data(it);
 end
 
+%
+%% profiles_2d{1} ala eqdsk, only this one thus grid_type=1
+%
+% b_field_r = gdat(params_equilibrium.shot,'b_field_r');
+% b_field_tor = gdat(params_equilibrium.shot,'b_field_tor');
+% b_field_z = gdat(params_equilibrium.shot,'b_field_z');
+% b_r = gdat(params_equilibrium.shot,'b_r');
+% b_tor = gdat(params_equilibrium.shot,'b_tor');
+% b_z = gdat(params_equilibrium.shot,'b_z');
+% grid = gdat(params_equilibrium.shot,'grid'); % special
+profiles_2d.grid_type.name = 'rectangular';
+profiles_2d.grid_type.index = 1;
+profiles_2d.grid_type.description = 'Cylindrical R,Z ala eqdsk';
+% j_parallel = gdat(params_equilibrium.shot,'j_parallel');
+% j_tor = gdat(params_equilibrium.shot,'j_tor');
+% phi = gdat(params_equilibrium.shot,'phi');
+profiles_2d.psi = gdat(params_equilibrium.shot,'psi');
+% r = gdat(params_equilibrium.shot,'r'); % not to be filled since in grid.dim1
+% theta = gdat(params_equilibrium.shot,'theta');
+% z = gdat(params_equilibrium.shot,'z'); % not to be filled since in grid.dim2
+
+profiles_2d_fieldnames = fieldnames(profiles_2d);
+special_fields = {'grid', 'grid_type'}; % fields needing non-automatic treatments
+for it=1:length(ids_equilibrium.time)
+  for i=1:length(profiles_2d_fieldnames)
+    if ~any(strcmp(profiles_2d_fieldnames{i},special_fields))
+      if ~isstruct(ids_equilibrium.time_slice{it}.profiles_2d{1}.(profiles_2d_fieldnames{i}))
+        if ~ischar(profiles_2d.(profiles_2d_fieldnames{i}).data) && ~isempty(profiles_2d.(profiles_2d_fieldnames{i}).data) ...
+              && size(profiles_2d.(profiles_2d_fieldnames{i}).data,2)>=it
+          ids_equilibrium.time_slice{it}.profiles_2d{1}.(profiles_2d_fieldnames{i}) = ...
+              profiles_2d.(profiles_2d_fieldnames{i}).data(:,:,it);
+        end
+      else
+        special_fields{end+1} = profiles_2d_fieldnames{i};
+      end
+    end
+  end
+end
+
+% special cases
+for it=1:length(ids_equilibrium.time)
+  ids_equilibrium.time_slice{it}.profiles_2d{1}.grid_type.name = profiles_2d.grid_type.name;
+  ids_equilibrium.time_slice{it}.profiles_2d{1}.grid_type.index = profiles_2d.grid_type.index;
+  ids_equilibrium.time_slice{it}.profiles_2d{1}.grid_type.description = profiles_2d.grid_type.description;
+  ids_equilibrium.time_slice{it}.profiles_2d{1}.grid.dim1 = profiles_2d.psi.dim{1};
+  ids_equilibrium.time_slice{it}.profiles_2d{1}.grid.dim2 = profiles_2d.psi.dim{2};
+end