diff --git a/crpptbx/JET/gdat_jet.m b/crpptbx/JET/gdat_jet.m
index 2a0ca4e7d7f1325b6d4de15641d8809f0efee56d..b3caeb64aadb8e7f5da469e4563353634b0a47a7 100644
--- a/crpptbx/JET/gdat_jet.m
+++ b/crpptbx/JET/gdat_jet.m
@@ -734,7 +734,7 @@ elseif strcmp(mapping_for_jet.method,'switchcase')
       gdat_data.data(:,1) = (gdat_data.sig1.data - gdat_data.sig2.data)./2;
       gdat_data.data(:,2) = (gdat_data.sig1.data + gdat_data.sig2.data)./2;
     end
-    keyboard
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ne','te'}
     nodenameeff_rho = 'rho';
@@ -795,6 +795,8 @@ elseif strcmp(mapping_for_jet.method,'switchcase')
       gdat_data.(data_request_eff).rhopol = gdat_data.x;
       gdat_data.dimunits{1} = 'rhopol';
     end
+keyboard
+    gdat_data = get_grids_1d(gdat_data,1,1,gdat_params.nverbose);
 
     % defaults for fits, so user always gets std structure
     gdat_data.fit.rhotornorm = []; % same for both ne and te
@@ -1562,17 +1564,10 @@ elseif strcmp(mapping_for_jet.method,'switchcase')
       gdat_data.t = gdat_data.dim{mapping_for_jet.gdat_timedim};
     
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-   case {'sxr', 'mpx'}
-
-    if strcmp(data_request_eff,'mpx')
-      data_request_eff = 'mpx'; % mpx chosen through parameter 'source' within 'sxr'
-      gdat_data.data_request = data_request_eff;
-      gdat_data.gdat_params.source = 'mpx';
-    end
-    % sxr from dmpx by default or xtomo if 'camera','xtomo' is provided
+   case {'sxr'}
     if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source)
-      gdat_data.gdat_params.source = 'mpx';
-    elseif ~strcmp(lower(gdat_data.gdat_params.source),'xtomo') && ~strcmp(lower(gdat_data.gdat_params.source),'mpx')
+      gdat_data.gdat_params.source = 'H';
+    elseif ~strmatch(lower(gdat_data.gdat_params.source),{'h','v','t'})
       if gdat_data.gdat_params.nverbose>=1
         warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff])
       end
@@ -1581,195 +1576,106 @@ elseif strcmp(mapping_for_jet.method,'switchcase')
     if ~isfield(gdat_data.gdat_params,'time_interval')
       gdat_data.gdat_params.time_interval = [];
     end
-    if ~isfield(gdat_data.gdat_params,'freq')
-      gdat_data.gdat_params.freq = 'slow';
-    end
     switch lower(gdat_data.gdat_params.source)
