diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index c69b16320d38efeb6046cab84196ed1e73415ac7..27a44a97145f043086badaf7e9a3ec98876d0810 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -20,7 +20,9 @@ SET(LIBRARY_NAME ${PROJECT_NAME})
 ADD_EXECUTABLE (basic-scene basic-scene.cc)
 TARGET_LINK_LIBRARIES(basic-scene ${LIBRARY_NAME})
 PKG_CONFIG_USE_DEPENDENCY(basic-scene gepetto-viewer)
+PKG_CONFIG_USE_DEPENDENCY(basic-scene omniORB4)
 
 ADD_EXECUTABLE (display-urdf display-urdf.cc)
 TARGET_LINK_LIBRARIES(display-urdf ${LIBRARY_NAME})
 PKG_CONFIG_USE_DEPENDENCY(display-urdf gepetto-viewer)
+PKG_CONFIG_USE_DEPENDENCY(display-urdf omniORB4)
diff --git a/examples/basic-scene.cc b/examples/basic-scene.cc
index fc5115989fe2d6da37398e28c339079045402644..0ab1e779979f3084838788b2162304fc2d1654e0 100644
--- a/examples/basic-scene.cc
+++ b/examples/basic-scene.cc
@@ -10,8 +10,8 @@
 
 int main(int, const char **)
 {
-    graphics::corbaServer::Client client (0, NULL);
-    client.connect ();
+    gepetto::viewer::corba::Client client (0, NULL);
+    client.connect ("corbaloc:iiop:localhost:12321");
 
     float white[4] = {1.,1.,1.,1.};
     client.gui()->createWindow("window1");
diff --git a/examples/display-urdf.cc b/examples/display-urdf.cc
index 864aee444308b3fbe4214cd104883981da244d4b..e8eaec395fed1d84028ca5601549459d08604067 100644
--- a/examples/display-urdf.cc
+++ b/examples/display-urdf.cc
@@ -10,22 +10,17 @@
 
 int main(int argc, const char ** argv)
 {
-    using namespace graphics;
-    using namespace corbaServer;
-
     if (argc != 2) {
       std::cout << "Usage " << argv[0] << " <urdf-filename>"
         << std::endl;
       return 1;
     }
 
-    Client client (0, NULL);
+    gepetto::viewer::corba::Client client (0, NULL);
     client.connect ();
 
     client.gui()->createWindow("urdf-display");
-    // The second argument is deprecated and ignored. File link starting with
-    // "package://" are resolved using ROS_PACKAGE_PATH environment variable.
-    client.gui()->addURDF("urdf-display/urdf", argv[1], "");
+    client.gui()->addURDF("urdf-display/urdf", argv[1]);
 
     client.gui()->refresh();
 
diff --git a/include/gepetto/viewer/corba/client.hh b/include/gepetto/viewer/corba/client.hh
index 8fc2ba4b469d9f607c421ded433c7914c75d00a9..3c8fb65a9ce286a4c601cf8ed5ff22e60f9e7dce 100644
--- a/include/gepetto/viewer/corba/client.hh
+++ b/include/gepetto/viewer/corba/client.hh
@@ -26,13 +26,16 @@ namespace corba {
 
       ~Client ();
 
-      void connect (const char* iiop = "corbaloc:rir:/NameService");
+      void connect (const std::string& iiop = "corbaloc:iiop:");
 
       gepetto::corbaserver::GraphicalInterface_var& gui () {
         return gui_;
       }
 
     private:
+      bool createFromDirectLink(const std::string& iiop);
+      bool createFromNameService(const std::string& iiop);
+
       corbaserver::GraphicalInterface_var gui_;
 
       CORBA::ORB_var orb_;
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b2125c0afaac0b69466d18c73ad0b725ef09b39a..35b6fdb0f0d5274d8e43ec77dfb85a01b6126ce1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,7 +23,6 @@ SET(IDL_SOURCES
   )
 
 OMNIIDL_INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/idl)
-INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src)
 
 FOREACH(IDL ${IDL_SOURCES})
   # C++
@@ -116,6 +115,7 @@ ENDIF(NOT CLIENT_ONLY)
 # }}}
 
 ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${PROJECT_NAME}_SOURCES})
+TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} PUBLIC ${CMAKE_BINARY_DIR}/src)
 ADD_DEPENDENCIES (${LIBRARY_NAME} generate_idl_cpp)
 ADD_DEPENDENCIES (${LIBRARY_NAME} generate_idl_python)
 IF(NOT CLIENT_ONLY)
diff --git a/src/client.cc b/src/client.cc
index 1d35cfca65806308d42856bbdb377ecde3fa7e55..e1dc6c11ddbf1fe54e4688d3c90e89cba6963cc2 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -33,14 +33,25 @@ namespace gepetto {
     {
     }
 
-    void Client::connect (const char* iiop)
+    bool Client::createFromDirectLink (const std::string& iiop)
     {
-      // Get a reference to the Naming Service
-      CORBA::Object_var rootContextObj = orb_->string_to_object(iiop);
+      std::string url = iiop + "/gepetto-gui";
+
+      CORBA::Object_var obj = orb_->string_to_object(url.c_str());
+      gui_ = gepetto::corbaserver::GraphicalInterface::_narrow(obj.in());
+      return !CORBA::is_nil(gui_);
+    }
+
+    bool Client::createFromNameService (const std::string& iiop)
+    {
+      std::string url = iiop + "/NameService";
+
+      CORBA::Object_var obj = orb_->string_to_object(url.c_str());
+      if (CORBA::is_nil(obj)) return false;
       CosNaming::NamingContext_var nc =
-        CosNaming::NamingContext::_narrow(rootContextObj.in());
+        CosNaming::NamingContext::_narrow(obj.in());
+      if (CORBA::is_nil(nc)) return false;
 
-      // Bind robotObj with name Robot to the hppContext:
       CosNaming::Name name;
       name.length(2);
       name[0].id = (const char *) "gepetto";
@@ -51,6 +62,16 @@ namespace gepetto {
       CORBA::Object_var managerObj = nc->resolve(name);
       // Narrow the previous object to obtain the correct type
       gui_ = gepetto::corbaserver::GraphicalInterface::_narrow(managerObj.in());
+
+      return CORBA::is_nil(gui_);
+    }
+
+    void Client::connect (const std::string& iiop)
+    {
+      bool ok = createFromDirectLink(iiop);
+      if (!ok) ok = createFromNameService(iiop);
+      if (!ok) throw std::runtime_error ("Could not connect to gepetto-viewer "
+          "GUI at " + iiop);
     }
 
     /// \brief Shutdown CORBA server