diff --git a/src/ppm_comp_pp_ring.f b/src/ppm_comp_pp_ring.f
index fcf8017e1248bcd7eae2eea7517e3ccbb4f101b9..be54ec2c4bab1bbbec916564af8969813b24f226 100644
--- a/src/ppm_comp_pp_ring.f
+++ b/src/ppm_comp_pp_ring.f
@@ -68,7 +68,7 @@
       USE ppm_module_substop
       USE ppm_module_error
       USE ppm_module_alloc
-      USE ppm_module_map_part
+      USE ppm_module_map
       USE ppm_module_map_part_ring_shift
       USE ppm_module_comp_pp_doring
       IMPLICIT NONE
diff --git a/src/ppm_fdsolver_fft_bd_2d.f b/src/ppm_fdsolver_fft_bd_2d.f
index c4c8680ee36e92df4c967401694460d0c2286518..f7b350790fa37ce0dc13b2f12221d63c220a8ad7 100644
--- a/src/ppm_fdsolver_fft_bd_2d.f
+++ b/src/ppm_fdsolver_fft_bd_2d.f
@@ -58,7 +58,10 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_fieldsolver
+      USE ppm_module_substart
+      USE ppm_module_substop
       USE ppm_module_error
+      USE ppm_module_alloc
       IMPLICIT NONE
 #if   __KIND == __SINGLE_PRECISION | __KIND ==__SINGLE_PRECISION_COMPLEX 
       INTEGER, PARAMETER :: MK = ppm_kind_single
@@ -103,8 +106,9 @@
 #ifdef __MATHKEISAN
       ! MATHKEISAN variables for MathKeisan FFTs
       INTEGER                                 :: isign_fft,isys
-#if   __KIND == __SINGLE_PRECISION        | __KIND == __DOUBLE_PRECISION
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
+
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       ! parameters for cfft (default=1)
       INTEGER                                 :: incx, incy
 #endif
@@ -169,8 +173,8 @@
       !-------------------------------------------------------------------------
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       Nx_out = (Nx_in-1)*2
-#elif __KIND == __SINGLE_PRECISION_COMPLEX |__KIND == __DOUBLE_PRECISION_COMPLEX
-      Nx_out = Nx_in -1
+#el#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
+   Nx_out = Nx_in -1
 #endif
       Ny_out=Ny_in
       lda(1)=Nx_out+1
diff --git a/src/ppm_fdsolver_fft_bd_3d.f b/src/ppm_fdsolver_fft_bd_3d.f
index 1e6ebcfbf8b6868f8a58c0ec62a28d58e7400e7c..ef387eafddb153dfa28d0fadc4ca2860d690684c 100644
--- a/src/ppm_fdsolver_fft_bd_3d.f
+++ b/src/ppm_fdsolver_fft_bd_3d.f
@@ -73,7 +73,10 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_fieldsolver
+      USE ppm_module_substart
+      USE ppm_module_substop
       USE ppm_module_error
+      USE ppm_module_alloc
       IMPLICIT NONE
 #if   __KIND == __SINGLE_PRECISION | __KIND ==__SINGLE_PRECISION_COMPLEX 
       INTEGER, PARAMETER :: MK = ppm_kind_single
@@ -98,9 +101,9 @@
       ! size of data
       INTEGER, DIMENSION(:)         , INTENT(INOUT) :: lda
       ! output data, inverse fast fourier transformed
-#if   __KIND == __SINGLE_PRECISION        | __KIND == __DOUBLE_PRECISION 
+#if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION 
       REAL(MK), DIMENSION(:,:,:)    , POINTER       :: data_out
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       COMPLEX(MK), DIMENSION(:,:,:) , POINTER       :: data_out 
 #elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
       COMPLEX(MK), DIMENSION(:,:,:) , POINTER       :: data_out 
@@ -128,7 +131,7 @@
       INTEGER                                 :: isign_fft,isys
 #if __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       INTEGER                                 :: incx, incy
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       INTEGER                                 :: incx, incy
 #endif
       ! scale of the transformation
