diff --git a/src/moments_eq_rhs_mod.F90 b/src/moments_eq_rhs_mod.F90
index db861edde3c92bba30ea5d711579507fdf8df9d2..7a6603a4ed86e116df3c2d6d636c5866c8d4d207 100644
--- a/src/moments_eq_rhs_mod.F90
+++ b/src/moments_eq_rhs_mod.F90
@@ -8,6 +8,8 @@ SUBROUTINE compute_moments_eq_rhs
   IMPLICIT NONE
   IF(KIN_E) CALL moments_eq_rhs_e
             CALL moments_eq_rhs_i
+  !! BETA TESTING !!
+  IF(.false.) CALL add_Maxwellian_background_terms
 END SUBROUTINE compute_moments_eq_rhs
 !_____________________________________________________________________________!
 !_____________________________________________________________________________!
@@ -109,12 +111,19 @@ SUBROUTINE moments_eq_rhs_e
                 - i_ky * Tphi &
                 ! Numerical perpendicular hyperdiffusion (totally artificial, for stability purpose)
                 - (mu_x*kx**4 + mu_y*ky**4)*moments_e(ip,ij,iky,ikx,iz,updatetlevel) &
-                ! Numerical parallel hyperdiffusion "+ (mu_z*kz**4)"
+                ! Numerical parallel hyperdiffusion "+ (mu_z*kz**4)"  see Pueschel 2010 (eq 25)
                 + mu_z * diff_dz_coeff * ddz4_Nepj(ip,ij,iky,ikx,iz) &
                 ! Collision term
                 + TColl_e(ip,ij,iky,ikx,iz) &
                 ! Nonlinear term
                 - Sepj(ip,ij,iky,ikx,iz)
+
+            IF(ip-4 .GT. 0) &
+              ! Numerical parallel velocity hyperdiffusion "+ dvpar4 g_a" see Pueschel 2010 (eq 33)
+              moments_rhs_e(ip,ij,iky,ikx,iz,updatetlevel) = &
+                moments_rhs_e(ip,ij,iky,ikx,iz,updatetlevel) &
+                  + mu_p * moments_e(ip-4,ij,iky,ikx,iz,updatetlevel)
+
           ELSE
             moments_rhs_e(ip,ij,iky,ikx,iz,updatetlevel) = 0._dp
           ENDIF
@@ -238,6 +247,12 @@ SUBROUTINE moments_eq_rhs_i
                   + TColl_i(ip,ij,iky,ikx,iz)&
                   ! Nonlinear term
                   - Sipj(ip,ij,iky,ikx,iz)
+
+                  IF(ip-4 .GT. 0) &
+                    ! Numerical parallel velocity hyperdiffusion "+ dvpar4 g_a" see Pueschel 2010 (eq 33)
+                    moments_rhs_i(ip,ij,iky,ikx,iz,updatetlevel) = &
+                      moments_rhs_i(ip,ij,iky,ikx,iz,updatetlevel) &
+                        + mu_p * moments_i(ip-4,ij,iky,ikx,iz,updatetlevel)
           ELSE
             moments_rhs_i(ip,ij,iky,ikx,iz,updatetlevel) = 0._dp
           ENDIF
@@ -253,4 +268,98 @@ SUBROUTINE moments_eq_rhs_i
 
 END SUBROUTINE moments_eq_rhs_i
 
