diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..e518a24
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,55 @@
+# Specify minimum requirements
+cmake_minimum_required( VERSION 3.5.2 )
+
+# display command line
+set(CMAKE_VERBOSE_MAKEFILE ON)
+
+# Collision Solver
+
+# Add project and description
+project(cosolver Fortran )
+
+# where to find the src code
+set(PROJECT_SRC_DIR ${PROJECT_SOURCE_DIR}/src)
+MESSAGE ("source path: ${PROJECT_SOURCE_DIR}")
+MESSAGE ("source path to src dir: ${PROJECT_SRC_DIR}")
+
+# where to output the *.mod file
+set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR}/mod)
+
+# Add external libraries (futils, HDF5)
+
+
+# Futils
+set(futils_dir /home/bjfrei/local/spcpc/intel)
+set(futils_INCLUDE_dir ${futils_dir}/include/O)
+set(futils_LIB_dir ${futils_dir}/lib/O)
+
+# HDF5 
+set(HDF5_LIB_dir /usr/local/hdf5-1.8.18-intel17.0/lib)
+
+#FMlib 
+set(FMlib_INCLUDE_dir ${PROJECT_SOURCE_DIR}/FM/mod)
+set(FMlib_LIB_dir  ${PROJECT_SOURCE_DIR}/FM/lib)
+
+# include external libraries
+set(extern_INCLUDE ${futils_INCLUDE_dir} ${FMlib_INCLUDE_dir})
+set(extern_LIB ${futils_LIB_dir} ${HDF5_LIB_dir} ${FMlib_LIB_dir})
+
+include_directories(${extern_INCLUDE})
+link_directories (${extern_LIB})
+
+# where to output the executable
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
+
+# Define executable
+add_executable(${PROJECT_NAME} ${PROJECT_SRC_DIR}/main.f90)
+
+# link src to exectubale
+add_subdirectory(src)
+
+# Link external libraries to executable
+target_link_libraries(${PROJECT_NAME} src futils fm hdf5 hdf5_fortran)
+
+# compilation flags
+set( CMAKE_Fortran_FLAGS_RELEASE "-c -XHost -O3" )
diff --git a/FM/Makefile b/FM/Makefile
index 76a0207..31e0ad5 100644
--- a/FM/Makefile
+++ b/FM/Makefile
@@ -1,60 +1,54 @@
-include local/dirs.inc
-#include local/make.inc
-
-###############################################################################################################################################################
-
+#Local code, binaries, pputils library
+PREFIX  = $(HOME)/Documents/cosolver/FM
+SRCDIR   = $(PREFIX)/src
+BINDIR   = $(PREFIX)/bin
+OBJDIR   = $(PREFIX)/obj
+LIBDIR   = $(PREFIX)/lib
+MODDIR   = $(PREFIX)/mod
 
 F90 = mpif90
 EXECTEST = test.exe
 FOBJ = $(OBJDIR)/fm.o $(OBJDIR)/fmsave.o $(OBJDIR)/fmzm90.o
 EXTMOD = -module $(MODDIR)
+#EXTMOD = -J$(MODDIR) 
 
 FTEST = $(SRCDIR)/$(EXECTEST)
 
 install: dirs lib
 
-###############################################################################################################################################################
 dirs:
 	mkdir -p $(BINDIR)
 	mkdir -p $(OBJDIR)
 	mkdir -p $(MODDIR)
 	mkdir -p $(LIBDIR)
-###############################################################################################################################################################
 
 lib: libfm.a
 
-###############################################################################################################################################################
-
 libfm.a: $(FOBJ) 
 	ar r $@ $?
 	mv $@ $(LIBDIR)