@@ -200,9 +203,9 @@
       !-------------------------------------------------------------------------
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       Nx_out = (Nx_in-1)*2
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       Nx_out = Nx_in-1       
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       Nx_out = Nx_in-1       
 #endif
       Ny_out=Ny_in
@@ -240,7 +243,7 @@
       lda_work    = 4*Nx_out
 #elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND== __DOUBLE_PRECISION_COMPLEX
       lda_work(1) = 6*Nx_out
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND== __DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND== __DOUBLE_PRECISION_COMPLEX_Z
       lda_work(1) = 6*Nx_out
 #endif
       CALL ppm_alloc(work,lda_work,ppm_param_alloc_fit,info)
diff --git a/src/ppm_fdsolver_fft_fd_2d.f b/src/ppm_fdsolver_fft_fd_2d.f
index 4969725074a320452e8ee09eff06c62b12536d59..29e21c4800b7bdfefa1bf773938691f4392ed950 100644
--- a/src/ppm_fdsolver_fft_fd_2d.f
+++ b/src/ppm_fdsolver_fft_fd_2d.f
@@ -58,7 +58,10 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_fieldsolver
+      USE ppm_module_substart
+      USE ppm_module_substop
       USE ppm_module_error
+      USE ppm_module_alloc
       IMPLICIT NONE
 #if   __KIND == __SINGLE_PRECISION | __KIND ==__SINGLE_PRECISION_COMPLEX 
       INTEGER, PARAMETER :: MK = ppm_kind_single
@@ -77,8 +80,8 @@
       ! input data
 #if   __KIND == __SINGLE_PRECISION | __KIND == __DOUBLE_PRECISION
       REAL(MK), DIMENSION(:,:)      , INTENT(IN   ) :: data_in
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
-      COMPLEX(MK), DIMENSION(:,:)   , INTENT(IN   ) :: data_in
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
+      COMPLEX(MK), DIMENSION(:,:)       , INTENT(IN   ) :: data_in
 #endif
       ! size of the array
       INTEGER, DIMENSION(:)         , INTENT(INOUT) :: lda
@@ -168,13 +171,13 @@
       !-------------------------------------------------------------------------
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       Nx_out = Nx_in/2 + 1
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       Nx_out = Nx_in
 #endif
       Ny_out=Ny_in
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       lda(1) = Nx_out
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       lda(1) = Nx_out+1      ! to fit ppm-convention
 #endif
       lda(2)=Ny_out
diff --git a/src/ppm_fdsolver_fft_fd_3d.f b/src/ppm_fdsolver_fft_fd_3d.f
index 25d7ad690d6f1ccf410fe81599d5d08bb7365235..847e68b44aca99bbcaa29fcf5e93b73ebb777113 100644
--- a/src/ppm_fdsolver_fft_fd_3d.f
+++ b/src/ppm_fdsolver_fft_fd_3d.f
@@ -76,7 +76,10 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_fieldsolver
+      USE ppm_module_substart
+      USE ppm_module_substop
       USE ppm_module_error
+      USE ppm_module_alloc
       IMPLICIT NONE
 #if   __KIND == __SINGLE_PRECISION | __KIND ==__SINGLE_PRECISION_COMPLEX 
       INTEGER, PARAMETER :: MK = ppm_kind_single
@@ -99,9 +102,9 @@
       ! input data
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       REAL(MK), DIMENSION(:,:,:)    , INTENT(IN   ) :: data_in
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       COMPLEX(MK), DIMENSION(:,:,:) , INTENT(IN   ) :: data_in
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z|__KIND == __DOUBLE_PRECISION_COMPLEX_Z
       COMPLEX(MK), DIMENSION(:,:,:) , INTENT(IN   ) :: data_in
 #endif
       ! size of array
@@ -131,7 +134,7 @@
       INTEGER                                 :: isign_fft,isys
 #if __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       INTEGER                                 :: incx, incy
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       INTEGER                                 :: incx, incy
 #endif
       !scale of the transformation
@@ -202,20 +205,20 @@
       !-------------------------------------------------------------------------
       !  Allocate result array
       !-------------------------------------------------------------------------