+SUBROUTINE add_Maxwellian_background_terms
+  ! This routine is meant to add the terms rising from the magnetic operator,
+  ! i.e. (B x GradB) Grad, applied on the background Maxwellian distribution
+  ! (x_a + spar^2)(b x GradB) GradFaM
+  ! It gives birth to kx=ky=0 sources terms (averages) that hit moments 00, 20,
+  ! 40, 01,02, 21 with background gradient dependences.
+  USE prec_const
+  USE time_integration, ONLY : updatetlevel
+  USE model,      ONLY: taue_qe, taui_qi, K_N, K_T, KIN_E
+  USE array,      ONLY: moments_rhs_e, moments_rhs_i
+  USE grid,       ONLY: contains_kx0, contains_ky0, ikx_0, iky_0,&
+                        ips_e,ipe_e,ijs_e,ije_e,ips_i,ipe_i,ijs_i,ije_i,&
+                        jarray_e,parray_e,jarray_i,parray_i, zarray, izs,ize,&
+                        ip,ij
+  IMPLICIT NONE
+  real(dp), DIMENSION(izs:ize) :: sinz
+
+  sinz(izs:ize) = SIN(zarray(izs:ize,0))
+
+  IF(contains_kx0 .AND. contains_ky0) THEN
+    IF(KIN_E) THEN
+      DO ip = ips_e,ipe_e
+        DO ij = ijs_e,ije_e
+          SELECT CASE(ij-1)
+          CASE(0) ! j = 0
+            SELECT CASE (ip-1)
+            CASE(0) ! Na00 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  +taue_qe * sinz(izs:ize) * (1.5_dp*K_N - 1.125_dp*K_T)
+            CASE(2) ! Na20 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  +taue_qe * sinz(izs:ize) * (SQRT2*0.5_dp*K_N - 2.75_dp*K_T)
+            CASE(4) ! Na40 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  +taue_qe * sinz(izs:ize) * SQRT6*0.75_dp*K_T
+            END SELECT
+          CASE(1) ! j = 1
+            SELECT CASE (ip-1)
+            CASE(0) ! Na01 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  -taue_qe * sinz(izs:ize) * (K_N + 3.5_dp*K_T)
+            CASE(2) ! Na21 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  -taue_qe * sinz(izs:ize) * SQRT2*K_T
+            END SELECT
+          CASE(2) ! j = 2
+            SELECT CASE (ip-1)
+            CASE(0) ! Na02 term
+                moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_e(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                  +taue_qe * sinz(izs:ize) * 2._dp*K_T
+            END SELECT
+          END SELECT
+        ENDDO
+      ENDDO
+    ENDIF
+
+    DO ip = ips_i,ipe_i
+      DO ij = ijs_i,ije_i
+        SELECT CASE(ij-1)
+        CASE(0) ! j = 0
+          SELECT CASE (ip-1)
+          CASE(0) ! Na00 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                +taui_qi * sinz(izs:ize) * (1.5_dp*K_N - 1.125_dp*K_T)
+          CASE(2) ! Na20 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                +taui_qi * sinz(izs:ize) * (SQRT2*0.5_dp*K_N - 2.75_dp*K_T)
+          CASE(4) ! Na40 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                +taui_qi * sinz(izs:ize) * SQRT6*0.75_dp*K_T
+          END SELECT
+        CASE(1) ! j = 1
+          SELECT CASE (ip-1)
+          CASE(0) ! Na01 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                -taui_qi * sinz(izs:ize) * (K_N + 3.5_dp*K_T)
+          CASE(2) ! Na21 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                -taui_qi * sinz(izs:ize) * SQRT2*K_T
+          END SELECT
+        CASE(2) ! j = 2
+          SELECT CASE (ip-1)
+          CASE(0) ! Na02 term
+              moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel) = moments_rhs_i(ip,ij,iky_0,ikx_0,izs:ize,updatetlevel)&
+                +taui_qi * sinz(izs:ize) * 2._dp*K_T
+          END SELECT
+        END SELECT
+      ENDDO
+    ENDDO
+
+  ENDIF
+
+END SUBROUTINE
+
 END MODULE moments_eq_rhs
diff --git a/src/prec_const_mod.F90 b/src/prec_const_mod.F90
index 90388443a4cdb6ce6914643e4f948102a7a44233..a9ecaff66d6c7e73b70f3b63d3ea041401b7796e 100644
--- a/src/prec_const_mod.F90
+++ b/src/prec_const_mod.F90
@@ -22,12 +22,13 @@ MODULE prec_const
   INTEGER, private :: MPI_MIN_DP !Min reduction operation for DP datatype
 
 
-  ! Some useful constants, to avoid recomputing then too often
+  ! Some useful constants, to avoid recomputing them too often
   REAL(dp),    PARAMETER :: PI=3.141592653589793238462643383279502884197_dp
   REAL(dp),    PARAMETER :: PIO2=1.57079632679489661923132169163975144209858_dp
   REAL(dp),    PARAMETER :: TWOPI=6.283185307179586476925286766559005768394_dp
   REAL(dp),    PARAMETER :: ONEOPI=0.3183098861837906912164442019275156781077_dp
   REAL(dp),    PARAMETER :: SQRT2=1.41421356237309504880168872420969807856967_dp
+  REAL(dp),    PARAMETER :: SQRT6=SQRT(6._dp)
   REAL(dp),    PARAMETER :: INVSQRT2=0.7071067811865475244008443621048490392848359377_dp
   REAL(dp),    PARAMETER :: SQRT3=1.73205080756887729352744634150587236694281_dp
   REAL(dp),    PARAMETER :: onetwelfth=0.08333333333333333333333333333333333333333333333_dp