diff --git a/matlab/IMAS/gdat_imas.m b/matlab/IMAS/gdat_imas.m
index d2b06fefcbdf8d2fcc5fc3b3289cc933cdc28ddd..f0190f2e5a3e44483d7d647e607eee5fd50d34c3 100644
--- a/matlab/IMAS/gdat_imas.m
+++ b/matlab/IMAS/gdat_imas.m
@@ -7,7 +7,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_imas(shot,data_re
 %
 % If no inputs are provided, return the list of available pre-defined data_request in gdat_data and default parameters gdat_params
 %
-% IMAS means assume access data from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and  using imas_open_env and ids_get calls
+% IMAS assumes data access from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and  using imas_open_env and ids_get calls (added backend choice as well, default hdf5 (13), otherwise 12 for mdsplus)
 % Should be the same on ITER hpc and gateway, to be checked
 %
 % At first only "ids" request implemented, but keywords like ip etc should relate to specific IDS as for any machine
@@ -270,6 +270,10 @@ if ~isfield(gdat_data.gdat_params,'data_major_version')
   gdat_data.gdat_params.data_major_version = '3';
   if gdat_data.gdat_params.nverbose >= 3; disp('set data_major_version to ''3'' as default since not provided'); end
 end
+if ~isfield(gdat_data.gdat_params,'backend')
+  gdat_data.gdat_params.backend = 13;
+  if gdat_data.gdat_params.nverbose >= 3; disp('set backend to 13 as default since not provided'); end
+end
 error_status = 6; % at least reached this level
 gdat_params = gdat_data.gdat_params;
 
@@ -285,8 +289,13 @@ if do_mdsopen_mdsclose
     return
   end
   try
-    gdat_data.gdat_params.idx_imas_open_env = imas_open_env('ids', shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ...
+    if exist('imas_open_env_backend') > 0
+      gdat_data.gdat_params.idx_imas_open_env = imas_open_env_backend(shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ...
+          gdat_data.gdat_params.tokamak_name,gdat_data.gdat_params.data_major_version,gdat_data.gdat_params.backend);
+    else
+      gdat_data.gdat_params.idx_imas_open_env = imas_open_env('ids', shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ...
           gdat_data.gdat_params.tokamak_name,gdat_data.gdat_params.data_major_version);
+    end
     disp('')
   catch ME
     warning('could not imas_open_env with following gdat_data.gdat_params:');
diff --git a/matlab/TCV_IMAS/ids2database.m b/matlab/IMAS/ids2database.m
similarity index 78%
rename from matlab/TCV_IMAS/ids2database.m
rename to matlab/IMAS/ids2database.m
index eb2c2ed7f0275d6700c482f8c6f3a1a4727d2fae..b98deef01c720116b3a1078e306ab0d37936a956 100644
--- a/matlab/TCV_IMAS/ids2database.m
+++ b/matlab/IMAS/ids2database.m
@@ -1,13 +1,13 @@
 function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin);
 %
-%   [ids_put_status] = ids2database(shot,run,occurence,ids2put,varargin);
+%   [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin);
 %
 % open/create shot,run and put the ids from ids2put.idsnames (names from fieldnames(ids2put) && within IDS_list)
-% from new ..._env routines, now user/publi database name, tokamak name and major UAL version (3 or 4 at  this stage) need to be specified
+% from new ..._env routines, now user/public database name, tokamak name and major UAL version (3 or 4 at  this stage) need to be specified
 % tree_name: getenv('USER') by default, can be 'public'
-% tree_tokamak: 'tcv' by default
+% tree_tokamak: 'tcv' by default, typically tcv, TCV, ITER, etc (case will appear in folder name)
 % tree_majorversion: '3' by default
-% imas_backend: "MDSplus" or "HDF5"
+% imas_backend: string, numeric input for imas_backend data type. Can be 'MDSplus' (== 12) or 'HDF5' (== 13)
 %
 % varargin{1}: tbd
 %
@@ -17,7 +17,7 @@ ids_put_status = 0;
 tree_user_default = getenv('USER');
 tree_tokamak_default = 'tcv';
 tree_majorversion_default = '3';
-imas_backend_default = 'MDSplus';
+imas_backend_default = 'HDF5';
 
 % initialize input parser
 p = inputParser;
@@ -28,9 +28,9 @@ p.addOptional('run', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x))));
 p.addOptional('occurence', 0, @(x) isempty(x) || (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
 p.addOptional('ids2put', struct([]), @(x) (isstruct(x)));
 p.addOptional('tree_user', tree_user_default, @(x) (isempty(x) || ischar(x)));
-p.addOptional('tree_tokamak', tree_tokamak_default, @(x) (isempty(x) || ischar(x)));
+p.addOptional('tree_tokamak', tree_tokamak_default, @(x) (~isempty(x) && ischar(x)));
 p.addOptional('tree_majorversion', tree_majorversion_default, @(x) (ischar(x)));
-p.addOptional('imas_backend', imas_backend_default, @(x) (isempty(x) || ischar(x)));
+p.addOptional('imas_backend', imas_backend_default, @(x) (isempty(x) || ischar(x) || (isnumeric(x) && any(x==[12,13]))));
 
 p.parse;
 defaults_ids2database = p.Results; % to keep track of defaults
@@ -86,15 +86,8 @@ end
 params_ids2database = params;
 % check ids_names
 ids_names=fieldnames(ids2put);
-[dummy1]=which('ids_list');
-if isempty(dummy1)
-  ids_full_list = tcv_available_ids;
-  warning(['IDS_list not available, quick fix introducing list of ids available for TCV: ' fprintf('%s ',ids_full_list{:}) char(10)]);
-else
-  % get effective function between ids_list and IDS_list (which or exist not sufficient)
-  [dummy2,ids_list_eff]=fileparts(dummy1);
-  ids_full_list = feval(ids_list_eff);
-end
+aa=gdat([],'ids');
+ids_full_list = aa.gdat_params.sources_available;
 ids_names_notok = setdiff(ids_names,ids_full_list);
 if ~isempty(ids_names_notok)
   disp(['these subfields are not ids names, so not used: ' sprintf('%s ',ids_names_notok{:})])
@@ -106,17 +99,19 @@ if isempty(ids_names_ok)
   return
 end
 
-if ~ismember(params_ids2database.imas_backend, {'MDSplus', 'HDF5'})
-    warning(['Unknown imas_backend: ', imas_backend, ', selecting default: ',imas_backend_default]);
-    params_ids2database.imas_backend = imas_backend_default;
+if ischar(params_ids2database.imas_backend) && ~ismember(params_ids2database.imas_backend, {'MDSplus', 'HDF5'})
+  warning(['Unknown imas_backend: ', imas_backend, ', selecting default: ',imas_backend_default]);
+  params_ids2database.imas_backend = imas_backend_default;
 end
 
 % Get IMAS backend ID
 switch params_ids2database.imas_backend
-  case "HDF5"
+  case 'HDF5'
     backendid=13;
-  case "MDSplus"
+  case 'MDSplus'
     backendid=12;
+  otherwise
+    backendid = params_ids2database.imas_backend;
 end
 
 try
@@ -128,7 +123,7 @@ try
     shot_is_new = 0;
   end
   if shot_is_new
-    idx = imas_create_env_backend(shot, run, params_ids2database.tree_user,params_ids2database.tree_tokamak, params_ids2database.tree_majorversion, backendid)
+    idx = imas_create_env_backend(shot, run, params_ids2database.tree_user,params_ids2database.tree_tokamak, params_ids2database.tree_majorversion, backendid);
   else
     idx  = imas_open_env_backend(shot,run,params_ids2database.tree_user,params_ids2database.tree_tokamak,params_ids2database.tree_majorversion,backendid); %
   end
diff --git a/matlab/TCV_IMAS/tcv2ids2database.m b/matlab/TCV_IMAS/tcv2ids2database.m
index fd9b711a350ca82e28b6c31a11508a4515ec371c..916ec4384ddd538d5eb34659677ffbafba2a5204 100644
--- a/matlab/TCV_IMAS/tcv2ids2database.m
+++ b/matlab/TCV_IMAS/tcv2ids2database.m
@@ -10,7 +10,7 @@ function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin);
 % varargin: 'occurence': occurence value
 % varargin: 'ids_names': cell, ids to load, by default all defined so far (if empty or empty string or not given)
 %             see tcv_available_ids for the list of IDSs available for TCV
-% varargin: 'imas_backend': "MDSplus" or "HDF5"
+% varargin: 'imas_backend': 'MDSplus' or 'HDF5'
 % varargin: 'error_bar': type (string)
 %                'delta' or empty (default): meaning difference in upper is set (standard error_bar
 %                'added': errorbar is added: upper=data+delta and lower=data-delta