diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
index 1a3c531d034e868b0a595929cbe2b9c3591108ac..6f630945d23ad81bdf831e41bc201d4ec6e3602f 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
@@ -103,7 +103,7 @@ vol    = interp1(liuqe_time,vol_liu.data.',   ohm_tgrid)';
 R0 = ids_core_sources.vacuum_toroidal_field.r0;
 B0 = interp1(ids_core_sources.time,ids_core_sources.vacuum_toroidal_field.b0,ohm_tgrid);
 
-jpar_tilde_to_jpar_0 = R0*T.*Rm2_fs./B0'; 
+jpar_tilde_to_jpar_0 = R0*T.*Rm2_fs./B0';
 
 % map volume and conversion factor on rho_pol grid of ohm_data cd_dens
 jpar_tilde_to_jpar_0_mapped = ...
@@ -206,33 +206,44 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
     ids_core_sources.source{last_index+i_lau}.global_quantities(1:nt_ec_out) = {globals_template};
   end
 
-  % load LIUQE data to convert
-  % \tilde{V,TORAY}_// = dI_\phi/dV = (1/2\pi)<j_\phi/R> to j_//0 = <jdotB>/B0;
-  % conversion using j_//,cd = <j_cd/B> B, thus j_// = 2\pi <B^2> / (B_0 <B_\phi/R>)
-  mu0     = 4*pi*10^-7;
-  % interpolate liuqe outputs on ohm_tgrid
-  T      = interp1(liuqe_time,T_liu.data.',     ec_tgrid_toray)';
-  Rm2_fs = interp1(liuqe_time,Rm2_fs_liu.data.',ec_tgrid_toray)';
-  vol    = interp1(liuqe_time,vol_liu.data.',   ec_tgrid_toray)';
-  Ip     = interp1(liuqe_time,Ip_liu.data,      ec_tgrid_toray); 
-  q      = interp1(liuqe_time,q_liu.data.',     ec_tgrid_toray)';   
-  mVprime = -2*pi*q./T./Rm2_fs;
-  B2_fs   = mu0*Ip./mVprime + T.^2.*Rm2_fs;
-  
   % get vacuum field data from ids
   R0 = ids_core_sources.vacuum_toroidal_field.r0;
   B0 = interp1(ids_core_sources.time,ids_core_sources.vacuum_toroidal_field.b0,ec_tgrid_toray);
-  
-  jtoray_to_jpar0 = 2*pi./B0./(T.*Rm2_fs).*B2_fs;
+
+  % do conversion j_{V,TORAY} = dI_\phi/dV = (1/2\pi)<j_\phi/R> to j_//0 = <jdotB>/B0;
+  % via j_tilde// = <jdotB>/(R0 <Bphi/R>) = 2*pi/R0/Rm2_fs[j_{V,TORAY}-dT/dV/T*I_{phi,cd}]
+
+  % interpolate liuqe outputs on ec_tgrid_toray
+  T      = interp1(liuqe_time,T_liu.data.',     ec_tgrid_toray)';
+  Rm2_fs = interp1(liuqe_time,Rm2_fs_liu.data.',ec_tgrid_toray)';
+  vol    = interp1(liuqe_time,vol_liu.data.',   ec_tgrid_toray)';
+
+%  % alternative conversion, slightly mismatching with the conversion
+%  % above, to be clarified
+%  % using j_//,cd = <j_cd/B> B, thus j_// = 2\pi <B^2> / (B_0 <B_\phi/R>)
+%   mu0     = 4*pi*10^-7;
+%   q      = interp1(liuqe_time,q_liu.data.',     ec_tgrid_toray)';
+%   Ip     = interp1(liuqe_time,Ip_liu.data,      ec_tgrid_toray);
+%   Vprime = -2*pi*q./T./Rm2_fs;
+%   B2_fs   = -mu0*Ip./Vprime + T.^2.*Rm2_fs;
+%   jtoray_to_jpar0 = 2*pi./B0./T./Rm2_fs.*B2_fs;
+%   jtoray_to_jpar0_mapped = nan(size(ec_data.cd_dens.x));
 
   % interpolate on ec_data rho_pol grid
-  jtoray_to_jpar0_mapped = nan(size(ec_data.cd_dens.x));
-  vol_mapped = nan(size(ec_data.cd_dens.x));
+  vol_mapped    = nan(size(ec_data.cd_dens.x));
+  T_mapped      = nan(size(ec_data.cd_dens.x));
+  dTdV_mapped   = nan(size(ec_data.cd_dens.x));
+  Rm2_fs_mapped = nan(size(ec_data.cd_dens.x));
   for ii = 1:nt_ec_toray
-    jtoray_to_jpar0_mapped(:,ii) = ...
-      interp1(rho_pol_norm_liu.data,jtoray_to_jpar0(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
-    vol_mapped(:,ii) = ...
-      interp1(rho_pol_norm_liu.data,vol(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
+%     jtoray_to_jpar0_mapped(:,ii) = ...
+%       interp1(rho_pol_norm_liu.data,jtoray_to_jpar0(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
+    vol_mapped(:,ii)      = interpos(...
+      rho_pol_norm_liu.data,vol(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
+    T_mapped(:,ii)        = interpos(...
+      rho_pol_norm_liu.data,T(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
+    [~,dTdV_mapped(:,ii)] = interpos(vol_mapped(:,ii),T_mapped(:,ii));
+    Rm2_fs_mapped(:,ii)   = interpos(...
+      rho_pol_norm_liu.data,Rm2_fs(:,ii),ec_data.cd_dens.grids.rho_pol_norm(:,ii));
   end
 
   % load 1d_profiles from ec_data
@@ -242,14 +253,26 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
   p_integrated(isnan(p_integrated)) = 0;
   cd_dens       = ec_data.cd_dens_doublewidth.data; % use double width to have realistic deposition broadening
   cd_dens(isnan(cd_dens)) = 0;
-  
-  cd_integrated = zeros(size(ec_data.cd_integrated.data));
+  cd_integrated = ec_data.cd_integrated.data;
+  cd_integrated(isnan(cd_integrated)) = 0;
+
+  % initialize variables
+  jpar_tilde       = zeros(size(cd_dens));
+  jpar0            = zeros(size(cd_dens));
+  jpar0_integrated = zeros(size(cd_dens));
+
+  % convert and integrate j_TORAY to j//0
   for i_lau = active_launchers
-    % convert to j// with conversion factor
-    cd_dens(:,i_lau,:) = squeeze(cd_dens(:,i_lau,:)).*jtoray_to_jpar0_mapped;
+%     % alternative conversion
+%     jpar0(:,i_lau,:) = squeeze(cd_dens(:,i_lau,:)).*jtoray_to_jpar0_mapped;
+
+    jpar_tilde(:,i_lau,:) = 2*pi/R0./Rm2_fs_mapped.*(squeeze(cd_dens(:,i_lau,:))...
+      -dTdV_mapped./T_mapped.*squeeze(cd_integrated(:,i_lau,:)));
+    jpar0(:,i_lau,:) = squeeze(jpar_tilde(:,i_lau,:)).*R0.*T_mapped.*Rm2_fs_mapped./B0;
+
     for ii = 1:nt_ec_toray
-      % integrate j//
-      cd_integrated(:,i_lau,ii) = cumtrapz(vol_mapped(:,ii),cd_dens(:,i_lau,ii))/(2*pi*R0);
+      % integrate j//0
+      [~,~,~,jpar0_integrated(:,i_lau,ii)] = interpos(vol_mapped(:,ii),jpar0(:,i_lau,ii)/(2*pi*R0));
     end
   end
 
@@ -262,35 +285,35 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
   rho_tor_norm = ec_data.cd_dens.grids.rho_tor_norm;
 
   % calculate normalised profiles on ec_tgrid_toray grid
-  norm_p_dens        = zeros(n_rho,nb_launchers+1,nt_ec_toray);
-  norm_p_integrated  = zeros(n_rho,nb_launchers+1,nt_ec_toray);
-  norm_cd_dens       = zeros(n_rho,nb_launchers+1,nt_ec_toray);
-  norm_cd_integrated = zeros(n_rho,nb_launchers+1,nt_ec_toray);
+  norm_p_dens           = zeros(n_rho,nb_launchers+1,nt_ec_toray);
+  norm_p_integrated     = zeros(n_rho,nb_launchers+1,nt_ec_toray);
+  norm_jpar0            = zeros(n_rho,nb_launchers+1,nt_ec_toray);
+  norm_jpar0_integrated = zeros(n_rho,nb_launchers+1,nt_ec_toray);
   for it = 1:nt_ec_toray
-    norm_p_dens(:,:,it)        = p_dens(:,:,it)       ./sparse_p_ec_injected(it);
-    norm_p_integrated(:,:,it)  = p_integrated(:,:,it) ./sparse_p_ec_injected(it);
-    norm_cd_dens(:,:,it)       = cd_dens(:,:,it)      ./sparse_p_ec_injected(it);
-    norm_cd_integrated(:,:,it) = cd_integrated(:,:,it)./sparse_p_ec_injected(it);
+    norm_p_dens(:,:,it)           = p_dens(:,:,it)          ./sparse_p_ec_injected(it);
+    norm_p_integrated(:,:,it)     = p_integrated(:,:,it)    ./sparse_p_ec_injected(it);
+    norm_jpar0(:,:,it)            = jpar0(:,:,it)           ./sparse_p_ec_injected(it);
+    norm_jpar0_integrated(:,:,it) = jpar0_integrated(:,:,it)./sparse_p_ec_injected(it);
   end
 
   % interpolate normalised p_dens profiles on ec_powers_tgrid
-  interp_norm_p_dens        = zeros(n_rho,nb_launchers+1,nt_ec_out);
-  interp_norm_p_integrated  = zeros(n_rho,nb_launchers+1,nt_ec_out);
-  interp_norm_cd_dens       = zeros(n_rho,nb_launchers+1,nt_ec_out);
-  interp_norm_cd_integrated = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_norm_p_dens           = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_norm_p_integrated     = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_norm_jpar0            = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_norm_jpar0_integrated = zeros(n_rho,nb_launchers+1,nt_ec_out);
   for i_lau = active_launchers
     for irho = 1:n_rho
       % get power and current density at each rho
       trace_p_dens        = squeeze(norm_p_dens(irho,i_lau,:));
       trace_p_integrated  = squeeze(norm_p_integrated(irho,i_lau,:));
-      trace_cd_dens       = squeeze(norm_cd_dens(irho,i_lau,:));
-      trace_cd_integrated = squeeze(norm_cd_integrated(irho,i_lau,:));
+      trace_jpar0       = squeeze(norm_jpar0(irho,i_lau,:));
+      trace_jpar0_integrated = squeeze(norm_jpar0_integrated(irho,i_lau,:));
       % interpolate on gdat powers tgrid, interpos 21 to extrapolate,
-      % taking constant value y_edge; needed for time window between start of EC and first TS time 
-      interp_norm_p_dens(       irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_p_dens,       ec_tgrid_out(3:end-2));
-      interp_norm_p_integrated( irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_p_integrated, ec_tgrid_out(3:end-2));
-      interp_norm_cd_dens(      irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_cd_dens,      ec_tgrid_out(3:end-2));
-      interp_norm_cd_integrated(irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_cd_integrated,ec_tgrid_out(3:end-2));
+      % taking constant value y_edge; needed for time window between start of EC and first TS time
+      interp_norm_p_dens(          irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_p_dens,          ec_tgrid_out(3:end-2));
+      interp_norm_p_integrated(    irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_p_integrated,    ec_tgrid_out(3:end-2));
+      interp_norm_jpar0(           irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_jpar0,           ec_tgrid_out(3:end-2));
+      interp_norm_jpar0_integrated(irho,i_lau,3:end-2) = interpos(21,ec_tgrid_toray,trace_jpar0_integrated,ec_tgrid_out(3:end-2));
     end
   end
 
@@ -307,13 +330,13 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
   % normalised & interpolated profiles * p_ec_injected on interp_tgrid
   interp_p_dens        = zeros(n_rho,nb_launchers+1,nt_ec_out);
   interp_p_integrated  = zeros(n_rho,nb_launchers+1,nt_ec_out);
-  interp_cd_dens       = zeros(n_rho,nb_launchers+1,nt_ec_out);
-  interp_cd_integrated = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_jpar0         = zeros(n_rho,nb_launchers+1,nt_ec_out);
+  interp_jpar0_integrated = zeros(n_rho,nb_launchers+1,nt_ec_out);
   for it = 1:nt_ec_out % fill profiles only for time slices when EC is nonzero, thus it+2 assignment
-    interp_p_dens(:,:,it)        = interp_norm_p_dens(:,:,it)       .*p_ec_injected(it);
-    interp_p_integrated(:,:,it)  = interp_norm_p_integrated(:,:,it) .*p_ec_injected(it);
-    interp_cd_dens(:,:,it)       = interp_norm_cd_dens(:,:,it)      .*p_ec_injected(it);
-    interp_cd_integrated(:,:,it) = interp_norm_cd_integrated(:,:,it).*p_ec_injected(it);
+    interp_p_dens(:,:,it)           = interp_norm_p_dens(:,:,it)          .*p_ec_injected(it);
+    interp_p_integrated(:,:,it)     = interp_norm_p_integrated(:,:,it)    .*p_ec_injected(it);
+    interp_jpar0(:,:,it)            = interp_norm_jpar0(:,:,it)           .*p_ec_injected(it);
+    interp_jpar0_integrated(:,:,it) = interp_norm_jpar0_integrated(:,:,it).*p_ec_injected(it);
   end
 
   % fill the ids entries
@@ -333,10 +356,10 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
           interp_p_integrated(:,i_lau,ii);
         % current density
         ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.j_parallel = ...
-          interp_cd_dens(:,i_lau,ii);
+          interp_jpar0(:,i_lau,ii);
         % integrated current density
         ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.current_parallel_inside = ...
-          interp_cd_integrated(:,i_lau,ii);
+          interp_jpar0_integrated(:,i_lau,ii);
       end
 
       % globals
@@ -344,7 +367,7 @@ if ~isempty(ec_gdat.ec.data) % if EC data available, fill sources
       ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.power = ...
         interp_p_integrated(end,i_lau,ii);
       ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.current_parallel = ...
-        interp_cd_integrated(end,i_lau,ii);
+        interp_jpar0_integrated(end,i_lau,ii);
     end
   end