-     case {'mpx', 'dmpx'}
-      gdat_data.gdat_params.source = 'mpx';
-      if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera)
-        gdat_data.gdat_params.camera = 'top';
-      else
-        gdat_data.gdat_params.camera = lower(gdat_data.gdat_params.camera);
-      end
-      if ~any(liuqe_version==[1, 2, 3])
-        if gdat_data.gdat_params.nverbose>=3
-          disp(['liuqe_version = ' liuqe_version ' not supported for data_request= ' data_request_eff]);
-        end
-        return
-      end
-      freq_opt = 0;
-      if strcmp(gdat_data.gdat_params.freq,'fast'); freq_opt = 1; end
-      t_int = [0 10]; % starts from 0 otherwise mpxdata gives data from t<0
-      if ~isempty(gdat_data.gdat_params.time_interval); t_int = gdat_data.gdat_params.time_interval; end
-      gdat_data.top.data = [];
-      gdat_data.top.x = [];
-      gdat_data.top.channel = [];
-      gdat_data.bottom.data = [];
-      gdat_data.bottom.x = [];
-      gdat_data.bottom.channel = [];
-      try
-        mpx = mpxdata(shot,'svgr','freq',freq_opt,'liuqe',liuqe_version,'detec',gdat_data.gdat_params.camera, ...
-          'time',t_int);
-      catch
-        if gdat_data.gdat_params.nverbose>=1
-          warning('problem with mpxdata')
-        end
-        return
-      end
-      gdat_data.units = {'au'}; % not known at this stage
-      gdat_data.dimunits = {'', 's'};
-      gdat_data.data_fullpath = ['using mpxdata(' num2str(shot) ',''svgr'') with params in gdat_data.gdat_params'];
-      if ~strcmp(gdat_data.gdat_params.camera,'both')
-        % invert index of time and channel (rho)
-        gdat_data.data = mpx.(gdat_data.gdat_params.camera(1:3)).signal.data';
-        gdat_data.t = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
-        gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t)';
-        gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
-        gdat_data.x = gdat_data.dim{1};
-        gdat_data.(gdat_data.gdat_params.camera).data = gdat_data.data;
-        gdat_data.(gdat_data.gdat_params.camera).x = gdat_data.x;
-        gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2};
-        gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ...
-                   char(10) gdat_data.data_fullpath];
-      else
-        gdat_data.data = mpx.signal.data';
-        gdat_data.t = mpx.signal.dim{1};
-        gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t);
-        gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1};
-        %
-        gdat_data.top.data = mpx.top.signal.data';
-        gdat_data.top.x = gdat_data.dim{1};
-        gdat_data.top.channel = mpx.top.signal.dim{2};
-        gdat_data.bottom.data = mpx.bot.signal.data;
-        gdat_data.bottom.x = interp1(mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t);
-        gdat_data.bottom.channel = mpx.bottom.signal.dim{2};
-        gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2};
-        gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ...
-                   char(10) gdat_data.data_fullpath];
-        gdat_data.x = gdat_data.dim{1};
-      end
-
-     case 'xtomo'
-      % so far allow string and array as 'camera' choices: 
-      % camera = [] (default, thus get XTOMOGetData defaults), 'central', [3 6] (camera numbers)
-      camera_xtomo = [];
-      channel_xtomo = [];
-      if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera)
-        gdat_data.gdat_params.camera = [];
-      elseif isnumeric(gdat_data.gdat_params.camera)
-        if length(gdat_data.gdat_params.camera) > 10
-          if gdat_data.gdat_params.nverbose>=1; warning('max number of camera is 10 for XTOMO'); end
-          gdat_data.gdat_params.camera = gdat_data.gdat_params.camera(1:10);
-        end
-        camera_xtomo = zeros(1,10);
-        camera_xtomo(gdat_data.gdat_params.camera) = 1;
-      elseif ischar(gdat_data.gdat_params.camera)
-        gdat_data.gdat_params.camera = lower(gdat_data.gdat_params.camera);
-        if strcmp(gdat_data.gdat_params.camera,'central')
-          camera_xtomo = zeros(1,10);
-          icam = 3
-          camera_xtomo(icam) = 1;
-          channel_xtomo = (icam-1)*20 + 9;
-        end
+     case 'h'
+      camera_all = [1:2:16];
+     case 't'
+      camera_all = [1:3:35];
+     case 'v'
+      camera_all = [1:3:35];
+    end
+    if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera)
+      camera = camera_all;
+    elseif isnumeric(gdat_data.gdat_params.camera)
+      camera = gdat_data.gdat_params.camera;
+    elseif ischar(gdat_data.gdat_params.camera)
+      if strcmp(lower(gdat_data.gdat_params.camera),'central')
+        gdat_data.gdat_params.source = 'h';
+        camera = 11;
       else
         if gdat_data.gdat_params.nverbose>=3; disp(['camera = ' gdat_data.gdat_params.camera ' not implemented']); end
-        gdat_data.gdat_params.camera = [];
+        camera = camera_all;
       end
