diff --git a/matlab/plot/plot_cosol_mat.m b/matlab/plot/plot_cosol_mat.m
index e410d05492312d249c2acb2acf5ef700eb280f0c..faa3c15219f218966060db36de1f713dba4cf3f4 100644
--- a/matlab/plot/plot_cosol_mat.m
+++ b/matlab/plot/plot_cosol_mat.m
@@ -64,11 +64,11 @@ subplot(224)
 
     
     %% FCGK
-P_ = 6; J_ = 3;
-mat_file_name = '/home/ahoffman/HeLaZ/iCa/gk_coulomb_P_6_J_3_N_150_kpm_8.0_NFLR_8.h5';
-kp = 1.0; matidx = round(kp/(8/150));
-% matidx = sprintf('%5.5i',matidx);
-% mat_file_name = '/home/ahoffman/HeLaZ/iCa/gk_coulomb_P_6_J_3_N_1_kpm_4.0_NFLR_20_m_0.h5';
+P_ = 4; J_ = 2;
+mat_file_name = '/home/ahoffman/cosolver/gk.coulomb_NFLR_12_P_4_J_2_N_50_kpm_4.0.h5';
+kp = 1.0;
+kp_a =  h5read(mat_file_name,'/coordkperp');
+[~,matidx] = min(abs(kp_a-kp));
 matidx = sprintf('%5.5i',matidx);
 FCGK_self = h5read(mat_file_name,['/',matidx,'/Caapj/Ciipj']);
 FCGK_ei = h5read(mat_file_name,['/',matidx,'/Ceipj/CeipjF'])+h5read(mat_file_name,'/00000/Ceipj/CeipjT');
@@ -116,7 +116,8 @@ if 0
 %%
 mfns = {'/home/ahoffman/HeLaZ/iCa/gk_sugama_P_20_J_10_N_150_kpm_8.0.h5',...
         '/home/ahoffman/HeLaZ/iCa/gk_pitchangle_8_P_20_J_10_N_150_kpm_8.0.h5',...
-        '/home/ahoffman/cosolver/gk.coulomb_NFLR_6_P_4_J_2_N_75_kpm_6.0.h5',...
+        '/home/ahoffman/cosolver/gk.coulomb_NFLR_6_P_4_J_2_N_50_kpm_4.0.h5',...
+        '/home/ahoffman/cosolver/gk.coulomb_NFLR_12_P_4_J_2_N_50_kpm_4.0.h5',...
         '/home/ahoffman/cosolver/gk.coulomb_NFLR_12_P_4_J_2_N_75_kpm_6.0.h5',...
         };
 CONAME_A = {'SG 20 10','PA 20 10', 'FC 4 2 NFLR 6',  'FC 4 2 NFLR 12', 'FC 4 2 NFLR 16'};
@@ -124,13 +125,14 @@ figure
 for j_ = 1:numel(mfns)
     mat_file_name = mfns{j_}; disp(mat_file_name);
     kp_a =  h5read(mat_file_name,'/coordkperp');
+%     kp_a = kp_a(kp_a<=3);
     gmax = zeros(size(kp_a));
     wmax = zeros(size(kp_a));
    for idx_ = 0:numel(kp_a)-1
         matidx = sprintf('%5.5i',idx_);
         MAT = h5read(mat_file_name,['/',matidx,'/Caapj/Ciipj']);
-        gmax(idx_+1) = max(real(eig(MAT))); 
-        wmax(idx_+1) = max(imag(eig(MAT))); 
+        gmax(idx_+1) = max(abs(real(eig(MAT)))); 
+        wmax(idx_+1) = max(abs(imag(eig(MAT)))); 
    end
    subplot(121)
     plot(kp_a,gmax,'DisplayName',CONAME_A{j_}); hold on;
@@ -144,3 +146,35 @@ xlabel('$k_\perp$'); ylabel('$\gamma_{max}$ from Eig(iCa)')
 legend('show'); grid on;
 xlabel('$k_\perp$'); ylabel('$\omega_{max}$ from Eig(iCa)')
 end
+
+%% Van Kampen plot
+if 0
+%%
+kperp= 3.9;
+mfns = {'/home/ahoffman/HeLaZ/iCa/gk_sugama_P_20_J_10_N_150_kpm_8.0.h5',...
+        '/home/ahoffman/HeLaZ/iCa/gk_pitchangle_8_P_20_J_10_N_150_kpm_8.0.h5',...
+        '/home/ahoffman/cosolver/gk.coulomb_NFLR_6_P_4_J_2_N_50_kpm_4.0.h5',...
+        '/home/ahoffman/cosolver/gk.coulomb_NFLR_12_P_4_J_2_N_50_kpm_4.0.h5',...
+        '/home/ahoffman/cosolver/gk.coulomb_NFLR_12_P_4_J_2_N_75_kpm_6.0.h5',...
+        };
+CONAME_A = {'SG 20 10','PA 20 10', 'FC 4 2 NFLR 6',  'FC 4 2 NFLR 12', 'FC 4 2 NFLR 12 extended'};
+grow = {};
+puls = {};
+for j_ = 1:numel(mfns)
+    mat_file_name = mfns{j_}; disp(mat_file_name);
+    kp_a          =  h5read(mat_file_name,'/coordkperp');
+    [~,idx_]       = min(abs(kp_a-kperp));
+    matidx        = sprintf('%5.5i',idx_);
+    MAT           = h5read(mat_file_name,['/',matidx,'/Caapj/Ciipj']);
+    grow{j_}  = real(eig(MAT)); 
+    puls{j_}  = imag(eig(MAT)); 
+end
+
+figure
+for j_ = 1:numel(mfns)
+%    plot(puls{j_}, grow{j_},'o','DisplayName',CONAME_A{j_}); hold on;
+   plot(grow{j_},'o','DisplayName',CONAME_A{j_}); hold on;
+end
+legend('show'); grid on;
+xlabel('$\omega$ from Eig(iCa)'); ylabel('$\gamma$ from Eig(iCa)')
+end
diff --git a/matlab/plot/plot_kernels.m b/matlab/plot/plot_kernels.m
index 400e63cc268c1ecbf3ef17cfeaac9e870ec396f3..a02b82cae6367eb22d4012c19859286eec4407cb 100644
--- a/matlab/plot/plot_kernels.m
+++ b/matlab/plot/plot_kernels.m
@@ -1,6 +1,6 @@
 if 0
 %% Kernels
