diff --git a/benchmark/timings-geometry.cpp b/benchmark/timings-geometry.cpp
index 98dd427f4cb6f19c7b4c750b923250d811059282..db0584db5493b98f8871844de13d50bf65d45c1a 100644
--- a/benchmark/timings-geometry.cpp
+++ b/benchmark/timings-geometry.cpp
@@ -74,7 +74,7 @@ int main()
   se3::GeometryModel geom_model = se3::urdf::buildGeom(model, romeo_filename, package_dirs, COLLISION);
    
   Data data(model);
-  GeometryData geom_data(data, geom_model);
+  GeometryData geom_data(geom_model);
   geom_data.initializeListOfCollisionPairs();
 
 
diff --git a/src/multibody/geometry.hpp b/src/multibody/geometry.hpp
index f3060806661eaf70f06fd757785283121961d3ce..f77a1e34188686c5d05b473db2d5f2dc8e9c9302 100644
--- a/src/multibody/geometry.hpp
+++ b/src/multibody/geometry.hpp
@@ -244,9 +244,7 @@ struct GeometryObject
     
     typedef std::vector<GeomIndex> GeomIndexList;
 
-    /// \brief A const reference to the reference model.
-    const se3::Model & model;
-
+    
     /// \brief The number of GeometryObjects
     Index ngeoms;
 
@@ -261,9 +259,8 @@ struct GeometryObject
     ///        Outer objects can be seen as geometry objects that may often be obstacles to the Inner objects of given joint
     std::map < JointIndex, GeomIndexList >  outerObjects;
 
-    GeometryModel(const se3::Model & model)
-      : model(model)
-      , ngeoms(0)
+    GeometryModel()
+      : ngeoms(0)
       , geometryObjects()
       , innerObjects()
       , outerObjects()
@@ -344,11 +341,6 @@ struct GeometryObject
     typedef CollisionPair CollisionPair_t;
     typedef std::vector<CollisionPair_t> CollisionPairsVector_t;
 
-    ///
-    /// \brief A const reference to the data associated to the robot model.
-    ///        See class Data.
-    ///
-    const Data & data_ref;
     
     ///
     /// \brief A const reference to the model storing all the geometries.
@@ -388,9 +380,8 @@ struct GeometryObject
     ///
     std::vector <CollisionResult> collision_results;
 
-    GeometryData(const Data & data, const GeometryModel & model_geom)
-        : data_ref(data)
-        , model_geom(model_geom)
+    GeometryData(const GeometryModel & model_geom)
+        : model_geom(model_geom)
         , oMg(model_geom.ngeoms)
         , oMg_fcl(model_geom.ngeoms)
         , collision_pairs()
diff --git a/src/multibody/geometry.hxx b/src/multibody/geometry.hxx
index 6b714c52c750d840bd7e1d41defecd00f9347d5e..05b71ccdc99b7cf190838fa8370f6217d6dfa667 100644
--- a/src/multibody/geometry.hxx
+++ b/src/multibody/geometry.hxx
@@ -145,6 +145,9 @@ namespace se3
     {
       collision_pairs.push_back(pair);
       nCollisionPairs++;
+
+      distance_results.push_back(DistanceResult( fcl::DistanceResult(), 0, 0));
+      collision_results.push_back(CollisionResult( fcl::CollisionResult(), 0, 0));
     }
   }
   
diff --git a/src/parsers/srdf.hpp b/src/parsers/srdf.hpp
index 52736cd1c303e5683caca276418dd52ea750ae40..aa82fa354d0a2baf6aaa96b9d35a6bd051d40d35 100644
--- a/src/parsers/srdf.hpp
+++ b/src/parsers/srdf.hpp
@@ -41,7 +41,8 @@ namespace se3
     /// \param[in] filename The complete path to the SRDF file.
     /// \param[in] verbose Verbosity mode.
     ///
