diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m
index 4c3b17373d3f3a890c2611167ae9b9904d6ebe00..76332c00187d360270dd05db09ebfb17716b57a6 100644
--- a/matlab/TCV/gdat_tcv.m
+++ b/matlab/TCV/gdat_tcv.m
@@ -1152,6 +1152,32 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if ~isfield(gdat_data.gdat_params,'error_bar') || isempty(gdat_data.gdat_params.error_bar)
       gdat_data.gdat_params.error_bar = 'delta';
     end
+    if ~isfield(gdat_data.gdat_params,'cocos_in') || isempty(gdat_data.gdat_params.cocos_in)
+      gdat_data.gdat_params.cocos_in = 17;
+    end
+    if ~isfield(gdat_data.gdat_params,'cocos_out') || isempty(gdat_data.gdat_params.cocos_out)
+      gdat_data.gdat_params.cocos_out = 11;
+    end
+    if ~isfield(gdat_data.gdat_params,'ipsign_out') || isempty(gdat_data.gdat_params.ipsign_out)
+      gdat_data.gdat_params.ipsign_out = 0;
+    end
+    if ~isfield(gdat_data.gdat_params,'b0sign_out') || isempty(gdat_data.gdat_params.b0sign_out)
+      gdat_data.gdat_params.b0sign_out = 0;
+    end
+    if ~isfield(gdat_data.gdat_params,'ipsign_in') || isempty(gdat_data.gdat_params.ipsign_in)
+      if gdat_data.gdat_params.ipsign_out~=0
+        gdat_data.gdat_params.ipsign_in = mdsvalue('\pcs::data:iohfb');
+      else
+        gdat_data.gdat_params.ipsign_in = 0;
+      end
+    end
+    if ~isfield(gdat_data.gdat_params,'b0sign_in') || isempty(gdat_data.gdat_params.b0sign_in)
+      if gdat_data.gdat_params.b0sign_out~=0
+        gdat_data.gdat_params.b0sign_in = mdsvalue('\pcs::data:if36fb');
+      else
+        gdat_data.gdat_params.b0sign_in = 0;
+      end
+    end
     try
       if ~isempty(shot)
         [ids_top,ids_top_description] = feval(['tcv_get_ids_' ids_top_name],shot,ids_empty,gdat_data.gdat_params);
diff --git a/matlab/TCV_IMAS/tcv2ids.m b/matlab/TCV_IMAS/tcv2ids.m
index 9c0577ad47155c7d8624e570b92385ac2936e2d6..94557c92b0e379f423c578d3b58131952503a401 100644
--- a/matlab/TCV_IMAS/tcv2ids.m
+++ b/matlab/TCV_IMAS/tcv2ids.m
@@ -12,10 +12,13 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin);
 %
 % varargin: 'ids_names': cell, idss to load, by default all defined so far (if empty or empty string or not given)
 %             {'equilibrium', 'magnetics', 'pf_active','wall','core_profiles','ec_antennas','nbi'} or a subset
