diff --git a/idl/gepetto/viewer/graphical-interface.idl b/idl/gepetto/viewer/graphical-interface.idl
index 1e5de671a9262b1adbdcf92748ed61f9c62c6cce..ea054219ae559ab9b8753d7be1bd86a839bc7ee8 100644
--- a/idl/gepetto/viewer/graphical-interface.idl
+++ b/idl/gepetto/viewer/graphical-interface.idl
@@ -36,6 +36,7 @@ typedef double Color [4];
     /// \param input name : name of the new window.
     /// return the ID of the newly create window.
     unsigned long createWindow(in string name) raises (Error);
+    unsigned long getWindowID (in string name) raises (Error);
 
 
     /// Print names of nodes on the SceneViewer-corbaserver terminal.
diff --git a/src/graphical-interface.impl.cpp b/src/graphical-interface.impl.cpp
index 4b42c2eb98a9d61928e89861bfd8a4894bdeecf5..5d3bcfcc756b06c7baf693506b44a68ad551e575 100644
--- a/src/graphical-interface.impl.cpp
+++ b/src/graphical-interface.impl.cpp
@@ -180,6 +180,7 @@ namespace graphics {
 	  std::string windowName (windowNameCorba);
           WindowManagerPtr_t newWindow = WindowManager::create ();
           WindowID windowId = windowManagers_.size ();
+          windowIDmap_ [windowNameCorba] = windowId;
           windowManagers_.push_back (newWindow);
           boost::thread refreshThread (boost::bind
               (&GraphicalInterface::threadRefreshing,
@@ -190,6 +191,20 @@ namespace graphics {
 	}
       }
 
+      GraphicalInterface::WindowID GraphicalInterface::getWindowID (const char* windowNameCorba)
+	throw (Error)
+      {
+	try {
+	  std::string windowName (windowNameCorba);
+          WindowIDMap_t::iterator it = windowIDmap_.find (windowName);
+          if (it == windowIDmap_.end ())
+            throw Error ("There is no windows with that name");
+          return it->second;
+	} catch (const std::exception& exc) {
+	  throw Error (exc.what ());
+	}
+      }
+
       void GraphicalInterface::refresh () throw (Error)
       {
 	try {
diff --git a/src/graphical-interface.impl.hh b/src/graphical-interface.impl.hh
index 628b1e007a96de871c609123a21562ed2c8b2794..d754acff3bfb8698d664629a3f75037e44f0d7e8 100644
--- a/src/graphical-interface.impl.hh
+++ b/src/graphical-interface.impl.hh
@@ -49,7 +49,9 @@ private:
     typedef gepetto::Error Error;
     typedef CORBA::ULong WindowID;
     typedef std::vector <WindowManagerPtr_t> WindowManagers_t;
+    typedef std::map <std::string, WindowID> WindowIDMap_t;
     WindowManagers_t windowManagers_;
+    WindowIDMap_t windowIDmap_;
     std::map<std::string, NodePtr_t> nodes_;
     std::map<std::string, GroupNodePtr_t> groupNodes_;
     corbaServer::Server* server_;
@@ -85,6 +87,7 @@ public:
   virtual void refresh() throw (Error);
 
   virtual WindowID createWindow(const char* windowNameCorba) throw (Error);
+  virtual WindowID getWindowID (const char* windowNameCorba) throw (Error);
 
   virtual void createScene(const char* sceneNameCorba)  throw (Error);
   virtual void createSceneWithFloor(const char* sceneNameCorba)  throw (Error);