-###############################################################################################################################################################
 
 $(OBJDIR)/fm.o: $(OBJDIR)/fmsave.o $(SRCDIR)/fm.f90
 	$(F90) -c $(EXTMOD) $(SRCDIR)/fm.f90 -o $@
 
 $(OBJDIR)/fmsave.o: $(SRCDIR)/fmsave.f90	
 	$(F90) -c $(EXTMOD) $(SRCDIR)/fmsave.f90 -o $@
 
 $(OBJDIR)/fmzm90.o: $(SRCDIR)/fmzm90.f90 $(OBJDIR)/fmsave.o $(OBJDIR)/fm.o 
 	$(F90) -c $(EXTMOD) $(SRCDIR)/fmzm90.f90 -o $@
 
-###############################################################################################################################################################
-
 
 clean: cleanobj cleanmod cleanlib
 
 cleanobj:
 	@rm -f $(OBJDIR)/*o
 
 cleanmod:
 	@rm -f $(MODDIR)/*mod
 	@rm -f 
 
 cleanlib:
 	@rm -f $(LIBDIR)/*.a	
 
 
-###############################################################################################################################################################
-
 
diff --git a/FM/local/dirs.inc b/FM/local/dirs.inc
deleted file mode 100644
index 9636e44..0000000
--- a/FM/local/dirs.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-#Local code, binaries, pputils library
-PREFIX  = $(HOME)/Documents/cosolver/FM
-SRCDIR   = $(PREFIX)/src
-BINDIR   = $(PREFIX)/bin
-OBJDIR   = $(PREFIX)/obj
-LIBDIR   = $(PREFIX)/lib
-MODDIR   = $(PREFIX)/mod
-
diff --git a/gkcoulomb_suite/CurlyNpjmn/CMakeLists.txt b/gkcoulomb_suite/CurlyNpjmn/CMakeLists.txt
new file mode 100644
index 0000000..a2dbe58
--- /dev/null
+++ b/gkcoulomb_suite/CurlyNpjmn/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Specify minimum requirements
+cmake_minimum_required( VERSION 3.5.2 )
+
+# display command line
+set(CMAKE_VERBOSE_MAKEFILE ON)
+
+# Add project and description
+project(npjmn Fortran )
+
+# where to find the src code
+set(PROJECT_SRC_DIR ${PROJECT_SOURCE_DIR}/src)
+MESSAGE ("source path: ${PROJECT_SOURCE_DIR}")
+MESSAGE ("source path to src dir: ${PROJECT_SRC_DIR}")
+
+# where to output the *.mod file
+set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR}/mod)
+
+#FMlib 
+set(extern_INCLUDE  ${PROJECT_SOURCE_DIR}/../../FM/mod )
+set(extern_LIB ${PROJECT_SOURCE_DIR}/../../FM/lib)
+
+include_directories(${extern_INCLUDE})
+link_directories (${extern_LIB})
+
+# where to output the executable
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
+
+# Define executable
+add_executable(${PROJECT_NAME} ${PROJECT_SRC_DIR}/main.f90)
+
+# link src to exectubale
+add_subdirectory(src)
+
+# Link external libraries to executable
+target_link_libraries(${PROJECT_NAME} src fm )
+
+# compilation flags
+set( CMAKE_Fortran_FLAGS_RELEASE "-c -XHost -O3" )
diff --git a/gkcoulomb_suite/CurlyNpjmn/Makefile b/gkcoulomb_suite/CurlyNpjmn/Makefile
index e46f717..cf4f5d6 100644
--- a/gkcoulomb_suite/CurlyNpjmn/Makefile
+++ b/gkcoulomb_suite/CurlyNpjmn/Makefile
@@ -1,95 +1,97 @@
 include local/dirs.inc
 include local/make.inc
 
 EXEC = $(BINDIR)/main
 
 # Choose your compiler
 F90 = mpif90
 
 
 EXTOBJ = $(OBJDIR)/*.o $(BASISDIR)/*.o
 
 all: dirs basis TAGS src/srcinfo.h $(EXEC)
 
 basis: 
 	(cd $(BASISDIR); make; cd $(PREFIX);)
 
 dirs: 
 
 	mkdir -p $(BINDIR)
 	mkdir -p $(OBJDIR)
 	mkdir -p $(MODDIR)
 
 TAGS: src/*90
 	(cd src; etags *.f90 *.h; cd ..)
 
 src/srcinfo.h: 
 	( cd src/srcinfo; $(MAKE))
 
 FOBJ = $(OBJDIR)/main.o $(OBJDIR)/control.o $(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/ppsetup.o $(OBJDIR)/ppsync.o $(OBJDIR)/ppinit.o $(OBJDIR)/ppexit.o $(OBJDIR)/array_mod.o $(OBJDIR)/memory.o $(OBJDIR)/numerics.o $(OBJDIR)/compute_curlyNpjmn.o $(OBJDIR)/coeff_mod.o 
 
 $(EXEC): $(FOBJ)
 	$(F90) $(LDFLAGS) $(EXTOBJ) $(EXTMOD) $(EXTINC) $(EXTLIBS) -o $@
 
 $(OBJDIR)/main.o: src/main.f90 $(OBJDIR)/control.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/main.f90 -o $@
 
 $(OBJDIR)/control.o: src/control.f90 $(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/ppinit.o $(OBJDIR)/ppsetup.o $(OBJDIR)/ppexit.o $(OBJDIR)/numerics.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/control.f90 -o $@
 
 $(OBJDIR)/basic_mod.o: src/basic_mod.f90 $(OBJDIR)/prec_const_mod.o   
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/basic_mod.f90 -o $@
 
 $(OBJDIR)/prec_const_mod.o: src/prec_const_mod.f90 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/prec_const_mod.f90 -o $@
 
 $(OBJDIR)/ppinit.o: src/ppinit.f90 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/ppinit.f90 -o $@
 
 $(OBJDIR)/ppsetup.o: src/ppsetup.f90 $(OBJDIR)/prec_const_mod.o $(OBJDIR)/basic_mod.o $(OBJDIR)/array_mod.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/ppsetup.f90 -o $@
 
 $(OBJDIR)/ppsync.o: src/ppsync.f90 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/ppsync.f90 -o $@
 
 $(OBJDIR)/ppexit.o: src/ppexit.f90 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/ppexit.f90 -o $@
 
 $(OBJDIR)/array_mod.o: src/array_mod.f90  $(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/array_mod.f90 -o $@
 
 $(OBJDIR)/memory.o: src/memory.f90  $(OBJDIR)/basic_mod.o  $(OBJDIR)/array_mod.o $(OBJDIR)/prec_const_mod.o 
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/memory.f90 -o $@
 
 $(OBJDIR)/numerics.o: src/numerics.f90 $(OBJDIR)/prec_const_mod.o $(OBJDIR)/basic_mod.o $(OBJDIR)/array_mod.o  $(OBJDIR)/compute_curlyNpjmn.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/numerics.f90 -o $@
 
 $(OBJDIR)/compute_curlyNpjmn.o: src/compute_curlyNpjmn.f90 $(OBJDIR)/prec_const_mod.o $(OBJDIR)/basic_mod.o $(OBJDIR)/array_mod.o $(OBJDIR)/coeff_mod.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/compute_curlyNpjmn.f90 -o $@
 
 $(OBJDIR)/coeff_mod.o: src/coeff_mod.f90 $(OBJDIR)/prec_const_mod.o
 	$(F90) -c $(F90FLAGS) $(EPPFLAGS) $(EXTMOD) $(EXTINC) src/coeff_mod.f90 -o $@
 
 
 clean: cleanobj cleanmod
 	@rm -f src/srcinfo.h
 	@rm -f src/srcinfo/srcinfo.h
 
 cleanobj:
 	@rm -f $(OBJDIR)/*o
 
 cleanmod:
 	@rm -f $(MODDIR)/*mod
 	@rm -f *.mod
 
 cleanbin:
 	@rm -f $(EXEC)
 
 ref: 
 	(cd src;doxygen Doxyfile; cd ..)
 	(cd doc/latex/; make; cd ../..)
 
 install: 
 	mkdir new_a; 
 	mv 0*.csv new_a
 	(cd new_a; ls 0*.csv > log.in; cd ..)
+	cp generate_indices.sh new_a
+	cp fort.90 new_a
diff --git a/gkcoulomb_suite/CurlyNpjmn/src/CMakeLists.txt b/gkcoulomb_suite/CurlyNpjmn/src/CMakeLists.txt
new file mode 100644
index 0000000..d803b29
--- /dev/null
+++ b/gkcoulomb_suite/CurlyNpjmn/src/CMakeLists.txt
@@ -0,0 +1,15 @@
+add_library(src array_mod.f90
+basic_mod.f90
+coeff_mod.f90
+compute_curlyNpjmn.f90
+control.f90
+main.f90
+memory.f90
+numerics.f90
+ppexit.f90
+ppinit.f90
+ppsetup.f90
+ppsync.f90
+prec_const_mod.f90
+../../../basis_transformation/T4T5/T4T5_mod.f90
+)
diff --git a/gkcoulomb_suite/README b/gkcoulomb_suite/README
deleted file mode 100644
index 9e179b3..0000000
--- a/gkcoulomb_suite/README
+++ /dev/null
@@ -1,15 +0,0 @@
-GK Coulomb Suite
-==================
-
-Prec-compute coefficient to compute the gk coulomb in cosolver
-
-To install:
-
-cd CurlyNpjmn;
-make; 
-cd ..
-
-cd Tljpmf;
-make; 
-cd ..
-
diff --git a/gkcoulomb_suite/Tljpmf/CMakeLists.txt b/gkcoulomb_suite/Tljpmf/CMakeLists.txt
new file mode 100644
index 0000000..e7e3f31
--- /dev/null
+++ b/gkcoulomb_suite/Tljpmf/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Specify minimum requirements
+cmake_minimum_required( VERSION 3.5.2 )
+
+# display command line
+set(CMAKE_VERBOSE_MAKEFILE ON)
+
+# Add project and description
+project(tljpmf Fortran )
+
+# where to find the src code
+set(PROJECT_SRC_DIR ${PROJECT_SOURCE_DIR}/src)
+MESSAGE ("source path: ${PROJECT_SOURCE_DIR}")
+MESSAGE ("source path to src dir: ${PROJECT_SRC_DIR}")
+
+# where to output the *.mod file
+set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR}/mod)
+
+
+#FMlib 
+set(extern_INCLUDE  ${PROJECT_SOURCE_DIR}/../../FM/mod )
+set(extern_LIB ${PROJECT_SOURCE_DIR}/../../FM/lib)
+
+include_directories(${extern_INCLUDE})
+link_directories (${extern_LIB})
+
+# where to output the executable
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
+
+# Define executable
+add_executable(${PROJECT_NAME} ${PROJECT_SRC_DIR}/main.f90)
+
+# link src to exectubale
+add_subdirectory(src)
+
+# Link external libraries to executable
+target_link_libraries(${PROJECT_NAME} src fm )
+
+# compilation flags
+set( CMAKE_Fortran_FLAGS_RELEASE "-c -XHost -O3" )
diff --git a/gkcoulomb_suite/Tljpmf/src/CMakeLists.txt b/gkcoulomb_suite/Tljpmf/src/CMakeLists.txt
new file mode 100644
index 0000000..1046b68
--- /dev/null
+++ b/gkcoulomb_suite/Tljpmf/src/CMakeLists.txt
@@ -0,0 +1,14 @@
+add_library(src array_mod.f90
+auxval_mod.f90
+basic_mod.f90
+control.f90
+main.f90
+memory.f90
+model_mod.f90
+numerics_mod.f90
+ppexit.f90
+ppinit.f90
+ppsetup.f90
+ppsync.f90
+prec_const_mod.f90
+../../../basis_transformation/T4T5/T4T5_mod.f90)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..be2d8dc
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,44 @@
+add_library(src
+abel_mod.f90
+array_mod.f90
+auxval_mod.f90
+basic_mod.f90
+basic_mpi_mod.f90
+basis_transformation_mod.f90
+coeff_mod.f90
+control.f90
+coulomb_mod.f90
+coulomb_pol_mod.f90
+diagnose.f90
+dougherty_mod.f90
+ei_colls_mod.f90
+endrun.f90
+gkcoulomb_coeffs_mod.f90
+gkcoulomb_mod.f90
+grid_mod.f90
+hirshmansigmar_mod.f90
+ie_colls_mod.f90
+improved_sugama_mod.f90
+main.f90
+memory.f90
+model_mod.f90
+numerical_test.f90
+operator_model_mod.f90
+output_mod.f90
+pitchangle_mod.f90
+ppexit.f90
+ppinit.f90
+ppsetup.f90
+ppsync_e.f90
+ppsync.f90
+ppsync_i.f90
+ppsync_self.f90
+prec_const_mod.f90
+prologue.f90
+readinputs.f90
+restart_mod.f90
+self_colls_mod.f90
+speed_functions_mod.f90
+sugama_mod.f90
+timer_mod.f90
+../basis_transformation/T4T5/T4T5_mod.f90)
diff --git a/src/T4T5_mod.f90 b/src/T4T5_mod_old.f90
similarity index 100%
rename from src/T4T5_mod.f90
rename to src/T4T5_mod_old.f90
diff --git a/src/improved_sugama_mod.f90.bkp b/src/improved_sugama_mod.f90.bkp
deleted file mode 100644
index 57cbfec..0000000
--- a/src/improved_sugama_mod.f90.bkp
+++ /dev/null
@@ -1,254 +0,0 @@
-MODULE improved_Sugama
-  !
-  ! Linearized DK/GK Improved Sugamam Collision operator between species a and b
-  !
-  ! Note: as defined below, the Sugama operator differs from a 2 factor from the original paper due to the definition of the isothermal part of the linearized Coulomb
-  !
-  ! Ref: Sugama et. al., Phsyics of Plasmas 26 (2019)
-
-  USE prec_const  
-  USE basic
-  USE model
-  USE FMZM
-  USE coeff
-  USE basis_transformation
-  USE speed_functions 
-  USE auxval
-  use coulomb_parts
-  use sugama
-
-  IMPLICIT NONE
-
-  PUBLIC
-
-CONTAINS
-
-  !_________________________________________________________________
-  !
-  !                  Drift kientic Imoroved Sugama collision operator
-  SUBROUTINE SugamaImprovedTDK(l,k,rCabT)
-    ! Add the test correction matrix to DK Sugama. The improved Sugama collision operator reproduces the same friction-flow relations as the lineared DK full Coulomb collision operator [see Eqs. (12) and (13) in Ref. [1]]
-    !
-    !            
-    !
-    ! Ref[1]: Sugama et al, Phys. Plasmas 26, 102108 (2019)
-
-    IMPLICIT NONE
-    !
-    INTEGER, intent(in) :: l,k
-    TYPE(FM), DIMENSION(:),INTENT(INOUT):: rCabT
-    !
-    !
-    ! local vars.
-    INTEGER :: j,i,g,h,icol
-    TYPE(FM), SAVE :: NX0,NX1,T4,T4inv,NX2,cj_,ci_
-    TYPE(FM), SAVE :: DeltaMablk_
-    CHARACTER(len=T4len) :: T4str_
-    !
-    CALL FM_ENTER_USER_ROUTINE
-    !
-    !  construct DK Test Sugama 
-    CALL SugamaTDK(l,k, rCabT)
-    !
-    ! add correction matrix elements \Delta C_{ab}^{FLS}
-    IF( l .ge. 1 .or. k .ge. 1) THEN 
-       !
-       NX0 = 1/SQRT(TO_FM(2)**l*FACTORIAL(TO_FM(l)))
-       !
-       !
-       jloop: DO j=0, k + floor(real(l)/2)
-          NX1 =   4*FACTORIAL(TO_FM(2*j + 3)/2)/FACTORIAL(TO_FM(j))/3/SQRT(PIFM)
-          cj_ = CJ(j)
-          T4str_ =  GET_T4(1,j,l,k) ! ... T^{lk}_{gh}
-          T4inv = SQRT(PIFM)*(TO_FM(2)**l)*FACTORIAL(TO_FM(l))*FACTORIAL(TO_FM(j))*TO_FM(2 + 1)/2/FACTORIAL(TO_FM(2+2*j +1)/2)*TO_FM(T4str_)
-          IF( T4inv .ne. TO_FM(0)) THEN 
-
-             iloop: DO i=0,imaxx ! .... energy moment
-                ci_ = CJ(i)
-                ! Complute test correction matrix
-                DeltaMablk_=    DELTAMlk(j,i)     
-                gloop: DO g =0,min(2*i +1,Pmaxa)
-                   NX2 = SQRT(TO_FM(2)**g*FACTORIAL(TO_FM(g)))
-                   hloop: DO h=0,min(i,Jmaxa)
-                      T4str_ =  GET_T4(1,i,g,h) ! ... T^{lk}_{gh}
-                      T4 = TO_FM(T4str_)
-                      icol = numba(g,h)
-                      rCabT(icol) = rCabT(icol) + NX0*NX1*NX2*T4inv*T4*cj_*ci_*DeltaMablk_
-                   ENDDO hloop
-                ENDDO gloop
-             ENDDO iloop
-          ENDIF
-       ENDDO jloop
-    ENDIF
-    !
-    !
-    CALL FM_EXIT_USER_ROUTINE 
-    !
-  END SUBROUTINE SugamaImprovedTDK
-  !
-  !_________________________________________________________________
-  !
-  SUBROUTINE SugamaImprovedFDK(l,k,rCabF)
-    ! Add field correction matrix to DK Sugama. The improved Sugama collision operator reproduces the same friction-flow relations as the lineared DK full Coulomb collision operator [see Eqs. (12) and (13) in Ref. [1]]
-    !
-    !            
-    !
-    ! Ref[1]: Sugama et al, Phys. Plasmas 26, 102108 (2019)
-
-    IMPLICIT NONE
-    !
-    INTEGER, intent(in) :: l,k
-    TYPE(FM), DIMENSION(:),INTENT(INOUT):: rCabF
-    !
-    !
-    ! local vars.
-    INTEGER :: j,i,g,h,icol
-    TYPE(FM), SAVE :: NX0,NX1,T4,T4inv,NX2,cj_,ci_
-    TYPE(FM), SAVE :: DeltaNablk_
-    CHARACTER(len=T4len) :: T4str_
-    !
-    CALL FM_ENTER_USER_ROUTINE
-    !
-    !  construct Sugama Field part
-    CALL SugamaFDK(l,k, rCabF)
-    !
-    ! add correction matrix elements \Delta C_{ab}^{FLS}
-    IF( l .ge. 1 .or. k .ge. 1) THEN 
-       !
-       NX0 = 1/SQRT(TO_FM(2)**l*FACTORIAL(TO_FM(l)))
-       !
-       !
-       jloop: DO j=0, k + floor(real(l)/2)
-          NX1 =   4*FACTORIAL(TO_FM(2*j + 3)/2)/FACTORIAL(TO_FM(j))/3/SQRT(PIFM)
-          cj_ = CJ(j)
-          T4str_ =  GET_T4(1,j,l,k) ! ... T^{lk}_{gh}
-          T4inv = SQRT(PIFM)*(TO_FM(2)**l)*FACTORIAL(TO_FM(l))*FACTORIAL(TO_FM(j))*TO_FM(2 + 1)/2/FACTORIAL(TO_FM(2+2*j +1)/2)*TO_FM(T4str_)
-          IF( T4inv .ne. TO_FM(0)) THEN 
-
-             iloop: DO i=0,imaxx ! ... energy moment
-                ci_ = CJ(i)
-                ! Complute test correction matrix
-                DeltaNablk_=    DELTANlk(j,i)     
-                gloop: DO g =0,min(2*i +1,Pmaxb)
-                   NX2 = SQRT(TO_FM(2)**g*FACTORIAL(TO_FM(g)))
-                   hloop: DO h=0,min(i,Jmaxb)
-                      T4str_ =  GET_T4(1,i,g,h) ! ... T^{lk}_{gh}
-                      T4 = TO_FM(T4str_)
-                      icol = numbb(g,h)
-                      rCabF(icol) = rCabF(icol) + NX0*NX1*NX2*T4inv*T4*cj_*ci_*DeltaNablk_
-                   ENDDO hloop
-                ENDDO gloop
-             ENDDO iloop
-          ENDIF
-       ENDDO jloop
-    ENDIF
-    !
-    !
-    CALL FM_EXIT_USER_ROUTINE 
-    !
-  END SUBROUTINE SugamaImprovedFDK
-  !_________________________________________________________________
-  !
-  !
-  SUBROUTINE SugamaImprovedSelfDK(l,k,rCaa)
-    ! Add correction matrix to self DK Sugama. The improved Sugama collision operator reproduces the same friction-flow relations as the lineared DK full Coulomb collision operator [see Eqs. (12) and (13) in Ref. [1]]
-    !
-    !            
-    !
-    ! Ref[1]: Sugama et al, Phys. Plasmas 26, 102108 (2019)
-
-    IMPLICIT NONE
-    !
-    INTEGER, intent(in) :: l,k
-    TYPE(FM), DIMENSION(:),INTENT(INOUT):: rCaa
-    !
-    !
-    ! local vars.
-    INTEGER :: j,i,g,h,icol
-    TYPE(FM), SAVE :: NX0,NX1,T4,T4inv,NX2,cj_,ci_
-    TYPE(FM), SAVE :: DeltaMaalk_,DeltaNaalk_
-    CHARACTER(len=T4len) :: T4str_
-    !
-    CALL FM_ENTER_USER_ROUTINE
-    !
-    !  Construct self DK Sugama 
-    CALL SugamaSelfDK(l,k,rCaa)
-
-    !
-    ! add correction matrix elements \Delta C_{ab}^{FLS}
-    IF( l .ge. 1 .or. k .ge. 1) THEN 
-       !
-       NX0 = 1/SQRT(TO_FM(2)**l*FACTORIAL(TO_FM(l)))
-       !
-       !
-       jloop: DO j=0, k + floor(real(l)/2)
-          NX1 =   4*FACTORIAL(TO_FM(2*j + 3)/2)/FACTORIAL(TO_FM(j))/3/SQRT(PIFM)
-          cj_ = CJ(j)
-          T4str_ =  GET_T4(1,j,l,k) ! ... T^{lk}_{gh}
-          T4inv = SQRT(PIFM)*(TO_FM(2)**l)*FACTORIAL(TO_FM(l))*FACTORIAL(TO_FM(j))*TO_FM(2 + 1)/2/FACTORIAL(TO_FM(2+2*j +1)/2)*TO_FM(T4str_)
-          IF( T4inv .ne. TO_FM(0)) THEN 
-
-             iloop: DO i=0,imaxx
-                ci_ = CJ(i)
-                ! Complute test and field correction matrix
-                DeltaNaalk_=    DeltaNlk(j,i)     
-                DeltaMaalk_= DeltaMlk(j,i)
-                gloop: DO g =0,min(2*i +1,Pmaxa)
-                   NX2 = SQRT(TO_FM(2)**g*FACTORIAL(TO_FM(g)))
-                   hloop: DO h=0,min(i,Jmaxa)
-                      T4str_ =  GET_T4(1,i,g,h) ! ... T^{lk}_{gh}
-                      T4 = TO_FM(T4str_)
-                      icol = numba(g,h)
-                      rCaa(icol) = rCaa(icol) + NX0*NX1*NX2*T4inv*T4*cj_*ci_*(DeltaNaalk_ + DeltaMaalk_)
-                   ENDDO hloop
-                ENDDO gloop
-             ENDDO iloop
-          ENDIF
-       ENDDO jloop
-    ENDIF
-    !
-    !
-    CALL FM_EXIT_USER_ROUTINE 
-    !
-  END SUBROUTINE SugamaImprovedSelfDK
-  !
-  !
-  !      GYROKINETIC IMPROVED FIELD SUGAMA
-  !
-  !
-  !_________________________________________________________________
-  SUBROUTINE SugamaImprovedTGK(l,k,rCabT) 
-    !
-    ! 
-    IMPLICIT NONE
-    !
-    INTEGER,INTENT(in) :: l,k 
-    TYPE(FM),dimension(:),INTENT(INOUT) :: rCabT
-    !
-    CALL FM_ENTER_USER_ROUTINE
-    !
-    ! CODE HERE ...... !!
-    !
-    CALL FM_EXIT_USER_ROUTINE
-    !
-  END SUBROUTINE SugamaImprovedTGK
-  !
-  !__________________________________________
-  !
-  SUBROUTINE SugamaImprovedFGK(l,k,rCabF) 
-    !
-    ! 
-    IMPLICIT NONE
-    !
-    INTEGER,INTENT(in) :: l,k 
-    TYPE(FM),dimension(:),INTENT(INOUT) :: rCabF
-    !
-    CALL FM_ENTER_USER_ROUTINE
-    !
-    ! CODE HERE ...... !!
-    !
-    CALL FM_EXIT_USER_ROUTINE
-    !
-  END SUBROUTINE SugamaImprovedFGK
-
-END MODULE improved_Sugama
diff --git a/src/spec_fcts_mod.f90 b/src/spec_fcts_mod.f90
deleted file mode 100644
index dd44b19..0000000
--- a/src/spec_fcts_mod.f90
+++ /dev/null
@@ -1,48 +0,0 @@
-module spec_fcts
-!
-! this module contains specfial functions
-!
-! List of functions :
-
-use prec_const
-private
-
-public :: Factorial
-
-contains 
-
-  
-!-------------------------------------------------------!
-  real(dp) function Factorial( val ) result( return_value )
-  ! Evaluates factorial for real positive, and negative half-integer numbers.
-
-    implicit none
-    integer               :: ival, iloop
-    real(dp)              :: bval, rval, step
-    real(dp), intent(in)  :: val
-
-    return_value = 1._dp
-    bval = 1.0_dp
-    step = sign(1._dp,val)
-    rval = step
-    ival = abs(nint(val+0.25_dp))
-    ! If we're dealing with half-integers, recursion relation with sqrt(PI)
-
-    if( modulo(val,1.0_dp) > 0.25_dp ) then
-       bval = SQRTPI
-       rval = 0.5_dp * rval
-    end if
-    do iloop = 1, ival
-       return_value = return_value * rval
-       rval = rval + step
-    end do
-    if( val < 0._dp ) return_value = 1._dp / return_value
-    return_value = return_value * bval
-
-  end function Factorial
-!-------------------------------------------------------!
-
-
-
-
-end module spec_fcts