diff --git a/src/ExB_shear_flow_mod.F90 b/src/ExB_shear_flow_mod.F90
index 31d3051edbd7d3654eee66f25ba7a645b61b95fb..73377126fe8771d2e41f9c7fa0e3804036e8302c 100644
--- a/src/ExB_shear_flow_mod.F90
+++ b/src/ExB_shear_flow_mod.F90
@@ -9,6 +9,7 @@ MODULE ExB_shear_flow
     REAL(xp),   PUBLIC, PROTECTED :: gamma_E = 0._xp     ! ExB background shearing rate \gamma_E
     REAL(xp),   PUBLIC, PROTECTED :: t0, inv_t0 = 0._xp  ! charact. shear time
     REAL(xp),   DIMENSION(:),   ALLOCATABLE, PUBLIC, PROTECTED :: sky_ExB      ! shift of the kx modes, kx* = kx + s(ky)
+    REAL(xp),   DIMENSION(:),   ALLOCATABLE, PUBLIC, PROTECTED :: sky_ExB_full ! full ky version
     REAL(xp),   DIMENSION(:),   ALLOCATABLE, PUBLIC, PROTECTED :: dkx_ExB      ! correction to obtain the exact kx mode
     INTEGER,    DIMENSION(:),   ALLOCATABLE, PUBLIC, PROTECTED :: jump_ExB     ! jump to do to shift the kx grids
     LOGICAL,    DIMENSION(:),   ALLOCATABLE, PUBLIC, PROTECTED :: shiftnow_ExB ! Indicates if there is a line to shift
@@ -16,19 +17,20 @@ MODULE ExB_shear_flow
     COMPLEX(xp),DIMENSION(:,:), ALLOCATABLE, PUBLIC, PROTECTED :: inv_ExB_NL_factor
     LOGICAL,  PUBLIC, PROTECTED ::     ExB =  .false.   ! presence of ExB background shearing rate
     ! Routines
-    PUBLIC :: Setup_ExB_shear_flow, Apply_ExB_shear_flow, Update_ExB_shear_flow
+    PUBLIC :: Setup_ExB_shear_flow, Array_shift_ExB_shear_flow, Update_ExB_shear_flow
 
 CONTAINS
 
     ! Setup the variables for the ExB shear
     SUBROUTINE Setup_ExB_shear_flow(ExBrate)
-        USE grid,  ONLY : Nx, local_nky, local_nx, Ny, deltakx, deltaky
+        USE grid,     ONLY: Nx, local_nky, total_nky, local_nx, Ny, deltakx, deltaky
+        USE geometry, ONLY: Cyq0_x0
         IMPLICIT NONE
         REAL(xp), INTENT(IN) :: ExBrate
 
         ! Setup the ExB shearing rate and aux var
-        gamma_E = ExBrate
-        IF(gamma_E .GT. 0._xp) THEN
+        gamma_E = -ExBrate*Cyq0_x0
+        IF(abs(gamma_E) .GT. EPSILON(gamma_E)) THEN
             ExB    = .TRUE.
             t0     = deltakx/deltaky/gamma_E
             inv_t0 = 1._xp/t0
@@ -41,6 +43,8 @@ CONTAINS
         ! Setup the ExB shift array
         ALLOCATE(sky_ExB(local_nky))
         sky_ExB = 0._xp
+        ALLOCATE(sky_ExB_full(total_nky))
+        sky_ExB_full = 0._xp
 
         ! Setup the kx correction array
         ALLOCATE(dkx_ExB(local_nky))
@@ -63,16 +67,14 @@ CONTAINS
     END SUBROUTINE Setup_ExB_shear_flow
 
     ! Update according to the current ExB shear value
-    ! -the grids
+    ! -shift the grids
     ! -the spatial operators
     ! -the fields by imposing a shift on kx
-    SUBROUTINE Apply_ExB_shear_flow
-        USE basic,      ONLY: time
-        USE grid,       ONLY: local_nky, kxarray, update_grids, &
-            total_nkx, deltakx, kx_min, kx_max
+    SUBROUTINE Array_shift_ExB_shear_flow
+        USE grid,       ONLY: local_nky, update_grids, &
+            total_nkx, deltakx, kx_min, kx_max, kxarray0
         USE prec_const, ONLY: PI
         USE fields,     ONLY: moments, phi, psi
-        USE geometry,   ONLY: gxx,gxy,inv_hatB2, evaluate_magn_curv
         USE numerics,   ONLY: evaluate_EM_op, evaluate_kernels
         IMPLICIT NONE
         ! local var
@@ -105,10 +107,17 @@ CONTAINS
                             ikx = i_ - total_nkx/2 + 1
                         ENDIF
                         ikx_s = ikx + jump_ExB(iky)
+                        ! adjust the shift according
+                        IF (ikx_s .LE. 0) &
+                            ikx_s = ikx_s + total_nkx
+                        IF (ikx_s .GT. total_nkx) &
+                            ikx_s = ikx_s - total_nkx
                         ! We test if the shifted modes are still in contained in our resolution
