diff --git a/crpptbx/TCV/loadTCVdata.m b/crpptbx/TCV/loadTCVdata.m
index 915106a80c1abb1dfbefdbc569fb794ecec44d88..6c0a2f7f955bad010f4d2f0a85957fe8e06a8cfb 100644
--- a/crpptbx/TCV/loadTCVdata.m
+++ b/crpptbx/TCV/loadTCVdata.m
@@ -18,6 +18,7 @@
 % 'delta', 'triang'[_2,_3] =  edge averaged triangularity vs time
 % 'deltatop', 'triangtop'[_2,_3] =  edge upper (top) triangularity vs time
 % 'deltabot', 'triangbot'[_2,_3] =  edge lower (bottom) triangularity vs time
+% 'j_tor'[_2,_3] =  J_TOR vs (R,Z,time)
 % 'neint' =  line-integrated electron density [m/m^3]
 % 'ne'= ne raw profile on (z,t). ADD error bars in .std
 % 'te'= Te raw profile on (z,t). ADD error bars in .std
@@ -28,6 +29,7 @@
 % 'profnerho' =  ne smoothed or fitted , vs (rho,t) (from Thomson auto fit)
 % 'profterho' =  te smoothed or fitted , vs (rho,t) (from Thomson auto fit)
 % 'neft' =  ne fitted from data on rho mesh (from proffit.local_time:neft_abs)
+% 'neft:4' =  ne fitted from data on rho mesh (from proffit.local_time:neft_abs from trial:trial_indx=4)
 % 'teft' =  te fitted from data on rho mesh (from proffit.local_time:teft)
 % 'neftav' =  ne fitted from averaged over time data on rho mesh (from proffit.avg_time:neft_abs)
 % 'teftav' =  te fitted from averaged over time data on rho mesh (from proffit.avg_time:teft)
@@ -113,7 +115,20 @@ if shot==-1 || shot>=100000
 end
 
 % use keyword without eventual _2 or _3 extension to check for multiple possibilities
-data_type_eff_noext=data_type_eff(1:end-i_23);
+% Also remove ":4" for trial_indx specification
+jj=strfind(data_type_eff,':');
+trialindx=[];
+if ~isempty(jj)
+  ii=strmatch(data_type_eff(1:jj-1),[{'teft'},{'neft'},{'teftav'},{'neftav'}])
+  if ~isempty(ii)
+    trialindx=str2num(data_type_eff(jj+1:end));
+    data_type_eff_noext=[data_type_eff(1:jj-1) ':trial'];
+  else
+    data_type_eff_noext=data_type_eff(1:end-i_23);
+  end
+else
+  data_type_eff_noext=data_type_eff(1:end-i_23);
+end
 if ~isempty(strmatch(data_type_eff_noext,[{'ip'} {'i_p'} {'xip'}],'exact'))
   data_type_eff_noext='Ip';
 end
@@ -153,6 +168,10 @@ end
 if ~isempty(strmatch(data_type_eff_noext,[{'elongation'} {'elon'}],'exact'))
   data_type_eff_noext='kappa';
 end
+if ~isempty(strmatch(lower(data_type_eff_noext),[{'j_tor'} {'jtor'} {'\results::j_tor'}],'exact'))
+  data_type_eff_noext='jtor';
+  data_type_eff = ['jtor' endstr];
+end
 if ~isempty(strmatch(data_type_eff_noext,[{'triangularity'} {'triang'}],'exact'))
   data_type_eff_noext='delta';
 end
@@ -182,9 +201,10 @@ end
 
 % nodes which have _2 and _3 equivalence, related to simpletdi case
 liuqe23=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\results::q_psi'} ...
-      {'\results::beta_tor'} {'\results::beta_pol'} {'\results::q_95'} {'\results::l_i'}  {'\results::delta_95'} ...
-      {'\results::kappa_95'} {'\results::r_contour'} {'\results::z_contour'} {'\results::psi_axis'} ...
-      {'\results::thomson:psiscatvol'} {'\results::thomson:psi_max'} {'\results::rms_error'} {'\results::total_energy'}];
+         {'\results::beta_tor'} {'\results::beta_pol'} {'\results::q_95'} {'\results::l_i'}  {'\results::delta_95'} ...
+         {'\results::kappa_95'} {'\results::r_contour'} {'\results::z_contour'} {'\results::psi_axis'} ...
+         {'\results::thomson:psiscatvol'} {'\results::thomson:psi_max'} {'\results::rms_error'} {'\results::total_energy'} ...
+         {'\results::j_tor'} ];
 
 % nodes which have FBTE equivalence, related to simpletdi case
 liuqeFBTE=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\results::q_psi'} ...