-    inline void removeCollisionPairsFromSrdf(const GeometryModel & model_geom,
+    inline void removeCollisionPairsFromSrdf(const Model& model,
+                                             const GeometryModel & model_geom,
                                              GeometryData & data_geom,
                                              const std::string & filename,
                                              const bool verbose) throw (std::invalid_argument)
@@ -68,7 +69,6 @@ namespace se3
       read_xml(srdf_stream, pt);
       
       // Iterate over collision pairs
-      const se3::Model & model = model_geom.model;
       BOOST_FOREACH(const ptree::value_type & v, pt.get_child("robot"))
       {
         if (v.first == "disable_collisions")
diff --git a/src/parsers/urdf/geometry.hxx b/src/parsers/urdf/geometry.hxx
index 90130f92121704a8974db90e9d16da0fdc488796..006586aebc974dd00e666004aee9b3a74df908a1 100644
--- a/src/parsers/urdf/geometry.hxx
+++ b/src/parsers/urdf/geometry.hxx
@@ -217,7 +217,7 @@ namespace se3
         throw std::invalid_argument(exception_message);
       }
 
-      GeometryModel model_geom(model);
+      GeometryModel model_geom;
 
       std::vector<std::string> hint_directories(package_dirs);
 
diff --git a/src/python/geometry-data.hpp b/src/python/geometry-data.hpp
index 7d68d343527a4df67e176f46e4a799ab73abed8d..35225c0c69b249a8b0798fee081c82dac5479634 100644
--- a/src/python/geometry-data.hpp
+++ b/src/python/geometry-data.hpp
@@ -89,8 +89,8 @@ namespace se3
         .def("__init__",
              bp::make_constructor(&GeometryDataPythonVisitor::makeDefault,
                                   bp::default_call_policies(),
-                                  (bp::arg("data"),bp::arg("geometry_model"))),
-             "Initialize from data and the geometry model.")
+                                  (bp::arg("geometry_model"))),
+             "Initialize from the geometry model.")
         
         .add_property("nCollisionPairs", &GeometryDataPythonVisitor::nCollisionPairs)
         
@@ -155,9 +155,9 @@ namespace se3
         ;
       }
       
-      static GeometryDataHandler* makeDefault(const DataHandler & data, const GeometryModelHandler & geometry_model)
+      static GeometryDataHandler* makeDefault(const GeometryModelHandler & geometry_model)
       {
-        return new GeometryDataHandler(new GeometryData(*data, *geometry_model), true);
+        return new GeometryDataHandler(new GeometryData(*geometry_model), true);
       }
 
       static Index nCollisionPairs(const GeometryDataHandler & m ) { return m->nCollisionPairs; }
diff --git a/src/python/geometry-model.hpp b/src/python/geometry-model.hpp
index 3c5698bbcd0b211bb7aa7d0c304e6628ad96bb96..b9f1a67c4a72883d33ae4c07b780ce818753385c 100644
--- a/src/python/geometry-model.hpp
+++ b/src/python/geometry-model.hpp
@@ -91,9 +91,9 @@ namespace se3
       
       
 
-      static GeometryModelHandler maker_default(const ModelHandler & model)
+      static GeometryModelHandler maker_default()
       {
-        return GeometryModelHandler(new GeometryModel(*model), true);
+        return GeometryModelHandler(new GeometryModel(), true);
       }
  
 
diff --git a/src/python/parsers.hpp b/src/python/parsers.hpp
index 485d438e7fd6e0d9e9ba53235a48391039311c20..7464a2dbf8483b230f4f966477736a8351c2eac9 100644
--- a/src/python/parsers.hpp
+++ b/src/python/parsers.hpp
@@ -111,13 +111,14 @@ namespace se3
         return GeometryModelHandler(geometry_model, true);
       }
       
