diff --git a/idl/gepetto/viewer/graphical-interface.idl b/idl/gepetto/viewer/graphical-interface.idl
index 70b406217a097b22a2119e12f1d0881e09594405..318f4a4ad828e70ede68f87426171a1a57467f5b 100644
--- a/idl/gepetto/viewer/graphical-interface.idl
+++ b/idl/gepetto/viewer/graphical-interface.idl
@@ -89,6 +89,10 @@ typedef sequence<Position> PositionSeq;
     /// \param input windowId : ID of the window
     boolean detachCamera(in unsigned long windowId) raises (Error);
 
+    /// Check if nodeName is an existing node.
+    /// \param nodeName name of the node
+    boolean nodeExists(in string nodeName) raises (Error);
+
     /// create a floor called floorName.
     /// \param input floorName : name of the floor.
     boolean addFloor(in string floorName) raises (Error);
diff --git a/include/gepetto/viewer/corba/windows-manager.hh b/include/gepetto/viewer/corba/windows-manager.hh
index 84e6aba379db9638d8358f1cf6fa8e4ec6c0973c..1d1fa77ee23d8ff90f4292bc5ac849e908e72ee0 100644
--- a/include/gepetto/viewer/corba/windows-manager.hh
+++ b/include/gepetto/viewer/corba/windows-manager.hh
@@ -113,7 +113,6 @@ namespace graphics {
             WindowsManager ();
             WindowID addWindow (std::string winName, WindowManagerPtr_t newWindow);
 
-            bool nodeExists (const std::string& name);
             template <typename NodeContainer_t>
               std::size_t getNodes
               (const gepetto::corbaserver::Names_t& name, NodeContainer_t& nodes);
@@ -149,6 +148,8 @@ namespace graphics {
             virtual bool attachCameraToNode(const char* nodeNameCorba, const WindowID windowId);
             virtual bool detachCamera(const WindowID windowId);
 
+            virtual bool nodeExists (const std::string& name);
+
             virtual bool addFloor(const char* floorNameCorba);
 
             virtual bool addBox(const char* boxName, float boxSize1, float boxSize2, float boxSize3, const value_type* color);
diff --git a/src/graphical-interface.impl.cpp b/src/graphical-interface.impl.cpp
index 5d894cae2472196a7d8faa1e4e80b656eca0e9af..f6a1a977a6f4ce3c32dfe73cd21e7c2505a45b3c 100644
--- a/src/graphical-interface.impl.cpp
+++ b/src/graphical-interface.impl.cpp
@@ -113,6 +113,15 @@ namespace graphics {
           }
       }
 
+      bool GraphicalInterface::nodeExists(const char* nodeName)
+      {
+	try {
+	  return windowsManager_->nodeExists(nodeName);
+	} catch (const std::exception& exc) {
+	  throw Error(exc.what());
+	}
+      }
+
       bool GraphicalInterface::addFloor (const char* floorNameCorba)
           throw (Error)
       {
diff --git a/src/graphical-interface.impl.hh b/src/graphical-interface.impl.hh
index 8aaca515e8850a0e68ece10e60e2ca6867852b68..9f9462306cf0fed9ab66c02285c9d57df8c90688 100644
--- a/src/graphical-interface.impl.hh
+++ b/src/graphical-interface.impl.hh
@@ -62,6 +62,8 @@ public:
   virtual bool attachCameraToNode(const char* nodeName, const WindowID windowId);
   virtual bool detachCamera(const WindowID windowId);
 
+  virtual bool nodeExists(const char* nodeName);
+
   virtual bool addFloor(const char* floorName) throw (Error);
 
   virtual bool addBox(const char* boxName, float boxSize1, float boxSize2, float boxSize3, const value_type* color) throw (Error);