-kmax=7;
+kmax=5;
 nmax=6;
 kx = linspace(0,kmax,100);
 
@@ -11,8 +11,9 @@ for n_ = 0:nmax
 end
 ylim_ = ylim;
 plot(kx(end)*[2/3 2/3],ylim_,'--k','DisplayName','AA');
-plot(kx,J0,'-r','DisplayName','$J_0$');
-legend('show')
+% J0 = besselj(0,kx);
+% plot(kx,J0,'-r','DisplayName','$J_0$');
+legend('show'); xlabel('k'); title('Kernel functions $\mathcal{K}_n$');
 end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -52,7 +53,7 @@ end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 if 0
 %% from Sum_n Kn x Ln x Lj to Sum_n Kn Sum_s dnjs x Ls
-vperp = [5];
+vperp = [2];
 kx    = linspace(0,10,200);
 Jmax  = 15;
 j     = 10;
diff --git a/src/collision_mod.F90 b/src/collision_mod.F90
index 9bdcd861187e940466122d53b61650a74df73bfb..7565d5fb3d4dab46a806aecf12189aece0d03ede 100644
--- a/src/collision_mod.F90
+++ b/src/collision_mod.F90
@@ -24,7 +24,7 @@ PUBLIC :: collision_readinputs, coll_outputinputs
 PUBLIC :: compute_TColl
 PUBLIC :: compute_lenard_bernstein, compute_dougherty
 PUBLIC :: LenardBernstein_e, LenardBernstein_i!, LenardBernstein GK
-PUBLIC :: DoughertyGK_e, DoughertyGK_i!, Dougherty GK
+PUBLIC :: DoughertyGK_ee, DoughertyGK_ii!, Dougherty GK
 PUBLIC :: load_COSOlver_mat, compute_cosolver_coll
 PUBLIC :: apply_COSOlver_mat_e, apply_COSOlver_mat_i
 
@@ -173,26 +173,80 @@ CONTAINS
     IF (KIN_E) THEN
       DO ip = ips_e,ipe_e;DO ij = ijs_e,ije_e
       DO ikx = ikxs, ikxe;DO iky = ikys, ikye; DO iz = izs,ize
-                CALL DoughertyGK_e(ip,ij,ikx,iky,iz,TColl_)
-                TColl_e(ip,ij,ikx,iky,iz) = TColl_
+        IF(gyrokin_CO) THEN
+            CALL DoughertyGK_ee(ip,ij,ikx,iky,iz,TColl_)
+        ELSE
+            CALL DoughertyDK_ee(ip,ij,ikx,iky,iz,TColl_)
+        ENDIF
+            TColl_e(ip,ij,ikx,iky,iz) = TColl_
       ENDDO;ENDDO;ENDDO
       ENDDO;ENDDO
     ENDIF
     DO ip = ips_i,ipe_i;DO ij = ijs_i,ije_i
     DO ikx = ikxs, ikxe;DO iky = ikys, ikye; DO iz = izs,ize
-        CALL DoughertyGK_i(ip,ij,ikx,iky,iz,TColl_)
-        TColl_i(ip,ij,ikx,iky,iz) = TColl_
+      IF(gyrokin_CO) THEN
+          CALL DoughertyGK_ii(ip,ij,ikx,iky,iz,TColl_)
+      ELSE
+          CALL DoughertyDK_ii(ip,ij,ikx,iky,iz,TColl_)
+      ENDIF
+          TColl_i(ip,ij,ikx,iky,iz) = TColl_
     ENDDO;ENDDO;ENDDO
     ENDDO;ENDDO
   END SUBROUTINE compute_dougherty