@@ -193,14 +213,14 @@ liuqeFBTE=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\result
 
 % keywords which do not have FBTE equivalence and are returned empty
 noFBTE=[{'ne'} {'te'} {'nerho'} {'terho'} {'nerhozshift'} {'terhozshift'} {'profnerho'} {'profterho'} ...
-	{'neft'} {'teft'} {'neftav'} {'teftav'} {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'neint'}];
+	{'neft'} {'neft:trial'} {'teft:trial'} {'neftav:trial'} {'teftav:trial'} {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'neint'}];
 
 % all keywords and corresponding case to run below
 TCVkeywrdall=[{'Ip'} {'zmag'} {'rmag'} {'rcont'} {'zcont'} {'vol'} {'rhovol'} {'qrho'} {'q95'} {'kappa'} ...
       {'delta'} {'deltatop'} {'deltabot'} {'neint'} ...
       {'ne'} {'te'} {'nerho'} {'terho'} {'nerhozshift'} {'terhozshift'} {'profnerho'} {'profterho'} ...
-      {'neft'} {'teft'} {'neftav'} {'teftav'}  ...
-      {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'pgyro'}];
+      {'neft'} {'teft'} {'neftav'} {'teftav'} {'neft:trial'} {'teft:trial'} {'neftav:trial'} {'teftav:trial'}  ...
+      {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'pgyro'} {'jtor'}];
 TCVsig.iip=strmatch('Ip',TCVkeywrdall,'exact');
 TCVsig.izmag=strmatch('zmag',TCVkeywrdall,'exact');
 TCVsig.irmag=strmatch('rmag',TCVkeywrdall,'exact');
@@ -224,9 +244,13 @@ TCVsig.iterhozshift=strmatch('terhozshift',TCVkeywrdall,'exact');
 TCVsig.iprofnerho=strmatch('profnerho',TCVkeywrdall,'exact');
 TCVsig.iprofterho=strmatch('profterho',TCVkeywrdall,'exact');
 TCVsig.ineft=strmatch('neft',TCVkeywrdall,'exact');
+TCVsig.ineft_trial=strmatch('neft:trial',TCVkeywrdall);
 TCVsig.iteft=strmatch('teft',TCVkeywrdall,'exact');
+TCVsig.iteft_trial=strmatch('teft:trial',TCVkeywrdall);
 TCVsig.ineftav=strmatch('neftav',TCVkeywrdall,'exact');
+TCVsig.ineftav_trial=strmatch('neftav:trial',TCVkeywrdall);
 TCVsig.iteftav=strmatch('teftav',TCVkeywrdall,'exact');
+TCVsig.iteftav_trial=strmatch('teftav:trial',TCVkeywrdall);
 TCVsig.isxr=strmatch('sxr',TCVkeywrdall,'exact');
 TCVsig.isxR=strmatch('sxR',TCVkeywrdall,'exact');
 TCVsig.iece=strmatch('ece',TCVkeywrdall,'exact');
@@ -234,6 +258,7 @@ TCVsig.iMPX=strmatch('MPX',TCVkeywrdall,'exact');
 TCVsig.iIOH=strmatch('IOH',TCVkeywrdall,'exact');
 TCVsig.ivloop=strmatch('vloop',TCVkeywrdall,'exact');
 TCVsig.ipgyro=strmatch('pgyro',TCVkeywrdall,'exact');
+TCVsig.ijtor=strmatch('jtor',TCVkeywrdall,'exact');
 
 % For each keyword, specify which case to use. As most common is 'simpletdi', fill in with this and change
 % only indices needed. Usually use name of case same as keyword name
@@ -245,6 +270,10 @@ TCVkeywrdcase(TCVsig.irhovol)=TCVkeywrdall(TCVsig.irhovol); % idem vol
 TCVkeywrdcase(TCVsig.ine)=TCVkeywrdall(TCVsig.ine); % special as dimensions from other nodes
 TCVkeywrdcase(TCVsig.ite)=TCVkeywrdall(TCVsig.ite); % idem
 TCVkeywrdcase(TCVsig.inerho)=TCVkeywrdall(TCVsig.inerho); % idem
