diff --git a/IDS/LLXLY_IDS_corsica.m b/IDS/LLXLY_IDS_corsica.m
new file mode 100644
index 0000000000000000000000000000000000000000..db0fbbe16482fe1662c445feeda2fc6bc1f53f6e
--- /dev/null
+++ b/IDS/LLXLY_IDS_corsica.m
@@ -0,0 +1,144 @@
+function [L,LX,LY] = LLXLY_IDS_corsica(L_LIU, a)
+%% Load data drom IDS
+
+
+% Get geomtrical information from the existing LIUQE
+L = struct();
+L.P = L_LIU.P;
+fieldlist = {'rl';'zl'; 'rw';'zw'; 'Twa'; 'rv';'zv'; 'Tvs'; 'rf'; 'zf';'rm'; 'zm'; 'am'};
+for ii= 1:numel(fieldlist)
+   tmpname = fieldlist{ii};
+   L.G.(tmpname)  = L_LIU.G.(tmpname);
+end
+
+% Set new grid
+L.G.rx = a.equilibrium.time_slice{1}.profiles_2d{1}.grid.dim1;
+L.G.zx = a.equilibrium.time_slice{1}.profiles_2d{1}.grid.dim2;
+
+
+% Recompute the geometrical quantities for the CORSICA grid
+L.G = liug(L.G,L.P);
+L = liuc(L.P, L.G); 
+
+[rrx, zzx] = meshgrid(L.G.rx, L.G.zx);
+
+%%  Get LX structure
+% {Ia, Ip, rBt} available
+% Ff, Bm, Ft recomputed
+
+LX.t = a.pf_active.coil{1}.current.time;
+LX.nt = numel(LX.t);
+
+LX.Ip = zeros(LX.nt,1);
+for ii=1:LX.nt
+    LX.Ip(ii) = a.equilibrium.time_slice{ii}.global_quantities.ip;
+end
+
+% Ia is the current per number of turns
+LX.Ia = zeros(L.G.na, LX.nt);
+for ii= 1:L.G.na
+   LX.Ia(ii,:) = a.pf_active.coil{ii}.current.data/sum(L.G.Twa(:,ii));
+end
+
+LX.rBt = zeros(LX.nt,1);
+LX.rBt(:) = a.equilibrium.vacuum_toroidal_field.r0*a.equilibrium.vacuum_toroidal_field.b0;
+
+
+%% Synthetic data that needs to be recomputed
+LY.Ix = zeros( L.nzx, L.nrx ,LX.nt);
+for tt=1:LX.nt
+    LY.Ix(:,:,tt) = a.equilibrium.time_slice{tt}.profiles_2d{1}.j_tor./rrx*L.drx*L.dzx*1e-2; % Wrong definition in IDS Corsica
+   % Ix_Corsica(:,:,tt) = a.equilibrium.time_slice{tt}.profiles_2d{1}.j_tor; % Wrong definition of CORSICA
+   % Ix_Corsica(:,:,tt) = -Ix_Corsica(:,:,tt)*abs(LX.Ip(tt)/sum(sum(Ix_Corsica(:,:,tt))));
+end
+
+
+LX.Bm = zeros(L.G.nm, LX.nt);
+for tt= 1:LX.nt
+    LX.Bm(:,tt) = L.G.Bmx*reshape(LY.Ix(:,:,tt), L.nrx*L.nzx,1 )  + L.G.Bma*LX.Ia(:,tt);
+end
+
+LX.Ff = zeros(L.G.nf, LX.nt);
+for tt= 1:LX.nt
+    LX.Ff(:,tt) =  L.G.Mfx*reshape(LY.Ix(:,:,tt), L.nrx*L.nzx,1 )  + L.G.Mfa*LX.Ia(:,tt);
+end
+
+LX.Is = zeros(0,LX.nt);
+
+LX.shot = 5000;
+
+LY.Fx = zeros(L.nzx,L.nrx ,LX.nt);
+for tt = 1:LX.nt
+   LY.Fx(:,:,tt) =  a.equilibrium.time_slice{tt}.profiles_2d{1}.psi;
+end
+
+% Normalized flux of the R,Z grid
+LY.Opy = zeros(L.nzy, L.nry, LX.nt);
+LY.FNy = zeros(L.nzy, L.nry, LX.nt);
+for tt=1:LX.nt
+[LY.rA(tt),LY.zA(tt),LY.FA(tt),dr2FA,dz2FA,drzFA,rX,zX,~,~,~,~,rl,zl,...
+    LY.rB(tt),LY.zB(tt),LY.FB(tt),LY.lB(tt),LY.lX(tt),LY.Opy(:,:,tt)] = meqpdom(LY.Fx(:,:,tt),LX.Ip(tt),L.P.isaddl,L);
+LY.FNy(:,:,tt) =  (LY.Fx(2:end-1,2:end-1,tt) - LY.FA(tt))/(LY.FB(tt) - LY.FA(tt));
+end
+
+
+
+%% Recompute the plasma current as a check. There is a bit of a difference
+psiN = (a.equilibrium.time_slice{tt}.profiles_1d.psi - a.equilibrium.time_slice{tt}.global_quantities.psi_axis)/(a.equilibrium.time_slice{tt}.global_quantities.psi_boundary - a.equilibrium.time_slice{tt}.global_quantities.psi_axis);
+for tt=1:LX.nt
+pprime = a.equilibrium.time_slice{tt}.profiles_1d.dpressure_dpsi;
+p = spline(psiN,pprime);
+pprimey = ppval(p, LY.FNy(:,:,tt));
+pprimey = pprimey.*LY.Opy(:,:,tt);
+
+ttprime = a.equilibrium.time_slice{tt}.profiles_1d.f_df_dpsi;
+T2d2 = cumtrapz(a.equilibrium.time_slice{tt}.profiles_1d.psi,ttprime);
+T2d2 = T2d2 - T2d2(end);
+
+p = spline(psiN,ttprime);
+ttprimey = ppval(p, LY.FNy(:,:,tt));
+ttprimey = ttprimey.*LY.Opy(:,:,tt);
+
+p = spline(psiN,T2d2);
+Ty = ppval(p, LY.FNy(:,:,tt));
+Ty = Ty.*LY.Opy(:,:,tt);
+
+L.rymap = repmat(L.ry',numel(L.zy),1); % Matriz map ry
+LX.Ft(tt) = sum(sum( Ty/LX.rBt(tt)*L.drx*L.dzx./L.rymap ));
+
+Iy = 2*pi*(L.rymap.*pprimey+1./L.rymap.*ttprimey/mu0)*L.drx*L.dzx;
+
+LY.Ip(tt) = sum(sum(Iy));
+LY.FA(tt) = a.equilibrium.time_slice{tt}.global_quantities.psi_axis;
+LY.FB(tt) = a.equilibrium.time_slice{tt}.global_quantities.psi_boundary;
+LY.Wk(tt) = a.equilibrium.time_slice{tt}.global_quantities.w_mhd;
+end
+LY.t = LX.t;
+
+
+% Put all vector in raw form
+flist = fieldnames(LX);
+nflist = numel(flist);
+for k = 1:nflist
+    LX.(flist{k}) = v2rw(LX.(flist{k}));
+end
+
+% Put all vector in raw form
+flist = fieldnames(LY);
+nflist = numel(flist);
+for k = 1:nflist
+    LY.(flist{k}) = v2rw(LY.(flist{k}));
+end
+
+
+end
+
+
+% Put all vectors in raw form
+function vout = v2rw(vin)
+if numel(size(vin))==2 && sum(ismember(1,size(vin)))==1 && ~ischar(vin)
+   vout = reshape(vin, numel(vin),1);
+else
+    vout = vin;
+end
+end