diff --git a/matlab/IMAS/complete_IDS_CORSICA.m b/matlab/IMAS/complete_IDS_CORSICA.m
index 124120d1dcb3f9836a174a9c95f01523bf34fc0c..560d23d61714e56447ab248176072601cd8ef399 100644
--- a/matlab/IMAS/complete_IDS_CORSICA.m
+++ b/matlab/IMAS/complete_IDS_CORSICA.m
@@ -63,12 +63,23 @@ end
 
 %% Add the data to the circuit
 tmp = data_circuits();
-Ncircuits = size(tmp,1);
+Ncircuit_eff = size(tmp,1);
+Ncircuit_in = numel(IDS_out.pf_active.circuit);
+Nsupply_in = numel(IDS_out.pf_active.supply);
 Ncoils = numel(IDS_out.pf_active.coil);
 % time will be set in circuit.current.time so should not put it at top and set homogeneous to 0?
 IDS_out.pf_active.time = [];
 IDS_out.pf_active.ids_properties.homogeneous_time = 0;
-for ii=1:Ncircuits
+% Make sure default substructure maintained if insert new indices
+pf_active_default = gdat([],'ids','source','pf_active');
+pf_active_default = pf_active_default.pf_active;
+if Ncircuit_eff > Ncircuit_in
+  IDS_out.pf_active.circuit(Ncircuit_in+1:Ncircuit_eff) = pf_active_default.circuit(1);
+end  
+if Ncircuit_eff > Nsupply_in
+  IDS_out.pf_active.supply(Nsupply_in+1:Ncircuit_eff) = IDS_out.pf_active.supply(Nsupply_in);
+end  
+for ii=1:Ncircuit_eff
     IDS_out.pf_active.circuit{ii}.name = tmp{ii,1}{1};
     IDS_out.pf_active.supply{ii}.name = tmp{ii,1}{1};
     % Find index of the coils belonging to ii circuit
@@ -83,10 +94,10 @@ for ii=1:Ncircuits
     IDS_out.pf_active.circuit{ii}.current.data = IDS_out.pf_active.coil{index_coil(1)}.current.data/IDS_out.pf_active.coil{index_coil(1)}.element{1}.turns_with_sign;
     IDS_out.pf_active.circuit{ii}.current.time = IDS_out.pf_active.coil{index_coil(1)}.current.time;
     
-    IDS_out.pf_active.circuit{ii}.connections = zeros(2*numel(index_coil) -1 , 2*Ncircuits + 2*Ncoils);
+    IDS_out.pf_active.circuit{ii}.connections = zeros(2*numel(index_coil) -1 , 2*Ncircuit_eff + 2*Ncoils);
     for jj = 1:numel(index_coil)
-    IDS_out.pf_active.circuit{ii}.connections( jj , 2*Ncircuits + 2*(index_coil(jj)-1) +1) = 1;
-    IDS_out.pf_active.circuit{ii}.connections( jj +1 , 2*Ncircuits + 2*(index_coil(jj)-1) +2) = 1;
+    IDS_out.pf_active.circuit{ii}.connections( jj , 2*Ncircuit_eff + 2*(index_coil(jj)-1) +1) = 1;
+    IDS_out.pf_active.circuit{ii}.connections( jj +1 , 2*Ncircuit_eff + 2*(index_coil(jj)-1) +2) = 1;
     end
     
     % Add the connection to the power supply
@@ -96,111 +107,72 @@ end
 
 %% Limiter description
 tmp = data_limiter();
+IDS_out.wall.ids_properties.homogeneous_time = 0; % no times are set so just say not homogeneous
 IDS_out.wall.description_2d{1}.limiter.unit{1}.outline.r = tmp.r;
 IDS_out.wall.description_2d{1}.limiter.unit{1}.outline.z = tmp.z;
 
+% problem with mex ids_put when time default or empty, make outline  and ggd empty
+IDS_out.wall.description_2d{1}.mobile.unit{1}.outline = {};
+IDS_out.wall.description_ggd = {};
+
 %% Vessel description
 % Understand what I need to do for the double layer vessel
 
 %%  -------------- Synthetic diagnostics------------ Need to be recomputed from CORSICA flux map
 
+% since time set in subnode method{1}.ip.time, set homogeneous to 0 (magnetics.time already empty)
+IDS_out.magnetics.ids_properties.homogeneous_time = 0;
 IDS_out.magnetics.method{1}.ip.time = LXC.t;
 IDS_out.magnetics.method{1}.ip.data = LXC.Ip;
 
-% Correct IDS magnetics
-aa = gdat([],'ids','source','magnetics');
-magnetics_default = aa.magnetics;
-mag_fluxloop_def_fields = fieldnames(magnetics_default.flux_loop{1});
-if isfield(IDS_out.magnetics,'flux_loop') && length(IDS_out.magnetics.flux_loop) > 0
-  mag_fluxloop_fields = fieldnames(IDS_out.magnetics.flux_loop{1});
-else
-  mag_fluxloop_fields = {};
-end
-fields_to_add = setdiff(mag_fluxloop_def_fields,mag_fluxloop_fields);
-
 %% Ff
 tmp = data_Ff();