-
-  SUBROUTINE DoughertyGK_e(ip_,ij_,ikx_,iky_,iz_,TColl_)
-    USE fields, ONLY: moments_e, phi
-    USE grid,   ONLY: parray_e, jarray_e, kxarray, kyarray, kparray, Jmaxe, ip0_e, ip1_e, ip2_e
-    USE array,  ONLY: kernel_e
-    USE basic
-    USE model,  ONLY: sigmae2_taue_o2, qe_taue, nu_ee, sqrt_sigmae2_taue_o2
-    USE time_integration, ONLY : updatetlevel
+  !******************************************************************************!
+  !! Doughtery driftkinetic collision operator for electrons
+  !******************************************************************************!
+  SUBROUTINE DoughertyDK_ee(ip_,ij_,ikx_,iky_,iz_,TColl_)
+    IMPLICIT NONE
+    INTEGER,     INTENT(IN)    :: ip_,ij_,ikx_,iky_,iz_
+    COMPLEX(dp), INTENT(OUT)   :: TColl_
+    COMPLEX(dp) :: upar, Tpar, Tperp
+    REAL(dp)    :: j_dp, p_dp
+    !** Auxiliary variables **
+    p_dp      = REAL(parray_e(ip_),dp)
+    j_dp      = REAL(jarray_e(ij_),dp)
+    !** Assembling collison operator **
+    TColl_ = -(p_dp + 2._dp*j_dp)*nadiab_moments_e(ip_,ij_,ikx_,iky_,iz_)
+    IF( (p_dp .EQ. 1._dp) .AND. (j_dp .EQ. 0._dp)) THEN !Ce10
+      TColl_ = TColl_ + nadiab_moments_e(ip1_e,1,ikx_,iky_,iz_)
+    ELSEIF( (p_dp .EQ. 2._dp) .AND. (j_dp .EQ. 0._dp)) THEN ! Ce20
+      TColl_ = TColl_ + twothird*nadiab_moments_e(ip2_e,1,ikx_,iky_,iz_) &
+                - SQRT2*twothird*nadiab_moments_e(ip0_e,2,ikx_,iky_,iz_)
+    ELSEIF( (p_dp .EQ. 0._dp) .AND. (j_dp .EQ. 1._dp)) THEN ! Ce01
+      TColl_ = TColl_ + 2._dp*twothird*nadiab_moments_e(ip0_e,2,ikx_,iky_,iz_) &
+                 - SQRT2*twothird*nadiab_moments_e(ip2_e,1,ikx_,iky_,iz_)
+    ENDIF
+    TColl_ = nu_ee * TColl_
+  END SUBROUTINE DoughertyDK_ee
+  !******************************************************************************!
+  !! Doughtery driftkinetic collision operator for ions
+  !******************************************************************************!
+  SUBROUTINE DoughertyDK_ii(ip_,ij_,ikx_,iky_,iz_,TColl_)
+    IMPLICIT NONE
+    INTEGER,     INTENT(IN)    :: ip_,ij_,ikx_,iky_,iz_
+    COMPLEX(dp), INTENT(OUT)   :: TColl_
+    COMPLEX(dp) :: upar, Tpar, Tperp
+    REAL(dp)    :: j_dp, p_dp
+    !** Auxiliary variables **
+    p_dp      = REAL(parray_i(ip_),dp)
+    j_dp      = REAL(jarray_i(ij_),dp)
+    !** Assembling collison operator **
+    TColl_ = -(p_dp + 2._dp*j_dp)*nadiab_moments_i(ip_,ij_,ikx_,iky_,iz_)
+    IF( (p_dp .EQ. 1._dp) .AND. (j_dp .EQ. 0._dp)) THEN ! kronecker p1j0
+      TColl_ = TColl_ + nadiab_moments_i(ip1_i,1,ikx_,iky_,iz_)
+    ELSEIF( (p_dp .EQ. 2._dp) .AND. (j_dp .EQ. 0._dp)) THEN ! kronecker p2j0
+      TColl_ = TColl_ + twothird*nadiab_moments_i(ip2_i,1,ikx_,iky_,iz_) &
+              - SQRT2*twothird*nadiab_moments_i(ip0_i,2,ikx_,iky_,iz_)
+    ELSEIF( (p_dp .EQ. 0._dp) .AND. (j_dp .EQ. 1._dp)) THEN ! kronecker p0j1
+      TColl_ = TColl_ + 2._dp*twothird*nadiab_moments_i(ip0_i,2,ikx_,iky_,iz_) &
+                 - SQRT2*twothird*nadiab_moments_i(ip2_i,1,ikx_,iky_,iz_)
+    ENDIF
+    TColl_ = nu_i * TColl_
+  END SUBROUTINE DoughertyDK_ii
+  !******************************************************************************!
+  !! Doughtery gyrokinetic collision operator for electrons
+  !******************************************************************************!
+  SUBROUTINE DoughertyGK_ee(ip_,ij_,ikx_,iky_,iz_,TColl_)
     IMPLICIT NONE
     INTEGER,     INTENT(IN)    :: ip_,ij_,ikx_,iky_,iz_
     COMPLEX(dp), INTENT(OUT)   :: TColl_
@@ -214,12 +268,10 @@ CONTAINS
     !** Assembling collison operator **
     ! Velocity-space diffusion (similar to Lenard Bernstein)
     ! -nuee (p + 2j + b^2/2) Nepj
-    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*be_2)*moments_e(ip_,ij_,ikx_,iky_,iz_,updatetlevel)
+    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*be_2)*nadiab_moments_e(ip_,ij_,ikx_,iky_,iz_)
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     IF( p_dp .EQ. 0 ) THEN ! Kronecker p0
-      ! Get adiabatic moment
-      TColl_ = TColl_ - (p_dp + 2._dp*j_dp + 2._dp*be_2) * qe_taue * Kernel_e(ij_,ikx_,iky_,iz_,eo_)*phi(ikx_,iky_,iz_)
         !** build required fluid moments **
         n_     = 0._dp
         upar_  = 0._dp; uperp_ = 0._dp
@@ -231,13 +283,13 @@ CONTAINS
           Knp1 =  Kernel_e(in_+1,ikx_,iky_,iz_,eo_)
           Knm1 =  Kernel_e(in_-1,ikx_,iky_,iz_,eo_)
           ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_e(ip0_e,in_  ,ikx_,iky_,iz_,updatetlevel) + qe_taue*Knp0*phi(ikx_,iky_,iz_)
+          nadiab_moment_0j   = nadiab_moments_e(ip0_e,in_,ikx_,iky_,iz_)
           ! Density
           n_     = n_     + Knp0 * nadiab_moment_0j
           ! Perpendicular velocity
           uperp_ = uperp_ + be_*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
           ! Parallel temperature
-          Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_e(ip2_e,in_,ikx_,iky_,iz_,updatetlevel) + nadiab_moment_0j)
+          Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments_e(ip2_e,in_,ikx_,iky_,iz_) + nadiab_moment_0j)
           ! Perpendicular temperature
           Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
         ENDDO
@@ -255,7 +307,7 @@ CONTAINS
       upar_  = 0._dp
       DO in_ = 1,jmaxe+1
         ! Parallel velocity