+TCVkeywrdcase(TCVsig.iteft_trial)=TCVkeywrdall(TCVsig.iteft_trial); % special to extract trial_indx if needed
+TCVkeywrdcase(TCVsig.ineft_trial)=TCVkeywrdall(TCVsig.ineft_trial); % special to extract trial_indx if needed
+TCVkeywrdcase(TCVsig.iteftav_trial)=TCVkeywrdall(TCVsig.iteftav_trial); % special to extract trial_indx if needed
+TCVkeywrdcase(TCVsig.ineftav_trial)=TCVkeywrdall(TCVsig.ineftav_trial); % special to extract trial_indx if needed
 TCVkeywrdcase(TCVsig.iterho)=TCVkeywrdall(TCVsig.iterho); % idem
 TCVkeywrdcase(TCVsig.inerhozshift)=TCVkeywrdall(TCVsig.inerhozshift); % idem
 TCVkeywrdcase(TCVsig.iterhozshift)=TCVkeywrdall(TCVsig.iterhozshift); % idem
@@ -257,6 +286,7 @@ TCVkeywrdcase(TCVsig.iMPX)=TCVkeywrdall(TCVsig.iMPX);
 TCVkeywrdcase(TCVsig.iIOH)=TCVkeywrdall(TCVsig.iIOH);
 TCVkeywrdcase(TCVsig.ivloop)=TCVkeywrdall(TCVsig.ivloop);
 TCVkeywrdcase(TCVsig.ipgyro)=TCVkeywrdall(TCVsig.ipgyro);
+TCVkeywrdcase(TCVsig.ijtor)=TCVkeywrdall(TCVsig.ijtor);
 
 % Information about which dimension has time, always return 2D data as (x,t) array
 % as most are 1D arrays with time as first index, fill in with ones and change only those needed
@@ -283,6 +313,11 @@ TCVsiglocation(TCVsig.ineft)={'\results::proffit.local_time:neft_abs'}; TCVsigti
 TCVsiglocation(TCVsig.iteft)={'\results::proffit.local_time:teft'}; TCVsigtimeindx(TCVsig.iteft)=2;
 TCVsiglocation(TCVsig.ineftav)={'\results::proffit.avg_time:neft_abs'}; TCVsigtimeindx(TCVsig.ineftav)=2;
 TCVsiglocation(TCVsig.iteftav)={'\results::proffit.avg_time:teft'}; TCVsigtimeindx(TCVsig.iteftav)=2;
+TCVsiglocation(TCVsig.ineft_trial)=TCVsiglocation(TCVsig.ineft); TCVsigtimeindx(TCVsig.ineft_trial)=2;
+TCVsiglocation(TCVsig.iteft_trial)=TCVsiglocation(TCVsig.iteft); TCVsigtimeindx(TCVsig.iteft_trial)=2;
+TCVsiglocation(TCVsig.ineftav_trial)=TCVsiglocation(TCVsig.ineftav); TCVsigtimeindx(TCVsig.ineftav_trial)=2;
+TCVsiglocation(TCVsig.iteftav_trial)=TCVsiglocation(TCVsig.iteftav); TCVsigtimeindx(TCVsig.iteftav_trial)=2;
+
 
 % initialize order of substructures and allows just a "return" if data empty
 trace.data=[];
@@ -291,7 +326,6 @@ trace.t=[];
 trace.dim=[];
 trace.dimunits=[];
 trace.units=[];
