diff --git a/src/multibody/model.hpp b/src/multibody/model.hpp
index 5bd77d650832b6fc647339b7108aabd2298fc40d..24d7f8fdc2510b1f38dc362b513b0e03ccbdf793 100644
--- a/src/multibody/model.hpp
+++ b/src/multibody/model.hpp
@@ -123,8 +123,8 @@ namespace se3
     const SE3 & getJointToFrameTransform( const std::string & name ) const;
     const SE3 & getJointToFrameTransform( Index index ) const;
 
-    void addFrame ( const Frame & frame );
-    void addFrame ( const std::string & name, Index index, const SE3 & placement );
+    bool addFrame ( const Frame & frame );
+    bool addFrame ( const std::string & name, Index index, const SE3 & placement );
 
   };
 
diff --git a/src/multibody/model.hxx b/src/multibody/model.hxx
index e58a089105f2050ff42b5d43cdfc25a644a1d40e..4e154279bc5d65290ad61094e55b8cfb4dabaf7f 100644
--- a/src/multibody/model.hxx
+++ b/src/multibody/model.hxx
@@ -223,16 +223,26 @@ namespace se3
     return operational_frames[index].frame_placement;
   }
 
-  inline void Model::addFrame ( const Frame & frame )
+  inline bool Model::addFrame ( const Frame & frame )
   {
     if( !existFrame(frame.name) )
-      operational_frames.push_back(frame);nOperationalFrames++;
+    {
+      operational_frames.push_back(frame);
+      nOperationalFrames++;
+      return true;
+    }
+    else
+    {
+      return false;
+    }
   }
 
-  inline void Model::addFrame ( const std::string & name, Index index, const SE3 & placement)
+  inline bool Model::addFrame ( const std::string & name, Index index, const SE3 & placement)
   {
     if( !existFrame(name) )
-      addFrame(Frame(name, index, placement));
+      return addFrame(Frame(name, index, placement));
+    else
+      return false;
   }
 
 
diff --git a/src/python/frame.hpp b/src/python/frame.hpp
index a76df1697a845902b3fbe20196961cb5e877634c..0a709dd0dabc754390e5754b38b1ad746e691f3b 100644
--- a/src/python/frame.hpp
+++ b/src/python/frame.hpp
@@ -49,16 +49,19 @@ namespace se3
           .def(bp::init<const std::string&,Index, const SE3_fx&> ((bp::arg("name"),bp::arg("parent id"), bp::arg("placement")),
                 "Initialize from name, parent id and placement wrt parent joint."))
 
-          .def("name", &FramePythonVisitor::getName)
-          .def("parent_id", &FramePythonVisitor::getParentId)
-          .def("placement", &FramePythonVisitor::getPlcaementWrtParentJoint)
+          .add_property("name", &FramePythonVisitor::getName, &FramePythonVisitor::setName)
+          .add_property("parent_id", &FramePythonVisitor::getParentId, &FramePythonVisitor::setParentId)
+          .add_property("placement", &FramePythonVisitor::getPlacementWrtParentJoint, &FramePythonVisitor::getPlacementWrtParentJoint)
           ;
       }
 
 
       static std::string getName( const Frame & self) { return self.name; }
+      static void setName(Frame & self, const std::string & name) { self.name = name; }
       static Index getParentId( const Frame & self) { return self.parent_id; }
-      static SE3_fx getPlcaementWrtParentJoint( const Frame & self) { return self.frame_placement; }
+      static void setParentId(Frame & self, Index & parent_id) { self.parent_id = parent_id; }
+      static SE3_fx getPlacementWrtParentJoint( const Frame & self) { return self.frame_placement; }
+      static void setPlacementWrtParentJoint(Frame & self, const SE3_fx & placement) { self.frame_placement = placement; }
 
       static void expose()
       {