diff --git a/trunk/fcl/include/fcl/collision_object.h b/trunk/fcl/include/fcl/collision_object.h
index 77f603bd52c0ed4d35d9ac038a6989d54014fffb..e8a6ee9b8a52ea904d1022ca8e58b753c7cf8929 100644
--- a/trunk/fcl/include/fcl/collision_object.h
+++ b/trunk/fcl/include/fcl/collision_object.h
@@ -84,24 +84,17 @@ public:
 class CollisionObject
 {
 public:
-  CollisionObject(CollisionGeometry* cgeom_)
+  CollisionObject(const boost::shared_ptr<CollisionGeometry> &cgeom_) : cgeom(cgeom_)
   {
-    cgeom.reset(cgeom_);
-    computeAABB();
   }
 
-  CollisionObject(CollisionGeometry* cgeom_, const SimpleTransform& tf)
+  CollisionObject(const boost::shared_ptr<CollisionGeometry> &cgeom_, const SimpleTransform& tf) : cgeom(cgeom_), t(tf)
   {
-    cgeom.reset(cgeom_);
-    t = tf;
-    computeAABB();
   }
 
-  CollisionObject(CollisionGeometry* cgeom_, const Matrix3f& R, const Vec3f& T)
+  CollisionObject(const boost::shared_ptr<CollisionGeometry> &cgeom_, const Matrix3f& R, const Vec3f& T):
+      cgeom(cgeom_), t(SimpleTransform(R, T))
   {
-    cgeom.reset(cgeom_);
-    t = SimpleTransform(R, T);
-    computeAABB();
   }
 
   CollisionObject()
diff --git a/trunk/fcl/test/test_core_broad_phase.cpp b/trunk/fcl/test/test_core_broad_phase.cpp
index 63d33f7c3a7acf65b4178f1b76a658f1ad24d135..ae196f990743d4d772f28c760363bea73d90243e 100644
--- a/trunk/fcl/test/test_core_broad_phase.cpp
+++ b/trunk/fcl/test/test_core_broad_phase.cpp
@@ -222,7 +222,7 @@ void generateEnvironments(std::vector<CollisionObject*>& env, int n)
     BVHModel<OBB>* model = new BVHModel<OBB>();
     box.setLocalTransform(transforms[i].R, transforms[i].T);
     generateBVHModel(*model, box, SimpleTransform());
-    env.push_back(new CollisionObject(model));
+    env.push_back(new CollisionObject(boost::shared_ptr<CollisionGeometry>(model)));
   }
 
   generateRandomTransform(extents, transforms, transforms2, delta_trans, 0.005 * 2 * 3.1415, n);
@@ -232,7 +232,7 @@ void generateEnvironments(std::vector<CollisionObject*>& env, int n)
     BVHModel<OBB>* model = new BVHModel<OBB>();
     sphere.setLocalTransform(transforms[i].R, transforms[i].T);
     generateBVHModel(*model, sphere, SimpleTransform());
-    env.push_back(new CollisionObject(model));
+    env.push_back(new CollisionObject(boost::shared_ptr<CollisionGeometry>(model)));
   }
 
   generateRandomTransform(extents, transforms, transforms2, delta_trans, 0.005 * 2 * 3.1415, n);
@@ -242,6 +242,6 @@ void generateEnvironments(std::vector<CollisionObject*>& env, int n)
     BVHModel<OBB>* model = new BVHModel<OBB>();
     cylinder.setLocalTransform(transforms[i].R, transforms[i].T);
     generateBVHModel(*model, cylinder, SimpleTransform());
-    env.push_back(new CollisionObject(model));
+    env.push_back(new CollisionObject(boost::shared_ptr<CollisionGeometry>(model)));
   }
 }