diff --git a/src/collision_mod.F90 b/src/collision_mod.F90
index 2fbfc1888cc1dcde92195f02ba3f6331a6efd5f7..17283101fb9b9bbc418eb5d63036eef729a0fc1b 100644
--- a/src/collision_mod.F90
+++ b/src/collision_mod.F90
@@ -11,12 +11,138 @@ USE utility
 IMPLICIT NONE
 
 PUBLIC :: compute_TColl
-PUBLIC :: DoughertyGK_e, DoughertyGK_i
+PUBLIC :: DoughertyGK_e, DoughertyGK_i!, DoughertyGK
 PUBLIC :: load_COSOlver_mat
 PUBLIC :: apply_COSOlver_mat_e, apply_COSOlver_mat_i
 
 CONTAINS
 
+  ! !******************************************************************************!
+  ! !! Doughtery gyrokinetic collision operator for electrons
+  ! !******************************************************************************!
+  ! SUBROUTINE DoughertyGK(ip_,ij_,ikr_,ikz_,TColl_,specie_)
+  !   IMPLICIT NONE
+  !   INTEGER,     INTENT(IN)        :: ip_,ij_,ikr_,ikz_
+  !   CHARACTER(len = 1), INTENT(IN) :: specie_
+  !   COMPLEX(dp), INTENT(INOUT)     :: TColl_
+  !
+  !   COMPLEX(dp) :: n_,upar_,uperp_,Tpar_, Tperp_
+  !   COMPLEX(dp) :: Dpj, Ppj, T_
+  !   COMPLEX(dp) :: nadiab_moment_0j
+  !   COMPLEX(dp), DIMENSION(:,:), ALLOCATABLE :: moments_
+  !   REAL(dp),    DIMENSION(:),   ALLOCATABLE :: kernel_
+  !   REAL(dp)    :: Knp0, Knp1, Knm1
+  !   INTEGER     :: in_, jmax_
+  !   REAL(dp)    :: n_dp, j_dp, p_dp, b_, bo2_2_, q_tau_, nu_
+  !
+  !   !** Auxiliary variables **
+  !   !! If electrons !!
+  !   IF ( specie_ .EQ. 'e' ) THEN
+  !     p_dp      = REAL(parray_e(ip_),dp)
+  !     j_dp      = REAL(jarray_e(ij_),dp)
+  !     jmax_     = jmaxe
+  !     bo2_2_    = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmae2_taue_o2 ! this is (be/2)^2
+  !     b_        = 2_dp*SQRT(bo2_2_) ! this is be
+  !     q_tau_   = q_e/tau_e
+  !     nu_       = nu_ee
+  !     CALL allocate_array(moments_, ips_e,ipe_e, ijs_e,ije_e)
+  !     moments_(ips_e:ipe_e,ijs_e:ije_e) = moments_e(ips_e:ipe_e,ijs_e:ije_e,ikr_,ikz_,updatetlevel)
+  !     CALL allocate_array(kernel_, ijs_e,ije_e)
+  !     kernel_(ijsg_e:ijeg_e)    = kernel_e(ijsg_e:ijeg_e,ikr_,ikz_)
+  !   !! If ions !!
+  !   ELSEIF ( specie_ .EQ. 'i') THEN
+  !     p_dp      = REAL(parray_i(ip_),dp)
+  !     j_dp      = REAL(jarray_i(ij_),dp)
+  !     jmax_     = jmaxi
+  !     bo2_2_    = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmai2_taui_o2 ! this is (bi/2)^2
+  !     b_        = 2_dp*SQRT(bo2_2_) ! this is be
+  !     q_tau_   = q_i/tau_i
+  !     nu_       = nu_i
+  !     CALL allocate_array(moments_, ips_i,ipe_i, ijs_i,ije_i)
+  !     moments_(ips_i:ipe_i,ijs_i:ije_i) = moments_i(ips_i:ipe_i,ijs_i:ije_i,ikr_,ikz_,updatetlevel)
+  !     CALL allocate_array(kernel_, ijsg_i,ijeg_i)
+  !     kernel_(ijsg_i:ijeg_i)    = kernel_i(ijsg_i:ijeg_i,ikr_,ikz_)
+  !   ENDIF
+  !
+  !   !** Assembling collison operator **
+  !   ! Velocity-space diffusion (similar to Lenhard Bernstein)
+  !   ! -nuee (p + 2j + b^2/2) Nepj
+  !   TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*bo2_2_)*moments_(ip_,ij_)
+  !
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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*bo2_2_) * q_tau_ * kernel_(ij_)*phi(ikr_,ikz_)
+  !       !** build required fluid moments **
+  !       n_     = 0._dp
+  !       upar_  = 0._dp; uperp_ = 0._dp
+  !       Tpar_  = 0._dp; Tperp_ = 0._dp
+  !       DO in_ = 1,jmaxe+1
+  !         n_dp = REAL(in_-1,dp)
+  !         ! Store the kernels for sparing readings
+  !         Knp0 =  kernel_(in_)
+  !         Knp1 =  kernel_(in_+1)
+  !         Knm1 =  kernel_(in_-1)
+  !         ! Nonadiabatic moments (only different from moments when p=0)
+  !         nadiab_moment_0j   = moments_(1,in_) + q_tau_ * Knp0 *phi(ikr_,ikz_)
+  !         ! Density
+  !         n_     = n_     + Knp0 * nadiab_moment_0j
+  !         ! Perpendicular velocity
+  !         uperp_ = uperp_ + b_*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
+  !         ! Parallel temperature
+  !         Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_(3,in_) + 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_
+  !     ! Add energy restoring term
+  !     TColl_ = TColl_ + T_* 4._dp *  j_dp          * kernel_(ij_)
+  !     TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * kernel_(ij_+1)
+  !     TColl_ = TColl_ - T_* 2._dp *  j_dp          * kernel_(ij_-1)
+  !     TColl_ = TColl_ + uperp_*b_*  (kernel_(ij_) - kernel_(ij_-1))
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !   ELSEIF( p_dp .eq. 1 ) THEN ! kronecker p1
+  !     !** build required fluid moments **
+  !     upar_  = 0._dp
+  !     DO in_ = 1,jmax_+1
+  !       ! Parallel velocity
+  !        upar_  = upar_  + Kernel_(in_) * moments_(2,in_)
+  !     ENDDO
+  !     TColl_ = TColl_ + upar_*Kernel_(ij_)
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !   ELSEIF( p_dp .eq. 2 ) THEN ! kronecker p2
+  !     !** build required fluid moments **
+  !     n_     = 0._dp
+  !     upar_  = 0._dp; uperp_ = 0._dp
+  !     Tpar_  = 0._dp; Tperp_ = 0._dp
+  !     DO in_ = 1,jmaxe+1
+  !       n_dp = REAL(in_-1,dp)
+  !       ! Store the kernels for sparing readings
+  !       Knp0 =  kernel_(in_)
+  !       Knp1 =  kernel_(in_+1)
+  !       Knm1 =  kernel_(in_-1)
+  !       ! Nonadiabatic moments (only different from moments when p=0)
+  !       nadiab_moment_0j   = moments_(1,in_) + q_tau_*Knp0*phi(ikr_,ikz_)
+  !       ! Density
+  !       n_     = n_     + Knp0 * nadiab_moment_0j
+  !       ! Parallel temperature
+  !       Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_(3,in_) + nadiab_moment_0j)
+  !       ! Perpendicular temperature
+  !       Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1) * Knp1 - n_dp * Knm1)*nadiab_moment_0j
+  !     ENDDO
+  !     T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
+  !     TColl_ = TColl_ + T_*SQRT2*kernel_(ij_)
+  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !
+  !   ENDIF
+  !   ! Multiply by specieslike collision coefficient
+  !   TColl_ = nu_ * TColl_
+  !
+  ! END SUBROUTINE DoughertyGK
 
   !******************************************************************************!
   !! Doughtery gyrokinetic collision operator for electrons
