diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4100a81826c6cc209314953baae9794f36e428a1..53de7c32fcfd6793b235ffa2dc4d219e4d140db6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -122,7 +122,6 @@ SET(${PROJECT_NAME}_HEADERS
   include/hpp/fcl/BV/kDOP.h
   include/hpp/fcl/narrowphase/narrowphase.h
   include/hpp/fcl/narrowphase/gjk.h
-  include/hpp/fcl/shape/geometric_shapes_utility.h
   include/hpp/fcl/shape/geometric_shape_to_BVH_model.h
   include/hpp/fcl/shape/geometric_shapes.h
   include/hpp/fcl/distance_func_matrix.h
diff --git a/include/hpp/fcl/BVH/BVH_model.h b/include/hpp/fcl/BVH/BVH_model.h
index 66005904e48a6548a2c5345213c6c5e5929e5dd8..d6d200334f6a094f27c307b57c57d095cefb30d7 100644
--- a/include/hpp/fcl/BVH/BVH_model.h
+++ b/include/hpp/fcl/BVH/BVH_model.h
@@ -41,8 +41,6 @@
 #include <hpp/fcl/collision_object.h>
 #include <hpp/fcl/BVH/BVH_internal.h>
 #include <hpp/fcl/BV/BV_node.h>
-#include "../../src/BVH/BV_splitter.h"
-#include "../../src/BVH/BV_fitter.h"
 #include <vector>
 #include <boost/shared_ptr.hpp>
 #include <boost/noncopyable.hpp>
@@ -54,6 +52,9 @@ namespace fcl
 
 class ConvexBase;
 
+template <typename BV> class BVFitter;
+template <typename BV> class BVSplitter;
+
 /// @brief A base class describing the bounding hierarchy of a mesh model or a point cloud model (which is viewed as a degraded version of mesh)
 class BVHModelBase : public CollisionGeometry
 {
@@ -258,15 +259,7 @@ public:
   boost::shared_ptr<BVFitter<BV> > bv_fitter;
 
   /// @brief Constructing an empty BVH
-  BVHModel() : BVHModelBase (),
-               bv_splitter(new BVSplitter<BV>(SPLIT_METHOD_MEAN)),
-               bv_fitter(new BVFitter<BV>()),
-               num_bvs_allocated(0),
-               primitive_indices(NULL),
-               bvs(NULL),
-               num_bvs(0)
-  {
-  }
+  BVHModel();
 
   /// @brief copy from another BVH
   BVHModel(const BVHModel& other);
diff --git a/src/BVH/BVH_model.cpp b/src/BVH/BVH_model.cpp
index 11379c84056afcf50c189bb33a480498d7f082e1..281656f101b63193b86a43c6856aa6a0de9ba258 100644
--- a/src/BVH/BVH_model.cpp
+++ b/src/BVH/BVH_model.cpp
@@ -36,11 +36,16 @@
 /** \author Jia Pan */
 
 #include <hpp/fcl/BVH/BVH_model.h>
-#include <hpp/fcl/BV/BV.h>
-#include <hpp/fcl/shape/convex.h>
+
 #include <iostream>
 #include <string.h>
 
+#include <hpp/fcl/BV/BV.h>
+#include <hpp/fcl/shape/convex.h>
+
+#include "../../src/BVH/BV_splitter.h"
+#include "../../src/BVH/BV_fitter.h"
+
 namespace hpp
 {
 namespace fcl
@@ -630,6 +635,20 @@ void BVHModelBase::computeLocalAABB()
   aabb_local = aabb_;
 }
 
+
+  /// @brief Constructing an empty BVH
+template<typename BV>
+BVHModel<BV>::BVHModel() :
+  BVHModelBase (),
+  bv_splitter(new BVSplitter<BV>(SPLIT_METHOD_MEAN)),
+  bv_fitter(new BVFitter<BV>()),
+  num_bvs_allocated(0),
+  primitive_indices(NULL),
+  bvs(NULL),
+  num_bvs(0)
+{
+}
+
 template<typename BV>
 void BVHModel<BV>::deleteBVs()
 {
@@ -1015,11 +1034,6 @@ NODE_TYPE BVHModel<KDOP<24> >::getNodeType() const
   return BV_KDOP24;
 }
 
-
-
-
-
-
 template class BVHModel<KDOP<16> >;
 template class BVHModel<KDOP<18> >;
 template class BVHModel<KDOP<24> >;
@@ -1028,6 +1042,7 @@ template class BVHModel<AABB>;
 template class BVHModel<RSS>;
 template class BVHModel<kIOS>;
 template class BVHModel<OBBRSS>;
-}
+
+} // namespace fcl
 
 } // namespace hpp
diff --git a/src/BVH/BVH_utility.cpp b/src/BVH/BVH_utility.cpp
index b1f2f7bef3ad94d6b1ca9879857c95aa4634a668..c3ac12c76dc9007e60ee5222682ebf770419f4ce 100644
--- a/src/BVH/BVH_utility.cpp
+++ b/src/BVH/BVH_utility.cpp
@@ -38,7 +38,7 @@
 
 #include <hpp/fcl/BVH/BVH_utility.h>
 #include <hpp/fcl/narrowphase/narrowphase.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