-      static void removeCollisionPairsFromSrdf(GeometryModelHandler & model,
+      static void removeCollisionPairsFromSrdf(ModelHandler & model,
+                                               GeometryModelHandler& geometry_model,
                                                GeometryDataHandler & geometry_data,
                                                const std::string & filename,
                                                bool verbose
                                                )
       {
-        se3::srdf::removeCollisionPairsFromSrdf(*model, *geometry_data, filename, verbose);
+        se3::srdf::removeCollisionPairsFromSrdf(*model, *geometry_model ,*geometry_data, filename, verbose);
       }
 
 #endif // #ifdef WITH_HPP_FCL
@@ -184,7 +185,7 @@ namespace se3
               "(remember to create the corresponding data structures).");
       
       bp::def("removeCollisionPairsFromSrdf",removeCollisionPairsFromSrdf,
-              bp::args("GeometryModel associated to a GeometryData", "GeometryData for which we want to remove pairs of collision", "srdf filename (string)", "verbosity"
+              bp::args("Model associated to GeometryData", "GeometryModel associated to a GeometryData", "GeometryData for which we want to remove pairs of collision", "srdf filename (string)", "verbosity"
                        ),
               "Parse an srdf file in order to desactivate collision pairs for a specific GeometryData and GeometryModel ");
 
diff --git a/src/python/robot_wrapper.py b/src/python/robot_wrapper.py
index 1b5cf37429708d08e65b784501b3c8fa305d36e9..99d0706113247604709880c3d127f843d9b76e78 100644
--- a/src/python/robot_wrapper.py
+++ b/src/python/robot_wrapper.py
@@ -51,7 +51,7 @@ class RobotWrapper(object):
                                                                 utils.fromListToVectorOfString(package_dirs), se3.GeometryType.COLLISION)
                     self.visual_model = se3.buildGeomFromUrdf(self.model, filename,
                                                                 utils.fromListToVectorOfString(package_dirs), se3.GeometryType.VISUAL)
-                    self.collision_data = se3.GeometryData(self.data, self.collision_model)
+                    self.collision_data = se3.GeometryData(self.collision_model)
 
         self.v0 = utils.zero(self.nv)
         self.q0 = utils.zero(self.nq)
diff --git a/unittest/geom.cpp b/unittest/geom.cpp
index 82cc738eb0923554830ea78a5981af07367f8f28..55cf86d7a855af3b599c45dd7aa01a7e04654177 100644
--- a/unittest/geom.cpp
+++ b/unittest/geom.cpp
@@ -144,7 +144,7 @@ BOOST_AUTO_TEST_SUITE ( GeomTest )
 BOOST_AUTO_TEST_CASE ( simple_boxes )
 {
   se3::Model model;
-  se3::GeometryModel model_geom(model);
+  se3::GeometryModel model_geom;
   
   using namespace se3;
 
@@ -162,7 +162,7 @@ BOOST_AUTO_TEST_CASE ( simple_boxes )
   model_geom.addGeometryObject(model.getJointId("planar2_joint"),box2, SE3::Identity(),  "ff2_collision_object", "");
 
   se3::Data data(model);
-  se3::GeometryData data_geom(data, model_geom);
+  se3::GeometryData data_geom(model_geom);
 
   std::cout << "------ Model ------ " << std::endl;
   std::cout << model;
@@ -212,7 +212,7 @@ BOOST_AUTO_TEST_CASE ( loading_model )
   GeometryModel geometry_model = se3::urdf::buildGeom(model, filename, package_dirs, se3::COLLISION);
 
   Data data(model);
-  GeometryData geometry_data(data, geometry_model);
+  GeometryData geometry_data(geometry_model);
 
   Eigen::VectorXd q(model.nq);
   q << 0, 0, 0.840252, 0, 0, 0, 1, 0, 0, -0.3490658, 0.6981317, -0.3490658, 0, 0, 0, -0.3490658,
@@ -254,7 +254,7 @@ BOOST_AUTO_TEST_CASE ( romeo_joints_meshes_positions )
 
 
   Data data(model);
-  GeometryData data_geom(data, geom);
+  GeometryData data_geom(geom);
 
   // Configuration to be tested
   
@@ -362,7 +362,7 @@ BOOST_AUTO_TEST_CASE ( hrp2_mesh_distance)
 
 
   Data data(model);
-  GeometryData data_geom(data, geom);
+  GeometryData data_geom(geom);
 
   // Configuration to be tested