diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index 26e0139e31775f7bb71add4cda385dd556d96ed5..ea4ed7ad95ca5979424c73289eaa812cbc8c568a 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -1218,8 +1218,160 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
     
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-   case {'sxr'}
+   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 Xtomo by default or dmpx if 'camera','dmpx' is provided
+    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')
+      if gdat_data.gdat_params.nverbose>=1
+        warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff])
+      end
+      return
+    end
+    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
+      else
+        if gdat_data.gdat_params.nverbose>=3; disp(['camera = ' gdat_data.gdat_params.camera ' not implemented']); end
+        gdat_data.gdat_params.camera = [];
+      end
+      
+      try
+        if isempty(gdat_data.gdat_params.time_interval);
+          [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,[],[],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
+        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
+      if gdat_data.gdat_params.nverbose>=1
+        warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff])
+      end
+      return
+      
+    end
+      
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'profnerho','profterho'}
diff --git a/crpptbx/TCV/tcv_help_parameters.m b/crpptbx/TCV/tcv_help_parameters.m
index 102d98585e5550f1a7f84050b1015aad04fdbf7c..8c292b39a0f6a686b3733b8704f6383453bdf980 100644
--- a/crpptbx/TCV/tcv_help_parameters.m
+++ b/crpptbx/TCV/tcv_help_parameters.m
@@ -37,8 +37,15 @@ 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.trialindx = 'value of trialindx desired to get a specific one when relevant, otherwise gets ok_trialindx, that is 1 usually';
+help_struct_all.source = 'sxr: main source: ''MPX'' (default) or ''XTOMO'', case insensitive';
+help_struct_all.camera = ['sxr: for MPX: ''central'', ''top'' (default), ''bottom'' or ''both'' ; ' ...
+                    ' for XTOMO: ''central'' (a central chord only), defaults if empty, [1 3 5] if only camera 1, 3 and 5 are desired'];
+help_struct_all.freq = '''slow'', default, lower sampling; ''fast'' full samples for both mpx and xtomo';
 %help_struct_all. = '';
 
+%help_struct_all. = '';
+
+
 
 if ~exist('parameter_list') || isempty(parameter_list)
   help_struct = help_struct_all;
diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m
index 1cb4e89bdfd32fd3fdb787c4e312b33d237d0b39..135195be264cdd2a1e31267888c99da26063d70c 100644
--- a/crpptbx/TCV/tcv_requests_mapping.m
+++ b/crpptbx/TCV/tcv_requests_mapping.m
@@ -193,7 +193,8 @@ switch lower(data_request)
   mapping.method = 'tdiliuqe';
   mapping.expression = '\results::r_axis';
  case 'sxr'
-  mapping.timedim = 2;
+  mapping.timedim = 1;
+  mapping.gdat_timedim = 2;
   mapping.method = 'switchcase';
  case 'te'
   mapping.timedim = 2;
@@ -253,6 +254,10 @@ switch lower(data_request)
   % extra TCV cases (not necessarily in official data_request name list)
   % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %
+ case 'mpx'
+  mapping.timedim = 1;
+  mapping.gdat_timedim = 2;
+  mapping.method = 'switchcase';
  case {'profnerho','profterho'}
   mapping.timedim = 1;
   mapping.label = data_request;