-for ii=1:numel(tmp.r) 
-  if ~isempty(fields_to_add)
-    for idef=1:length(fields_to_add)
-      % add first defaults and fill in after
-      IDS_out.magnetics.flux_loop{ii}.(fields_to_add{idef}) = magnetics_default.flux_loop{1}.(fields_to_add{idef});
-    end
-    if ii==1; warning(['following fields added to magnetics.flux_loop: ' sprintf('%s ',fields_to_add{:})]); end
-  end
+% Make sure default substructure maintained if insert new indices
+magnetics_default = gdat([],'ids','source','magnetics');
+magnetics_default = magnetics_default.magnetics;
+Nflux_loop_in = numel(IDS_out.magnetics.flux_loop);
+Nflux_loop_eff = numel(tmp.r);
+if Nflux_loop_eff > Nflux_loop_in
+  IDS_out.magnetics.flux_loop(Nflux_loop_in+1:Nflux_loop_eff) = magnetics_default.flux_loop(1);
+end
+for ii=1:Nflux_loop_eff
   IDS_out.magnetics.flux_loop{ii}.position{1}.r = tmp.r(ii);
   IDS_out.magnetics.flux_loop{ii}.position{1}.z = tmp.z(ii);
   IDS_out.magnetics.flux_loop{ii}.name = tmp.name{ii};
 end
 
-for ii=1:numel(tmp.r)
-    IDS_out.magnetics.flux_loop{ii}.flux.data = -LXC.Ff(ii,:)';
-    IDS_out.magnetics.flux_loop{ii}.flux.time = LXC.t;
+for ii=1:Nflux_loop_eff
+  IDS_out.magnetics.flux_loop{ii}.flux.data = -LXC.Ff(ii,:)';
+  IDS_out.magnetics.flux_loop{ii}.flux.time = LXC.t;
 end
 
 %% Bm
 % Correct IDS magnetics
-mag_bpol_probe_def_fields = fieldnames(magnetics_default.bpol_probe{1});
-if isfield(IDS_out.magnetics,'bpol_probe') && length(IDS_out.magnetics.bpol_probe) > 0
-  mag_bpol_probe_fields = fieldnames(IDS_out.magnetics.bpol_probe{1});
-else
-  mag_bpol_probe_fields = {};
-end
-fields_to_add = setdiff(mag_bpol_probe_def_fields,mag_bpol_probe_fields);
-mag_bpol_probe_def_fields = fieldnames(magnetics_default.bpol_probe{1}.position);
-if length(IDS_out.magnetics.bpol_probe) > 0 && isfield(IDS_out.magnetics.bpol_probe{1},'position')
-  mag_bpol_probe_fields = fieldnames(IDS_out.magnetics.bpol_probe{1}.position);
-else
-  mag_bpol_probe_fields = {};
-end
-fields_to_add_position = setdiff(mag_bpol_probe_def_fields,mag_bpol_probe_fields);
-
 tmp = data_Bm();
-for ii=1:numel(tmp.name)
-  if ~isempty(fields_to_add)
-    for idef=1:length(fields_to_add)
-      % add first defaults and fill in after
-      IDS_out.magnetics.bpol_probe{ii}.(fields_to_add{idef}) = magnetics_default.bpol_probe{1}.(fields_to_add{idef});
-    end
-    if ii==1; warning(['following fields added to magnetics.bpol_probe: ' sprintf('%s ',fields_to_add{:})]); end
-  end
-  if ~isempty(fields_to_add_position)
-    for idef=1:length(fields_to_add_position)
-      % add_position first defaults and fill in after
-      IDS_out.magnetics.bpol_probe{ii}.position.(fields_to_add_position{idef}) = magnetics_default.bpol_probe{1}.position.(fields_to_add_position{idef});
-    end
-    if ii==1; warning(['following fields add_positioned to magnetics.bpol_probe.position: ' sprintf('%s ',fields_to_add_position{:})]); end
-  end
+% Make sure default substructure maintained if insert new indices
+Nbpol_probe_in = numel(IDS_out.magnetics.bpol_probe);
+Nbpol_probe_eff = numel(tmp.name);
+if Nbpol_probe_eff > Nbpol_probe_in
+  IDS_out.magnetics.bpol_probe(Nbpol_probe_in+1:Nbpol_probe_eff) = magnetics_default.bpol_probe(1);
+end
+for ii=1:Nbpol_probe_eff
   IDS_out.magnetics.bpol_probe{ii}.position.r = tmp.r(ii);
   IDS_out.magnetics.bpol_probe{ii}.position.z = tmp.z(ii);
   IDS_out.magnetics.bpol_probe{ii}.poloidal_angle = -tmp.am(ii); % Correct the sign to be consistent with COCOS 11
   IDS_out.magnetics.bpol_probe{ii}.name = tmp.name{ii};
 end
 
-for ii=1:numel(tmp.name)
+for ii=1:Nbpol_probe_eff
     IDS_out.magnetics.bpol_probe{ii}.field.data = LXC.Bm(ii,:)';
     IDS_out.magnetics.bpol_probe{ii}.field.time = LXC.t;
 end
 
 %% Ft
-mag_method_def_fields = fieldnames(magnetics_default.method{1});
-if isfield(IDS_out.magnetics,'method') && length(IDS_out.magnetics.method) > 0
-  mag_method_fields = fieldnames(IDS_out.magnetics.method{1});
-else
-  mag_method_fields = {};
-end
-fields_to_add = setdiff(mag_method_def_fields,mag_method_fields);
-if ~isempty(fields_to_add)
-  for idef=1:length(fields_to_add)
-    % add first defaults and fill in after
-    IDS_out.magnetics.method{1}.(fields_to_add{idef}) = magnetics_default.method{1}.(fields_to_add{idef});
-  end
-  warning(['following fields added to magnetics.method: ' sprintf('%s ',fields_to_add{:})]);
-end
 IDS_out.magnetics.method{1}.diamagnetic_flux.data = -LXC.Ft;
 IDS_out.magnetics.method{1}.diamagnetic_flux.time = LXC.t;
 
 %% rBt
+IDS_out.tf.ids_properties.homogeneous_time = 1;
 IDS_out.tf.time = LXC.t;
 IDS_out.tf.b_field_tor_vacuum_r.time  = LXC.t;
 IDS_out.tf.b_field_tor_vacuum_r.data  = LXC.rBt;