diff --git a/CMakeLists.txt b/CMakeLists.txt
index e8f0bd7e32f975f7e052f5b4b9f4885c6edd1140..f3fb6124f83336a88a62ad8ffe4a801876f7767e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,28 +38,18 @@ include_directories(${PASTIS_SOURCE_DIR}/packages/rang/include)
 # CLI11
 include_directories(${PASTIS_SOURCE_DIR}/packages/CLI11/include)
 
-# Pastis utils
-add_subdirectory(utils)
-include_directories(utils)
+# Pastis src
+add_subdirectory(src)
 
-# Pastis algebra
-#add_subdirectory(algebra)
-include_directories(algebra)
+include_directories(src)
+include_directories(src/algebra)
+include_directories(src/mesh)
+include_directories(src/utils)
+include_directories(src/scheme)
 
-# Pastis experimental
-add_subdirectory(experimental)
-include_directories(experimental)
+include_directories(src/experimental)
 
-# ---------------- Checks for includes ----------------
-
-# Checks for FPE
-include(CheckIncludeFile)
-check_include_file(fenv.h PASTIS_HAS_FENV_H)
-
-# Generates pastis_config.hpp
-configure_file("${PASTIS_SOURCE_DIR}/pastis_config.hpp.in"
-  "${CMAKE_CURRENT_BINARY_DIR}/pastis_config.hpp"
-  @ONLY)
+# -----------------------------------------------------
 
 link_libraries("-rdynamic")
 