-         upar_  = upar_  + Kernel_e(in_,ikx_,iky_,iz_,eo_) * moments_e(ip1_e,in_,ikx_,iky_,iz_,updatetlevel)
+        upar_  = upar_  + Kernel_e(in_,ikx_,iky_,iz_,eo_) * nadiab_moments_e(ip1_e,in_,ikx_,iky_,iz_)
       ENDDO
       TColl_ = TColl_ + upar_*Kernel_e(ij_,ikx_,iky_,iz_,eo_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -273,11 +325,11 @@ CONTAINS
         Knp1 =  Kernel_e(in_+1,ikx_,iky_,iz_,eo_)
         Knm1 =  Kernel_e(in_-1,ikx_,iky_,iz_,eo_)
         ! Nonadiabatic moments (only different from moments when p=0)
-        nadiab_moment_0j = moments_e(ip0_e,in_,ikx_,iky_,iz_,updatetlevel) + qe_taue*Knp0*phi(ikx_,iky_,iz_)
+        nadiab_moment_0j = nadiab_moments_e(ip0_e,in_,ikx_,iky_,iz_)
         ! Density
         n_     = n_     + Knp0 * nadiab_moment_0j
         ! Parallel temperature
-        Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_e(ip2_e,in_,ikx_,iky_,iz_,updatetlevel) + nadiab_moment_0j)
+        Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments_e(ip2_e,in_,ikx_,iky_,iz_) + nadiab_moment_0j)
         ! Perpendicular temperature
         Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
       ENDDO
@@ -289,11 +341,11 @@ CONTAINS
     ! Multiply by electron-electron collision coefficient
     TColl_ = nu_ee * TColl_
 
-  END SUBROUTINE DoughertyGK_e
+  END SUBROUTINE DoughertyGK_ee
   !******************************************************************************!
   !! Doughtery gyrokinetic collision operator for ions
   !******************************************************************************!
-  SUBROUTINE DoughertyGK_i(ip_,ij_,ikx_,iky_,iz_,TColl_)
+  SUBROUTINE DoughertyGK_ii(ip_,ij_,ikx_,iky_,iz_,TColl_)
     IMPLICIT NONE
     INTEGER,     INTENT(IN)    :: ip_,ij_,ikx_,iky_,iz_
     COMPLEX(dp), INTENT(OUT)   :: TColl_
@@ -316,12 +368,10 @@ CONTAINS
     !** Assembling collison operator **
     ! Velocity-space diffusion (similar to Lenard Bernstein)
     ! -nui (p + 2j + b^2/2) Nipj
-    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*bi_2)*moments_i(ip_,ij_,ikx_,iky_,iz_,updatetlevel)
+    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*bi_2)*nadiab_moments_i(ip_,ij_,ikx_,iky_,iz_)
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     IF( p_dp .EQ. 0 ) THEN ! Kronecker p0
-      ! Get adiabatic moment
-      TColl_ = TColl_ - (p_dp + 2._dp*j_dp + 2._dp*bi_2) * qi_taui * Kernel_i(ij_,ikx_,iky_,iz_,eo_)*phi(ikx_,iky_,iz_)
         !** build required fluid moments **
         n_     = 0._dp
         upar_  = 0._dp; uperp_ = 0._dp
@@ -333,17 +383,17 @@ CONTAINS
           Knp1 =  Kernel_i(in_+1,ikx_,iky_,iz_,eo_)
           Knm1 =  Kernel_i(in_-1,ikx_,iky_,iz_,eo_)
           ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_i(ip0_i,in_  ,ikx_,iky_,iz_,updatetlevel) + qi_taui*Knp0*phi(ikx_,iky_,iz_)
+          nadiab_moment_0j  = nadiab_moments_i(ip0_i,in_,ikx_,iky_,iz_)
           ! Density
           n_     = n_     + Knp0 * nadiab_moment_0j
           ! Perpendicular velocity
           uperp_ = uperp_ + bi_*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
           ! Parallel temperature
-          Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_i(ip2_i,in_,ikx_,iky_,iz_,updatetlevel) + nadiab_moment_0j)
+          Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments_i(ip2_i,in_,ikx_,iky_,iz_) + nadiab_moment_0j)
           ! Perpendicular temperature
           Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
         ENDDO
-        T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
+        T_  = (Tpar_ + 2._dp*Tperp_)*onethird - n_
       ! Add energy restoring term
       TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_i(ij_  ,ikx_,iky_,iz_,eo_)
       TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * Kernel_i(ij_+1,ikx_,iky_,iz_,eo_)
@@ -357,7 +407,7 @@ CONTAINS
       upar_  = 0._dp
       DO in_ = 1,jmaxi+1
         ! Parallel velocity
-         upar_  = upar_  + Kernel_i(in_,ikx_,iky_,iz_,eo_) * moments_i(ip1_i,in_,ikx_,iky_,iz_,updatetlevel)
+         upar_  = upar_  + Kernel_i(in_,ikx_,iky_,iz_,eo_) * nadiab_moments_i(ip1_i,in_,ikx_,iky_,iz_)
       ENDDO
       TColl_ = TColl_ + upar_*Kernel_i(ij_,ikx_,iky_,iz_,eo_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -375,15 +425,15 @@ CONTAINS
         Knp1 =  Kernel_i(in_+1,ikx_,iky_,iz_,eo_)
         Knm1 =  Kernel_i(in_-1,ikx_,iky_,iz_,eo_)
         ! Nonadiabatic moments (only different from moments when p=0)
-        nadiab_moment_0j = moments_i(ip0_i,in_,ikx_,iky_,iz_,updatetlevel) + qi_taui*Knp0*phi(ikx_,iky_,iz_)
+        nadiab_moment_0j = nadiab_moments_i(ip0_i,in_,ikx_,iky_,iz_)
         ! Density
         n_     = n_     + Knp0 * nadiab_moment_0j
         ! Parallel temperature
-        Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_i(ip2_i,in_,ikx_,iky_,iz_,updatetlevel) + nadiab_moment_0j)
+        Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments_i(ip2_i,in_,ikx_,iky_,iz_) + nadiab_moment_0j)
         ! Perpendicular temperature
         Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
       ENDDO