-% varargin{2}: 'error_bar': type (string)
+%           'error_bar': type (string)
 %                empty or 'delta' (default): meaning difference in upper is set (standard error_bar
 %                'added': errorbar is added: upper=data+delta and lower=data-delta
 %                'delta_with_lower': as 'delta' but lower also set
+%           'cocos_out': (default 11) cocos to transform ids from TCV cocos_in=17 to cocos_out
+%           'ipsign_out': if a specific sign fo Ip is desired in output within the cocos_out system (default 0=no specific sign)
+%           'b0sign_out': if a specific sign fo B0 is desired in output within the cocos_out system (default 0=no specific sign)
 %
 % Outputs
 % varargout{1}: return also the ids in array of structure with the names, to allow easy use of plotallids
@@ -26,8 +29,12 @@ p = inputParser;
 % no required inputs here so one can call with empty args and get defaults parameters
 % effectively required inputs should have defaults as empty
 p.addOptional('shot', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
-p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles','ec_antennas','nbi'}, @(x) isempty(x) | iscell(x) ); % char or cell array
-p.addOptional('error_bar', 'delta', @(x) isempty(x) | ischar(x) ); % char or cell array
+p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles','ec_antennas','nbi'}, @(x) isempty(x) || iscell(x) ); % char or cell array
+p.addOptional('error_bar', 'delta', @(x) isempty(x) || ischar(x) ); % char or cell array
+p.addOptional('cocos_out', 11, @(x) isempty(x) || isnumeric(x) ); % char
+p.addOptional('ipsign_out', 0, @(x) isempty(x) || (x==0 | x==-1 | x==+1) ); % char
+p.addOptional('b0sign_out', 0, @(x) isempty(x) || (x==0 | x==-1 | x==+1) ); % char
+
 p.parse;
 defaults_tcv2ids = p.Results; % to keep track of defaults
 
@@ -81,10 +88,10 @@ if isempty(params_tcv2ids.ids_names)
   disp('no ids names available')
   return
 end
-
 for i=1:length(params_tcv2ids.ids_names)
   ids_to_get = params_tcv2ids.ids_names{i};
-  tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv','error_bar',params_tcv2ids.error_bar);
+  tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv','error_bar',params_tcv2ids.error_bar,'cocos_out',params_tcv2ids.cocos_out, ...
+          'b0sign_out',params_tcv2ids.b0sign_out,'ipsign_out',params_tcv2ids.ipsign_out);
   ids_from_tcv.(ids_to_get) = tmp.(ids_to_get);
   ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']);
 end
diff --git a/matlab/TCV_IMAS/tcv2ids2database.m b/matlab/TCV_IMAS/tcv2ids2database.m
index 3cc584a79457f8a5bdf0cc66545017f7a4803b41..6bd2d3c363dabeec079b6209078b5fcf33a4b7c4 100644
--- a/matlab/TCV_IMAS/tcv2ids2database.m
+++ b/matlab/TCV_IMAS/tcv2ids2database.m
@@ -17,6 +17,9 @@ function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin);
 %           'tree_user': getenv('USER') by default, user for database (could be 'public')
 %           'tree_tokamak': tokamak name, default ('tcv')
 %           'tree_majorversion': default '4'
+%           'cocos_out': (default 11) cocos to transform ids from TCV cocos_in=17 to cocos_out
+%           'ipsign_out': if a specific sign fo Ip is desired in output within the cocos_out system (default 0=no specific sign)
+%           'b0sign_out': if a specific sign fo B0 is desired in output within the cocos_out system (default 0=no specific sign)
 %
 % example:
 %   ids_from_tcv = tcv2ids2database(62745,9999,'ids_names',{'pf_active'},'error_bar','added'); % to test only one ids