@@ -28,84 +154,90 @@ CONTAINS
 
     COMPLEX(dp) :: n_,upar_,uperp_,Tpar_, Tperp_
     COMPLEX(dp) :: Dpj, Ppj, T_, be_
-    COMPLEX(dp) :: nadiab_moment_0j, nadiab_moment_0jp1, nadiab_moment_0jm1
+    COMPLEX(dp) :: nadiab_moment_0j
+    REAL(dp)    :: Knp0, Knp1, Knm1
     INTEGER     :: in_
     REAL(dp)    :: n_dp, j_dp, p_dp, be_2, q_e_tau_e
 
     !** Auxiliary variables **
     p_dp      = REAL(parray_e(ip_),dp)
     j_dp      = REAL(jarray_e(ij_),dp)
-    be_2      = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmae2_taue_o2
-    be_       = SQRT(2._dp*be_2)
+    be_2      = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmae2_taue_o2 ! this is (be/2)^2
+    ! ibe_       = imagu*2._dp*SQRT(be_2)
+    be_       = 2_dp*SQRT(be_2) ! this is be
     q_e_tau_e = q_e/tau_e
 
     !** Assembling collison operator **
     ! Velocity-space diffusion (similar to Lenhard Bernstein)
-    TColl_ = -(p_dp + 2._dp*j_dp + be_2)*moments_e(ip_,ij_,ikr_,ikz_,updatetlevel)
+    ! -nuee (p + 2j + b^2/2) Nepj
+    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*be_2)*moments_e(ip_,ij_,ikr_,ikz_,updatetlevel)
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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 + be_2) * q_e_tau_e * Kernel_e(ij_,ikr_,ikz_)*phi(ikr_,ikz_)
+      TColl_ = TColl_ - (p_dp + 2._dp*j_dp + 2._dp*be_2) * q_e_tau_e * Kernel_e(ij_,ikr_,ikz_)*phi(ikr_,ikz_)
         !** build required fluid moments **
         n_     = 0._dp
         upar_  = 0._dp; uperp_ = 0._dp
         Tpar_  = 0._dp; Tperp_ = 0._dp
         DO in_ = 1,jmaxe+1
           n_dp = REAL(in_-1,dp)