-      
-      try
-        if isempty(gdat_data.gdat_params.time_interval);
-          [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,0,4,camera_xtomo,[]);
-        else
-          [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,gdat_data.gdat_params.time_interval(1), ...
-          gdat_data.gdat_params.time_interval(2),camera_xtomo,[]);
-        end
-      catch
-        if gdat_data.gdat_params.nverbose>=1
-          warning('problem with XTOMOGetData, no data')
+    end
+    gdat_data.gdat_params.camera = camera;
+    source = gdat_data.gdat_params.source;
+    try
+      gdat_data.chord_ok = [];
+      for ichord=1:length(camera)
+        aa = gdat_jet(shot,{'ppf','sxr',[source num2str(camera(ichord),'%.2d')]});
+        if ~isempty(aa.data) && ~isempty(aa.dim)
+          if isempty(gdat_data.data)
+            gdat_data.data = NaN*ones(numel(camera_all),numel(aa.dim{gdat_data.mapping_for.jet.timedim}));
+            gdat_data.dim{1} = camera_all;
+            gdat_data.dim{gdat_data.mapping_for.jet.gdat_timedim} = aa.dim{gdat_data.mapping_for.jet.timedim};
+          end
+          gdat_data.data(ichord,:) = aa.data';
+          gdat_data.chord_ok(end+1) = camera(ichord);
         end
-        return
-      end
-      gdat_data.t = t;
-      gdat_data.units = 'au';
-      gdat_data.xtomo.extra_params = cat_default;
-      gdat_data.xtomo.saturated_channels = Sat_channel;
-      gdat_data.data_fullpath = ['using XTOMOGetData(' num2str(shot) ') with some additional params from gdat_data.gdat_params'];
-      if isempty(channel_xtomo)
-        % provide all chords
-        gdat_data.data = sig;
-        gdat_data.x = [1:size(sig,1)];
-        gdat_data.dimunits = {'20 chords per camera'; 's'};
-      else
-        keyboard
-        % extract only given channels
-        gdat_data.data = sig(channel_xtomo,:);
-        gdat_data.x = channel_xtomo;
-        gdat_data.dimunits = {'chords where floor(dim{1}/10) gives camera nb and mod(dim{1},10) chord nb'; 's'};
       end
-      gdat_data.dim = {gdat_data.x; gdat_data.t};
-
-     otherwise
+    catch
       if gdat_data.gdat_params.nverbose>=1
-        warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff])
+        warning(['problem with sxr, source = ' source])
       end
       return
-      
     end
