diff --git a/idl/Graphics/corbaserver/graphicalinterface.idl b/idl/Graphics/corbaserver/graphicalinterface.idl
index ca15ba875eb7f28c9137ba0ae80660dffe954552..758101a3de21e17f200d2a9f372dccc3c16960c3 100644
--- a/idl/Graphics/corbaserver/graphicalinterface.idl
+++ b/idl/Graphics/corbaserver/graphicalinterface.idl
@@ -42,7 +42,10 @@ typedef double Color [4];
        //boolean addSphere(in string sphereName, in float radius) ;
        boolean addSphere(in string sphereName, in float radius, in Color RGBAcolor) ;
 
-       boolean addLine(in string lineName, in Position pos1, in Position pos2, in Color RGBAColor) ;
+       boolean addLine(in string lineName, in Position pos1, in Position pos2, in Color RGBAcolor) ;
+
+       boolean addSquareFace(in string faceName, in Position pos1, in Position pos2, in Position pos3, in Position pos4, in Color RGBAcolor) ;
+       boolean addTriangleFace(in string faceName, in Position pos1, in Position pos2, in Position pos3, in Color RGBAcolor) ;
 
        boolean addURDF(in string urdfName, in string urdfPath, in string urdfPackage) ;
 
diff --git a/src/GraphicalInterface.impl.cpp b/src/GraphicalInterface.impl.cpp
index 7e877844271d56bfee9b4fafcd28e39ee661bcb5..a68263362e4ac48dc177f7cd480b1b4556adbc08 100644
--- a/src/GraphicalInterface.impl.cpp
+++ b/src/GraphicalInterface.impl.cpp
@@ -423,6 +423,43 @@ bool GraphicalInterface::addLine(const char* lineNameCorba, const double* posCor
     }
 }
 