@@ -67,7 +57,7 @@ link_libraries("-rdynamic")
 # Pastis binary
 add_executable(
   pastis
-  main.cpp)
+  src/main.cpp)
 
 # Libraries
 target_link_libraries(
diff --git a/cmake/GetPastisGitRevision.cmake b/cmake/GetPastisGitRevision.cmake
index fa4bcf61a9410d0922a1d645f0eccf0a5e8a4b59..f3b6919e5260de92352cb3dee838c56b5226dc7c 100644
--- a/cmake/GetPastisGitRevision.cmake
+++ b/cmake/GetPastisGitRevision.cmake
@@ -62,7 +62,7 @@ else()
 endif()
 
 # Generates revision header file candidate
-configure_file("${PASTIS_SOURCE_DIR}/utils/pastis_git_revision.hpp.in"
+configure_file("${PASTIS_SOURCE_DIR}/src/utils/pastis_git_revision.hpp.in"
   "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision"
   @ONLY)
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..db8252e9645f511eb6f489052006426086f1833f
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,24 @@
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+#------------------------------------------------------
+
+# Pastis utils
+add_subdirectory(utils)
+include_directories(utils)
+
+# Pastis algebra
+#add_subdirectory(algebra)
+include_directories(algebra)
+
+# Pastis mesh
+#add_subdirectory(mesh)
+include_directories(mesh)
+
+# Pastis mesh
+#add_subdirectory(mesh)
+include_directories(scheme)
+
+# Pastis experimental
+add_subdirectory(experimental)
+include_directories(experimental)
diff --git a/algebra/TinyMatrix.hpp b/src/algebra/TinyMatrix.hpp
similarity index 100%
rename from algebra/TinyMatrix.hpp
rename to src/algebra/TinyMatrix.hpp
diff --git a/algebra/TinyVector.hpp b/src/algebra/TinyVector.hpp
similarity index 100%
rename from algebra/TinyVector.hpp
rename to src/algebra/TinyVector.hpp
diff --git a/experimental/AcousticSolver.cpp b/src/experimental/AcousticSolverClass.cpp
similarity index 77%
rename from experimental/AcousticSolver.cpp
rename to src/experimental/AcousticSolverClass.cpp
index 80ed8310e81e6c19e682d889b344953f3de418bf..051e148bb21babf5eb65c22b2bcf820df37632b6 100644
--- a/experimental/AcousticSolver.cpp
+++ b/src/experimental/AcousticSolverClass.cpp
@@ -1,11 +1,11 @@
-#include <AcousticSolver.hpp>
+#include <AcousticSolverClass.hpp>
 #include <rang.hpp>
 
 #include <BlockPerfectGas.hpp>
 
 typedef const double my_double;
 
-struct AcousticSolver::ReduceMin
+struct AcousticSolverClass::ReduceMin
 {
 private:
   const Kokkos::View<my_double*> x_;
@@ -43,8 +43,8 @@ public:
 
 KOKKOS_INLINE_FUNCTION
 const Kokkos::View<const double*>
-AcousticSolver::computeRhoCj(const Kokkos::View<const double*>& rhoj,
-			     const Kokkos::View<const double*>& cj)
+AcousticSolverClass::computeRhoCj(const Kokkos::View<const double*>& rhoj,
+				  const Kokkos::View<const double*>& cj)
 {
   Kokkos::parallel_for(m_nj, KOKKOS_LAMBDA(const int& j) {
       m_rhocj[j] = rhoj[j]*cj[j];
@@ -54,8 +54,8 @@ AcousticSolver::computeRhoCj(const Kokkos::View<const double*>& rhoj,
 
 KOKKOS_INLINE_FUNCTION
 const Kokkos::View<const double*[2]>
-AcousticSolver::computeAjr(const Kokkos::View<const double*>& rhocj,
-			   const Kokkos::View<const double*[2]>& Cjr)
+AcousticSolverClass::computeAjr(const Kokkos::View<const double*>& rhocj,
+				const Kokkos::View<const double*[2]>& Cjr)
 {
   Kokkos::parallel_for(m_nj, KOKKOS_LAMBDA(const int& j) {
       for (int r=0; r<2; ++r) {
@@ -68,10 +68,10 @@ AcousticSolver::computeAjr(const Kokkos::View<const double*>& rhocj,
 
 KOKKOS_INLINE_FUNCTION
 const Kokkos::View<const double*>
-AcousticSolver::computeAr(const Kokkos::View<const double*[2]>& Ajr,
-			  const Kokkos::View<const int*[2]>& node_cells,
-			  const Kokkos::View<const int*[2]>& node_cell_local_node,
-			  const Kokkos::View<const int*>& node_nb_cells)
+AcousticSolverClass::computeAr(const Kokkos::View<const double*[2]>& Ajr,
+			       const Kokkos::View<const int*[2]>& node_cells,
+			       const Kokkos::View<const int*[2]>& node_cell_local_node,
+			       const Kokkos::View<const int*>& node_nb_cells)
 {
   Kokkos::parallel_for(m_nr, KOKKOS_LAMBDA(const int& r) {
       double sum = 0;
@@ -88,13 +88,13 @@ AcousticSolver::computeAr(const Kokkos::View<const double*[2]>& Ajr,
 
 KOKKOS_INLINE_FUNCTION
 const Kokkos::View<const double*>
-AcousticSolver::computeBr(const Kokkos::View<const double*[2]>& Ajr,
-			  const Kokkos::View<const double*[2]>& Cjr,
-			  const Kokkos::View<const double*>& uj,
-			  const Kokkos::View<const double*>& pj,
-			  const Kokkos::View<const int*[2]>& node_cells,
-			  const Kokkos::View<const int*[2]>& node_cell_local_node,
-			  const Kokkos::View<const int*>& node_nb_cells)
+AcousticSolverClass::computeBr(const Kokkos::View<const double*[2]>& Ajr,
+			       const Kokkos::View<const double*[2]>& Cjr,
+			       const Kokkos::View<const double*>& uj,
+			       const Kokkos::View<const double*>& pj,
+			       const Kokkos::View<const int*[2]>& node_cells,
+			       const Kokkos::View<const int*[2]>& node_cell_local_node,
+			       const Kokkos::View<const int*>& node_nb_cells)
 {
   Kokkos::parallel_for(m_nr, KOKKOS_LAMBDA(const int& r) {
       double sum = 0;
@@ -111,8 +111,8 @@ AcousticSolver::computeBr(const Kokkos::View<const double*[2]>& Ajr,
 
 KOKKOS_INLINE_FUNCTION
 Kokkos::View<double*>
-AcousticSolver::computeUr(const Kokkos::View<const double*>& Ar,
-			  const Kokkos::View<const double*>& br)
+AcousticSolverClass::computeUr(const Kokkos::View<const double*>& Ar,
+			       const Kokkos::View<const double*>& br)
 {
   inverse(Ar, m_inv_Ar);
   const Kokkos::View<const double*> invAr = m_inv_Ar;
@@ -127,12 +127,12 @@ AcousticSolver::computeUr(const Kokkos::View<const double*>& Ar,
 
 KOKKOS_INLINE_FUNCTION
 Kokkos::View<double*[2]>
-AcousticSolver::computeFjr(const Kokkos::View<const double*[2]>& Ajr,
-			   const Kokkos::View<const double*>& ur,
-			   const Kokkos::View<const double*[2]>& Cjr,
-			   const Kokkos::View<const double*>& uj,
-			   const Kokkos::View<const double*>& pj,
-			   const Kokkos::View<const int*[2]>& cell_nodes)
+AcousticSolverClass::computeFjr(const Kokkos::View<const double*[2]>& Ajr,
+				const Kokkos::View<const double*>& ur,
+				const Kokkos::View<const double*[2]>& Cjr,
+				const Kokkos::View<const double*>& uj,
+				const Kokkos::View<const double*>& pj,
+				const Kokkos::View<const int*[2]>& cell_nodes)
 {
   Kokkos::parallel_for(m_nj, KOKKOS_LAMBDA(const int& j) {
       for (int r=0; r<2; ++r) {
@@ -144,7 +144,7 @@ AcousticSolver::computeFjr(const Kokkos::View<const double*[2]>& Ajr,
 }
 
 KOKKOS_INLINE_FUNCTION
-double AcousticSolver::
+double AcousticSolverClass::
 acoustic_dt(const Kokkos::View<const double*>& Vj,
 	    const Kokkos::View<const double*>& cj) const
 {
@@ -160,8 +160,8 @@ acoustic_dt(const Kokkos::View<const double*>& Vj,
 
 KOKKOS_INLINE_FUNCTION
 void
-AcousticSolver::inverse(const Kokkos::View<const double*>& x,
-			Kokkos::View<double*>& inv_x) const
+AcousticSolverClass::inverse(const Kokkos::View<const double*>& x,
+			     Kokkos::View<double*>& inv_x) const
 {
   Kokkos::parallel_for(x.size(), KOKKOS_LAMBDA(const int& r) {
       inv_x(r) = 1./x(r);
@@ -169,20 +169,20 @@ AcousticSolver::inverse(const Kokkos::View<const double*>& x,
 }
 
 KOKKOS_INLINE_FUNCTION
-void AcousticSolver::computeExplicitFluxes(const Kokkos::View<const double*>& xr,
-					   const Kokkos::View<const double*>& xj,
-					   const Kokkos::View<const double*>& rhoj,
-					   const Kokkos::View<const double*>& uj,
-					   const Kokkos::View<const double*>& pj,
-					   const Kokkos::View<const double*>& cj,
-					   const Kokkos::View<const double*>& Vj,
-					   const Kokkos::View<const double*[2]>& Cjr,
-					   const Kokkos::View<const int*[2]>& cell_nodes,
-					   const Kokkos::View<const int*[2]>& node_cells,
-					   const Kokkos::View<const int*>& node_nb_cells,
-					   const Kokkos::View<const int*[2]>& node_cell_local_node,
-					   Kokkos::View<double*>& ur,
-					   Kokkos::View<double*[2]>& Fjr)
+void AcousticSolverClass::computeExplicitFluxes(const Kokkos::View<const double*>& xr,
+						const Kokkos::View<const double*>& xj,
+						const Kokkos::View<const double*>& rhoj,
+						const Kokkos::View<const double*>& uj,
+						const Kokkos::View<const double*>& pj,
+						const Kokkos::View<const double*>& cj,
+						const Kokkos::View<const double*>& Vj,
+						const Kokkos::View<const double*[2]>& Cjr,
+						const Kokkos::View<const int*[2]>& cell_nodes,
+						const Kokkos::View<const int*[2]>& node_cells,
+						const Kokkos::View<const int*>& node_nb_cells,
+						const Kokkos::View<const int*[2]>& node_cell_local_node,
+						Kokkos::View<double*>& ur,
+						Kokkos::View<double*[2]>& Fjr)
 {
   const Kokkos::View<const double*> rhocj  = computeRhoCj(rhoj, cj);
   const Kokkos::View<const double*[2]> Ajr = computeAjr(rhocj, Cjr);
@@ -195,7 +195,7 @@ void AcousticSolver::computeExplicitFluxes(const Kokkos::View<const double*>& xr
   Fjr = computeFjr(Ajr, ur, Cjr, uj, pj, cell_nodes);
 }
 
-AcousticSolver::AcousticSolver(const long int& nj)
+AcousticSolverClass::AcousticSolverClass(const long int& nj)
   : m_nj(nj),
     m_nr(nj+1),
     m_br("br", m_nr),
diff --git a/experimental/AcousticSolver.hpp b/src/experimental/AcousticSolverClass.hpp
similarity index 94%
rename from experimental/AcousticSolver.hpp
rename to src/experimental/AcousticSolverClass.hpp
index 5ac400a9db22b4a96bcbabdf90fdd26d53eaa2ba..2c2f8c0eccad97536b2e7f840aa01d8ccca058bf 100644
--- a/experimental/AcousticSolver.hpp
+++ b/src/experimental/AcousticSolverClass.hpp
@@ -1,9 +1,9 @@
-#ifndef ACOUSTIC_SOLVER_HPP
-#define ACOUSTIC_SOLVER_HPP
+#ifndef ACOUSTIC_SOLVER_CLASS_HPP
+#define ACOUSTIC_SOLVER_CLASS_HPP
 
 #include <Kokkos_Core.hpp>
 
-class AcousticSolver 
+class AcousticSolverClass
 {
 private:
   inline const Kokkos::View<const double*>
@@ -78,7 +78,7 @@ private:
 
 
 public:
-  AcousticSolver(const long int& nj);
+  AcousticSolverClass(const long int& nj);
 };
 
-#endif // ACOUSTIC_SOLVER_HPP
+#endif // ACOUSTIC_SOLVER_CLASS_HPP
diff --git a/experimental/AcousticSolverTest.cpp b/src/experimental/AcousticSolverTest.cpp
similarity index 100%
rename from experimental/AcousticSolverTest.cpp
rename to src/experimental/AcousticSolverTest.cpp
diff --git a/experimental/AcousticSolverTest.hpp b/src/experimental/AcousticSolverTest.hpp
similarity index 100%
rename from experimental/AcousticSolverTest.hpp
rename to src/experimental/AcousticSolverTest.hpp
diff --git a/experimental/CMakeLists.txt b/src/experimental/CMakeLists.txt
similarity index 93%
rename from experimental/CMakeLists.txt
rename to src/experimental/CMakeLists.txt
index 35eeea33d4e73abd2217fa5f8e57f754ec52d3be..1c6043787ec8d6809e233214fc57a465618eddc8 100644
--- a/experimental/CMakeLists.txt
+++ b/src/experimental/CMakeLists.txt
@@ -8,7 +8,7 @@ include_directories(${PASTIS_SOURCE_DIR}/packages/rang/include)
 
 add_library(
   PastisExperimental
-  AcousticSolver.cpp
+  AcousticSolverClass.cpp
   AcousticSolverTest.cpp
   RawKokkosAcousticSolver.cpp
   MeshLessAcousticSolver.cpp
diff --git a/experimental/MeshLessAcousticSolver.cpp b/src/experimental/MeshLessAcousticSolver.cpp
similarity index 100%
rename from experimental/MeshLessAcousticSolver.cpp
rename to src/experimental/MeshLessAcousticSolver.cpp
diff --git a/experimental/MeshLessAcousticSolver.hpp b/src/experimental/MeshLessAcousticSolver.hpp
similarity index 100%
rename from experimental/MeshLessAcousticSolver.hpp
rename to src/experimental/MeshLessAcousticSolver.hpp
diff --git a/experimental/RawKokkosAcousticSolver.cpp b/src/experimental/RawKokkosAcousticSolver.cpp
similarity index 100%
rename from experimental/RawKokkosAcousticSolver.cpp
rename to src/experimental/RawKokkosAcousticSolver.cpp
diff --git a/experimental/RawKokkosAcousticSolver.hpp b/src/experimental/RawKokkosAcousticSolver.hpp
similarity index 100%
rename from experimental/RawKokkosAcousticSolver.hpp
rename to src/experimental/RawKokkosAcousticSolver.hpp
diff --git a/main.cpp b/src/main.cpp
similarity index 89%
rename from main.cpp
rename to src/main.cpp
index 60a288255f8b3d00c8f20eebadc1053a2693c30c..2fabe282c7fb78d8dcf51b6f4a35cd41e4632926 100644
--- a/main.cpp
+++ b/src/main.cpp
@@ -6,13 +6,14 @@
 #include <SignalManager.hpp>
 #include <ConsoleManager.hpp>
 
-#include <RawKokkosAcousticSolver.hpp>
-#include <MeshLessAcousticSolver.hpp>
-#include <AcousticSolver.hpp>
-#include <AcousticSolverTest.hpp>
+// #include <RawKokkosAcousticSolver.hpp>
+// #include <MeshLessAcousticSolver.hpp>
+// #include <AcousticSolverClass.hpp>
+// #include <AcousticSolverTest.hpp>
 
 #include <Connectivity1D.hpp>
-#include <AcousticSolverWithMesh.hpp>
+#include <Mesh.hpp>
+#include <AcousticSolver.hpp>
 
 #include <TinyVector.hpp>
 #include <TinyMatrix.hpp>
@@ -102,16 +103,16 @@ int main(int argc, char *argv[])
   // { // class for acoustic solver
   //   Kokkos::Timer timer;
   //   timer.reset();
-  //   AcousticSolver acoustic_solver(number);
-  //   method_cost_map["AcousticSolver"] = timer.seconds();
+  //   AcousticSolverClass acoustic_solver(number);
+  //   method_cost_map["AcousticSolverClass"] = timer.seconds();
   // }
 
-  { // class for acoustic solver test
-    Kokkos::Timer timer;
-    timer.reset();
-    AcousticSolverTest acoustic_solver(number);
-    method_cost_map["AcousticSolverTest"] = timer.seconds();
-  }
+  // { // class for acoustic solver test
+  //   Kokkos::Timer timer;
+  //   timer.reset();
+  //   AcousticSolverTest acoustic_solver(number);
+  //   method_cost_map["AcousticSolverTest"] = timer.seconds();
+  // }
 
 
   { // class for acoustic solver test
@@ -128,7 +129,9 @@ int main(int argc, char *argv[])
 
     unknowns.initializeSod();
 
-    AcousticSolverWithMesh<MeshDataType> acoustic_solver(mesh_data, unknowns);
+    AcousticSolver<MeshDataType> acoustic_solver(mesh_data, unknowns);
+
+    typedef TinyVector<MeshType::dimension> Rd;
 
     const Kokkos::View<const double*> Vj = mesh_data.Vj();
     const Kokkos::View<const Rd**> Cjr = mesh_data.Cjr();
diff --git a/experimental/Connectivity1D.hpp b/src/mesh/Connectivity1D.hpp
similarity index 98%
rename from experimental/Connectivity1D.hpp
rename to src/mesh/Connectivity1D.hpp
index 8af879957dc3cd74cddb65dcb2faac1af6733631..01c9368b80697f46a3a137420d538a45a7b1f8de 100644
--- a/experimental/Connectivity1D.hpp
+++ b/src/mesh/Connectivity1D.hpp
@@ -18,8 +18,8 @@ private:
   const Kokkos::View<unsigned int*[2]>& m_cell_faces;
 
   Kokkos::View<unsigned short*> m_cell_nb_nodes;
-  const Kokkos::View<unsigned short*> m_cell_nb_faces;
   Kokkos::View<double*> m_inv_cell_nb_nodes;
+  const Kokkos::View<unsigned short*>& m_cell_nb_faces;
 
   Kokkos::View<unsigned short*> m_node_nb_cells;
   const Kokkos::View<unsigned short*>& m_face_nb_cells;
diff --git a/experimental/Mesh.hpp b/src/mesh/Mesh.hpp
similarity index 95%
rename from experimental/Mesh.hpp
rename to src/mesh/Mesh.hpp
index f199266b5ce8efef07d946a40134690233ae8952..cf199a9d52a048910a76503e84b0cdfb95588b49 100644
--- a/experimental/Mesh.hpp
+++ b/src/mesh/Mesh.hpp
@@ -38,7 +38,6 @@ public:
     return m_connectivity.numberOfCells();
   }
 
-  #warning PASSER CES NOUVEAUX VECTEURS EN CONST
   Kokkos::View<Rd*> xr() const
   {
     return m_xr;
diff --git a/experimental/MeshData.hpp b/src/mesh/MeshData.hpp
similarity index 100%
rename from experimental/MeshData.hpp
rename to src/mesh/MeshData.hpp
index d4b4d28020e4cfbc5a078a9c68eeeed865f7d053..bed5cf97e0c7ed3a0ee60a14b6eaa35c83907d2d 100644
--- a/experimental/MeshData.hpp
+++ b/src/mesh/MeshData.hpp
@@ -10,11 +10,11 @@ class MeshData
 public:
   typedef M MeshType;
 
-  typedef TinyVector<dimension> Rd;
-
   static constexpr size_t dimension = MeshType::dimension;
   static_assert(dimension>0, "dimension must be strictly positive");
 
+  typedef TinyVector<dimension> Rd;
+
   static constexpr double inv_dimension = 1./dimension;
 
 private:
diff --git a/experimental/AcousticSolverWithMesh.hpp b/src/scheme/AcousticSolver.hpp
similarity index 97%
rename from experimental/AcousticSolverWithMesh.hpp
rename to src/scheme/AcousticSolver.hpp
index f035ced50369f19aeb9a0427781e68f43f0bd4ff..6c6fcdeaefc904f619a56ce3ca6ab7aa898db484 100644
--- a/experimental/AcousticSolverWithMesh.hpp
+++ b/src/scheme/AcousticSolver.hpp
@@ -1,5 +1,5 @@
-#ifndef ACOUSTIC_SOLVER_WITH_MESH_HPP
-#define ACOUSTIC_SOLVER_WITH_MESH_HPP
+#ifndef ACOUSTIC_SOLVER_HPP
+#define ACOUSTIC_SOLVER_HPP
 
 #include <Kokkos_Core.hpp>
 
@@ -13,7 +13,7 @@
 #include <FiniteVolumesEulerUnknowns.hpp>
 
 template<typename MeshData>
-class AcousticSolverWithMesh 
+class AcousticSolver 
 {
   typedef typename MeshData::MeshType MeshType;
   typedef FiniteVolumesEulerUnknowns<MeshData> UnknownsType;
@@ -213,8 +213,8 @@ private:
   Kokkos::View<double*> m_Vj_over_cj;
 
 public:
-  AcousticSolverWithMesh(MeshData& mesh_data,
-			 UnknownsType& unknowns)
+  AcousticSolver(MeshData& mesh_data,
+		 UnknownsType& unknowns)
     : m_mesh_data(mesh_data),
       m_mesh(mesh_data.mesh()),
       m_connectivity(m_mesh.connectivity()),
@@ -300,4 +300,4 @@ public:
   }
 };
 
-#endif // ACOUSTIC_SOLVER_WITH_MESH_HPP
+#endif // ACOUSTIC_SOLVER_HPP
diff --git a/experimental/BlockPerfectGas.hpp b/src/scheme/BlockPerfectGas.hpp
similarity index 100%
rename from experimental/BlockPerfectGas.hpp
rename to src/scheme/BlockPerfectGas.hpp
diff --git a/experimental/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp
similarity index 100%
rename from experimental/FiniteVolumesEulerUnknowns.hpp
rename to src/scheme/FiniteVolumesEulerUnknowns.hpp
diff --git a/utils/BacktraceManager.cpp b/src/utils/BacktraceManager.cpp
similarity index 100%
rename from utils/BacktraceManager.cpp
rename to src/utils/BacktraceManager.cpp
diff --git a/utils/BacktraceManager.hpp b/src/utils/BacktraceManager.hpp
similarity index 100%
rename from utils/BacktraceManager.hpp
rename to src/utils/BacktraceManager.hpp
diff --git a/utils/CMakeLists.txt b/src/utils/CMakeLists.txt
similarity index 82%
rename from utils/CMakeLists.txt
rename to src/utils/CMakeLists.txt
index e8877d862b05e786c0e3d3b65cad217c89b03296..935d1577a5f5935341132dce5bb5c21b169370d5 100644
--- a/utils/CMakeLists.txt
+++ b/src/utils/CMakeLists.txt
@@ -53,9 +53,9 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision
   VERBATIM
   )
 
-# --------- check git revision info at build ----------
+# ----------------- get version info ------------------
 
-configure_file("${PASTIS_SOURCE_DIR}/utils/pastis_version.hpp.in"
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_version.hpp.in"
   "${CMAKE_CURRENT_BINARY_DIR}/pastis_version.hpp"
   @ONLY)
 
@@ -77,3 +77,13 @@ add_dependencies(
   PastisUtils
   PastisGitRevison)
 
+# ---------------- Checks for includes ----------------
+
+# Checks for FPE
+include(CheckIncludeFile)
+check_include_file(fenv.h PASTIS_HAS_FENV_H)
+
+# Generates pastis_config.hpp
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_config.hpp.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/pastis_config.hpp"
+  @ONLY)
diff --git a/utils/ConsoleManager.cpp b/src/utils/ConsoleManager.cpp
similarity index 100%
rename from utils/ConsoleManager.cpp
rename to src/utils/ConsoleManager.cpp
diff --git a/utils/ConsoleManager.hpp b/src/utils/ConsoleManager.hpp
similarity index 100%
rename from utils/ConsoleManager.hpp
rename to src/utils/ConsoleManager.hpp
diff --git a/utils/FPEManager.cpp b/src/utils/FPEManager.cpp
similarity index 100%
rename from utils/FPEManager.cpp
rename to src/utils/FPEManager.cpp
diff --git a/utils/FPEManager.hpp b/src/utils/FPEManager.hpp
similarity index 100%
rename from utils/FPEManager.hpp
rename to src/utils/FPEManager.hpp
diff --git a/utils/RevisionInfo.cpp b/src/utils/RevisionInfo.cpp
similarity index 100%
rename from utils/RevisionInfo.cpp
rename to src/utils/RevisionInfo.cpp
diff --git a/utils/RevisionInfo.hpp b/src/utils/RevisionInfo.hpp
similarity index 100%
rename from utils/RevisionInfo.hpp
rename to src/utils/RevisionInfo.hpp
diff --git a/utils/SignalManager.cpp b/src/utils/SignalManager.cpp
similarity index 100%
rename from utils/SignalManager.cpp
rename to src/utils/SignalManager.cpp
diff --git a/utils/SignalManager.hpp b/src/utils/SignalManager.hpp
similarity index 100%
rename from utils/SignalManager.hpp
rename to src/utils/SignalManager.hpp
diff --git a/utils/Types.hpp b/src/utils/Types.hpp
similarity index 100%
rename from utils/Types.hpp
rename to src/utils/Types.hpp
diff --git a/pastis_config.hpp.in b/src/utils/pastis_config.hpp.in
similarity index 100%
rename from pastis_config.hpp.in
rename to src/utils/pastis_config.hpp.in
diff --git a/utils/pastis_git_revision.hpp.in b/src/utils/pastis_git_revision.hpp.in
similarity index 100%
rename from utils/pastis_git_revision.hpp.in
rename to src/utils/pastis_git_revision.hpp.in
diff --git a/utils/pastis_version.hpp.in b/src/utils/pastis_version.hpp.in
similarity index 100%
rename from utils/pastis_version.hpp.in
rename to src/utils/pastis_version.hpp.in