-                        IF ( ((ikx_s .GT. 0 )              .AND. (ikx_s .LE. total_nkx )) .AND. &
-                            (((ikx   .LE. (total_nkx/2+1)) .AND. (ikx_s .LE. (total_nkx/2+1))) .OR. &
-                             ((ikx   .GT. (total_nkx/2+1)) .AND. (ikx_s .GT. (total_nkx/2+1)))) ) THEN
+                        ! IF ( ((ikx_s .GT. 0 )              .AND. (ikx_s .LE. total_nkx )) .AND. &
+                        !     (((ikx   .LE. (total_nkx/2+1)) .AND. (ikx_s .LE. (total_nkx/2+1))) .OR. &
+                        !      ((ikx   .GT. (total_nkx/2+1)) .AND. (ikx_s .GT. (total_nkx/2+1)))) ) THEN
+                        IF ( (kxarray0(ikx)+jump_ExB(iky)*deltakx .LE. kx_max) .AND. &
+                             (kxarray0(ikx)+jump_ExB(iky)*deltakx .GE. kx_min)) THEN
                                 moments(:,:,:,iky,ikx,:,:) = moments(:,:,:,iky,ikx_s,:,:)
                                 phi(iky,ikx,:)             = phi(iky,ikx_s,:)
                                 psi(iky,ikx,:)             = psi(iky,ikx_s,:)
@@ -123,20 +132,20 @@ CONTAINS
                 ENDIF
             ENDDO
         ENDIF
-    END SUBROUTINE Apply_ExB_shear_flow
+    END SUBROUTINE Array_shift_ExB_shear_flow
 
     ! update the ExB shear value for the next time step
     SUBROUTINE Update_ExB_shear_flow
-        USE basic,      ONLY: dt, time, chrono_ExBs, start_chrono, stop_chrono
-        USE grid,       ONLY: local_nky, local_nky_offset, kyarray, kyarray_full, inv_dkx, xarray, Nx, Ny, &
-                              local_nx,  local_nx_offset, deltax, kxarray, &
-                              ikyarray, inv_ikyarray, deltakx, deltaky, update_grids
+        USE basic,      ONLY: dt, time
+        USE grid,       ONLY: local_nky, local_nky_offset, kyarray, inv_dkx, xarray, Nx, Ny, &
+                              local_nx,  local_nx_offset, kyarray_full,&
+                              ikyarray, inv_ikyarray, deltaky, update_grids
         USE geometry,   ONLY: gxx,gxy,gyy,inv_hatB2, evaluate_magn_curv
         USE numerics,   ONLY: evaluate_EM_op, evaluate_kernels
         IMPLICIT NONE
         ! local var
         INTEGER :: iky, ix
-        REAL(xp):: dt_ExB, ky, kx, J_dp, inv_J, x, dtshift
+        REAL(xp):: dt_ExB, J_dp, inv_J, x
         ! do nothing if no ExB
         IF(ExB) THEN
             ! reset the ExB shift, jumps and flags
@@ -149,7 +158,8 @@ CONTAINS
                 ! zero-shiftings that may be majoritary.
                 shiftnow_ExB(iky) = (abs(jump_ExB(iky)) .GT. 0)
             ENDDO
-
+            ! Update the full skyExB array too
+            sky_ExB_full = sky_ExB_full - kyarray_full*gamma_E*dt
             ! Update the ExB nonlinear factor...
             DO iky = 1,local_Nky ! WARNING: Local indices ky loop
                 ! for readability
@@ -161,7 +171,8 @@ CONTAINS
                 DO ix = 1,Nx
                     x = xarray(ix)
                     ! assemble the ExB nonlin factor
-                    ExB_NL_factor(ix,iky) = EXP(imagu*x*dkx_ExB(iky))
+                    !ExB_NL_factor(ix,iky) = EXP(imagu*x*dkx_ExB(iky))
+                    ExB_NL_factor(ix,iky) = EXP(imagu*x*sky_ExB(iky)) !GENE does that???
                 ENDDO
             ENDDO
             ! ... and the inverse
@@ -174,15 +185,14 @@ CONTAINS
                 DO ix = 1,local_nx
                     x = xarray(ix+local_nx_offset)
                     ! assemble the inverse ExB nonlin factor
-                    inv_ExB_NL_factor(iky,ix) = EXP(-imagu*x*gamma_E*J_dp*deltaky*dt_ExB)
+                    ! inv_ExB_NL_factor(iky,ix) = EXP(-imagu*x*gamma_E*J_dp*deltaky*dt_ExB)
+                    inv_ExB_NL_factor(iky,ix) = EXP(-imagu*x*sky_ExB_full(iky)) !GENE does that???
                 ENDDO
             ENDDO
         ENDIF
         ! We update the operators and grids
         !   update the grids  
         CALL update_grids(dkx_ExB,gxx,gxy,gyy,inv_hatB2)
-        !write(42,*), kxarray(5,3)
-
         !   update the EM op., the kernels and the curvature op.
         CALL evaluate_kernels
         CALL evaluate_EM_op