-#if   __KIND == __SINGLE_PRECISION        | __KIND == __DOUBLE_PRECISION
+#if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       Nx_out = Nx_in/2 + 1
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       Nx_out = Nx_in     
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       Nx_out = Nx_in     
 #endif
       Ny_out = Ny_in
       Nz_out = Nz_in
 #if   __KIND == __SINGLE_PRECISION         | __KIND == __DOUBLE_PRECISION
       lda(1) = Nx_out
-#elif __KIND == __SINGLE_PRECISION_COMPLEX| __KIND == __DOUBLE_PRECISION_COMPLEX
+#elif __KIND == __SINGLE_PRECISION_COMPLEX | __KIND == __DOUBLE_PRECISION_COMPLEX
       lda(1) = Nx_out+1      ! to fit ppm-convention
-#elif __KIND==__SINGLE_PRECISION_COMPLEX_Z|__KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+#elif __KIND == __SINGLE_PRECISION_COMPLEX_Z| __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       lda(1) = Nx_out+1      ! to fit ppm-convention
 #endif
       lda(2) = Ny_out
@@ -338,7 +341,8 @@
          ENDDO
       ENDDO     
 #endif
-#if __KIND ==__SINGLE_PRECISION_COMPLEX_Z| __KIND ==__DOUBLE_PRECISION_COMPLEX_Z
+
+#if __KIND == __SINGLE_PRECISION_COMPLEX_Z | __KIND == __DOUBLE_PRECISION_COMPLEX_Z
       !-------------------------------------------------------------------------
       !  Copy margin to conform with PPM convention
       !-------------------------------------------------------------------------
diff --git a/src/ppm_fdsolver_finalize.f b/src/ppm_fdsolver_finalize.f
index 15ea205cc446198a214089503a6aacf1835045f3..9e6e3ebfbd568802e7d098c8f1247500ea27cf3f 100644
--- a/src/ppm_fdsolver_finalize.f
+++ b/src/ppm_fdsolver_finalize.f
@@ -54,8 +54,16 @@
       !-------------------------------------------------------------------------
       !  Modules
       !-------------------------------------------------------------------------
-	  USE ppm_module_data_fieldsolver
-      USE ppm_module_data
+
+       USE ppm_module_substart
+       USE ppm_module_substop
+       USE ppm_module_write
+       USE ppm_module_error
+       USE ppm_module_alloc
+       USE ppm_module_data_fieldsolver
+
+
+
       IMPLICIT NONE
       !-------------------------------------------------------------------------
       !  FFTW include
@@ -70,7 +78,7 @@
       !-------------------------------------------------------------------------
       !  Local Variables
       !-------------------------------------------------------------------------
-      REAL(ppm_kind_double)                        :: t0
+      REAL(ppm_kind_double)                                      :: t0
       INTEGER, DIMENSION(3)                        :: lda
       !-------------------------------------------------------------------------
       !  Initialise
diff --git a/src/ppm_fdsolver_map_2d.f b/src/ppm_fdsolver_map_2d.f
index fc856fce5c68b2b5e3978211e3a7b9594b300472..7634052adb2a7d46076faac4589696c8f7634972 100644
--- a/src/ppm_fdsolver_map_2d.f
+++ b/src/ppm_fdsolver_map_2d.f
@@ -83,7 +83,7 @@
       !  Modules
       !-------------------------------------------------------------------------
       USE ppm_module_data
-      USE ppm_module_map_field
+      USE ppm_module_map
       USE ppm_module_check_topoid
       USE ppm_module_check_meshid
       USE ppm_module_error
diff --git a/src/ppm_fdsolver_map_3d.f b/src/ppm_fdsolver_map_3d.f
index 8510835449ab515988d4d9245fb234719fddbb95..593d7fdf37d94a16e2adbc90dca41bd2817e2f4c 100644
--- a/src/ppm_fdsolver_map_3d.f
+++ b/src/ppm_fdsolver_map_3d.f
@@ -94,7 +94,7 @@
       !  Modules
       !-------------------------------------------------------------------------
       USE ppm_module_data