+#include "../src/shape/geometric_shapes_utility.h"
 
 namespace hpp
 {
diff --git a/src/narrowphase/narrowphase.cpp b/src/narrowphase/narrowphase.cpp
index f0b29a7270df353702081fcd2ae819fb332fcc34..e8e05b76e693eff8c2dca66e5a374205e949f257 100644
--- a/src/narrowphase/narrowphase.cpp
+++ b/src/narrowphase/narrowphase.cpp
@@ -36,10 +36,12 @@
 /** \author Jia Pan */
 
 #include <hpp/fcl/narrowphase/narrowphase.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
-#include "../intersect.h"
-#include <boost/math/constants/constants.hpp>
+
 #include <vector>
+#include <boost/math/constants/constants.hpp>
+
+#include "../src/shape/geometric_shapes_utility.h"
+#include "../src/intersect.h"
 #include "../src/narrowphase/details.h"
 
 namespace hpp
diff --git a/src/shape/geometric_shapes.cpp b/src/shape/geometric_shapes.cpp
index ddf0cb4febe3b12f963e78f612fc98d082d3ee0b..eb9cc27428a17aca293de1742eb65827e9729c93 100644
--- a/src/shape/geometric_shapes.cpp
+++ b/src/shape/geometric_shapes.cpp
@@ -37,7 +37,7 @@
 
 
 #include <hpp/fcl/shape/geometric_shapes.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
+#include "../src/shape/geometric_shapes_utility.h"
 
 namespace hpp
 {
diff --git a/src/shape/geometric_shapes_utility.cpp b/src/shape/geometric_shapes_utility.cpp
index b02f952317b493b36697e336f9a79f09a6421fe2..1bd29f4b6657e52e6247b9fc6eefab741a37297c 100644
--- a/src/shape/geometric_shapes_utility.cpp
+++ b/src/shape/geometric_shapes_utility.cpp
@@ -36,7 +36,7 @@
 /** \author Jia Pan */
 
 
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
+#include "../src/shape/geometric_shapes_utility.h"
 #include "../BVH/BV_fitter.h"
 #include "../math/tools.h"
 
diff --git a/include/hpp/fcl/shape/geometric_shapes_utility.h b/src/shape/geometric_shapes_utility.h
similarity index 99%
rename from include/hpp/fcl/shape/geometric_shapes_utility.h
rename to src/shape/geometric_shapes_utility.h
index c29a903c8e40bd853f58a63dc5dc3f932b43a2d6..2a6a2ba62d8670cf2b461b56ffa1b51e9031a54e 100644
--- a/include/hpp/fcl/shape/geometric_shapes_utility.h
+++ b/src/shape/geometric_shapes_utility.h
@@ -43,6 +43,8 @@
 #include <hpp/fcl/shape/geometric_shapes.h>
 #include <hpp/fcl/BV/BV.h>
 
+#include "../src/BVH/BV_fitter.h"
+
 namespace hpp
 {
 namespace fcl
diff --git a/src/traversal/traversal_node_bvh_shape.h b/src/traversal/traversal_node_bvh_shape.h
index e931a392748039f7ef84fdd0f56724df8af1f91d..b01351ac562581a0f09aef6e824a28091fb2ca75 100644
--- a/src/traversal/traversal_node_bvh_shape.h
+++ b/src/traversal/traversal_node_bvh_shape.h
@@ -41,7 +41,7 @@
 
 #include <hpp/fcl/collision_data.h>
 #include <hpp/fcl/shape/geometric_shapes.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
+#include "../src/shape/geometric_shapes_utility.h"
 #include "traversal_node_base.h"
 #include "details/traversal.h"
 #include <hpp/fcl/BVH/BVH_model.h>
diff --git a/src/traversal/traversal_node_octree.h b/src/traversal/traversal_node_octree.h
index c8f0f52220c39f9babaf1082b429ebcfcd0ebacf..142531ef98a232910073b66ea5e0c9232be944f5 100644
--- a/src/traversal/traversal_node_octree.h
+++ b/src/traversal/traversal_node_octree.h
@@ -41,9 +41,9 @@
 #include <hpp/fcl/collision_data.h>
 #include "traversal_node_base.h"
 #include <hpp/fcl/narrowphase/narrowphase.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
 #include <hpp/fcl/octree.h>
 #include <hpp/fcl/BVH/BVH_model.h>
+#include "../src/shape/geometric_shapes_utility.h"
 
 namespace hpp
 {
diff --git a/src/traversal/traversal_node_shapes.h b/src/traversal/traversal_node_shapes.h
index 902527343c5e3bba0a56e595c8558330dc68892c..4344c4e57e3673681b736ba42fd0b2391583a705 100644
--- a/src/traversal/traversal_node_shapes.h
+++ b/src/traversal/traversal_node_shapes.h
@@ -42,9 +42,8 @@
 #include <hpp/fcl/collision_data.h>
 #include "traversal_node_base.h"
 #include <hpp/fcl/narrowphase/narrowphase.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
 #include <hpp/fcl/BV/BV.h>
-#include <hpp/fcl/shape/geometric_shapes_utility.h>
+#include "../src/shape/geometric_shapes_utility.h"
 
 namespace hpp
 {
diff --git a/test/benchmark.cpp b/test/benchmark.cpp
index f3a16334fcee0cec289ae72ec9075c927943fec3..21e4cae7b1ce4cea14cfc730bf069e45c43ed9f1 100644
--- a/test/benchmark.cpp
+++ b/test/benchmark.cpp
@@ -14,12 +14,15 @@
 // received a copy of the GNU Lesser General Public License along with
 // hpp-fcl. If not, see <http://www.gnu.org/licenses/>.
 
+#include <boost/filesystem.hpp>
+
 #include "../src/traversal/traversal_node_setup.h"
 #include "../src/traversal/traversal_node_bvhs.h"
-#include <../src/collision_node.h>
+#include "../src/collision_node.h"
+#include "../src/BVH/BV_splitter.h"
+
 #include "utility.h"
 #include "fcl_resources/config.h"
-#include <boost/filesystem.hpp>
 
 #define RUN_CASE(BV,tf,models,split) \
   run<BV>(tf, models, split, #BV " - " #split ":\t")
diff --git a/test/collision.cpp b/test/collision.cpp
index d28452d9eb2afaa7e7b2aa6326dac7da466e0404..2cc491807b305983783b6c6a960aa932c2e9f945 100644
--- a/test/collision.cpp
+++ b/test/collision.cpp
@@ -44,19 +44,22 @@
 #include <boost/test/unit_test.hpp>
 #include <boost/utility/binary.hpp>
 
+#include <boost/filesystem.hpp>
 #include <boost/assign/list_of.hpp>
 
-#include "../src/traversal/traversal_node_bvhs.h"
-#include "../src/traversal/traversal_node_setup.h"
-#include <../src/collision_node.h>
 #include <hpp/fcl/collision.h>
 #include <hpp/fcl/BV/BV.h>
 #include <hpp/fcl/shape/geometric_shapes.h>
 #include <hpp/fcl/narrowphase/narrowphase.h>
 #include <hpp/fcl/mesh_loader/assimp.h>
+
+#include "../src/traversal/traversal_node_bvhs.h"
+#include "../src/traversal/traversal_node_setup.h"
+#include "../src/collision_node.h"
+#include "../src/BVH/BV_splitter.h"
+
 #include "utility.h"
 #include "fcl_resources/config.h"
-#include <boost/filesystem.hpp>
 
 using namespace hpp::fcl;
 
diff --git a/test/distance.cpp b/test/distance.cpp
index a7457eb6c6329486c181c00843488b6b3147a1aa..eea1eb8b75903e6ac5bfbfeb52379b1c11875726 100644
--- a/test/distance.cpp
+++ b/test/distance.cpp
@@ -39,14 +39,16 @@
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
 #include <boost/utility/binary.hpp>
+#include <boost/timer.hpp>
+#include <boost/filesystem.hpp>
 
 #include "../src/traversal/traversal_node_bvhs.h"
 #include "../src/traversal/traversal_node_setup.h"
-#include <../src/collision_node.h>
+#include "../src/collision_node.h"
+#include "../src/BVH/BV_splitter.h"
+
 #include "utility.h"
-#include <boost/timer.hpp>
 #include "fcl_resources/config.h"
-#include <boost/filesystem.hpp>
 
 using namespace hpp::fcl;
 
diff --git a/test/frontlist.cpp b/test/frontlist.cpp
index b2e9f30039864fdf7312afed9a91df5e05ad7d03..05045b06578beadcdd648754e44b9e97c6c54a71 100644
--- a/test/frontlist.cpp
+++ b/test/frontlist.cpp
@@ -44,6 +44,7 @@
 #include "../src/traversal/traversal_node_bvhs.h"
 #include "../src/traversal/traversal_node_setup.h"
 #include <../src/collision_node.h>
+#include <../src/BVH/BV_splitter.h>
 #include "utility.h"
 
 #include "fcl_resources/config.h"
diff --git a/test/octree.cpp b/test/octree.cpp
index 65507fa0aff8223ac63846b4baa37f1dfb806bc8..406339dcedc7c1202d2176f0817472aac10cf5b0 100644
--- a/test/octree.cpp
+++ b/test/octree.cpp
@@ -38,14 +38,16 @@
 #define BOOST_TEST_DYN_LINK
 #include <fstream>
 #include <boost/test/unit_test.hpp>
+#include <boost/filesystem.hpp>
 
 #include <hpp/fcl/BVH/BVH_model.h>
 #include <hpp/fcl/collision.h>
 #include <hpp/fcl/distance.h>
 #include <hpp/fcl/shape/geometric_shapes.h>
+#include "../src/BVH/BV_splitter.h"
+
 #include "utility.h"
 #include "fcl_resources/config.h"
-#include <boost/filesystem.hpp>
 
 using hpp::fcl::Vec3f;
 using hpp::fcl::Triangle;