diff --git a/src/auxval.F90 b/src/auxval.F90
index 0cf3960c669324a667f5e424b8892ea649125a4d..f549564374ec62a35ebd9478b3385f94a423c2ae 100644
--- a/src/auxval.F90
+++ b/src/auxval.F90
@@ -2,9 +2,9 @@ subroutine auxval
   !   Set auxiliary values, at beginning of simulation
 
   USE basic,          ONLY: str, speak
-  USE grid,           ONLY: local_np, local_np_offset, total_np, local_nj, local_nj_offset, total_nj,&
+  USE grid,           ONLY: local_np, local_np_offset, total_np, local_nj, local_nj_offset,&
                             local_nky, local_nky_offset, total_nky, local_nkx, local_nkx_offset, dmax,&
-                            local_nz, local_nz_offset, total_nz, init_grids_data, set_grids
+                            local_nz, local_nz_offset, init_grids_data, set_grids
   !USE array
   USE model,          ONLY: Na, EM, LINEARITY, N_HD, ExBrate
   USE fourier,        ONLY: init_grid_distr_and_plans
diff --git a/src/control.F90 b/src/control.F90
index bb743ee641a871f4361285e30945f621603a3b33..a537953125db97c76e8b5b8709e097402cc5f4ef 100644
--- a/src/control.F90
+++ b/src/control.F90
@@ -1,14 +1,16 @@
 SUBROUTINE control
   !   Control the run
 
-  use basic,      ONLY: str,daytim,speak,basic_data,&
+  use basic,          ONLY: str,daytim,speak,basic_data,&
                         nlend,step,increase_step,increase_time,increase_cstep,&
-                        chrono_runt,chrono_step, chrono_diag, start_chrono, stop_chrono
-  use prec_const,  ONLY: xp, stdout
-  USE parallel,    ONLY: ppinit
-  USE initial,     ONLY: initialize
-  USE mpi,         ONLY: MPI_COMM_WORLD
-  USE diagnostics, ONLY: diagnose
+                        chrono_runt,chrono_step, chrono_diag, chrono_ExBs,&
+                        start_chrono, stop_chrono
+  use prec_const,     ONLY: xp, stdout
+  USE parallel,       ONLY: ppinit
+  USE initial,        ONLY: initialize
+  USE mpi,            ONLY: MPI_COMM_WORLD
+  USE diagnostics,    ONLY: diagnose
+  USE ExB_shear_flow, ONLY: Array_shift_ExB_shear_flow, Update_ExB_shear_flow
   IMPLICIT NONE
   REAL(xp) :: t_init_diag_0, t_init_diag_1
   INTEGER  :: ierr
@@ -70,6 +72,18 @@ SUBROUTINE control
     CALL tesend
     IF( nlend ) EXIT ! exit do loop
 
+    ! Update the ExB shear flow for the next step
+    ! This call includes :
+    !  - the ExB shear value (s(ky)) update for the next time step
+    !  - the kx grid update
+    !  - the ExB NL correction factor update (exp(+/- ixkySdts))
+    !  - (optional) the kernel, poisson op. and ampere op update
+    CALL start_chrono(chrono_ExBs)
+      CALL Update_ExB_shear_flow
+    ! Shift the arrays if the shear value sky is too high
+      CALL Array_shift_ExB_shear_flow
+    CALL stop_chrono(chrono_ExBs)
+
     ! Increment steps and csteps (private in basic module)
     CALL increase_step
     CALL increase_cstep
diff --git a/src/diagnostics_mod.F90 b/src/diagnostics_mod.F90
index db03142ced064f5330848d69684b91895aa36053..8d4f9879281a950a165bc851dd950a7c8a51e0a1 100644
--- a/src/diagnostics_mod.F90
+++ b/src/diagnostics_mod.F90
@@ -120,7 +120,7 @@ CONTAINS
 
   SUBROUTINE diagnose(kstep)
     !   Diagnostics, writing simulation state to disk
-    USE basic,           ONLY: lu_in, chrono_runt, cstep, dt, time, tmax, display_h_min_s
+    USE basic,           ONLY: lu_in, chrono_runt, cstep, time, display_h_min_s
     USE processing,      ONLY: pflux_x, hflux_x
     USE parallel,        ONLY: my_id
     IMPLICIT NONE
@@ -159,7 +159,7 @@ CONTAINS
     USE basic,           ONLY: speak,chrono_runt,&
                                cstep,iframe0d,iframe3d,iframe5d,crashed
     USE grid,            ONLY: &
-      parray_full,pmax,jarray_full,jmax, kparray, &
+      parray_full,jarray_full, kparray, &
       kyarray_full,kxarray_full,zarray_full, ngz, total_nz, local_nz, ieven,&
       local_Nky, total_nky, local_nkx, total_nkx
     USE geometry, ONLY: gxx, gxy, gxz, gyy, gyz, gzz, &
@@ -390,7 +390,6 @@ CONTAINS
     USE futils, ONLY: append, attach, getatt, creatd
     USE prec_const
     USE processing