+bool GraphicalInterface::addTriangleFace(const char* faceNameCorba, const double* posCorba1, const double* posCorba2, const double* posCorba3, const double* colorCorba)
+{
+    std::string faceName(faceNameCorba);
+    if (nodes_.find(faceName) != nodes_.end()) {
+        std::cout << "You need to chose an other name, \"" << faceName << "\" already exist." << std::endl;
+        return false;
+    }
+    else {
+        osgVector3 pos1(posCorba1[0], posCorba1[1], posCorba1[2]);
+        osgVector3 pos2(posCorba2[0], posCorba2[1], posCorba2[2]);
+        osgVector3 pos3(posCorba3[0], posCorba3[1], posCorba3[2]);
+        LeafNodeFacePtr_t face = LeafNodeFace::create(faceName, pos1, pos2, pos3, getColor(colorCorba));
+        GraphicalInterface::initParent(faceName, face);
+        addNode(faceName, face);
+        return true;
+    }
+}
+
+bool GraphicalInterface::addSquareFace(const char* faceNameCorba, const double* posCorba1, const double* posCorba2, const double* posCorba3, const double* posCorba4, const double* colorCorba)
+{
+    std::string faceName(faceNameCorba);
+    if (nodes_.find(faceName) != nodes_.end()) {
+        std::cout << "You need to chose an other name, \"" << faceName << "\" already exist." << std::endl;
+        return false;
+    }
+    else {
+        osgVector3 pos1(posCorba1[0], posCorba1[1], posCorba1[2]);
+        osgVector3 pos2(posCorba2[0], posCorba2[1], posCorba2[2]);
+        osgVector3 pos3(posCorba3[0], posCorba3[1], posCorba3[2]);
+        osgVector3 pos4(posCorba4[0], posCorba4[1], posCorba4[2]);
+        LeafNodeFacePtr_t face = LeafNodeFace::create(faceName, pos1, pos2, pos3, pos3, getColor(colorCorba));
+        GraphicalInterface::initParent(faceName, face);
+        addNode(faceName, face);
+        return true;
+    }
+}
+
 void GraphicalInterface::getNodeList()
 {
     std::cout << "List of Nodes :" << std::endl;
diff --git a/src/GraphicalInterface.impl.hh b/src/GraphicalInterface.impl.hh
index 3b8e83792ef7b88d31a2fc552b22f23d5559f035..58e52233b4192c8c0297a73f52d78e68c4b80120 100644
--- a/src/GraphicalInterface.impl.hh
+++ b/src/GraphicalInterface.impl.hh
@@ -21,6 +21,7 @@
 #include <Graphics/LeafNodeCone.h>
 #include <Graphics/LeafNodeCylinder.h>
 #include <Graphics/LeafNodeLine.h>
+#include <Graphics/LeafNodeFace.h>
 #include <Graphics/LeafNodeSphere.h>
 #include <Graphics/macros.h>
 #include <Graphics/config.h>
@@ -106,6 +107,9 @@ public:
 
     virtual bool addLine(const char* lineName, const double* pos1, const double* pos2, const double* color);
 
+    virtual bool addSquareFace(const char* faceName, const double* pos1, const double* pos2, const double* pos3, const double* pos4, const double* color);
+    virtual bool addTriangleFace(const char* faceName, const double* pos1, const double* pos2, const double* pos3, const double* color);
+
     virtual bool addURDF(const char* urdfNameCorba, const char* urdfPathCorba, const char* urdfPackagePathCorba);
 
     virtual bool createGroup(const char* groupNameCorba) ;
diff --git a/src/client-cpp.cc b/src/client-cpp.cc
index d8b355d60f184a35fea309f0d41fbc7b801b3083..9ceec770d21d48cb14d241455946178f9f08567c 100644
--- a/src/client-cpp.cc
+++ b/src/client-cpp.cc
@@ -164,6 +164,16 @@ bool ClientCpp::addLine(const char* lineName, const double* pos1, const double*
     return manager_->addLine(lineName, pos1, pos2, color);
 }
 
+bool ClientCpp::addTriangleFace(const char* faceName, const double* pos1, const double* pos2, const double* pos3, const double* color)
+{
+    return manager_->addTriangleFace(faceName, pos1, pos2, pos3, color);
+}
+
+bool ClientCpp::addSquareFace(const char* faceName, const double* pos1, const double* pos2, const double* pos3, const double* pos4, const double* color)
+{
+    return manager_->addSquareFace(faceName, pos1, pos2, pos3, pos4, color);
+}
+
 bool ClientCpp::addURDF(const char* urdfName, const char* urdfPath, const char* urdfPackagePath)
 {
     return manager_->addURDF(urdfName, urdfPath, urdfPackagePath);
diff --git a/src/client-cpp.hh b/src/client-cpp.hh
index 5bd27d05569ed8b1029b09441bce73379be0e297..7361b9adf5e05fec9070fd8df13089b0982e3fff 100644
--- a/src/client-cpp.hh
+++ b/src/client-cpp.hh
@@ -69,6 +69,9 @@ public:
 
     bool addLine(const char* lineName, const double* pos1, const double* pos2, const double* color);
 
+    bool addTriangleFace(const char* lineName, const double* pos1, const double* pos2, const double* pos3, const double* color);
+    bool addSquareFace(const char* lineName, const double* pos1, const double* pos2, const double* pos3, const double* pos4, const double* color);
+
     bool addURDF(const char* urdfName, const char* urdfPath, const char* urdfPackagePath);
 
     bool createGroup(const char* groupName) ;
diff --git a/test/test-client-cpp.cc b/test/test-client-cpp.cc
index a4fc56ed0d0e5d01e143da04bfd3018c5e2d0087..e930f02984f66b3ac876b1079a3992a9525254a3 100644
--- a/test/test-client-cpp.cc
+++ b/test/test-client-cpp.cc
@@ -27,6 +27,16 @@ int main(int argc, const char * argv[])
     client.addSceneToWindow("scene1","window1");
     client.addURDF("scene1/hrp2", "/local/mgeisert/devel/src/hrp2/hrp2_14_description/urdf/hrp2_14_capsule.urdf", "/local/mgeisert/devel/src/hrp2/");
 
+    sleep(5);
+
+    //vector<double> tri01 (3);
+
+    double pos1[3]= {1.,0.,0.};
+    double pos2[3] = {0.,1.,0.};
+    double pos3[3]= {0.,1.,1.};
+    double color[4] = {1.,1.,1.,1.};
+    client.addTriangleFace("scene1/triangle", pos1, pos2, pos3, color);
+
     sleep(15);