-      
+    gdat_data.t = gdat_data.dim{gdat_data.mapping_for.jet.gdat_timedim};
+    gdat_data.x = gdat_data.dim{1};
+    gdat_data.units = 'au';
+    gdat_data.dimunits = {'chord', 's'};
+    gdat_data.label = ['sxr/' gdat_data.gdat_params.source num2str(camera(1)) ' to ' num2str(camera(end))];
+    gdat_data.legend = num2str(gdat_data.chord_ok');
+    gdat_data.data_fullpath = [gdat_data.label ', see .chord_ok for the effective channels ok'];
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-   case {'profnerho','profterho'}
-    % for backward compatibility but corresponds to ne_rho with param.fit_type='auto' (JET special)
-    % 
-    nodenameeff=['\results::THOMSON.PROFILES.AUTO:' data_request_eff(5:6)];
-    nodenameeff_vers = [nodenameeff ':version_num'];
-    avers = tdi(nodenameeff_vers);
-    if avers.data==0
-     % may be because nodes not yet filled in, so call once a node
-     ab=tdi(nodenameeff);
-     avers = tdi(nodenameeff_vers);
-    end
-    if avers.data>0
-      tracetdi=tdi(nodenameeff);
-      if avers.data < 2.99
-        % for earlier version the bug made it to have logically (rho,t)
-        gdat_data.data=tracetdi.data;
-        if ~isempty(tracetdi.dim) && ~ischar(tracetdi.data)
-          gdat_data.x=tracetdi.dim{1};
-          gdat_data.t=tracetdi.dim{2};
-          error_status=0;
-        else
-         error_status=2;
-          gdat_data.x=[];
-          gdat_data.t=[];
-        end
-      else
-        gdat_data.data=tracetdi.data'; % error in dimensions for autofits
-        if ~isempty(tracetdi.dim) && ~ischar(tracetdi.data)
-          if gdat_params.nverbose>=3; disp('assumes dim{2} for x in THOMSON.PROFILES.AUTO'); end
-          gdat_data.x=tracetdi.dim{2};
-          gdat_data.t=tracetdi.dim{1};
-          error_status=0;
-        else
-          gdat_data.x=[];
-          gdat_data.t=[];
-         error_status=2;
-        end
+   case {'vloop'}
+    if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source)
+      gdat_data.gdat_params.source = 'ppf';
+    end
+    params_eff = gdat_data.gdat_params;
+    switch lower(params_eff.source)
+     case 'ppf'
+      params_eff.data_request = [{'PPF'},{'MAGN'},{'VL'}];
+      params_eff.label = 'Vloop from MAGN/VL(index)';
+      channel_index = 3;
+      tension = -1e2;
+     case 'jpf'
+      params_eff.data_request = [{'JPF'},{'DA'},{'C2-VLRRU'}];
+      params_eff.label = 'Vloop Upper Restraint Ring Flux Flux Loop, non-integrated';
+      channel_index = [];
+      tension = -1e4;
+     otherwise
+      if params_eff.nverbose>=1
+        warning(['source = ' params_eff.source ' not expected with data_request= ' data_request_eff])
       end
+      return
+    end
+    if ~isfield(params_eff,'channel_index') || isempty(params_eff.channel_index)
+      params_eff.channel_index = channel_index;
     else
-      tracetdi=avers;
-      gdat_data.x=[];
-      gdat_data.t=[];
+      channel_index = params_eff.channel_index;
     end
-    gdat_data.dim=[{gdat_data.x};{gdat_data.t}];
-    gdat_data.dimunits=[{'sqrt(psi\_norm)'} ; {'time [s]'}];
-    if ~isempty(gdat_data.t) && any(strcmp(fieldnames(tracetdi),'units'))
-      gdat_data.units=tracetdi.units;
+    if ~isfield(params_eff,'tension') || isempty(params_eff.tension)
+      params_eff.tension = tension;
+    else
+      tension = params_eff.tension;
     end
-    gdat_data.request_description = 'quick autofits within thomson nodes, using version';
-    gdat_data.fullpath = ['Thomson autfits from ' nodenameeff];
+    
+    aa=gdat_jet(shot,params_eff);
+    gdat_data.gdat_params = rmfield(params_eff,'data_request');
+    if ~isempty(params_eff.channel_index) && length(aa.data)~=numel(aa.data)
+      gdat_data.data = aa.data(params_eff.channel_index,:);
+    else
+      gdat_data.data = aa.data;
+    end
+    gdat_data.units = 'V';
+    gdat_data.dim{1} = aa.t;
+    gdat_data.t = gdat_data.dim{1};
+    gdat_data.dimunits{1} = 's';
+    % add tension
+    gdat_data.data_smooth=interpos(gdat_data.t,gdat_data.data,gdat_data.gdat_params.tension);
 
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    otherwise
     if (gdat_params.nverbose>=1); warning(['switchcase= ' data_request_eff ' not known in gdat_jet']); end
     error_status=901;