-      T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
+      T_  = (Tpar_ + 2._dp*Tperp_)*onethird - n_
       TColl_ = TColl_ + T_*SQRT2*Kernel_i(ij_,ikx_,iky_,iz_,eo_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -391,7 +441,7 @@ CONTAINS
     ! Multiply by ion-ion collision coefficient
     TColl_ = nu_i * TColl_
 
-  END SUBROUTINE DoughertyGK_i
+  END SUBROUTINE DoughertyGK_ii
 
   !******************************************************************************!
   !! compute the collision terms in a (Np x Nj x Nkx x Nky) matrix all at once
diff --git a/src/inital.F90 b/src/inital.F90
index c103b9149fe3a8c5eb01dec4e02db36082924224..e17b69f455a414ab0136fae8dd42a7b7e54114e8 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -24,6 +24,7 @@ SUBROUTINE inital
   IF ( job2load .GE. 0 ) THEN
     IF (my_id .EQ. 0) WRITE(*,*) 'Load moments'
     CALL load_moments ! get N_0
+    
     CALL poisson ! compute phi_0=phi(N_0)
   ! through initialization
   ELSE
diff --git a/src/restarts_mod.F90 b/src/restarts_mod.F90
index 797267b88d2c35d6f70f3d551b4eb40fc1125dfb..cc69a2b1845375eb87bffede814f6669edf55335 100644
--- a/src/restarts_mod.F90
+++ b/src/restarts_mod.F90
@@ -91,6 +91,7 @@ CONTAINS
     !******************************************************************************!
     SUBROUTINE load_output_adapt_pj
         IMPLICIT NONE
+        INTEGER :: pmaxloop_e, pmaxloop_i, jmaxloop_e, jmaxloop_i, Nkx_cp, Nky_cp, Nz_cp
 
         ! Checkpoint filename
         WRITE(rstfile,'(a,a1,i2.2,a3)') TRIM(resfile0),'_',job2load,'.h5'
@@ -98,6 +99,10 @@ CONTAINS
         IF (my_id .EQ. 0) WRITE(*,'(3x,a)') "Resume from ", rstfile
         ! Open file
         CALL openf(rstfile, fidrst,mpicomm=comm0)
+        ! Get grid info
+        CALL getatt(fidrst,"/data/input/" , "Nkx", Nkx_cp)
+        CALL getatt(fidrst,"/data/input/" , "Nky", Nky_cp)
+        CALL getatt(fidrst,"/data/input/" ,  "Nz",  Nz_cp)
         !!!!!!!!! Load electron moments
         IF (KIN_E) THEN
         ! Get the checkpoint moments degrees to allocate memory
@@ -107,7 +112,8 @@ CONTAINS
         IF (my_id .EQ. 0) WRITE(*,*) "Je_cp = ", jmaxe_cp
         CALL getatt(fidrst,"/data/input/" , "start_iframe5d", n0)
         ! Allocate the required size to load checkpoints moments
-        CALL allocate_array(moments_e_cp, 1,pmaxe_cp+1, 1,jmaxe_cp+1, ikxs,ikxe, ikys,ikye, izs,ize)
+        ! CALL allocate_array(moments_e_cp, 1,pmaxe_cp+1, 1,jmaxe_cp+1, ikxs,ikxe, ikys,ikye, izs,ize)
+        CALL allocate_array(moments_e_cp, 1,pmaxe_cp+1, 1,jmaxe_cp+1, 1,Nkx_cp, 1,Nky_cp, 1,Nz_cp)
         ! Find the last results of the checkpoint file by iteration
         n_ = n0+1
         WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments_e", n_ ! start with moments_e/000001
@@ -118,21 +124,28 @@ CONTAINS
         n_ = n_ - 1 ! n_ is not a file so take the previous one n_-1
         ! Read state of system from checkpoint file and load every moment to change the distribution
         WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments_e", n_
-        CALL getarrnd(fidrst, dset_name, moments_e_cp(1:pmaxe_cp+1, 1:jmaxe_cp+1, ikxs:ikxe, ikys:ikye, izs:ize),(/1,3/))
+        ! CALL getarrnd(fidrst, dset_name, moments_e_cp(1:pmaxe_cp+1, 1:jmaxe_cp+1, ikxs:ikxe, ikys:ikye, izs:ize),(/1,3/))
+        CALL getarr(fidrst, dset_name, moments_e_cp(1:pmaxe_cp+1, 1:jmaxe_cp+1, 1:Nkx_cp, 1:Nky_cp, 1:Nz_cp))
         ! Initialize simulation moments array with checkpoints ones
         ! (they may have a larger number of polynomials, set to 0 at the begining)
         moments_e = 0._dp;
-        DO ip=ips_e,ipe_e
-        DO ij=ijs_e,ije_e
-            DO ikx=ikxs,ikxe
-            DO iky=ikys,ikye
-            DO iz = izs,ize
-                moments_e(ip,ij,ikx,iky,iz,:) = moments_e_cp(ip,ij,ikx,iky,iz)
+        pmaxloop_e = min(ipe_e,pmaxe_cp+1)
+        jmaxloop_e = min(ije_e,jmaxe_cp+1)
+        IF (ips_e .LE. pmaxe_cp+1) THEN
+          DO ip=ips_e,pmaxloop_e
+          IF (ijs_e .LE. jmaxe_cp+1) THEN
+            DO ij=ijs_e,jmaxloop_e
+                DO ikx=ikxs,ikxe
+                DO iky=ikys,ikye
+                DO iz = izs,ize
+                    moments_e(ip,ij,ikx,iky,iz,:) = moments_e_cp(ip,ij,ikx,iky,iz)
+                ENDDO
+                ENDDO
+                ENDDO
             ENDDO
-            ENDDO
-            ENDDO
-        ENDDO
-        ENDDO
+          ENDIF
+          ENDDO
+        ENDIF
         ! Deallocate checkpoint arrays
         DEALLOCATE(moments_e_cp)
         ENDIF
@@ -144,7 +157,8 @@ CONTAINS
         IF (my_id .EQ. 0) WRITE(*,*) "Ji_cp = ", jmaxi_cp
         CALL getatt(fidrst,"/data/input/" , "start_iframe5d", n0)
         ! Allocate the required size to load checkpoints moments
-        CALL allocate_array(moments_i_cp, 1,pmaxi_cp+1, 1,jmaxi_cp+1, ikxs,ikxe, ikys,ikye, izs,ize)
+        ! CALL allocate_array(moments_i_cp, 1,pmaxi_cp+1, 1,jmaxi_cp+1, ikxs,ikxe, ikys,ikye, izs,ize)
+        CALL allocate_array(moments_i_cp, 1,pmaxi_cp+1, 1,jmaxi_cp+1, 1,Nkx_cp, 1,Nky_cp, 1,Nz_cp)
         ! Find the last results of the checkpoint file by iteration
         n_ = n0+1
         WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments_i", n_ ! start with moments_e/000001
@@ -156,21 +170,29 @@ CONTAINS
 
         ! Read state of system from checkpoint file and load every moment to change the distribution
         WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments_i", n_
-        CALL getarrnd(fidrst, dset_name, moments_i_cp(1:pmaxi_cp+1, 1:jmaxi_cp+1, ikxs:ikxe, ikys:ikye, izs:ize),(/1,3/))
+        ! CALL getarrnd(fidrst, dset_name, moments_i_cp(1:pmaxi_cp+1, 1:jmaxi_cp+1, ikxs:ikxe, ikys:ikye, izs:ize),(/1,3/))
+        CALL getarr(fidrst, dset_name, moments_i_cp(1:pmaxi_cp+1, 1:jmaxi_cp+1, 1:Nkx_cp, 1:Nky_cp, 1:Nz_cp))
+
         ! Initialize simulation moments array with checkpoints ones
         ! (they may have a larger number of polynomials, set to 0 at the begining)
-        moments_i = 0._dp
-        DO ip=1,pmaxi_cp+1
-        DO ij=1,jmaxi_cp+1
-            DO ikx=ikxs,ikxe
-            DO iky=ikys,ikye
-            DO iz = izs,ize
-                moments_i(ip,ij,ikx,iky,iz,:) = moments_i_cp(ip,ij,ikx,iky,iz)
+        moments_i = 0._dp;
+        pmaxloop_i = min(ipe_i,pmaxi_cp+1)
+        jmaxloop_i = min(ije_i,jmaxi_cp+1)
+        IF (ips_i .LE. pmaxi_cp+1) THEN
+          DO ip=ips_i,pmaxloop_i
+          IF (ijs_i .LE. jmaxi_cp+1) THEN
+            DO ij=ijs_i,jmaxloop_i
+                DO ikx=ikxs,ikxe
+                DO iky=ikys,ikye
+                DO iz = izs,ize
+                    moments_i(ip,ij,ikx,iky,iz,:) = moments_i_cp(ip,ij,ikx,iky,iz)
+                ENDDO
+                ENDDO
+                ENDDO
             ENDDO
-            ENDDO
-            ENDDO
-        ENDDO
-        ENDDO
+          ENDIF
+          ENDDO
+        ENDIF
         ! Deallocate checkpoint arrays
         DEALLOCATE(moments_i_cp)
 
diff --git a/src/srcinfo.h b/src/srcinfo.h
index 0d57eb336ae8322c3f325f0a5f265a715f5bee74..116f310eb3f5e23d2a90d18f702206b14a99d3b7 100644
--- a/src/srcinfo.h
+++ b/src/srcinfo.h
@@ -3,8 +3,8 @@ character(len=40) BRANCH
 character(len=20) AUTHOR
 character(len=40) EXECDATE
 character(len=40) HOST
-parameter (VERSION='6d12f9c-dirty')
+parameter (VERSION='3b26011-dirty')
 parameter (BRANCH='master')
 parameter (AUTHOR='ahoffman')
-parameter (EXECDATE='Tue Dec 14 10:47:37 CET 2021')
+parameter (EXECDATE='Fri Feb 25 14:24:41 CET 2022')
 parameter (HOST ='spcpc606')
diff --git a/src/srcinfo/srcinfo.h b/src/srcinfo/srcinfo.h
index 0d57eb336ae8322c3f325f0a5f265a715f5bee74..116f310eb3f5e23d2a90d18f702206b14a99d3b7 100644
--- a/src/srcinfo/srcinfo.h
+++ b/src/srcinfo/srcinfo.h
@@ -3,8 +3,8 @@ character(len=40) BRANCH
 character(len=20) AUTHOR
 character(len=40) EXECDATE
 character(len=40) HOST
-parameter (VERSION='6d12f9c-dirty')
+parameter (VERSION='3b26011-dirty')
 parameter (BRANCH='master')
 parameter (AUTHOR='ahoffman')
-parameter (EXECDATE='Tue Dec 14 10:47:37 CET 2021')
+parameter (EXECDATE='Fri Feb 25 14:24:41 CET 2022')
 parameter (HOST ='spcpc606')
diff --git a/src/stepon.F90 b/src/stepon.F90
index f56880aee24408625d08627b5cb56cd9a6081752..79f5dfbb6986931291ab374612848b0f5e5978e2 100644
--- a/src/stepon.F90
+++ b/src/stepon.F90
@@ -27,6 +27,7 @@ SUBROUTINE stepon
       ! N_rhs(N_n, nadia_n, phi_n, S_n, Tcoll_n)
       IF(KIN_E) CALL moments_eq_rhs_e
       CALL moments_eq_rhs_i
+
       ! ---- step n -> n+1 transition
       ! Advance from updatetlevel to updatetlevel+1 (according to num. scheme)
       CALL advance_time_level
@@ -37,12 +38,12 @@ SUBROUTINE stepon
       CALL apply_closure_model
       ! Exchanges the ghosts values of N_n+1
       CALL update_ghosts
-      ! Update collision C_n+1 = C(N_n+1)
-      CALL compute_TColl
       ! Update electrostatic potential phi_n = phi(N_n+1)
       CALL poisson
       ! Update non adiabatic moments n -> n+1
       CALL compute_nadiab_moments
+      ! Update collision C_n+1 = C(N_n+1)
+      CALL compute_TColl
       ! Update nonlinear term S_n -> S_n+1(phi_n+1,N_n+1)
       CALL compute_Sapj
       ! Store or cancel/maintain zonal modes artificially
diff --git a/wk/analysis_3D.m b/wk/analysis_3D.m
index d3e9d353f6a6a3698b0e1efce5c24683851163a4..568a56d7da05b2ca2539d4da693bd6b31dd2b27b 100644
--- a/wk/analysis_3D.m
+++ b/wk/analysis_3D.m
@@ -29,7 +29,7 @@ end
 
 if 0
 %% statistical transport averaging
-options.T = [1500 5000];
+options.T = [5000 6000];
 fig = statistical_transport_averaging(data,options);
 end
 
@@ -112,7 +112,7 @@ end
 
 if 0
 %% 1D spectrum
-options.TIME   = 1000:3000;
+options.TIME   = 5000:10:5200;
 options.NORM   = 1;
 % options.NAME   = '\phi';
 % options.NAME      = 'n_i';
@@ -147,7 +147,7 @@ if 0
 %% Mode evolution
 options.NORMALIZED = 0;
 options.K2PLOT = 0.01:0.01:1.0;
-options.TIME   =500:1:3000;
+options.TIME   = 5000:1:5050;
 options.NMA    = 1;
 options.NMODES = 20;
 fig = mode_growth_meter(data,options);
diff --git a/wk/analysis_header.m b/wk/analysis_header.m
index aa87383b5a00f19bb9efbaa6606c92856d59b178..e3f8e09f2f843a2799989887c352fc9e29868b63 100644
--- a/wk/analysis_header.m
+++ b/wk/analysis_header.m
@@ -88,7 +88,7 @@ outfile ='';
 
 %% nu = 0
 
-outfile ='Hallenbert_fig2a/200x32_21x11_Lx_120_Ly_60_kN_1.6_eta_0.4_nu_0_muxy_1e-2';
+% outfile ='Hallenbert_fig2a/200x32_21x11_Lx_120_Ly_60_kN_1.6_eta_0.4_nu_0_muxy_1e-2';
 % outfile ='Hallenbert_fig2a/200x32_11x6_Lx_120_Ly_60_kN_1.6_eta_0.4_nu_0_muxy_1e-2';
 % outfile ='Hallenbert_fig2a/200x32_5x3_Lx_120_Ly_60_kN_1.6_eta_0.4_nu_0_muxy_1e-2';
 % outfile ='Hallenbert_fig2a/200x32_5x3_Lx_120_Ly_60_kN_1.6_eta_0.4_nuDGGK_0.1_muxy_1e-2';
@@ -138,8 +138,11 @@ outfile ='Hallenbert_fig2a/200x32_21x11_Lx_120_Ly_60_kN_1.6_eta_0.4_nu_0_muxy_1e
 
 % outfile = 'nu_0.1_transport_scan/colless_kn_1.6_HD';
 
+% outfile = 'nu_0.1_transport_scan/large_box_kN_2.1_nu_0.1';
+
 % outfile = 'predator_prey/SG_Kn_1.7_nu_0.01';
 
+outfile = 'ZF_damping_DK/SG_4x2_nu_0.1';
 % else% Marconi results
 % outfile ='';
 % outfile ='';
diff --git a/wk/benchmark_HeLaZ_gene_transport_zpinch.m b/wk/benchmark_HeLaZ_gene_transport_zpinch.m
index 0359ffb73741d5073bf2fc86533252e6d25714e3..59d756ebeb1a48be79b3f9fe1e8ab01957078656 100644
--- a/wk/benchmark_HeLaZ_gene_transport_zpinch.m
+++ b/wk/benchmark_HeLaZ_gene_transport_zpinch.m
@@ -86,10 +86,10 @@ fig = figure; set(gcf,'Position',[250 250 600 300]);
 % upward scan
 KN                = [   1.5    1.6    1.7    1.8    1.9    2.0   2.1    2.2    2.3    2.4    2.5];
 LDGK_200x32x05x03 = [2.6e-2 2.6e-1 6.3e-1 1.3e+0 2.3e+0 3.6e+0 6.3e+0 9.4e+0 1.5e+1 2.3e+1 3.8e+1];
-LRGK_200x32x05x03 = [0.0e+0 4.0e-1 7.2e-1 1.2e+0 1.7e+0 2.0e+0 3.5e+0 6.0e+0 4.8e+0 6.0e+0 2.9e+1];
+LRGK_200x32x05x03 = [0.0e+0 4.0e-1 7.2e-1 1.2e+0 1.7e+0 2.3e+0 3.5e+0 6.0e+0 4.8e+0 6.0e+0 2.9e+1];
 SGGK_200x32x05x03 = [0.0e-9 1.5e-2 1.0e-1 3.8e-1 8.4e-1 1.4e+0 2.5e+0 4.2e+0 8.0e+0 1.6e+1 3.5e+1];
-DGGK_200x32x05x03 = [2.0e-4 3.6e-3 1.3e-2 4.0e-2 1.2e-1 1.8e-1 2.0e-1 4.4e-1 6.6e-1 1.3e+1 3.2e+1];
-NOCO_200x32x05x03 = [0.0e+0 1.2e-2 2.6e-2 9.0e-2 2.3e-1 3.1e-1 7.0e-1 0.0e+0 0.0e+0 0.0e+1 2.4e+1];
+DGGK_200x32x05x03 = [2.0e-4 3.6e-3 1.3e-2 4.0e-2 1.2e-1 1.8e-1 2.0e-1 2.2e+0 6.6e-1 1.3e+1 3.2e+1];
+NOCO_200x32x05x03 = [0.0e+0 1.2e-2 2.6e-2 9.0e-2 2.3e-1 3.1e-1 7.0e-1 3.9e+0 6.9e+0 1.2e+1 2.4e+1];
 % downward scan
 % KN                = [KN                   1.5    1.6    1.7    1.8    1.9    2.0    2.1    2.2    2.3    2.4    2.5];
 % LDGK_200x32x05x03 = [LDGK_200x32x05x03 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0];
@@ -122,10 +122,11 @@ xlim([ 1.55 2.55]);
 % saveas(fig,'/home/ahoffman/Dropbox/Applications/Overleaf/Paper 1/figures/coll_transport_benchmark.eps')
 
 %% Burst study Kn = 1.7
-NU                = [0.0e+0 1.0e-2 2.0e-2 3.0e-2 4.0e-2 5.0e-2 1.0e-1];
-SGGK_200x32x05x03 = [0.0e+0 2.4e-2 2.8e-2 3.5e-2 4.5e-2 5.5e-2 1.0e-1];
-LRGK_200x32x05x03 = [0.0e+0 0.0e+0 0.0e+0 0.0e-2 0.0e-2 0.0e+0 0.0e+0];
+NU                = [0.0e+0 1.0e-2 2.0e-2 3.0e-2 4.0e-2 5.0e-2 6.0e-2 7.0e-2 8.0e-2 9.0e-2 1.0e-1];
+SGGK_200x32x05x03 = [1.0e-2 2.4e-2 2.8e-2 3.5e-2 4.5e-2 5.5e-2 6.5e-2 7.5e-2 8.3e-2 8.8e-2 1.0e-1];
+SGGK_200x32x10x05 = [1.0e-2 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0 0.0e+0];
+LRGK_200x32x05x03 = [0.0e+0 2.9e-2 0.0e+0 0.0e-2 0.0e-2 0.0e+0 0.0e+0];
 % NOCO_200x32x05x03 = [0.0e+0 0.0e+0 0.0e+0 0.0e+0];
 figure
-semilogy(NU,SGGK_200x32x05x03); hold on
+plot(NU,SGGK_200x32x05x03,'x'); hold on
 grid on; xlabel('$\nu$'); ylabel('$\Gamma^\infty_x$');
diff --git a/wk/linear_1D_entropy_mode.m b/wk/linear_1D_entropy_mode.m
index 82ec97b90edcd0b88841ac038f2288e43e2cd8fb..e6d1265e21d30487fdd505030591353b4cd1de88 100644
--- a/wk/linear_1D_entropy_mode.m
+++ b/wk/linear_1D_entropy_mode.m
@@ -6,7 +6,7 @@ default_plots_options
 CLUSTER.TIME  = '99:00:00'; % allocation time hh:mm:ss
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% PHYSICAL PARAMETERS
-NU      = 0.01;   % Collision frequency
+NU      = 0.1;   % Collision frequency
 TAU     = 1.0;    % e/i temperature ratio
 K_N     = 1.7;   % Density gradient drive
 K_T     = 0.25*K_N;   % Temperature '''
@@ -23,7 +23,7 @@ SHEAR   = 0.0;    % magnetic shear
 EPS     = 0.0;    % inverse aspect ratio
 SG      = 1;         % Staggered z grids option
 %% TIME PARMETERS
-TMAX    = 300;  % Maximal time unit
+TMAX    = 100;  % Maximal time unit
 DT      = 2e-2;   % Time step
 SPS0D   = 1;      % Sampling per time unit for 2D arrays
 SPS2D   = 0;      % Sampling per time unit for 2D arrays
@@ -37,8 +37,8 @@ LINEARITY = 'linear';   % activate non-linearity (is cancelled if KXEQ0 = 1)
 KIN_E   = 1;
 % Collision operator
 % (LB:L.Bernstein, DG:Dougherty, SG:Sugama, LR: Lorentz, LD: Landau)
-CO      = 'SG';
-GKCO    = 1; % gyrokinetic operator
+CO      = 'DG';
+GKCO    = 0; % gyrokinetic operator
 ABCO    = 1; % interspecies collisions
 INIT_ZF = 0; ZF_AMP = 0.0;
 CLOS    = 0;   % Closure model (0: =0 truncation, 1: gyrofluid closure (p+2j<=Pmax))
@@ -72,11 +72,11 @@ CURVB   = 1.0;
 
 if 1
 % Parameter scan over PJ
-PA = [4 6 8 10];
-JA = [2 3 4  5];
+% PA = [4 6 8 10];
+% JA = [2 3 4  5];
 Nparam = numel(PA);
 % Parameter scan over KN
-% PA = [4]; JA = [2];
+PA = [4]; JA = [2];
 %     PMAXE = PA(1); PMAXI = PA(1);
 %     JMAXE = JA(1); JMAXI = JA(1);
 % KNA    = 1.5:0.05:2.5;