+          ! Store the kernels for sparing readings
+          Knp0 =  Kernel_e(in_,ikr_,ikz_)
+          Knp1 =  Kernel_e(in_+1,ikr_,ikz_)
+          Knm1 =  Kernel_e(in_-1,ikr_,ikz_)
           ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_e(1,in_  ,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jp1 = moments_e(1,in_+1,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_+1,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jm1 = moments_e(1,in_-1,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_-1,ikr_,ikz_)*phi(ikr_,ikz_)
+          nadiab_moment_0j   = moments_e(1,in_  ,ikr_,ikz_,updatetlevel) + q_e_tau_e * Knp0 *phi(ikr_,ikz_)
           ! Density
-          n_     = n_     + Kernel_e(in_,ikr_,ikz_) * nadiab_moment_0j
+          n_     = n_     + Knp0 * nadiab_moment_0j
           ! Perpendicular velocity
-          uperp_ = uperp_ + be_*0.5_dp*Kernel_e(in_,ikr_,ikz_) * (nadiab_moment_0j - nadiab_moment_0jp1)
+          uperp_ = uperp_ + be_*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
           ! Parallel temperature
-          Tpar_  = Tpar_  + Kernel_e(in_,ikr_,ikz_) * (SQRT2*moments_e(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
+          Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_e(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
           ! Perpendicular temperature
-          Tperp_ = Tperp_ + Kernel_e(in_,ikr_,ikz_) * ((2._dp*n_dp+1._dp)* nadiab_moment_0j   &
-                                                     -            n_dp * nadiab_moment_0jm1 &
-                                                     -         (n_dp+1)* nadiab_moment_0jp1)
+          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_)/3._dp - n_
       ! Add energy restoring term
-      TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_e(ij_  ,ikr_,ikz_)
+      TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_e(ij_,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * Kernel_e(ij_+1,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp *  j_dp          * Kernel_e(ij_-1,ikr_,ikz_)
-      TColl_ = TColl_ + uperp_*be_* (Kernel_e(ij_  ,ikr_,ikz_) - Kernel_e(ij_-1,ikr_,ikz_))
+      TColl_ = TColl_ + uperp_*be_* (Kernel_e(ij_,ikr_,ikz_) - Kernel_e(ij_-1,ikr_,ikz_))
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ELSEIF( p_dp .eq. 1 ) THEN ! kronecker p1
-        !** build required fluid moments **
-        upar_  = 0._dp
-        DO in_ = 1,jmaxe+1
-          ! Parallel velocity
-           upar_  = upar_  + Kernel_e(in_,ikr_,ikz_) * moments_e(2,in_,ikr_,ikz_,updatetlevel)
-        ENDDO
+      !** build required fluid moments **
+      upar_  = 0._dp
+      DO in_ = 1,jmaxe+1
+        ! Parallel velocity
+         upar_  = upar_  + Kernel_e(in_,ikr_,ikz_) * moments_e(2,in_,ikr_,ikz_,updatetlevel)
+      ENDDO
       TColl_ = TColl_ + upar_*Kernel_e(ij_,ikr_,ikz_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ELSEIF( p_dp .eq. 2 ) THEN ! kronecker p2
-        !** build required fluid moments **
-        n_     = 0._dp
-        Tpar_  = 0._dp; Tperp_ = 0._dp
-        DO in_ = 1,jmaxe+1
-          n_dp = REAL(in_-1,dp)
-          ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_e(1,in_  ,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)/tau_e
-          nadiab_moment_0jp1 = moments_e(1,in_+1,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_+1,ikr_,ikz_)*phi(ikr_,ikz_)/tau_e
-          nadiab_moment_0jm1 = moments_e(1,in_-1,ikr_,ikz_,updatetlevel) + q_e_tau_e * kernel_e(in_-1,ikr_,ikz_)*phi(ikr_,ikz_)/tau_e
-          ! Density
-          n_     = n_     + Kernel_e(in_,ikr_,ikz_) * nadiab_moment_0j
-          ! Parallel temperature
-          Tpar_  = Tpar_  + Kernel_e(in_,ikr_,ikz_) * (SQRT2*moments_e(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
-          ! Perpendicular temperature
-          Tperp_ = Tperp_ + Kernel_e(in_,ikr_,ikz_) * ((2._dp*n_dp+1._dp)*nadiab_moment_0j - n_dp*nadiab_moment_0jm1 - (n_dp+1)*nadiab_moment_0jp1)
-        ENDDO
-        T_    = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
+      !** build required fluid moments **
+      n_     = 0._dp
+      upar_  = 0._dp; uperp_ = 0._dp
+      Tpar_  = 0._dp; Tperp_ = 0._dp
+      DO in_ = 1,jmaxe+1
+        n_dp = REAL(in_-1,dp)
+        ! Store the kernels for sparing readings
+        Knp0 =  Kernel_e(in_,ikr_,ikz_)
+        Knp1 =  Kernel_e(in_+1,ikr_,ikz_)
+        Knm1 =  Kernel_e(in_-1,ikr_,ikz_)
+        ! Nonadiabatic moments (only different from moments when p=0)
+        nadiab_moment_0j   = moments_e(1,in_  ,ikr_,ikz_,updatetlevel) + q_e_tau_e*Knp0*phi(ikr_,ikz_)
+        ! Density
+        n_     = n_     + Knp0 * nadiab_moment_0j
+        ! Parallel temperature
+        Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_e(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
+        ! Perpendicular temperature
+        Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1) * Knp1 - n_dp * Knm1)*nadiab_moment_0j
+      ENDDO
+      T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
       TColl_ = TColl_ + T_*SQRT2*Kernel_e(ij_,ikr_,ikz_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -114,9 +246,9 @@ CONTAINS
     TColl_ = nu_ee * TColl_
 
   END SUBROUTINE DoughertyGK_e
-
   !******************************************************************************!
-  !! Doughtery gyrokinetic collision operator for electrons
+  !! Doughtery gyrokinetic collision operator for ions
+  !******************************************************************************!
   SUBROUTINE DoughertyGK_i(ip_,ij_,ikr_,ikz_,TColl_)
     IMPLICIT NONE
     INTEGER,     INTENT(IN)    :: ip_,ij_,ikr_,ikz_
@@ -124,84 +256,94 @@ CONTAINS
 
     COMPLEX(dp) :: n_,upar_,uperp_,Tpar_, Tperp_
     COMPLEX(dp) :: Dpj, Ppj, T_, bi_
-    COMPLEX(dp) :: nadiab_moment_0j, nadiab_moment_0jp1, nadiab_moment_0jm1
+    COMPLEX(dp) :: nadiab_moment_0j
+    REAL(dp)    :: Knp0, Knp1, Knm1
     INTEGER     :: in_
     REAL(dp)    :: n_dp, j_dp, p_dp, bi_2, q_i_tau_i
 
     !** Auxiliary variables **
     p_dp      = REAL(parray_i(ip_),dp)
     j_dp      = REAL(jarray_i(ij_),dp)
-    bi_2      =  (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmai2_taui_o2
-    bi_      = SQRT(2._dp*bi_2)
+    bi_2      = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmai2_taui_o2 ! this is (bi/2)^2
+    bi_       = 2_dp*SQRT(bi_2) ! this is be
     q_i_tau_i = q_i/tau_i
 
     !** Assembling collison operator **
     ! Velocity-space diffusion (similar to Lenhard Bernstein)
-    TColl_ = -(p_dp + 2._dp*j_dp + bi_2)*moments_i(ip_,ij_,ikr_,ikz_,updatetlevel)
+    ! -nui (p + 2j + b^2/2) Nipj
+    TColl_ = -(p_dp + 2._dp*j_dp + 2._dp*bi_2)*moments_i(ip_,ij_,ikr_,ikz_,updatetlevel)
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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 + bi_2) * q_i_tau_i * Kernel_i(ij_,ikr_,ikz_)*phi(ikr_,ikz_)
+      TColl_ = TColl_ - (p_dp + 2._dp*j_dp + 2._dp*bi_2) * q_i_tau_i * Kernel_i(ij_,ikr_,ikz_)*phi(ikr_,ikz_)
         !** build required fluid moments **
         n_     = 0._dp
         upar_  = 0._dp; uperp_ = 0._dp
         Tpar_  = 0._dp; Tperp_ = 0._dp
         DO in_ = 1,jmaxi+1
           n_dp = REAL(in_-1,dp)
+          ! Store the kernels for sparing readings
+          Knp0 =  Kernel_i(in_,ikr_,ikz_)
+          Knp1 =  Kernel_i(in_+1,ikr_,ikz_)
+          Knm1 =  Kernel_i(in_-1,ikr_,ikz_)
           ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_i(1,in_  ,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jp1 = moments_i(1,in_+1,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_+1,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jm1 = moments_i(1,in_-1,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_-1,ikr_,ikz_)*phi(ikr_,ikz_)
+          nadiab_moment_0j   = moments_i(1,in_  ,ikr_,ikz_,updatetlevel) + q_i_tau_i * Kernel_i(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)
           ! Density
-          n_     = n_     + Kernel_i(in_,ikr_,ikz_) * nadiab_moment_0j
+          n_     = n_     + Knp0 * nadiab_moment_0j
           ! Perpendicular velocity
-          uperp_ = uperp_ + bi_*0.5_dp*Kernel_i(in_,ikr_,ikz_) * (nadiab_moment_0j -nadiab_moment_0jp1)
+          ! uperp_ = uperp_ + ibi_*0.5_dp*Kernel_i(in_,ikr_,ikz_) * (nadiab_moment_0j - nadiab_moment_0jp1)
+          ! uperp_ = uperp_ + b_i*0.5_dp*Kernel_i(in_,ikr_,ikz_) * (nadiab_moment_0j - nadiab_moment_0jp1)
+          uperp_ = uperp_ + bi_*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
           ! Parallel temperature
-          Tpar_  = Tpar_  + Kernel_i(in_,ikr_,ikz_) * (SQRT2*moments_i(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
+          Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_i(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
           ! Perpendicular temperature
-          Tperp_ = Tperp_ + Kernel_i(in_,ikr_,ikz_) * ((2._dp*n_dp+1._dp)* nadiab_moment_0j   &
-                                                     -            n_dp * nadiab_moment_0jm1 &
-                                                     -         (n_dp+1)* nadiab_moment_0jp1)
+          ! Tperp_ = Tperp_ + Kernel_i(in_,ikr_,ikz_) * ((2._dp*n_dp+1._dp)* nadiab_moment_0j   &
+          !                                            -            n_dp * nadiab_moment_0jm1 &
+          !                                            -         (n_dp+1)* nadiab_moment_0jp1)
+          Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1) * Knp1 - n_dp * Knm1)*nadiab_moment_0j
         ENDDO
         T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
       ! Add energy restoring term
-      TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_i(ij_  ,ikr_,ikz_)
+      TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_i(ij_,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * Kernel_i(ij_+1,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp *  j_dp          * Kernel_i(ij_-1,ikr_,ikz_)
-      TColl_ = TColl_ + uperp_*bi_*( Kernel_i(ij_  ,ikr_,ikz_) - Kernel_i(ij_-1,ikr_,ikz_))
+      TColl_ = TColl_ + uperp_*bi_* (Kernel_i(ij_,ikr_,ikz_) - Kernel_i(ij_-1,ikr_,ikz_))
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ELSEIF( p_dp .eq. 1 ) THEN ! kronecker p1
-        !** build required fluid moments **
-        upar_  = 0._dp
-        DO in_ = 1,jmaxi+1
-          ! Parallel velocity
-           upar_  = upar_  + Kernel_i(in_,ikr_,ikz_) * moments_i(2,in_,ikr_,ikz_,updatetlevel)
-        ENDDO
+      !** build required fluid moments **
+      upar_  = 0._dp
+      DO in_ = 1,jmaxi+1
+        ! Parallel velocity
+         upar_  = upar_  + Kernel_i(in_,ikr_,ikz_) * moments_i(2,in_,ikr_,ikz_,updatetlevel)
+      ENDDO
       TColl_ = TColl_ + upar_*Kernel_i(ij_,ikr_,ikz_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ELSEIF( p_dp .eq. 2 ) THEN ! kronecker p2
-        !** build required fluid moments **
-        n_     = 0._dp
-        Tpar_  = 0._dp; Tperp_ = 0._dp
-        DO in_ = 1,jmaxi+1
-          n_dp = REAL(in_-1,dp)
-          ! Nonadiabatic moments (only different from moments when p=0)
-          nadiab_moment_0j   = moments_i(1,in_  ,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jp1 = moments_i(1,in_+1,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_+1,ikr_,ikz_)*phi(ikr_,ikz_)
-          nadiab_moment_0jm1 = moments_i(1,in_-1,ikr_,ikz_,updatetlevel) + q_i_tau_i * kernel_i(in_-1,ikr_,ikz_)*phi(ikr_,ikz_)
-          ! Density
-          n_     = n_     + Kernel_i(in_,ikr_,ikz_) * nadiab_moment_0j
-          ! Parallel temperature
-          Tpar_  = Tpar_  + Kernel_i(in_,ikr_,ikz_) * (SQRT2*moments_i(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
-          ! Perpendicular temperature
-          Tperp_ = Tperp_ + Kernel_i(in_,ikr_,ikz_) * ((2._dp*n_dp+1._dp)*nadiab_moment_0j - n_dp*nadiab_moment_0jm1 - (n_dp+1)*nadiab_moment_0jp1)
-        ENDDO
-        T_    = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
+      !** build required fluid moments **
+      n_     = 0._dp
+      upar_  = 0._dp; uperp_ = 0._dp
+      Tpar_  = 0._dp; Tperp_ = 0._dp
+      DO in_ = 1,jmaxi+1
+        n_dp = REAL(in_-1,dp)
+        ! Store the kernels for sparing readings
+        Knp0 =  Kernel_i(in_,ikr_,ikz_)
+        Knp1 =  Kernel_i(in_+1,ikr_,ikz_)
+        Knm1 =  Kernel_i(in_-1,ikr_,ikz_)
+        ! Nonadiabatic moments (only different from moments when p=0)
+        nadiab_moment_0j   = moments_i(1,in_  ,ikr_,ikz_,updatetlevel) + q_i_tau_i * Kernel_i(in_  ,ikr_,ikz_)*phi(ikr_,ikz_)
+        ! Density
+        n_     = n_     + Knp0 * nadiab_moment_0j
+        ! Parallel temperature
+        Tpar_  = Tpar_  + Knp0 * (SQRT2*moments_i(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
+        ! Perpendicular temperature
+        Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1) * Knp1 - n_dp * Knm1)*nadiab_moment_0j
+      ENDDO
+      T_  = (Tpar_ + 2._dp*Tperp_)/3._dp - n_
       TColl_ = TColl_ + T_*SQRT2*Kernel_i(ij_,ikr_,ikz_)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
diff --git a/src/moments_eq_rhs.F90 b/src/moments_eq_rhs.F90
index cb981270f524324c267e277f0e24a431c56aa310..deeca00f82269be414ca222c308fde0d9d3397f7 100644
--- a/src/moments_eq_rhs.F90
+++ b/src/moments_eq_rhs.F90
@@ -129,6 +129,7 @@ SUBROUTINE moments_eq_rhs_e
 
           ELSEIF (CO .EQ. 1) THEN ! GK Dougherty
             CALL DoughertyGK_e(ip,ij,ikr,ikz,TColl)
+            ! CALL DoughertyGK(ip,ij,ikr,ikz,TColl,'e')
 
           ELSE ! COSOLver matrix
             TColl = TColl_e(ip,ij,ikr,ikz)
@@ -316,6 +317,7 @@ SUBROUTINE moments_eq_rhs_i
 
           ELSEIF (CO .EQ. 1) THEN ! GK Dougherty
             CALL DoughertyGK_i(ip,ij,ikr,ikz,TColl)
+            ! CALL DoughertyGK(ip,ij,ikr,ikz,TColl,'i')
           ELSE! COSOLver matrix (Sugama, Coulomb)
             TColl = TColl_i(ip,ij,ikr,ikz)
           ENDIF