-
 irpintwarn=0;
 % find index of signal called upon
 if strcmp(data_type_eff(1:1),'\')
@@ -316,7 +350,7 @@ if strcmp(data_type_eff(1:1),'\')
     error('in loadTCVdata')
   end
 else
-  index=strmatch(data_type_eff_noext,TCVkeywrdall,'exact');
+  index=strmatch(data_type_eff_noext,TCVkeywrdall,'exact')
   if isempty(index)
     disp(' ')
     disp('********************')
@@ -938,6 +972,47 @@ switch TCVkeywrdcase{index}
     mdsclose;
     error=0;
     
+  %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+  case 'jtor'
+    %  \results::j_tor , 3-D so need to specify time dim index
+    mdsopen(shot);
+    nodenameeff=[{'\results::j_tor'} endstr];
+    tracetdi=tdi(nodenameeff{:});
+    trace.data=tracetdi.data;
+    trace.x=tracetdi.dim{1};
+    trace.t=tracetdi.dim{3};
+    trace.dim=tracetdi.dim;
+    trace.dimunits=tracetdi.dimunits;
+    % isfield does not work since tracetdi is not a 'struct' but a tdi object, thus isfield using isa does not work
+    if any(strcmp(fieldnames(tracetdi),'units'))
+      trace.units=tracetdi.units;
+    end
+    trace.name=[num2str(shot) ';' nodenameeff];
+    mdsclose;
+    error=0;
+    
+  %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+  case {'neft:trial','teft:trial','neftav:trial','teftav:trial'}
+    %  trial indx
+    mdsopen(shot);
+    eval(['nodenameeff={''' TCVsiglocation{index} ':trial''};']);
+    tracetdi=tdi(nodenameeff{:});
+    if isempty(trialindx)
+      error('trialindx should not be empty, check call or ask O. Sauter');
+    end
+    trace.data=tracetdi.data(:,:,trialindx+1);
+    trace.x=tracetdi.dim{1};
+    trace.t=tracetdi.dim{2};
+    trace.dim=tracetdi.dim(1:2);
+    trace.dimunits=tracetdi.dimunits(1:2);
+    % isfield does not work since tracetdi is not a 'struct' but a tdi object, thus isfield using isa does not work
+    if any(strcmp(fieldnames(tracetdi),'units'))
+      trace.units=tracetdi.units;
+    end
+    trace.name=[num2str(shot) ' ; ' nodenameeff{:} ' ; trialindx=' num2str(trialindx) ];
+    mdsclose;
+    error=0;
+    
   otherwise
     % eval(['!mailto_Andrea ''from loadTCVdata, data_type_eff= ' data_type_eff ''''])
     disp(['this data_type_eff' ' ' data_type_eff ' ' 'not yet programmed in loadTCVdata, ask Andrea.Scarabosio@epfl.ch']);
diff --git a/crpptbx/TCV/private/angular_fact_1.mat b/crpptbx/TCV/private/angular_fact_1.mat
index 85fd9a52692c72745b87ad324e2601e6d90fa66d..9643be7b4b3edd0f3734bc7b666c5eaa6373c0b2 100755
Binary files a/crpptbx/TCV/private/angular_fact_1.mat and b/crpptbx/TCV/private/angular_fact_1.mat differ
diff --git a/crpptbx/TCV/private/bad_channels.mat b/crpptbx/TCV/private/bad_channels.mat
index e950698cfd82fae24b1fcd0aeaf8eea96ef638b1..9933a3a72f2d4265b5e3a3fcb23ed94bc7a3b57a 100755
Binary files a/crpptbx/TCV/private/bad_channels.mat and b/crpptbx/TCV/private/bad_channels.mat differ
diff --git a/crpptbx/TCV/private/tcv_vesc1.mat b/crpptbx/TCV/private/tcv_vesc1.mat
index becc16ea4e9dc15a3afedbacd112ef4f681b7bcb..85f9d33a1e61bdb183f766825358e927713cb698 100644
Binary files a/crpptbx/TCV/private/tcv_vesc1.mat and b/crpptbx/TCV/private/tcv_vesc1.mat differ
diff --git a/crpptbx/gdat.m b/crpptbx/gdat.m
index 8358d100eac18b1afb96daaa67b88ba39ee60f2f..242b82eaac33cc498960f221e84330fcf9cbd365 100644
--- a/crpptbx/gdat.m
+++ b/crpptbx/gdat.m
@@ -141,8 +141,16 @@ if doplot==1 & length(trace.data)>1 & ~ischar(trace.data)
     plot(trace.t,trace.data);
     ylabel(data_type)
   else
-    plot(trace.t,trace.data(:,:,1));
-    ylabel([data_type '(:,:,1)'])
+    for idim=1:length(trace.dim)
+      if length(trace.t)==length(trace.dim{idim}); idim_t=idim; end
+    end
+    if idim_t<=2
+      plot(trace.t,trace.data(:,:,floor(end/2)));
+      ylabel([data_type '(:,:,floor(end/2))'])
+    elseif idim_t==3;
+      plot(trace.t,reshape(trace.data(:,floor(end/2),:),length(trace.dim{1}),length(trace.t)));
+      ylabel([data_type '(:,floor(end/2),:)'])
+    end
   end
   xlabel('time [s]')
   title([machine ' '  num2str(shot)])