@@ -41,12 +44,15 @@ p = inputParser;
 % effectively required inputs should have defaults as empty
 p.addOptional('shot', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
 p.addOptional('run_out', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
-p.addOptional('occurence', 0, @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
-p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles','ec_antennas','nbi'}, @(x) isempty(x) | iscell(x)); % char or cell array
-p.addOptional('error_bar', 'delta', @(x) isempty(x) | ischar(x) ); % char or cell array
-p.addOptional('tree_user', getenv('USER'), @(x) isempty(x) | ischar(x) ); % char
-p.addOptional('tree_tokamak', 'tcv', @(x) isempty(x) | ischar(x) ); % char
-p.addOptional('tree_majorversion', '4', @(x) isempty(x) | ischar(x) ); % char
+p.addOptional('occurence', 0, @(x) isempty(x) || (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
+p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles','ec_antennas','nbi'}, @(x) isempty(x) || iscell(x)); % char or cell array
+p.addOptional('error_bar', 'delta', @(x) isempty(x) || ischar(x) ); % char or cell array
+p.addOptional('tree_user', getenv('USER'), @(x) isempty(x) || ischar(x) ); % char
+p.addOptional('tree_tokamak', 'tcv', @(x) isempty(x) || ischar(x) ); % char
+p.addOptional('tree_majorversion', '4', @(x) isempty(x) || ischar(x) ); % char
+p.addOptional('cocos_out', 11, @(x) isempty(x) || isnumeric(x) ); % char
+p.addOptional('ipsign_out', 0, @(x) isempty(x) || (x==0 | x==-1 | x==+1) ); % char
+p.addOptional('b0sign_out', 0, @(x) isempty(x) || (x==0 | x==-1 | x==+1) ); % char
 
 p.parse;
 defaults_tcv2ids2database = p.Results; % to keep track of defaults
diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
index 9a324913e84de31b99a282741473ae1316ad3ff6..fab451e78777c16dd266f126a5a415624667d7e8 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
@@ -290,7 +290,6 @@ end
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_core_profiles,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_core_profiles,'core_profiles',cocos_in,cocos_out);
+  [ids_core_profiles,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_core_profiles,'core_profiles',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
index 47b0e575e02369c09c38f22164ee1cf94a36021d..4aadc7dd6a94de3247e6179158e80990b26517fb 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
@@ -85,7 +85,6 @@ end
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_ec_antennas,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_ec_antennas,'ec_antennas',cocos_in,cocos_out);
+  [ids_ec_antennas,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_ec_antennas,'ec_antennas',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
index 4f7dba055907de824522b73f399d868dca35da7a..001d44a0ab6ea5f572c11b7c43dc666287a0e373 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
@@ -3,7 +3,7 @@ function [ids_equilibrium,ids_equilibrium_description,varargout] = tcv_get_ids_e
 %  [ids_equilibrium,ids_equilibrium_description,varargout] = tcv_get_ids_equilibrium(shot,ids_equil_empty,varargin);
 %
 %
-% gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options
+% gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar and cocos_out options
 %
 
 [ids_equilibrium, params_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium',varargin{:});
@@ -375,7 +375,6 @@ end
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_equilibrium,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_equilibrium,'equilibrium',cocos_in,cocos_out);
+  [ids_equilibrium,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_equilibrium,'equilibrium',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
index c4ce146915ab719099691f7cdb3aeccc905759d0..7af8b1c624706540ed2991359f78ae92af769e3d 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
@@ -15,7 +15,6 @@ function [ids_magnetics,ids_magnetics_description,varargout] = tcv_get_ids_magne
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_magnetics,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_magnetics,'magnetics',cocos_in,cocos_out);
+  [ids_magnetics,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_magnetics,'magnetics',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
index 25aa68cbfde0acf6b73250ae653a0e17b7b630ac..9d788474db144bd417db1409f0394b777454d7d6 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
@@ -118,7 +118,6 @@ end
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_nbi,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_nbi,'nbi',cocos_in,cocos_out);
+  [ids_nbi,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_nbi,'nbi',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
index 35f6bcc06d4474a4388296e6ed4c55dafa4a8de4..13c95b450a779010163beedb7254d8d23d07381e 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
@@ -16,7 +16,6 @@ ids_pf_active.vertical_force = {};
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',cocos_in,cocos_out);
+  [ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_wall.m b/matlab/TCV_IMAS/tcv_get_ids_wall.m
index 27407ded9fec63ffad95b7aa80a7665092ac223f..e78ced53cc404ae34b089c05791650249612d34c 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_wall.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_wall.m
@@ -19,10 +19,8 @@ ids_wall.description_2d{1}.mobile.unit = {};
 %% TODO
 ids_description = [];
 
-% cocos automatic transform
+% cocos automatic transform (should have nothing to do for wall)
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  % normally nothing to do
-  [ids_wall,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_wall,'wall',cocos_in,cocos_out);
+  [ids_wall,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_wall,'wall',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
 end
diff --git a/matlab/TCV_IMAS/tcv_ids_coil.m b/matlab/TCV_IMAS/tcv_ids_coil.m
index 151614c8c069653f3e9c6a64e19f04e95e570ce3..1ef3f60f9231076b46ff0729767767ffb9515e4a 100644
--- a/matlab/TCV_IMAS/tcv_ids_coil.m
+++ b/matlab/TCV_IMAS/tcv_ids_coil.m
@@ -81,8 +81,10 @@ for ii=1:ncircuits2ids
       else
         tmpdata = tdi(mds_paths2ids{ii});
       end
-      ids_struct_out{ind_coil_ids}.current.data = tmpdata.data;
-      ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}];
+% $$$       ids_struct_out{ind_coil_ids}.current.data = tmpdata.data;
+% $$$       ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}];
+      ids_struct_out{ind_coil_ids}.current.data = pf_def.coil_current_signs{ii}(jj) .* tmpdata.data;
+      ids_struct_out_description{ind_coil_ids}.current.data = ['from ' num2str(pf_def.coil_current_signs{ii}(jj)) ' * ' mds_paths2ids{ii}];
       ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1};