-      USE ppm_module_map_field
+      USE ppm_module_map
       USE ppm_module_check_topoid
       USE ppm_module_check_meshid
       USE ppm_module_error
diff --git a/src/ppm_fdsolver_solve_2d.f b/src/ppm_fdsolver_solve_2d.f
index be04257cbecb86d365386ad8ccb00ffddc6ea3ac..3c1fde2eaffdd9aab9ca20946d3bfa95ac80b82c 100644
--- a/src/ppm_fdsolver_solve_2d.f
+++ b/src/ppm_fdsolver_solve_2d.f
@@ -183,7 +183,11 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_mesh
-      USE ppm_module_typedef
+      USE ppm_module_substart
+      USE ppm_module_substop
+      USE ppm_module_write
+      USE ppm_module_error
+      USE ppm_module_alloc
       USE ppm_module_mktopo
       USE ppm_module_mesh_define
       USE ppm_module_fdsolver_map
@@ -274,8 +278,7 @@
       !  Initialise
       !-------------------------------------------------------------------------
       CALL substart('ppm_fdsolver_solve_2d',t0,info)
-      f_topo => ppm_topo(field_topoid)%t
-      f_mesh => f_topo%mesh(mesh_id_data)
+
       !-------------------------------------------------------------------------
       ! Check arguments
       !-------------------------------------------------------------------------
@@ -293,6 +296,9 @@
               GOTO 9999
           ENDIF
       ENDIF
+      
+      f_topo => ppm_topo(field_topoid)%t
+      f_mesh => f_topo%mesh(mesh_id_data)
       !-------------------------------------------------------------------------
       !  Check if FFTW-Library is available of if NEC Library
       !-------------------------------------------------------------------------
diff --git a/src/ppm_fdsolver_solve_3d.f b/src/ppm_fdsolver_solve_3d.f
index 934555898fe67a9c02c7cf587450a8bc36fa5baa..49bd31c4845f16557566f62b77dec5462e3fe181 100644
--- a/src/ppm_fdsolver_solve_3d.f
+++ b/src/ppm_fdsolver_solve_3d.f
@@ -232,7 +232,6 @@
       !-------------------------------------------------------------------------
       USE ppm_module_data
       USE ppm_module_data_mesh
-      USE ppm_module_typedef
       USE ppm_module_mktopo
       USE ppm_module_mesh_define
       USE ppm_module_fdsolver_map
diff --git a/src/ppm_hamjac_ext_step_3d.f b/src/ppm_hamjac_ext_step_3d.f
index 077550deeae2bf5555967ebe097f422ada77ca85..d83fc5f837eab6904d49e242e8167b40b7f77c1a 100644
--- a/src/ppm_hamjac_ext_step_3d.f
+++ b/src/ppm_hamjac_ext_step_3d.f
@@ -147,6 +147,15 @@
            DO k=1,ndata(3,isubl)
               DO j=1,ndata(2,isubl)
                  DO i=1,ndata(1,isubl)
+                    IF(ABS(phi(i,j,k,isub)).GT.7.0_mk*dx(1)) CYCLE
+                    ! TODO replace the hardcoded 7 by an argument
+                    IF(ABS(phi(i,j,k,isub)).LT.dx(1)) THEN
+#if   __MODE == __SCA
+                       tpsi(i,j,k,isub) = psi(i,j,k,isub)
+#elif __MODE == __VEC
+                       tpsi(1:lda,i,j,k,isub) = psi(1:lda,i,j,k,isub)
+#endif
+                    ELSE
                     phimid(1) = phi(i+1,j,k,isub)-phi(i-1,j,k,isub)
                     phimid(2) = phi(i,j+1,k,isub)-phi(i,j-1,k,isub)
                     phimid(3) = phi(i,j,k+1,isub)-phi(i,j,k-1,isub)
@@ -186,7 +195,8 @@
                     tpsi(1:lda,i,j,k,isub) = psi(1:lda,i,j,k,isub) &
                          & - wenotau * dphi_dt(1:lda)
                     rms = MAX(rms,SUM(ABS(dphi_dt)))
-#endif                    
+#endif
+                 ENDIF
                  END DO
               END DO
            END DO