-    USE model,   ONLY: Na
     IMPLICIT NONE
     ! Time measurement data
     CALL append(fidres, "/profiler/Tc_rhs",       REAL(chrono_mrhs%ttot,dp),ionode=0)
@@ -436,7 +435,6 @@ CONTAINS
     USE CLA, ONLY: Sf
 #endif
     IMPLICIT NONE
-    CHARACTER(50) :: dset_name
     iframe2d=iframe2d+1
     CALL append(fidres,"/data/var2d/time", REAL(time,dp), ionode=0)
     CALL append(fidres,"/data/var2d/cstep",REAL(cstep,dp),ionode=0)
diff --git a/src/fourier_mod.F90 b/src/fourier_mod.F90
index d6d1af3173ef2d1d283d4c7b80e0eb6f7b396996..1f7951e3b6c398955fd53dec4414d5683d6bf0a6 100644
--- a/src/fourier_mod.F90
+++ b/src/fourier_mod.F90
@@ -44,11 +44,10 @@ MODULE fourier
     !******************************************************************************!
     !------------- Initialize the grid distribution and plans -------------
     ! If we use the 2D fftw routines, the fftw library decides the best data distribution
-    SUBROUTINE init_grid_distr_and_plans(FFT2D,Nx,Ny,communicator,&
+    SUBROUTINE init_grid_distr_and_plans(Nx,Ny,communicator,&
             local_nx_ptr,local_nx_ptr_offset,local_nky_ptr,local_nky_ptr_offset)
         USE basic, ONLY: speak
         IMPLICIT NONE
-        LOGICAL, INTENT(IN)  :: FFT2D
         INTEGER, INTENT(IN)  :: Nx,Ny, communicator
         INTEGER(C_INTPTR_T), INTENT(OUT) :: local_nx_ptr,local_nx_ptr_offset
         INTEGER(C_INTPTR_T), INTENT(OUT) :: local_nky_ptr,local_nky_ptr_offset
@@ -57,7 +56,7 @@ MODULE fourier
         NY_halved  = NY_/2 + 1
         inv_Ny_    = 1._xp/REAL(2*NY_halved,xp)     
         ! Call FFTW 2D mpi routines to distribute the data and init 2D MPI FFTW plans
-        CALL fft2D_distr_and_plans(Nx,Ny,communicator,&
+        CALL fft2D_distr_and_plans(communicator,&
                 local_nx_ptr,local_nx_ptr_offset,local_nky_ptr,local_nky_ptr_offset)
         local_nx_  = local_nx_ptr  ! store number of local x  in the module
         local_nky_ = local_nky_ptr ! store number of local ky in the module
@@ -67,10 +66,10 @@ MODULE fourier
     END SUBROUTINE init_grid_distr_and_plans
 
     !------------- 2D fft initialization and mpi distribution
-    SUBROUTINE fft2D_distr_and_plans(Nx,Ny,communicator,&
+    SUBROUTINE fft2D_distr_and_plans(communicator,&
                 local_nx_ptr,local_nx_ptr_offset,local_nky_ptr,local_nky_ptr_offset)
         IMPLICIT NONE
-        INTEGER, INTENT(IN)  :: Nx,Ny, communicator
+        INTEGER, INTENT(IN)  :: communicator
         ! Distribution in the real space along x
         INTEGER(C_INTPTR_T), INTENT(OUT) :: local_nx_ptr, local_nx_ptr_offset
         ! Distribution in the fourier space along ky
@@ -138,18 +137,14 @@ MODULE fourier
     !------------- 1D initialization with balanced data distribution
     SUBROUTINE fft1D_plans
         USE utility,  ONLY: decomp1D
-        USE parallel, ONLY: num_procs_ky, rank_ky
         IMPLICIT NONE
         ! local var
         integer(C_INTPTR_T) :: rank     ! rank of each 1D fourier transforms
         integer(C_INTPTR_T) :: n        ! size of the data to fft
         integer(C_INTPTR_T) :: howmany  ! howmany 1D fourier transforms
-        COMPLEX, DIMENSION(:,:), ALLOCATABLE:: in, out
         integer(C_INTPTR_T) :: inembed, onembed
         integer(C_INTPTR_T) :: istride, ostride
         integer(C_INTPTR_T) :: idist, odist
-        integer(C_INTPTR_T) :: sign
-        integer(C_INTPTR_T) :: flags
 
         !! Plan of the 4 1D many transforms required
         !----------- 1: FFTx and inv through local ky data
@@ -273,12 +268,11 @@ END SUBROUTINE fft1D_plans
     !   module variable (convolution theorem)
     SUBROUTINE poisson_bracket_and_sum( ky_array, kx_array, inv_Ny, inv_Nx, AA_y, AA_x,&
                                         local_nky, total_nkx, F_, G_,&
-                                        ExB, ExB_NL_factor, dkx_ExB, sum_real_)
-        USE parallel, ONLY: my_id, num_procs_ky, comm_ky, rank_ky
+                                        ExB, ExB_NL_factor, sum_real_)
         IMPLICIT NONE
         INTEGER,                                  INTENT(IN) :: local_nky,total_nkx
         REAL(xp),                                 INTENT(IN) :: inv_Nx, inv_Ny
-        REAL(xp), DIMENSION(local_nky),           INTENT(IN) :: ky_array, AA_y, dkx_ExB
+        REAL(xp), DIMENSION(local_nky),           INTENT(IN) :: ky_array, AA_y
         REAL(xp), DIMENSION(total_nkx),           INTENT(IN) :: AA_x
         REAL(xp), DIMENSION(local_nky,total_nkx), INTENT(IN) :: kx_array
         COMPLEX(c_xp_c), DIMENSION(local_nky,total_nkx), &
@@ -298,10 +292,10 @@ END SUBROUTINE fft1D_plans
                 DO ikx = 1,total_nkx
                         ky  = ky_array(iky)
                         kxs = kx_array(iky,ikx)
-                        ikxF(ikx,iky) = imagu*kxs*F_(iky,ikx)*AA_y(iky)*AA_x(ikx)
-                        ikyG(ikx,iky) = imagu*ky *G_(iky,ikx)*AA_y(iky)*AA_x(ikx)
-                        ikyF(ikx,iky) = imagu*ky *F_(iky,ikx)*AA_y(iky)*AA_x(ikx)
-                        ikxG(ikx,iky) = imagu*kxs*G_(iky,ikx)*AA_y(iky)*AA_x(ikx)
+                        ikxF(ikx,iky) = imagu*kxs*F_(iky,ikx)
+                        ikyG(ikx,iky) = imagu*ky *G_(iky,ikx)
+                        ikyF(ikx,iky) = imagu*ky *F_(iky,ikx)
+                        ikxG(ikx,iky) = imagu*kxs*G_(iky,ikx)
                 ENDDO
         ENDDO
         IF(ExB) THEN 
@@ -311,6 +305,13 @@ END SUBROUTINE fft1D_plans
             CALL apply_ExB_NL_factor(ikyF,ExB_NL_factor)
             CALL apply_ExB_NL_factor(ikxG,ExB_NL_factor)
         ENDIF
+        ! Anti Aliasing
+        DO iky = 1,local_nky
+                ikxF(:,iky) = ikxF(:,iky)*AA_y(iky)*AA_x(:)
+                ikyG(:,iky) = ikyG(:,iky)*AA_y(iky)*AA_x(:)
+                ikyF(:,iky) = ikyF(:,iky)*AA_y(iky)*AA_x(:)
+                ikxG(:,iky) = ikxG(:,iky)*AA_y(iky)*AA_x(:)
+        ENDDO
         !-------------------- First term df/dx x dg/dy --------------------
 #ifdef SINGLE_PRECISION
         call fftwf_mpi_execute_dft_c2r(planb, ikxF, real_data_f)
@@ -342,38 +343,63 @@ END SUBROUTINE fft1D_plans
         COMPLEX(xp), DIMENSION(NX_,local_nky_), INTENT(INOUT)  :: fkxky
         COMPLEX(xp), DIMENSION(NX_,local_nky_), INTENT(IN)     :: ExB_NL_factor
         ! local variables
-        COMPLEX(xp), DIMENSION(NX_,local_nky_) :: fxky
-        CALL iFFT_kxky_to_xky(fkxky,fxky)
-        fxky = fxky*ExB_NL_factor*inv_Nx_
-        CALL FFT_xky_to_kxky(fxky,fkxky)
+        COMPLEX(xp), DIMENSION(NX_,local_nky_) :: tmp_kxky, tmp_xky
+        INTEGER :: ix,ikx,iky
+        ! Fill the buffer
+        DO iky = 1,local_nky_
+                DO ikx = 1,NX_
+                        tmp_kxky(ikx,iky) = fkxky(ikx,iky)
+                ENDDO
+        ENDDO
+        ! go to x,ky
+        CALL iFFT_kxky_to_xky(tmp_kxky,tmp_xky)
+        ! multiply result by NL factor
+        DO iky = 1,local_nky_
+            DO ix = 1,NX_
+                tmp_xky(ix,iky) = inv_Nx_*tmp_xky(ix,iky)*ExB_NL_factor(ix,iky)
+            ENDDO
+        ENDDO
+        ! back to kx,ky
+        CALL FFT_xky_to_kxky(tmp_xky,tmp_kxky)
+        ! fill output array
+        DO iky = 1,local_nky_
+                DO ikx = 1,NX_
+                        fkxky(ikx,iky) = tmp_kxky(ikx,iky)
+                ENDDO
+        ENDDO
     END SUBROUTINE apply_ExB_NL_factor
 
     ! Apply the exp(i*x*ky*S*J*dt) factor to the real Poisson Bracket sum [f,g]
     SUBROUTINE apply_inv_ExB_NL_factor(fyx,inv_ExB_NL_factor)
         IMPLICIT NONE
-        real(c_xp_r), pointer,                  INTENT(INOUT) :: fyx(:,:)
+        real(c_xp_r), pointer,                        INTENT(INOUT) :: fyx(:,:)
         COMPLEX(xp), DIMENSION(NY_halved,local_nx_),  INTENT(IN)    :: inv_ExB_NL_factor
         ! local variables
-        REAL(xp),    DIMENSION(2*NY_halved,local_nx_) :: buffer_1, buffer_2
-        COMPLEX(xp), DIMENSION(NY_halved+1,local_nx_) :: fkyx
-        INTEGER :: ix, iy
-        ! print*, SIZE(fyx), SIZE(buffer_1)
+        REAL(xp),    DIMENSION(2*NY_halved,local_nx_) :: tmp_yx_1, tmp_yx_2
+        COMPLEX(xp), DIMENSION(NY_halved+1,local_nx_) :: tmp_kyx
+        INTEGER :: ix, iy, iky
+        ! Fill buffer
         DO ix = 1,local_nx_
             DO iy = 1,2*NY_halved
-                buffer_1(iy,ix) = fyx(iy,ix)
+                tmp_yx_1(iy,ix) = fyx(iy,ix)
             ENDDO
         ENDDO
-        ! print*, SUM(fyx), SUM(buffer_1)
-        CALL FFT_yx_to_kyx(buffer_1,fkyx)
-        fkyx = fkyx*inv_ExB_NL_factor
-        CALL iFFT_kyx_to_yx(fkyx,buffer_2)
+        ! Fourier real to complex on the second buffer (first buffer is now unusable)
+        CALL FFT_yx_to_kyx(tmp_yx_1,tmp_kyx)
+        ! Treat the result with the ExB NL factor
+        DO iky = 1,NY_halved
+                DO ix = 1,local_nx_
+                        tmp_kyx(iky,ix) = tmp_kyx(iky,ix)*inv_ExB_NL_factor(iky,ix)
+                ENDDO
+        ENDDO
+        ! Back to Fourier space in the third buffer
+        CALL iFFT_kyx_to_yx(tmp_kyx,tmp_yx_2)
+        ! Fill the result array with normalization of iFFT
         DO ix = 1,local_nx_
             DO iy = 1,2*NY_halved
-                fyx(iy,ix) = buffer_2(iy,ix)*inv_Ny_
+                fyx(iy,ix) = tmp_yx_2(iy,ix)*inv_Ny_
             ENDDO
         ENDDO
-        ! print*, SUM(fyx)
-        ! stop
     END SUBROUTINE apply_inv_ExB_NL_factor
 
     !******************************************************************************!
diff --git a/src/grid_mod.F90 b/src/grid_mod.F90
index 823c3de6496025290d5f21742eb693af3580a6f7..c2ef3f0e84342f35f7b795b807d700f394081921 100644
--- a/src/grid_mod.F90
+++ b/src/grid_mod.F90
@@ -112,11 +112,6 @@ MODULE grid
   ! 1D Antialiasing arrays (2/3 rule)
   REAL(xp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_x
   REAL(xp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_y
-  ! 2D fft routines or 1D methods (for ExBshear simulations, 1D is required)
-  ! The 2D fft is using fftw mpi optimization
-  ! The 1D is not using mpi and does a data transfer with redundant computations
-  !   (each process computes the convolution)
-  LOGICAL, PUBLIC, PROTECTED :: FFT2D = .TRUE.
 
   ! Public Functions
   PUBLIC :: init_grids_data, set_grids, update_grids
@@ -134,7 +129,7 @@ CONTAINS
     USE prec_const
     IMPLICIT NONE
     INTEGER :: lun   = 90              ! File duplicated from STDIN
-    NAMELIST /GRID/ pmax, jmax, Nx, Lx, Ny, Ly, Nz, SG, Nexc, FFT2D
+    NAMELIST /GRID/ pmax, jmax, Nx, Lx, Ny, Ly, Nz, SG, Nexc
     READ(lun,grid)
     IF(Nz .EQ. 1) & ! overwrite SG option if Nz = 1 for safety of use
       SG      = .FALSE.
@@ -202,7 +197,7 @@ CONTAINS
     !! Parallel distribution of kx ky grid
     IF (LINEARITY .NE. 'linear') THEN ! we let FFTW distribute if we use it
       IF (my_id .EQ. 0) write(*,*) 'FFTW3 y-grid distribution'
-      CALL init_grid_distr_and_plans(FFT2D,Nx,Ny,comm_ky,local_nx_ptr,local_nx_ptr_offset,local_nky_ptr,local_nky_ptr_offset)
+      CALL init_grid_distr_and_plans(Nx,Ny,comm_ky,local_nx_ptr,local_nx_ptr_offset,local_nky_ptr,local_nky_ptr_offset)
     ELSE ! otherwise we distribute equally
       IF (my_id .EQ. 0) write(*,*) 'Manual y-grid distribution'
       ! balanced distribution among the processes
@@ -453,7 +448,6 @@ CONTAINS
       ! indexation (|1 2 3||1 2 3|... local_nky|)
       IF(Ny .EQ. 1) THEN
         kyarray(iky)      = deltaky
-        kyarray(iky)      = iky-1        
         kyarray_full(iky) = deltaky
         SINGLE_KY         = .TRUE.
       ELSE
@@ -543,7 +537,7 @@ CONTAINS
       ERROR STOP "Gyacomo is safer with an even Kx number"
     ENDIF
     ! Orszag 2/3 filter
-    two_third_kxmax = 2._xp/3._xp*kx_max;
+    two_third_kxmax = 2._xp/3._xp*(kx_max-deltakx);
     ! Antialiasing filter
     DO iky = 1,local_nky
       DO ikx = 1,local_nkx
@@ -673,11 +667,11 @@ CONTAINS
     REAL(xp), DIMENSION(local_nky),INTENT(IN) :: dkx_ExB ! ExB correction dkx = gamma_E ky dtshift
     REAL(xp), DIMENSION(local_nz+ngz,nzgrid), INTENT(IN) :: gxx,gxy,gyy,inv_hatB2
     INTEGER     :: eo,iz,iky,ikx
-    REAL(xp)    :: kx, ky, skp2
+    REAL(xp)    :: kx, ky
     ! Update the kx grid
-    DO iky = 1,local_nky
-      DO ikx = 1,total_Nkx
-        kxarray(iky,ikx) = kxarray0(ikx) + dkx_ExB(iky)
+    DO ikx = 1,total_Nkx
+      DO iky = 1,local_nky
+        kxarray(iky,ikx) = kxarray0(ikx) - dkx_ExB(iky)
       ENDDO
     ENDDO
     ! Update the kperp grid
diff --git a/src/initial_mod.F90 b/src/initial_mod.F90
index d02af4b8af855d7dc3938dc2d5447bd3f7380d3e..0a0c5c700102c90f3a3fdbedfafcca9df5a74402 100644
--- a/src/initial_mod.F90
+++ b/src/initial_mod.F90
@@ -46,7 +46,6 @@ CONTAINS
     USE ghosts,           ONLY: update_ghosts_moments, update_ghosts_EM
     USE restarts,         ONLY: load_moments, job2load
     USE processing,       ONLY: compute_fluid_moments, compute_radial_heatflux, compute_radial_transport
-    USE model,            ONLY: LINEARITY
     USE nonlinear,        ONLY: compute_Sapj, nonlinear_init
     IMPLICIT NONE
     CALL set_updatetlevel(1)
@@ -266,19 +265,10 @@ CONTAINS
   !!!!!!! Initialize a single mode in the gyrocenter density
   !******************************************************************************!
   SUBROUTINE init_single_mode
-    USE grid,       ONLY: local_na, local_np, local_nj, total_nkx, local_nky, local_nz,&
-                          ngp, ngj, ngz, iky0, kxarray, kyarray, parray, jarray, &
-                          contains_ky0, deltakx, deltaky
     USE fields,     ONLY: moments
     USE prec_const, ONLY: xp
-    USE model,      ONLY: LINEARITY
     USE parallel,   ONLY: my_id
     IMPLICIT NONE
-
-    REAL(xp) :: amplitude
-    INTEGER  :: ia,ip,ij,ikx,iky,iz, ikxi, ikyi
-    INTEGER, DIMENSION(12) :: iseedarr
-
     moments   = 0._xp
     IF (my_id .EQ. 0) THEN
       moments(:,:,:,2,2,:,:) = init_amp
@@ -470,7 +460,7 @@ CONTAINS
     USE fields,     ONLY: moments
     USE prec_const, ONLY: xp, pi
     USE model,      ONLY: LINEARITY
-    USE geometry,   ONLY: Jacobian, iInt_Jacobian, shear
+    USE geometry,   ONLY: Jacobian, iInt_Jacobian
     IMPLICIT NONE
     REAL(xp) :: kx, ky, sigma_z, z
     INTEGER :: ia,iky,ikx,iz,ip,ij
@@ -548,8 +538,8 @@ CONTAINS
     USE basic,      ONLY: maindir
     USE grid,       ONLY: local_na, local_np, local_nj, total_nkx, local_nky, local_nz,&
                           local_nkx_offset, local_nky_offset, kxarray, kyarray, &
-                          ngp, ngj, ngz, iky0, ikx0, parray, jarray,&
-                          deltakx, deltaky, contains_ky0, contains_kx0,&
+                          ngp, ngj, ngz, parray, jarray,&
+                          deltakx, deltaky,&
                           AA_x, AA_y
     USE fields,     ONLY: moments
     USE prec_const, ONLY: xp, imagu
diff --git a/src/nonlinear_mod.F90 b/src/nonlinear_mod.F90
index 7eea23f6defa0ab8dd4ed3246dee89dda3c21405..946304ac4b328bedd15933932a3eb3eae7126f52 100644
--- a/src/nonlinear_mod.F90
+++ b/src/nonlinear_mod.F90
@@ -100,7 +100,7 @@ SUBROUTINE compute_nonlinear
               ! this function adds its result to bracket_sum_r
                 CALL poisson_bracket_and_sum( kyarray,kxarray,inv_Ny,inv_Nx,AA_y,AA_x,&
                                               local_nky,total_nkx,F_cmpx,G_cmpx,&
-                                              ExB, ExB_NL_factor, dkx_ExB, bracket_sum_r)
+                                              ExB, ExB_NL_factor, bracket_sum_r)
   !-----------!! ELECTROMAGNETIC CONTRIBUTION -sqrt(tau)/sigma*{Sum_s dnjs [sqrt(p+1)Nap+1s + sqrt(p)Nap-1s], Kernel psi}
               IF(EM) THEN
                 ! First convolution terms
@@ -116,7 +116,7 @@ SUBROUTINE compute_nonlinear
                 ! this function adds its result to bracket_sum_r
                 CALL poisson_bracket_and_sum( kyarray,kxarray,inv_Ny,inv_Nx,AA_y,AA_x,&
                                               local_nky,total_nkx,F_cmpx,G_cmpx,&
-                                              ExB, ExB_NL_factor, dkx_ExB, bracket_sum_r)
+                                              ExB, ExB_NL_factor, bracket_sum_r)
               ENDIF
             ENDDO n
             ! Apply the ExB shearing rate factor before going back to k-space
diff --git a/src/numerics_mod.F90 b/src/numerics_mod.F90
index 6ec4d1de2ea60ef855242cf3f7923ad5c05a009d..3a1e4a98874382453c358d3af26de72ac0dd7e7d 100644
--- a/src/numerics_mod.F90
+++ b/src/numerics_mod.F90
@@ -63,6 +63,7 @@ SUBROUTINE build_dv4Hp_table
    !we scale it w.r.t. to the max degree since
    !D_4^{v}\sim (\Delta v/2)^4 and \Delta v \sim 2pi/kvpar = pi/\sqrt{2P}
    ! dv4_Hp_coeff = dv4_Hp_coeff*(1._xp/2._xp/SQRT(REAL(pmax,xp)))**4
+  IF(pmax .GT. 0) &
    dv4_Hp_coeff = dv4_Hp_coeff*(PI/2._xp/SQRT(2._xp*REAL(pmax,xp)))**4
 END SUBROUTINE build_dv4Hp_table
 !******************************************************************************!
diff --git a/src/stepon.F90 b/src/stepon.F90
index 232d7d68febadcd299e4d73351a7335c6b2da807..ee5fd1da84dbf9c9c5ab0300e3970993bdd279b0 100644
--- a/src/stepon.F90
+++ b/src/stepon.F90
@@ -2,14 +2,13 @@ SUBROUTINE stepon
    !   Advance one time step, (num_step=4 for Runge Kutta 4 scheme)
    USE advance_field_routine, ONLY: advance_time_level, advance_moments
    USE basic,                 ONLY: nlend, chrono_advf, chrono_pois,&
-      chrono_chck, chrono_clos, chrono_ghst, chrono_ExBs,&
+      chrono_chck, chrono_clos, chrono_ghst,&
       start_chrono, stop_chrono
    USE closure,               ONLY: apply_closure_model
    USE ghosts,                ONLY: update_ghosts_moments, update_ghosts_EM
    use mpi,                   ONLY: MPI_COMM_WORLD
    USE time_integration,      ONLY: ntimelevel
    USE prec_const,            ONLY: xp
-   USE ExB_shear_flow,        ONLY: Apply_ExB_shear_flow, Update_ExB_shear_flow
 #ifdef TEST_SVD
    USE CLA,                  ONLY: test_svd,filter_sv_moments_ky_pj
 #endif
@@ -18,17 +17,7 @@ SUBROUTINE stepon
    INTEGER :: num_step, ierr
    LOGICAL :: mlend
 
-   ! Update the ExB backg. shear flow before the step
-   ! This call includes :
-   !  - the kx grid update
-   !  - the kernel, poisson op. and ampere op update
-   !  - kx-shift of the fields at required ky values
-   !  - the ExB shear value (s(ky)) update for the next time step
-   CALL start_chrono(chrono_ExBs)
-      CALL Apply_ExB_shear_flow
-   CALL stop_chrono(chrono_ExBs)
-
-   DO num_step=1,ntimelevel ! eg RK4 compute successively k1, k2, k3, k4
+   SUBSTEPS:DO num_step=1,ntimelevel ! eg RK4 compute successively k1, k2, k3, k4
       !----- BEFORE: All fields+ghosts are updated for step = n
       ! Compute right hand side from current fields
       ! N_rhs(N_n, nadia_n, phi_n, S_n, Tcoll_n)
@@ -80,12 +69,7 @@ SUBROUTINE stepon
       CALL MPI_BARRIER(MPI_COMM_WORLD,ierr)
       !----- AFTER: All fields are updated for step = n+1
 
-   END DO
-
-   ! Update the ExB shear flow for the next step
-   CALL start_chrono(chrono_ExBs)
-      CALL Update_ExB_shear_flow
-   CALL stop_chrono(chrono_ExBs)   
+   END DO SUBSTEPS
 
 CONTAINS
 !!!! Basic structure to simplify stepon