diff --git a/crpptbx/JET/jet_help_parameters.m b/crpptbx/JET/jet_help_parameters.m
index f4dbe90cdcf2c9aa0de03f9518bf8ba96c016dbe..ee75d00d39b8332c95f07cd56136d6c09579f164 100644
--- a/crpptbx/JET/jet_help_parameters.m
+++ b/crpptbx/JET/jet_help_parameters.m
@@ -37,9 +37,8 @@ help_struct_all.cocos = ['cocos value desired in output, uses eqdsk_cocos_transf
 % $$$ help_struct_all.edge = '0 (default), 1 to get edge Thomson values';
 % $$$ help_struct_all.fit = '0, no fit profiles, 1 (default) if fit profiles desired as well, relevant for _rho profiles. See also fit_type';
 % $$$ help_struct_all.fit_type = 'provenance of fitted profiles ''conf'' (default) from conf nodes, ''avg'' or ''local'' for resp. proffit: nodes';
-help_struct_all.source = 'sxr: ''G'' (default, with ssx), camera name ''J'', ''G'', ...[[F-M], case insensitive';
-help_struct_all.camera = ['[] (default, all), [i1 i2 ...] chord nbs ([1 3 5] if only chords 1, 3 and 5 are desired), ''central'' uses J_049'];
-help_struct_all.freq = '''slow'', default (means ssx, 500kHz), lower sampling; ''fast'' full samples 2MHz; integer value nn for downsampling every nn''th points';
+help_struct_all.source = 'sxr: ''H'' (default), camera name ''T'', ''V'' ; for Vloop: ''ppf''(default),''jpf''';
+help_struct_all.camera = ['[] (default, all), [i1 i2 ...] chord nbs ([1 3 5] if only chords 1, 3 and 5 are desired), ''central'' uses H10'];
 %help_struct_all. = '';
 
 %help_struct_all. = '';
diff --git a/crpptbx/JET/jet_requests_mapping.m b/crpptbx/JET/jet_requests_mapping.m
index dd010bf4715cdae2126802d236ce6d7d3d3c9502..3b579e5ece405661fa3c3044bae5a59d9003f845 100644
--- a/crpptbx/JET/jet_requests_mapping.m
+++ b/crpptbx/JET/jet_requests_mapping.m
@@ -316,8 +316,11 @@ switch lower(data_request)
  case 'vloop'
   mapping.label = 'Vloop Upper Restraint Ring Flux Flux Loop, non-integrated';
   mapping.timedim = 1;
-  mapping.method = 'signal';
-  mapping.expression = [{'JPF'},{'DA'},{'C2-VLRRU'}];
+  mapping.label = 'Vloop';
+  mapping.method = 'switchcase';
+% $$$   mapping.method = 'signal';
+% $$$   mapping.expression = [{'PPF'},{'MAGN'},{'VL'}]; % tension -1e2 (3rd signal good one
+% $$$   mapping.expression = [{'JPF'},{'DA'},{'C2-VLRRU'}]; % tension -1e4
  case 'volume'
   mapping.label = 'Volume';
   mapping.timedim = 1;
diff --git a/crpptbx/gdat_plot.m b/crpptbx/gdat_plot.m
index edec2ea4c02171951b38c08b337c8dcd1d61cd16..4251c694bd0876f3ea0da445c742d6d5a5d4cc97 100644
--- a/crpptbx/gdat_plot.m
+++ b/crpptbx/gdat_plot.m
@@ -102,7 +102,7 @@ if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty(
     tmhdm=mean(reshape(gdat_data.t(1:nfft*fix(length(gdat_data.t)/nfft)),nfft,fix(length(gdat_data.t)/nfft)));
     for i=1:size(gdat_data.data,2)
       [B,F,T]=specgram(gdat_data.data(:,i),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2);
-      figure
+      figure;
       imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet;
       ylabel('freq')
       xlabel(gdat_data.dimunits{1})
@@ -112,7 +112,7 @@ if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty(
       mhd_sum_data = mhd_sum_data + gdat_data.data(:,i);
     end
     [B,F,T]=specgram(mhd_sum_data./size(gdat_data.data,2),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2);
-    figure
+    figure;
     imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet;
     ylabel('freq')
     xlabel(gdat_data.dimunits{1})