[ekiga] Switched the smart pointers implementation to boost



commit 0132c8f83619b9317312a893d5bc71661cbe6795
Author: Julien Puydt <jpuydt gnome org>
Date:   Wed Aug 26 18:55:22 2009 +0200

    Switched the smart pointers implementation to boost
    
    This is part of bug #575005

 lib/engine/account/account.h                       |    6 +-
 lib/engine/account/bank-impl.h                     |    8 +-
 lib/engine/account/bank.h                          |    4 +-
 lib/engine/addressbook/book-impl.h                 |    8 +-
 lib/engine/addressbook/book.h                      |    4 +-
 lib/engine/addressbook/contact-core.cpp            |    4 +-
 lib/engine/addressbook/contact-core.h              |    6 +-
 lib/engine/addressbook/contact.h                   |    6 +-
 lib/engine/addressbook/source-impl.h               |   14 +-
 lib/engine/addressbook/source.h                    |    4 +-
 lib/engine/chat/chat-multiple.h                    |    4 +-
 lib/engine/chat/chat-simple.h                      |    4 +-
 lib/engine/chat/chat.h                             |   10 +-
 lib/engine/chat/dialect-impl.h                     |   44 ++++----
 lib/engine/chat/dialect.h                          |    4 +-
 .../avahi-publisher/avahi-publisher-main.cpp       |   10 +-
 lib/engine/components/avahi/avahi-cluster.cpp      |    2 +-
 lib/engine/components/avahi/avahi-cluster.h        |    2 +-
 lib/engine/components/avahi/avahi-heap.cpp         |   11 +-
 lib/engine/components/avahi/avahi-heap.h           |    2 +-
 lib/engine/components/avahi/avahi-main.cpp         |    6 +-
 .../components/call-history/history-book.cpp       |   18 ++--
 lib/engine/components/call-history/history-book.h  |   12 +-
 .../components/call-history/history-contact.cpp    |   10 +-
 .../components/call-history/history-contact.h      |   10 +-
 .../components/call-history/history-main.cpp       |    8 +-
 .../components/call-history/history-source.cpp     |    2 +-
 .../dx-videooutput/videooutput-main-dx.cpp         |    2 +-
 lib/engine/components/echo/echo-dialect.h          |    2 +-
 lib/engine/components/echo/echo-main.cpp           |    4 +-
 lib/engine/components/echo/echo-presentity.h       |    4 +-
 lib/engine/components/echo/echo-simple.cpp         |    6 +-
 lib/engine/components/echo/echo-simple.h           |    8 +-
 lib/engine/components/evolution/evolution-book.cpp |   12 +-
 lib/engine/components/evolution/evolution-book.h   |    2 +-
 .../components/evolution/evolution-contact.cpp     |    6 +-
 .../components/evolution/evolution-contact.h       |    2 +-
 lib/engine/components/evolution/evolution-main.cpp |    6 +-
 .../components/evolution/evolution-source.cpp      |   19 ++-
 .../gmconf-personal-details-main.cpp               |    4 +-
 .../gnome-session/gnome-session-main.cpp           |   28 ++--
 lib/engine/components/gstreamer/gst-main.cpp       |    8 +-
 lib/engine/components/hal-dbus/hal-main-dbus.cpp   |    4 +-
 lib/engine/components/kab/kab-book.h               |    2 +-
 lib/engine/components/kab/kab-contact.h            |    2 +-
 lib/engine/components/kab/kab-main.cpp             |    6 +-
 lib/engine/components/kab/kab-source.h             |    2 +-
 lib/engine/components/kde/kde-main.cpp             |    2 +-
 lib/engine/components/ldap/ldap-book.cpp           |   12 +-
 lib/engine/components/ldap/ldap-book.h             |   12 +-
 lib/engine/components/ldap/ldap-contact.cpp        |    2 +-
 lib/engine/components/ldap/ldap-contact.h          |    2 +-
 lib/engine/components/ldap/ldap-main.cpp           |    6 +-
 lib/engine/components/ldap/ldap-source.cpp         |   10 +-
 lib/engine/components/ldap/ldap-source.h           |    2 +-
 lib/engine/components/libnotify/libnotify-main.cpp |   22 ++--
 .../components/local-roster/local-cluster.cpp      |    4 +-
 lib/engine/components/local-roster/local-cluster.h |    2 +-
 lib/engine/components/local-roster/local-heap.cpp  |   52 +++++---
 lib/engine/components/local-roster/local-heap.h    |    4 +-
 .../components/local-roster/local-presentity.cpp   |   14 +-
 .../components/local-roster/local-presentity.h     |   10 +-
 .../local-roster/local-roster-bridge.cpp           |    8 +-
 .../components/local-roster/local-roster-main.cpp  |    8 +-
 .../components/loudmouth/loudmouth-account.cpp     |   10 +-
 .../components/loudmouth/loudmouth-account.h       |   14 +-
 lib/engine/components/loudmouth/loudmouth-bank.cpp |    8 +-
 lib/engine/components/loudmouth/loudmouth-bank.h   |   14 +-
 .../components/loudmouth/loudmouth-chat-simple.cpp |   10 +-
 .../components/loudmouth/loudmouth-chat-simple.h   |    8 +-
 .../components/loudmouth/loudmouth-cluster.h       |    2 +-
 .../components/loudmouth/loudmouth-dialect.h       |    2 +-
 lib/engine/components/loudmouth/loudmouth-heap.cpp |    6 +-
 lib/engine/components/loudmouth/loudmouth-heap.h   |    6 +-
 lib/engine/components/loudmouth/loudmouth-main.cpp |   10 +-
 .../components/loudmouth/loudmouth-presentity.cpp  |    2 +-
 .../components/loudmouth/loudmouth-presentity.h    |    2 +-
 .../mlogo-videoinput/videoinput-main-mlogo.cpp     |    2 +-
 .../null-audioinput/audioinput-main-null.cpp       |    4 +-
 .../null-audiooutput/audiooutput-main-null.cpp     |    4 +-
 lib/engine/components/opal/opal-account.cpp        |   18 ++--
 lib/engine/components/opal/opal-account.h          |    2 +-
 lib/engine/components/opal/opal-audio.cpp          |    8 +-
 lib/engine/components/opal/opal-audio.h            |    4 +-
 lib/engine/components/opal/opal-bank.cpp           |    6 +-
 lib/engine/components/opal/opal-call-manager.cpp   |    8 +-
 lib/engine/components/opal/opal-gmconf-bridge.cpp  |    4 +-
 lib/engine/components/opal/opal-main.cpp           |   30 +++---
 lib/engine/components/opal/opal-videoinput.cpp     |    7 +-
 lib/engine/components/opal/opal-videoinput.h       |    2 +-
 lib/engine/components/opal/opal-videooutput.cpp    |    8 +-
 lib/engine/components/opal/opal-videooutput.h      |    2 +-
 lib/engine/components/opal/sip-chat-simple.cpp     |   14 +-
 lib/engine/components/opal/sip-chat-simple.h       |    8 +-
 lib/engine/components/opal/sip-dialect.cpp         |    2 +-
 lib/engine/components/opal/sip-dialect.h           |    2 +-
 lib/engine/components/opal/sip-endpoint.cpp        |   19 ++--
 lib/engine/components/opal/sip-endpoint.h          |    6 +-
 .../components/ptlib/audioinput-main-ptlib.cpp     |    4 +-
 .../components/ptlib/audiooutput-main-ptlib.cpp    |    4 +-
 .../components/ptlib/videoinput-main-ptlib.cpp     |    4 +-
 .../resource-list/resource-list-main.cpp           |    8 +-
 lib/engine/components/resource-list/rl-cluster.cpp |   10 +-
 lib/engine/components/resource-list/rl-cluster.h   |    4 +-
 .../components/resource-list/rl-entry-ref.cpp      |    2 +-
 lib/engine/components/resource-list/rl-entry-ref.h |    3 +-
 lib/engine/components/resource-list/rl-entry.cpp   |   12 +-
 lib/engine/components/resource-list/rl-entry.h     |   11 +-
 lib/engine/components/resource-list/rl-heap.cpp    |   22 ++--
 lib/engine/components/resource-list/rl-heap.h      |    8 +-
 lib/engine/components/resource-list/rl-list.cpp    |   52 ++++----
 lib/engine/components/resource-list/rl-list.h      |   10 +-
 .../components/resource-list/rl-presentity.cpp     |   18 ++--
 .../components/resource-list/rl-presentity.h       |   13 +-
 .../x-videooutput/videooutput-main-x.cpp           |    2 +-
 lib/engine/components/xcap/xcap-core.cpp           |   22 ++--
 lib/engine/components/xcap/xcap-core.h             |    6 +-
 lib/engine/components/xcap/xcap-main.cpp           |    4 +-
 lib/engine/components/xcap/xcap-path.cpp           |   12 +-
 lib/engine/components/xcap/xcap-path.h             |   10 +-
 lib/engine/engine.cpp                              |   22 ++--
 lib/engine/framework/form-request.h                |    5 +-
 lib/engine/framework/gmref.h                       |   54 ++++----
 lib/engine/framework/kickstart.cpp                 |   14 +-
 lib/engine/framework/kickstart.h                   |    8 +-
 lib/engine/framework/menu-xml.cpp                  |    4 +-
 lib/engine/framework/reflister.h                   |   26 ++--
 lib/engine/framework/services.h                    |   10 +-
 lib/engine/friend-or-foe/friend-or-foe.cpp         |    2 +-
 lib/engine/friend-or-foe/friend-or-foe.h           |    6 +-
 lib/engine/gui/gtk-core/gtk-core-main.cpp          |    2 +-
 .../gui/gtk-frontend/call-history-view-gtk.cpp     |    4 +-
 .../gui/gtk-frontend/call-history-view-gtk.h       |    2 +-
 lib/engine/gui/gtk-frontend/chat-area.cpp          |    6 +-
 lib/engine/gui/gtk-frontend/chat-area.h            |    2 +-
 lib/engine/gui/gtk-frontend/gtk-frontend.cpp       |   14 +-
 lib/engine/notification/notification-core.h        |    8 +-
 lib/engine/presence/cluster-impl.h                 |   22 ++--
 lib/engine/presence/cluster.h                      |    4 +-
 lib/engine/presence/heap-impl.h                    |    8 +-
 lib/engine/presence/heap.h                         |    6 +-
 lib/engine/presence/presence-core.cpp              |   18 ++--
 lib/engine/presence/presence-core.h                |   20 ++--
 lib/engine/presence/presentity.h                   |    6 +-
 lib/engine/presence/uri-presentity.cpp             |    6 +-
 lib/engine/protocol/call-core.cpp                  |   34 +++---
 lib/engine/protocol/call-core.h                    |   82 ++++++------
 lib/engine/protocol/call-manager.cpp               |    6 +-
 lib/engine/protocol/call-manager.h                 |   16 ++--
 lib/engine/protocol/call-protocol-manager.h        |    4 +-
 lib/engine/protocol/call.h                         |    4 +-
 lib/engine/videoinput/videoinput-core.cpp          |    2 -
 lib/gui/xwindow.cpp                                |    2 +-
 lib/gui/xwindow.h                                  |    4 +-
 src/dbus-helper/dbus.cpp                           |    2 +-
 src/gui/accounts.cpp                               |    4 +-
 src/gui/assistant.cpp                              |   20 ++--
 src/gui/main.cpp                                   |  133 ++++++++++----------
 src/gui/preferences.cpp                            |   16 ++--
 src/gui/statusicon.cpp                             |   34 +++---
 src/gui/statusmenu.cpp                             |    4 +-
 161 files changed, 836 insertions(+), 829 deletions(-)
---
diff --git a/lib/engine/account/account.h b/lib/engine/account/account.h
index aa11b94..533055b 100644
--- a/lib/engine/account/account.h
+++ b/lib/engine/account/account.h
@@ -41,7 +41,7 @@
 #include <map>
 #include <string>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "chain-of-responsibility.h"
 #include "form-request.h"
 #include "menu-builder.h"
@@ -54,7 +54,7 @@ namespace Ekiga
    * @{
    */
 
-  class Account: public virtual GmRefCounted
+  class Account
   {
   public:
 
@@ -114,7 +114,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Account> AccountPtr;
+  typedef boost::shared_ptr<Account> AccountPtr;
 
   /**
    * @}
diff --git a/lib/engine/account/bank-impl.h b/lib/engine/account/bank-impl.h
index e859f72..e3b6e26 100644
--- a/lib/engine/account/bank-impl.h
+++ b/lib/engine/account/bank-impl.h
@@ -122,14 +122,14 @@ namespace Ekiga
      * when the account has been updated and the Ekiga::BankImpl 'account_removed' signal
      * will be emitted when the account has been removed from the Ekiga::BankImpl.
      */
-    void add_account (gmref_ptr<AccountType> account);
+    void add_account (boost::shared_ptr<AccountType> account);
 
     /** Removes a account from the Ekiga::BankImpl.
      * @param: The account to be removed.
      * @return: The Ekiga::BankImpl 'account_removed' signal is emitted when the account
      * has been removed.
      */
-    void remove_account (gmref_ptr<AccountType> account);
+    void remove_account (boost::shared_ptr<AccountType> account);
 
     using RefLister<AccountType>::add_connection;
   };
@@ -201,7 +201,7 @@ Ekiga::BankImpl<AccountType>::end () const
 
 template<typename AccountType>
 void
-Ekiga::BankImpl<AccountType>::add_account (gmref_ptr<AccountType> account)
+Ekiga::BankImpl<AccountType>::add_account (boost::shared_ptr<AccountType> account)
 {
   add_object (account);
 
@@ -211,7 +211,7 @@ Ekiga::BankImpl<AccountType>::add_account (gmref_ptr<AccountType> account)
 
 template<typename AccountType>
 void
-Ekiga::BankImpl<AccountType>::remove_account (gmref_ptr<AccountType> account)
+Ekiga::BankImpl<AccountType>::remove_account (boost::shared_ptr<AccountType> account)
 {
   remove_object (account);
 }
diff --git a/lib/engine/account/bank.h b/lib/engine/account/bank.h
index d0e1889..053342d 100644
--- a/lib/engine/account/bank.h
+++ b/lib/engine/account/bank.h
@@ -49,7 +49,7 @@ namespace Ekiga
    * @{
    */
 
-  class Bank: public virtual GmRefCounted
+  class Bank
   {
   public:
 
@@ -89,7 +89,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Bank> BankPtr;
+  typedef boost::shared_ptr<Bank> BankPtr;
 
   /**
    * @}
diff --git a/lib/engine/addressbook/book-impl.h b/lib/engine/addressbook/book-impl.h
index e67d02a..0db3bd9 100644
--- a/lib/engine/addressbook/book-impl.h
+++ b/lib/engine/addressbook/book-impl.h
@@ -121,7 +121,7 @@ namespace Ekiga
      * when the contact has been updated and the Ekiga::Book 'contact_removed' signal
      * will be emitted when the contact has been removed from the Ekiga::Book.
      */
-    void add_contact (gmref_ptr<ContactType> contact);
+    void add_contact (boost::shared_ptr<ContactType> contact);
 
 
     /** Removes a contact from the Ekiga::Book.
@@ -129,7 +129,7 @@ namespace Ekiga
      * @return: The Ekiga::Book 'contact_removed' signal is emitted when the contact
      * has been removed.
      */
-    void remove_contact (gmref_ptr<ContactType> contact);
+    void remove_contact (boost::shared_ptr<ContactType> contact);
 
     using RefLister<ContactType>::add_connection;
   };
@@ -201,7 +201,7 @@ Ekiga::BookImpl<ContactType>::end () const
 
 template<typename ContactType>
 void
-Ekiga::BookImpl<ContactType>::add_contact (gmref_ptr<ContactType> contact)
+Ekiga::BookImpl<ContactType>::add_contact (boost::shared_ptr<ContactType> contact)
 {
   contact->questions.connect (questions.make_slot ());
   add_object (contact);
@@ -210,7 +210,7 @@ Ekiga::BookImpl<ContactType>::add_contact (gmref_ptr<ContactType> contact)
 
 template<typename ContactType>
 void
-Ekiga::BookImpl<ContactType>::remove_contact (gmref_ptr<ContactType> contact)
+Ekiga::BookImpl<ContactType>::remove_contact (boost::shared_ptr<ContactType> contact)
 {
   remove_object (contact);
 }
diff --git a/lib/engine/addressbook/book.h b/lib/engine/addressbook/book.h
index 0580837..debf5c1 100644
--- a/lib/engine/addressbook/book.h
+++ b/lib/engine/addressbook/book.h
@@ -40,7 +40,7 @@
 
 namespace Ekiga {
 
-  class Book: public virtual GmRefCounted
+  class Book
   {
 
   public:
@@ -136,7 +136,7 @@ namespace Ekiga {
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Book> BookPtr;
+  typedef boost::shared_ptr<Book> BookPtr;
 };
 
 #endif
diff --git a/lib/engine/addressbook/contact-core.cpp b/lib/engine/addressbook/contact-core.cpp
index 1c5f9aa..2821b20 100644
--- a/lib/engine/addressbook/contact-core.cpp
+++ b/lib/engine/addressbook/contact-core.cpp
@@ -98,7 +98,7 @@ Ekiga::ContactCore::visit_sources (sigc::slot1<bool, SourcePtr > visitor)
 }
 
 void
-Ekiga::ContactCore::add_contact_decorator (gmref_ptr<ContactDecorator> decorator)
+Ekiga::ContactCore::add_contact_decorator (boost::shared_ptr<ContactDecorator> decorator)
 {
   contact_decorators.push_back (decorator);
 }
@@ -111,7 +111,7 @@ Ekiga::ContactCore::populate_contact_menu (ContactPtr contact,
 {
   bool populated = false;
 
-  for (std::list<gmref_ptr<ContactDecorator> >::const_iterator iter
+  for (std::list<boost::shared_ptr<ContactDecorator> >::const_iterator iter
 	 = contact_decorators.begin ();
        iter != contact_decorators.end ();
        ++iter) {
diff --git a/lib/engine/addressbook/contact-core.h b/lib/engine/addressbook/contact-core.h
index 97f4b6e..3c298b0 100644
--- a/lib/engine/addressbook/contact-core.h
+++ b/lib/engine/addressbook/contact-core.h
@@ -48,7 +48,7 @@ namespace Ekiga
  * @{
  */
 
-  class ContactDecorator: public virtual GmRefCounted
+  class ContactDecorator
   {
   public:
 
@@ -155,7 +155,7 @@ namespace Ekiga
 
   public:
 
-    void add_contact_decorator (gmref_ptr<ContactDecorator> decorator);
+    void add_contact_decorator (boost::shared_ptr<ContactDecorator> decorator);
 
     /** Create the menu for a given Contact and its actions.
      * @param The Ekiga::Contact for which the actions could be made available.
@@ -168,7 +168,7 @@ namespace Ekiga
 
   private:
 
-    std::list<gmref_ptr<ContactDecorator> > contact_decorators;
+    std::list<boost::shared_ptr<ContactDecorator> > contact_decorators;
 
 
     /*** Misc ***/
diff --git a/lib/engine/addressbook/contact.h b/lib/engine/addressbook/contact.h
index c9f45e9..b581186 100644
--- a/lib/engine/addressbook/contact.h
+++ b/lib/engine/addressbook/contact.h
@@ -41,7 +41,7 @@
 #include <map>
 #include <string>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "chain-of-responsibility.h"
 #include "form-request.h"
 #include "menu-builder.h"
@@ -54,7 +54,7 @@ namespace Ekiga
  * @{
  */
 
-  class Contact: public virtual GmRefCounted
+  class Contact
   {
   public:
 
@@ -104,7 +104,7 @@ namespace Ekiga
   };
 
 
-  typedef gmref_ptr<Contact> ContactPtr;
+  typedef boost::shared_ptr<Contact> ContactPtr;
 /**
  * @}
  */
diff --git a/lib/engine/addressbook/source-impl.h b/lib/engine/addressbook/source-impl.h
index 0344cc6..62dec74 100644
--- a/lib/engine/addressbook/source-impl.h
+++ b/lib/engine/addressbook/source-impl.h
@@ -112,7 +112,7 @@ namespace Ekiga
      * 'book_removed' signal will be emitted when the Ekiga::Book has been
      * removed from the Ekiga::Source.
      */
-    void add_book (gmref_ptr<BookType> book);
+    void add_book (boost::shared_ptr<BookType> book);
 
 
     /** Removes a book from the Ekiga::Source.
@@ -120,7 +120,7 @@ namespace Ekiga
      * @return: The Ekiga::Source 'book_removed' signal is emitted when the
      * Ekiga::Book has been removed.
      */
-    void remove_book (gmref_ptr<BookType> book);
+    void remove_book (boost::shared_ptr<BookType> book);
 
     using RefLister<BookType>::add_connection;
 
@@ -150,7 +150,7 @@ namespace Ekiga
      * Ekiga::Book.
      * @param: The Book to remove.
      */
-    void common_removal_steps (gmref_ptr<BookType> book);
+    void common_removal_steps (boost::shared_ptr<BookType> book);
 
 
     /** This callback is triggered when the 'updated' signal is emitted on an
@@ -158,7 +158,7 @@ namespace Ekiga
      * Ekiga::Book.
      * @param: The updated book.
      */
-    void on_book_updated (gmref_ptr<BookType> book);
+    void on_book_updated (boost::shared_ptr<BookType> book);
 
 
     /** This callback is triggered when the 'removed' signal is emitted on an
@@ -166,7 +166,7 @@ namespace Ekiga
      * and takes care of the deletion of the book.
      * @param: The removed book.
      */
-    void on_book_removed (gmref_ptr<BookType> book);
+    void on_book_removed (boost::shared_ptr<BookType> book);
   };
 
   /**
@@ -204,7 +204,7 @@ Ekiga::SourceImpl<BookType>::visit_books (sigc::slot1<bool, BookPtr > visitor)
 
 template<typename BookType>
 void
-Ekiga::SourceImpl<BookType>::add_book (gmref_ptr<BookType> book)
+Ekiga::SourceImpl<BookType>::add_book (boost::shared_ptr<BookType> book)
 {
   add_object (book);
 
@@ -220,7 +220,7 @@ Ekiga::SourceImpl<BookType>::add_book (gmref_ptr<BookType> book)
 
 template<typename BookType>
 void
-Ekiga::SourceImpl<BookType>::remove_book (gmref_ptr<BookType> book)
+Ekiga::SourceImpl<BookType>::remove_book (boost::shared_ptr<BookType> book)
 {
   remove_object (book);
 }
diff --git a/lib/engine/addressbook/source.h b/lib/engine/addressbook/source.h
index ff5662f..53ceb7b 100644
--- a/lib/engine/addressbook/source.h
+++ b/lib/engine/addressbook/source.h
@@ -41,7 +41,7 @@
 
 namespace Ekiga {
 
-  class Source: public virtual GmRefCounted
+  class Source
   {
   public:
 
@@ -102,7 +102,7 @@ namespace Ekiga {
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Source> SourcePtr;
+  typedef boost::shared_ptr<Source> SourcePtr;
 };
 
 #endif
diff --git a/lib/engine/chat/chat-multiple.h b/lib/engine/chat/chat-multiple.h
index 168dc49..a8854a4 100644
--- a/lib/engine/chat/chat-multiple.h
+++ b/lib/engine/chat/chat-multiple.h
@@ -37,7 +37,7 @@
 #ifndef __CHAT_MULTIPLE_H__
 #define __CHAT_MULTIPLE_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "chat.h"
 #include "heap.h"
@@ -60,7 +60,7 @@ namespace Ekiga
     virtual HeapPtr get_heap () const = 0;
   };
 
-  typedef gmref_ptr<MultipleChat> MultipleChatPtr;
+  typedef boost::shared_ptr<MultipleChat> MultipleChatPtr;
 
 };
 
diff --git a/lib/engine/chat/chat-simple.h b/lib/engine/chat/chat-simple.h
index dcc1add..b162937 100644
--- a/lib/engine/chat/chat-simple.h
+++ b/lib/engine/chat/chat-simple.h
@@ -37,7 +37,7 @@
 #ifndef __CHAT_SIMPLE_H__
 #define __CHAT_SIMPLE_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "chat.h"
 #include "presentity.h"
@@ -60,7 +60,7 @@ namespace Ekiga
     virtual PresentityPtr get_presentity () const = 0;
   };
 
-  typedef gmref_ptr<SimpleChat> SimpleChatPtr;
+  typedef boost::shared_ptr<SimpleChat> SimpleChatPtr;
 };
 
 #endif
diff --git a/lib/engine/chat/chat.h b/lib/engine/chat/chat.h
index 94e8de8..61c8a5e 100644
--- a/lib/engine/chat/chat.h
+++ b/lib/engine/chat/chat.h
@@ -39,7 +39,7 @@
 #include <string>
 #include <sigc++/sigc++.h>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "chain-of-responsibility.h"
 #include "form-request.h"
@@ -47,7 +47,7 @@
 
 namespace Ekiga
 {
-  class ChatObserver: public virtual GmRefCounted
+  class ChatObserver
   {
   public:
 
@@ -68,7 +68,7 @@ namespace Ekiga
   };
 
 
-  class Chat: public virtual GmRefCounted
+  class Chat
   {
   public:
 
@@ -89,12 +89,12 @@ namespace Ekiga
      * send a few previous messages to the new observer.
      * @param The new observer
      */
-    virtual void connect (gmref_ptr<ChatObserver> observer) = 0;
+    virtual void connect (boost::shared_ptr<ChatObserver> observer) = 0;
 
     /** Disconnects the new observer from the Chat
      * @param The observer to disconnect
      */
-    virtual void disconnect (gmref_ptr<ChatObserver> observer) = 0;
+    virtual void disconnect (boost::shared_ptr<ChatObserver> observer) = 0;
 
     /** Sends a message through the Chat, or at least attempts to :
      * the two ideas are first that the text entry will get blanked
diff --git a/lib/engine/chat/dialect-impl.h b/lib/engine/chat/dialect-impl.h
index c6ce6b2..b4199e9 100644
--- a/lib/engine/chat/dialect-impl.h
+++ b/lib/engine/chat/dialect-impl.h
@@ -75,10 +75,10 @@ namespace Ekiga
 
     /* More STL-like ways to access the chats within this Ekiga::DialectImpl
      */
-    typedef typename Ekiga::map_key_iterator<std::map<gmref_ptr<SimpleChatType>, std::list<sigc::connection> > > simple_iterator;
-    typedef typename Ekiga::map_key_const_iterator<std::map<gmref_ptr<SimpleChatType>, std::list<sigc::connection> > > simple_const_iterator;
-    typedef typename Ekiga::map_key_iterator<std::map<gmref_ptr<MultipleChatType>, std::list<sigc::connection> > > multiple_iterator;
-    typedef typename Ekiga::map_key_const_iterator<std::map<gmref_ptr<MultipleChatType>, std::list<sigc::connection> > > multiple_const_iterator;
+    typedef typename Ekiga::map_key_iterator<std::map<boost::shared_ptr<SimpleChatType>, std::list<sigc::connection> > > simple_iterator;
+    typedef typename Ekiga::map_key_const_iterator<std::map<boost::shared_ptr<SimpleChatType>, std::list<sigc::connection> > > simple_const_iterator;
+    typedef typename Ekiga::map_key_iterator<std::map<boost::shared_ptr<MultipleChatType>, std::list<sigc::connection> > > multiple_iterator;
+    typedef typename Ekiga::map_key_const_iterator<std::map<boost::shared_ptr<MultipleChatType>, std::list<sigc::connection> > > multiple_const_iterator;
 
     simple_iterator simple_begin ();
     simple_iterator simple_end ();
@@ -96,32 +96,32 @@ namespace Ekiga
      * @param The SimpleChat to be added.
      * @return: The Ekiga::Dialect 'simple_chat_added' signal is emitted.
      */
-    void add_simple_chat (gmref_ptr<SimpleChatType> chat);
+    void add_simple_chat (boost::shared_ptr<SimpleChatType> chat);
 
     /** Removes a SimpleChat from the Ekiga::Dialect.
      * @param The SimpleChat to be removed.
      */
-    void remove_simple_chat (gmref_ptr<SimpleChatType> chat);
+    void remove_simple_chat (boost::shared_ptr<SimpleChatType> chat);
 
     /** Adds a MultipleChat to the Ekiga::Dialect.
      * @param The MultipleChat to be added.
      * @return: The Ekiga::Dialect 'multiple_chat_added' signal is emitted.
      */
-    void add_multiple_chat (gmref_ptr<MultipleChatType> chat);
+    void add_multiple_chat (boost::shared_ptr<MultipleChatType> chat);
 
     /** Removes a MultipleChat from the Ekiga::Dialect.
      * @param The MultipleChat to be removed.
      */
-    void remove_multiple_chat (gmref_ptr<MultipleChatType> chat);
+    void remove_multiple_chat (boost::shared_ptr<MultipleChatType> chat);
 
   private:
 
-    std::map<gmref_ptr<SimpleChatType>, std::list<sigc::connection> > simple_chats;
-    std::map<gmref_ptr<MultipleChatType>, std::list<sigc::connection> > multiple_chats;
+    std::map<boost::shared_ptr<SimpleChatType>, std::list<sigc::connection> > simple_chats;
+    std::map<boost::shared_ptr<MultipleChatType>, std::list<sigc::connection> > multiple_chats;
 
-    void on_simple_chat_removed (gmref_ptr<SimpleChatType> chat);
+    void on_simple_chat_removed (boost::shared_ptr<SimpleChatType> chat);
 
-    void on_multiple_chat_removed (gmref_ptr<MultipleChatType> chat);
+    void on_multiple_chat_removed (boost::shared_ptr<MultipleChatType> chat);
   };
 };
 
@@ -133,7 +133,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::DialectImpl ()
 template<typename SimpleChatType, typename MultipleChatType>
 Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::~DialectImpl ()
 {
-  for (typename std::map<gmref_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
        iter != simple_chats.end ();
        iter++) {
 
@@ -144,7 +144,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::~DialectImpl ()
       conn_iter->disconnect ();
     }
   }
-  for (typename std::map<gmref_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
        iter != multiple_chats.end ();
        iter++) {
 
@@ -163,7 +163,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_simple_chats (sigc::
 {
   bool go_on = true;
 
-  for (typename std::map<gmref_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
        go_on && iter != simple_chats.end ();
        iter++) {
 
@@ -177,7 +177,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_multiple_chats (sigc
 {
   bool go_on = true;
 
-  for (typename std::map<gmref_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
        go_on && iter != multiple_chats.end ();
        iter++) {
 
@@ -243,7 +243,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::multiple_end () const
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_simple_chat (gmref_ptr<SimpleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_simple_chat (boost::shared_ptr<SimpleChatType> chat)
 {
   simple_chats[chat].push_back (chat->removed.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_simple_chat_removed), chat)));
   simple_chat_added.emit (chat);
@@ -251,14 +251,14 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_simple_chat (gmref_ptr
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_simple_chat (gmref_ptr<SimpleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_simple_chat (boost::shared_ptr<SimpleChatType> chat)
 {
   chat->removed.emit ();
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_multiple_chat (gmref_ptr<MultipleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_multiple_chat (boost::shared_ptr<MultipleChatType> chat)
 {
   multiple_chats[chat].push_back (chat->removed.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_multiple_chat_removed), chat)));
   multiple_chat_added.emit (chat);
@@ -266,14 +266,14 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::add_multiple_chat (gmref_p
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_multiple_chat (gmref_ptr<MultipleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_multiple_chat (boost::shared_ptr<MultipleChatType> chat)
 {
   chat->removed.emit ();
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_simple_chat_removed (gmref_ptr<SimpleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_simple_chat_removed (boost::shared_ptr<SimpleChatType> chat)
 {
   for (typename std::list<sigc::connection>::iterator iter = simple_chats[chat].begin ();
        iter != simple_chats[chat].end ();
@@ -286,7 +286,7 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_simple_chat_removed (gm
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_multiple_chat_removed (gmref_ptr<MultipleChatType> chat)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_multiple_chat_removed (boost::shared_ptr<MultipleChatType> chat)
 {
   for (typename std::list<sigc::connection>::iterator iter = multiple_chats[chat].begin ();
        iter != multiple_chats[chat].end ();
diff --git a/lib/engine/chat/dialect.h b/lib/engine/chat/dialect.h
index b9c414f..0b22eab 100644
--- a/lib/engine/chat/dialect.h
+++ b/lib/engine/chat/dialect.h
@@ -43,7 +43,7 @@
 namespace Ekiga
 {
 
-  class Dialect: public virtual GmRefCounted
+  class Dialect
   {
   public:
 
@@ -84,7 +84,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequest*> questions;
   };
 
-  typedef gmref_ptr<Dialect> DialectPtr;
+  typedef boost::shared_ptr<Dialect> DialectPtr;
 
 };
 
diff --git a/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp b/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp
index 738cbcc..eb10935 100644
--- a/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp
+++ b/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp
@@ -48,13 +48,13 @@ struct AVAHIPUBSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("avahi-presence-publisher");
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-    gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
-    gmref_ptr<Ekiga::PersonalDetails> details = core.get ("personal-details");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
+    boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
 
     if (presence_core && call_core && details && !service) {
 
-      gmref_ptr<Avahi::PresencePublisher> publisher (new Avahi::PresencePublisher (core, *details, *call_core));
+      boost::shared_ptr<Avahi::PresencePublisher> publisher (new Avahi::PresencePublisher (core, *details, *call_core));
       presence_core->add_presence_publisher (publisher);
       core.add (publisher);
       result = true;
@@ -75,6 +75,6 @@ struct AVAHIPUBSpark: public Ekiga::Spark
 void
 avahi_publisher_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new AVAHIPUBSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new AVAHIPUBSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/avahi/avahi-cluster.cpp b/lib/engine/components/avahi/avahi-cluster.cpp
index d52cecb..4af6845 100644
--- a/lib/engine/components/avahi/avahi-cluster.cpp
+++ b/lib/engine/components/avahi/avahi-cluster.cpp
@@ -44,7 +44,7 @@ Avahi::Cluster::Cluster (Ekiga::ServiceCore &_core): core(_core)
   add_heap (heap);
 
   /* don't check the cast: it has been checked already by avahi-main! */
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   presence_core->add_presence_fetcher (heap);
 }
 
diff --git a/lib/engine/components/avahi/avahi-cluster.h b/lib/engine/components/avahi/avahi-cluster.h
index bb76c6c..38c95f9 100644
--- a/lib/engine/components/avahi/avahi-cluster.h
+++ b/lib/engine/components/avahi/avahi-cluster.h
@@ -77,7 +77,7 @@ namespace Avahi
     HeapPtr heap;
   };
 
-  typedef gmref_ptr<Cluster> ClusterPtr;
+  typedef boost::shared_ptr<Cluster> ClusterPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/avahi/avahi-heap.cpp b/lib/engine/components/avahi/avahi-heap.cpp
index 6a3a651..cf262c8 100644
--- a/lib/engine/components/avahi/avahi-heap.cpp
+++ b/lib/engine/components/avahi/avahi-heap.cpp
@@ -232,11 +232,12 @@ public:
   resolver_callback_helper (const std::string name_): name(name_)
   {}
 
-  bool test (gmref_ptr<Ekiga::URIPresentity> presentity_)
+  bool test (Ekiga::PresentityPtr pres_)
   {
+    boost::shared_ptr<Ekiga::URIPresentity> presentity_ = boost::dynamic_pointer_cast<Ekiga::URIPresentity> (pres_);
     bool result;
 
-    if (presentity_->get_name () == name) {
+    if (presentity_ && presentity_->get_name () == name) {
 
       presentity = presentity_;
       result = false;
@@ -244,11 +245,11 @@ public:
     return result;
   }
 
-  gmref_ptr<Ekiga::URIPresentity> found_presentity () const
+  boost::shared_ptr<Ekiga::URIPresentity> found_presentity () const
   { return presentity; }
 
 private:
-  gmref_ptr<Ekiga::URIPresentity> presentity;
+  boost::shared_ptr<Ekiga::URIPresentity> presentity;
   const std::string name;
 };
 
@@ -318,7 +319,7 @@ Avahi::Heap::ResolverCallback (AvahiServiceResolver *resolver,
 
 	groups.insert (_("Neighbours"));
 	url = g_strdup_printf ("%s:neighbour %s:%d", broken[1], host_name, port);
-	gmref_ptr<Ekiga::URIPresentity> presentity (new Ekiga::URIPresentity (core, name, url, groups));
+	boost::shared_ptr<Ekiga::URIPresentity> presentity (new Ekiga::URIPresentity (core, name, url, groups));
 	status_received.emit (url, status);
 	presence_received.emit (url, presence);
 	add_presentity (presentity);
diff --git a/lib/engine/components/avahi/avahi-heap.h b/lib/engine/components/avahi/avahi-heap.h
index 76c1aa1..1272cce 100644
--- a/lib/engine/components/avahi/avahi-heap.h
+++ b/lib/engine/components/avahi/avahi-heap.h
@@ -116,7 +116,7 @@ namespace Avahi
 		  const std::string name);
   };
 
-  typedef gmref_ptr<Heap> HeapPtr;
+  typedef boost::shared_ptr<Heap> HeapPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/avahi/avahi-main.cpp b/lib/engine/components/avahi/avahi-main.cpp
index 2ea1738..0e08887 100644
--- a/lib/engine/components/avahi/avahi-main.cpp
+++ b/lib/engine/components/avahi/avahi-main.cpp
@@ -49,11 +49,11 @@ struct AVAHISpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("avahi-core");
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
     if ( !service && presence_core) {
 
-      gmref_ptr<Avahi::Cluster> cluster (new Avahi::Cluster (core));
+      boost::shared_ptr<Avahi::Cluster> cluster (new Avahi::Cluster (core));
       core.add (cluster);
       presence_core->add_cluster (cluster);
       result = true;
@@ -74,6 +74,6 @@ struct AVAHISpark: public Ekiga::Spark
 void
 avahi_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new AVAHISpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new AVAHISpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/call-history/history-book.cpp b/lib/engine/components/call-history/history-book.cpp
index 55dda92..79148ba 100644
--- a/lib/engine/components/call-history/history-book.cpp
+++ b/lib/engine/components/call-history/history-book.cpp
@@ -58,9 +58,9 @@ History::Book::Book (Ekiga::ServiceCore &_core) :
 
     const std::string raw = c_raw;
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
 
     root = xmlDocGetRootElement (doc.get ());
     if (root == NULL) {
@@ -80,12 +80,12 @@ History::Book::Book (Ekiga::ServiceCore &_core) :
     g_free (c_raw);
   } else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
     root = xmlNewDocNode (doc.get (), NULL, BAD_CAST "list", NULL);
     xmlDocSetRootElement (doc.get (), root);
   }
 
-  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
 
   call_core->missed_call.connect (sigc::mem_fun (this, &History::Book::on_missed_call));
   call_core->cleared_call.connect (sigc::mem_fun (this, &History::Book::on_cleared_call));
@@ -176,7 +176,7 @@ History::Book::clear ()
 
   remove_all_objects ();
 
-  doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+  doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
   root = xmlNewDocNode (doc.get (), NULL, BAD_CAST "list", NULL);
   xmlDocSetRootElement (doc.get (), root);
 
@@ -185,8 +185,8 @@ History::Book::clear ()
 }
 
 void
-History::Book::on_missed_call (gmref_ptr<Ekiga::CallManager> /*manager*/,
-			       gmref_ptr<Ekiga::Call> call)
+History::Book::on_missed_call (boost::shared_ptr<Ekiga::CallManager> /*manager*/,
+			       boost::shared_ptr<Ekiga::Call> call)
 {
   add (call->get_remote_party_name (),
        call->get_remote_uri (),
@@ -196,8 +196,8 @@ History::Book::on_missed_call (gmref_ptr<Ekiga::CallManager> /*manager*/,
 }
 
 void
-History::Book::on_cleared_call (gmref_ptr<Ekiga::CallManager> /*manager*/,
-				gmref_ptr<Ekiga::Call> call,
+History::Book::on_cleared_call (boost::shared_ptr<Ekiga::CallManager> /*manager*/,
+				boost::shared_ptr<Ekiga::Call> call,
 				std::string /*message*/)
 {
   add (call->get_remote_party_name (),
diff --git a/lib/engine/components/call-history/history-book.h b/lib/engine/components/call-history/history-book.h
index d085d8a..ae9400e 100644
--- a/lib/engine/components/call-history/history-book.h
+++ b/lib/engine/components/call-history/history-book.h
@@ -98,18 +98,18 @@ namespace History
 
     void common_add (Contact &contact);
 
-    void on_missed_call (gmref_ptr<Ekiga::CallManager> manager,
-			 gmref_ptr<Ekiga::Call> call);
+    void on_missed_call (boost::shared_ptr<Ekiga::CallManager> manager,
+			 boost::shared_ptr<Ekiga::Call> call);
 
-    void on_cleared_call (gmref_ptr<Ekiga::CallManager> manager,
-			  gmref_ptr<Ekiga::Call> call,
+    void on_cleared_call (boost::shared_ptr<Ekiga::CallManager> manager,
+			  boost::shared_ptr<Ekiga::Call> call,
 			  std::string message);
 
     Ekiga::ServiceCore &core;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
   };
 
-  typedef gmref_ptr<Book> BookPtr;
+  typedef boost::shared_ptr<Book> BookPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/call-history/history-contact.cpp b/lib/engine/components/call-history/history-contact.cpp
index c7cacd0..7129cd7 100644
--- a/lib/engine/components/call-history/history-contact.cpp
+++ b/lib/engine/components/call-history/history-contact.cpp
@@ -45,12 +45,12 @@
 
 
 History::Contact::Contact (Ekiga::ServiceCore &_core,
-			   std::tr1::shared_ptr<xmlDoc> _doc,
+			   boost::shared_ptr<xmlDoc> _doc,
 			   xmlNodePtr _node):
   core(_core), doc(_doc), node(_node)
 {
   xmlChar* xml_str = NULL;
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
 
   xml_str = xmlGetProp (node, (const xmlChar *)"type");
   if (xml_str != NULL) {
@@ -102,7 +102,7 @@ History::Contact::Contact (Ekiga::ServiceCore &_core,
 
 
 History::Contact::Contact (Ekiga::ServiceCore &_core,
-			   std::tr1::shared_ptr<xmlDoc> _doc,
+			   boost::shared_ptr<xmlDoc> _doc,
 			   const std::string _name,
 			   const std::string _uri,
                            time_t _call_start,
@@ -112,7 +112,7 @@ History::Contact::Contact (Ekiga::ServiceCore &_core,
 {
   gchar* tmp = NULL;
   std::string callp;
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
 
   node = xmlNewNode (NULL, BAD_CAST "entry");
 
@@ -171,7 +171,7 @@ History::Contact::get_groups () const
 bool
 History::Contact::populate_menu (Ekiga::MenuBuilder &builder)
 {
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
   return contact_core->populate_contact_menu (ContactPtr (this),
 					      uri, builder);
 }
diff --git a/lib/engine/components/call-history/history-contact.h b/lib/engine/components/call-history/history-contact.h
index cd33502..5f681be 100644
--- a/lib/engine/components/call-history/history-contact.h
+++ b/lib/engine/components/call-history/history-contact.h
@@ -38,7 +38,7 @@
 
 #include <libxml/tree.h>
 
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 #include "services.h"
 #include "contact-core.h"
@@ -64,11 +64,11 @@ namespace History
   public:
 
     Contact (Ekiga::ServiceCore &_core,
-	     std::tr1::shared_ptr<xmlDoc> _doc,
+	     boost::shared_ptr<xmlDoc> _doc,
 	     xmlNodePtr _node);
 
     Contact (Ekiga::ServiceCore &_core,
-	     std::tr1::shared_ptr<xmlDoc> _doc,
+	     boost::shared_ptr<xmlDoc> _doc,
 	     const std::string _name,
 	     const std::string _uri,
              time_t call_start,
@@ -101,7 +101,7 @@ namespace History
 
     Ekiga::ServiceCore &core;
 
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr node;
     std::string name;
     std::string uri;
@@ -110,7 +110,7 @@ namespace History
     call_type m_type;
   };
 
-  typedef gmref_ptr<Contact> ContactPtr;
+  typedef boost::shared_ptr<Contact> ContactPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/call-history/history-main.cpp b/lib/engine/components/call-history/history-main.cpp
index 947a322..6a5e21c 100644
--- a/lib/engine/components/call-history/history-main.cpp
+++ b/lib/engine/components/call-history/history-main.cpp
@@ -50,12 +50,12 @@ struct HISTORYSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("call-history-store");
-    gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
-    gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+    boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
+    boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
 
     if (contact_core && call_core && !service) {
 
-      gmref_ptr<History::Source> source (new History::Source (core));
+      boost::shared_ptr<History::Source> source (new History::Source (core));
       core.add (source);
       contact_core->add_source (source);
       result = true;
@@ -76,6 +76,6 @@ struct HISTORYSpark: public Ekiga::Spark
 void
 history_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new HISTORYSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new HISTORYSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/call-history/history-source.cpp b/lib/engine/components/call-history/history-source.cpp
index 124dadc..3e7b301 100644
--- a/lib/engine/components/call-history/history-source.cpp
+++ b/lib/engine/components/call-history/history-source.cpp
@@ -39,7 +39,7 @@
 
 History::Source::Source (Ekiga::ServiceCore &_core): core(_core)
 {
-  book = gmref_ptr<Book>(new Book (core));
+  book = boost::shared_ptr<Book>(new Book (core));
 
   add_book (book);
 }
diff --git a/lib/engine/components/dx-videooutput/videooutput-main-dx.cpp b/lib/engine/components/dx-videooutput/videooutput-main-dx.cpp
index b6d2dc1..569589e 100644
--- a/lib/engine/components/dx-videooutput/videooutput-main-dx.cpp
+++ b/lib/engine/components/dx-videooutput/videooutput-main-dx.cpp
@@ -45,7 +45,7 @@ videooutput_dx_init (Ekiga::ServiceCore &core,
 	    char **/*argv*/[])
 {
   bool result = false;
-  gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get ("videooutput-core");
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get<Ekiga::VideoOutputCore> ("videooutput-core");
 
   if (videooutput_core) {
 
diff --git a/lib/engine/components/echo/echo-dialect.h b/lib/engine/components/echo/echo-dialect.h
index 907ec41..be0bfa1 100644
--- a/lib/engine/components/echo/echo-dialect.h
+++ b/lib/engine/components/echo/echo-dialect.h
@@ -65,7 +65,7 @@ namespace Echo
     void new_chat ();
   };
 
-  typedef gmref_ptr<Dialect> DialectPtr;
+  typedef boost::shared_ptr<Dialect> DialectPtr;
 
 };
 
diff --git a/lib/engine/components/echo/echo-main.cpp b/lib/engine/components/echo/echo-main.cpp
index 17eee9c..31a5b13 100644
--- a/lib/engine/components/echo/echo-main.cpp
+++ b/lib/engine/components/echo/echo-main.cpp
@@ -45,11 +45,11 @@ echo_init (Ekiga::ServiceCore &core,
 	   char **/*argv*/[])
 {
   bool result = false;
-  gmref_ptr<Ekiga::ChatCore> chat_core = core.get ("chat-core");
+  boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
 
   if (chat_core) {
 
-    gmref_ptr<Echo::Dialect> dialect (new Echo::Dialect);
+    boost::shared_ptr<Echo::Dialect> dialect (new Echo::Dialect);
     core.add (dialect);
     chat_core->add_dialect (dialect);
     result = true;
diff --git a/lib/engine/components/echo/echo-presentity.h b/lib/engine/components/echo/echo-presentity.h
index 1ede74e..f3560f0 100644
--- a/lib/engine/components/echo/echo-presentity.h
+++ b/lib/engine/components/echo/echo-presentity.h
@@ -36,7 +36,7 @@
 #ifndef __ECHO_PRESENTITY__
 #define __ECHO_PRESENTITY__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "presentity.h"
 
 namespace Echo
@@ -64,7 +64,7 @@ namespace Echo
     bool populate_menu (Ekiga::MenuBuilder &);
   };
 
-  typedef gmref_ptr<Presentity> PresentityPtr;
+  typedef boost::shared_ptr<Presentity> PresentityPtr;
 
 };
 
diff --git a/lib/engine/components/echo/echo-simple.cpp b/lib/engine/components/echo/echo-simple.cpp
index 6e3789b..1b6ca6e 100644
--- a/lib/engine/components/echo/echo-simple.cpp
+++ b/lib/engine/components/echo/echo-simple.cpp
@@ -61,7 +61,7 @@ Echo::SimpleChat::populate_menu (Ekiga::MenuBuilder &/*builder*/)
 }
 
 void
-Echo::SimpleChat::connect (gmref_ptr<Ekiga::ChatObserver> observer)
+Echo::SimpleChat::connect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observer->notice ("This is just an echo chat : type and see back");
 
@@ -69,7 +69,7 @@ Echo::SimpleChat::connect (gmref_ptr<Ekiga::ChatObserver> observer)
 }
 
 void
-Echo::SimpleChat::disconnect (gmref_ptr<Ekiga::ChatObserver> observer)
+Echo::SimpleChat::disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observers.remove (observer);
 
@@ -80,7 +80,7 @@ Echo::SimpleChat::disconnect (gmref_ptr<Ekiga::ChatObserver> observer)
 bool
 Echo::SimpleChat::send_message (const std::string msg)
 {
-  for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+  for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
        iter != observers.end ();
        ++iter)
     (*iter)->message ("Echo", msg);
diff --git a/lib/engine/components/echo/echo-simple.h b/lib/engine/components/echo/echo-simple.h
index 1c6a307..e85a1d9 100644
--- a/lib/engine/components/echo/echo-simple.h
+++ b/lib/engine/components/echo/echo-simple.h
@@ -51,9 +51,9 @@ namespace Echo
 
     const std::string get_title() const;
 
-    void connect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void connect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
-    void disconnect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
     bool send_message (const std::string msg);
 
@@ -63,11 +63,11 @@ namespace Echo
 
   private:
 
-    std::list<gmref_ptr<Ekiga::ChatObserver> > observers;
+    std::list<boost::shared_ptr<Ekiga::ChatObserver> > observers;
     PresentityPtr presentity;
   };
 
-  typedef gmref_ptr<SimpleChat> SimpleChatPtr;
+  typedef boost::shared_ptr<SimpleChat> SimpleChatPtr;
 
 };
 
diff --git a/lib/engine/components/evolution/evolution-book.cpp b/lib/engine/components/evolution/evolution-book.cpp
index abe1321..2720469 100644
--- a/lib/engine/components/evolution/evolution-book.cpp
+++ b/lib/engine/components/evolution/evolution-book.cpp
@@ -95,11 +95,12 @@ public:
   contacts_removed_helper (const std::string id_): id(id_)
   {}
 
-  bool test (Evolution::ContactPtr contact)
+  bool test (Ekiga::ContactPtr contact_)
   {
+    Evolution::ContactPtr contact = boost::dynamic_pointer_cast<Evolution::Contact> (contact_);
     bool result;
 
-    if (contact->get_id () == id) {
+    if (contact && contact->get_id () == id) {
 
       contact->removed.emit ();
       result = false;
@@ -139,11 +140,12 @@ public:
     id = (const gchar*)e_contact_get_const (econtact, E_CONTACT_UID);
   }
 
-  bool test (Evolution::ContactPtr contact)
+  bool test (Ekiga::ContactPtr contact_)
   {
+    Evolution::ContactPtr contact = boost::dynamic_pointer_cast<Evolution::Contact> (contact_);
     bool result = true;
 
-    if (contact->get_id () == id) {
+    if (contact && contact->get_id () == id) {
 
       contact->update_econtact (econtact);
       result = false;
@@ -313,7 +315,7 @@ Evolution::Book::refresh ()
 void
 Evolution::Book::new_contact_action ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Book::on_new_contact_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Book::on_new_contact_form_submitted)));
 
   request->title (_("New contact"));
 
diff --git a/lib/engine/components/evolution/evolution-book.h b/lib/engine/components/evolution/evolution-book.h
index d3f147e..dbe2d56 100644
--- a/lib/engine/components/evolution/evolution-book.h
+++ b/lib/engine/components/evolution/evolution-book.h
@@ -104,7 +104,7 @@ namespace Evolution
     std::string search_filter;
   };
 
-  typedef gmref_ptr<Book> BookPtr;
+  typedef boost::shared_ptr<Book> BookPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/evolution/evolution-contact.cpp b/lib/engine/components/evolution/evolution-contact.cpp
index 4faff35..15ea8eb 100644
--- a/lib/engine/components/evolution/evolution-contact.cpp
+++ b/lib/engine/components/evolution/evolution-contact.cpp
@@ -184,7 +184,7 @@ Evolution::Contact::remove ()
 bool
 Evolution::Contact::populate_menu (Ekiga::MenuBuilder &builder)
 {
-  gmref_ptr<Ekiga::ContactCore> core = services.get ("contact-core");
+  boost::shared_ptr<Ekiga::ContactCore> core = services.get<Ekiga::ContactCore> ("contact-core");
   bool populated = false;
   std::map<std::string, std::string> uris;
 
@@ -301,7 +301,7 @@ Evolution::Contact::set_attribute_value (unsigned int attr_type,
 void
 Evolution::Contact::edit_action ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Contact::on_edit_form_submitted)));;
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Contact::on_edit_form_submitted)));;
 
   request->title (_("Edit contact"));
 
@@ -354,7 +354,7 @@ Evolution::Contact::on_edit_form_submitted (bool submitted,
 void
 Evolution::Contact::remove_action ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Contact::on_remove_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Evolution::Contact::on_remove_form_submitted)));
   gchar* instructions = NULL;
 
   request->title (_("Remove contact"));
diff --git a/lib/engine/components/evolution/evolution-contact.h b/lib/engine/components/evolution/evolution-contact.h
index f841ce6..1b6c097 100644
--- a/lib/engine/components/evolution/evolution-contact.h
+++ b/lib/engine/components/evolution/evolution-contact.h
@@ -111,7 +111,7 @@ namespace Evolution
 				   Ekiga::Form &result);
   };
 
-  typedef gmref_ptr<Contact> ContactPtr;
+  typedef boost::shared_ptr<Contact> ContactPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/evolution/evolution-main.cpp b/lib/engine/components/evolution/evolution-main.cpp
index 99dff78..295aeb9 100644
--- a/lib/engine/components/evolution/evolution-main.cpp
+++ b/lib/engine/components/evolution/evolution-main.cpp
@@ -50,12 +50,12 @@ struct EVOSpark: public Ekiga::Spark
 			    int */*argc*/,
 			    char **/*argv*/[])
   {
-    gmref_ptr<Ekiga::ContactCore> core = services.get ("contact-core");
+    boost::shared_ptr<Ekiga::ContactCore> core = services.get<Ekiga::ContactCore> ("contact-core");
     Ekiga::ServicePtr service = services.get ("evolution-source");
 
     if (core && !service) {
 
-      gmref_ptr<Evolution::Source> source (new Evolution::Source (services));
+      boost::shared_ptr<Evolution::Source> source (new Evolution::Source (services));
       services.add (source);
       core->add_source (source);
       result = true;
@@ -76,6 +76,6 @@ struct EVOSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new EVOSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new EVOSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/evolution/evolution-source.cpp b/lib/engine/components/evolution/evolution-source.cpp
index ccb2431..a7c2c22 100644
--- a/lib/engine/components/evolution/evolution-source.cpp
+++ b/lib/engine/components/evolution/evolution-source.cpp
@@ -110,17 +110,22 @@ public :
   inline void ready ()
   { found = false; }
 
-  bool test (Evolution::BookPtr book)
+  bool test (Ekiga::BookPtr book_)
   {
-    EBook *book_ebook = book->get_ebook ();
-    ESource *book_source = e_book_get_source (book_ebook);
-    ESourceGroup *book_group = e_source_peek_group (book_source);
+    Evolution::BookPtr book = boost::dynamic_pointer_cast<Evolution::Book> (book_);
+    if (book) {
 
-    if (book_group == group) {
+      EBook *book_ebook = book->get_ebook ();
+      ESource *book_source = e_book_get_source (book_ebook);
+      ESourceGroup *book_group = e_source_peek_group (book_source);
 
-      book->removed.emit ();
-      found = true;
+      if (book_group == group) {
+
+	book->removed.emit ();
+	found = true;
+      }
     }
+
     return !found;
   }
 
diff --git a/lib/engine/components/gmconf-personal-details/gmconf-personal-details-main.cpp b/lib/engine/components/gmconf-personal-details/gmconf-personal-details-main.cpp
index 6dcbc18..4d97f1f 100644
--- a/lib/engine/components/gmconf-personal-details/gmconf-personal-details-main.cpp
+++ b/lib/engine/components/gmconf-personal-details/gmconf-personal-details-main.cpp
@@ -45,11 +45,11 @@ gmconf_personal_details_init (Ekiga::ServiceCore &core,
                               char ** /*argv*/[])
 {
   bool result = false;
-  gmref_ptr<Ekiga::PersonalDetails> personal_details = core.get ("personal-details");
+  boost::shared_ptr<Ekiga::PersonalDetails> personal_details = core.get<Ekiga::PersonalDetails> ("personal-details");
 
   if ( !personal_details) {
 
-    gmref_ptr<Gmconf::PersonalDetails> gmconf_details (new Gmconf::PersonalDetails ());
+    boost::shared_ptr<Gmconf::PersonalDetails> gmconf_details (new Gmconf::PersonalDetails ());
     core.add (gmconf_details);
     result = true;
   }
diff --git a/lib/engine/components/gnome-session/gnome-session-main.cpp b/lib/engine/components/gnome-session/gnome-session-main.cpp
index 0f8ef01..980fc49 100644
--- a/lib/engine/components/gnome-session/gnome-session-main.cpp
+++ b/lib/engine/components/gnome-session/gnome-session-main.cpp
@@ -50,7 +50,7 @@
 
 struct GNOMESESSIONService: public Ekiga::Service
 {
-  GNOMESESSIONService (gmref_ptr<Ekiga::CallCore> call_core);
+  GNOMESESSIONService (boost::shared_ptr<Ekiga::CallCore> call_core);
 
   ~GNOMESESSIONService ();
 
@@ -62,14 +62,14 @@ struct GNOMESESSIONService: public Ekiga::Service
 
 private:
 
-  void on_established_call (gmref_ptr<Ekiga::CallManager> manager,
-			    gmref_ptr<Ekiga::Call> call);
+  void on_established_call (boost::shared_ptr<Ekiga::CallManager> manager,
+			    boost::shared_ptr<Ekiga::Call> call);
 
-  void on_cleared_call (gmref_ptr<Ekiga::CallManager> manager,
-			gmref_ptr<Ekiga::Call> call);
+  void on_cleared_call (boost::shared_ptr<Ekiga::CallManager> manager,
+			boost::shared_ptr<Ekiga::Call> call);
 
   DBusGProxy* proxy;
-  std::map<gmref_ptr<Ekiga::Call>, guint> cookies;
+  std::map<boost::shared_ptr<Ekiga::Call>, guint> cookies;
 };
 
 struct GNOMESESSIONSpark: public Ekiga::Spark
@@ -81,7 +81,7 @@ struct GNOMESESSIONSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+    boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
     Ekiga::ServicePtr service = core.get ("gnome-session");
 
     if (call_core && !service) {
@@ -105,11 +105,11 @@ struct GNOMESESSIONSpark: public Ekiga::Spark
 void
 gnomesession_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new GNOMESESSIONSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new GNOMESESSIONSpark);
   kickstart.add_spark (spark);
 }
 
-GNOMESESSIONService::GNOMESESSIONService (gmref_ptr<Ekiga::CallCore> call_core)
+GNOMESESSIONService::GNOMESESSIONService (boost::shared_ptr<Ekiga::CallCore> call_core)
 {
   GError* error = NULL;
 
@@ -146,8 +146,8 @@ GNOMESESSIONService::~GNOMESESSIONService ()
 }
 
 void
-GNOMESESSIONService::on_established_call (gmref_ptr<Ekiga::CallManager> /*manager*/,
-					  gmref_ptr<Ekiga::Call> call)
+GNOMESESSIONService::on_established_call (boost::shared_ptr<Ekiga::CallManager> /*manager*/,
+					  boost::shared_ptr<Ekiga::Call> call)
 {
   guint cookie;
 
@@ -166,10 +166,10 @@ GNOMESESSIONService::on_established_call (gmref_ptr<Ekiga::CallManager> /*manage
 }
 
 void
-GNOMESESSIONService::on_cleared_call (gmref_ptr<Ekiga::CallManager> /*manager*/,
-				      gmref_ptr<Ekiga::Call> call)
+GNOMESESSIONService::on_cleared_call (boost::shared_ptr<Ekiga::CallManager> /*manager*/,
+				      boost::shared_ptr<Ekiga::Call> call)
 {
-  std::map<gmref_ptr<Ekiga::Call>, guint>::iterator iter = cookies.find (call);
+  std::map<boost::shared_ptr<Ekiga::Call>, guint>::iterator iter = cookies.find (call);
 
   if (iter != cookies.end ()) {
 
diff --git a/lib/engine/components/gstreamer/gst-main.cpp b/lib/engine/components/gstreamer/gst-main.cpp
index 1739bb4..e33239b 100644
--- a/lib/engine/components/gstreamer/gst-main.cpp
+++ b/lib/engine/components/gstreamer/gst-main.cpp
@@ -71,9 +71,9 @@ struct GSTSpark: public Ekiga::Spark
 			    int* argc,
 			    char** argv[])
   {
-    gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core.get ("audioinput-core");
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get ("audiooutput-core");
-    gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core.get ("videoinput-core");
+    boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core.get<Ekiga::AudioInputCore> ("audioinput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
+    boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core.get<Ekiga::VideoInputCore> ("videoinput-core");
     Ekiga::ServicePtr service = core.get ("gstreamer");
 
     if (audioinput_core && audiooutput_core && videoinput_core && !service) {
@@ -111,6 +111,6 @@ struct GSTSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new GSTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new GSTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/hal-dbus/hal-main-dbus.cpp b/lib/engine/components/hal-dbus/hal-main-dbus.cpp
index f7e6193..cefa93f 100644
--- a/lib/engine/components/hal-dbus/hal-main-dbus.cpp
+++ b/lib/engine/components/hal-dbus/hal-main-dbus.cpp
@@ -49,7 +49,7 @@ struct HALDBUSSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::HalCore> hal_core = core.get ("hal-core");
+    boost::shared_ptr<Ekiga::HalCore> hal_core = core.get<Ekiga::HalCore> ("hal-core");
 
     if (hal_core) {
 
@@ -76,6 +76,6 @@ struct HALDBUSSpark: public Ekiga::Spark
 void
 hal_dbus_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new HALDBUSSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new HALDBUSSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/kab/kab-book.h b/lib/engine/components/kab/kab-book.h
index a682fa9..b59b9de 100644
--- a/lib/engine/components/kab/kab-book.h
+++ b/lib/engine/components/kab/kab-book.h
@@ -78,7 +78,7 @@ namespace KAB
     Ekiga::ContactCore &core;
   };
 
-  typedef gmref_ptr<Book> BookPtr;
+  typedef boost::shared_ptr<Book> BookPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/kab/kab-contact.h b/lib/engine/components/kab/kab-contact.h
index 3998723..f57cfde 100644
--- a/lib/engine/components/kab/kab-contact.h
+++ b/lib/engine/components/kab/kab-contact.h
@@ -75,7 +75,7 @@ namespace KAB
     KABC::Addressee& addressee;
   };
 
-  typedef gmref_ptr<Contact> ContactPtr;
+  typedef boost::shared_ptr<Contact> ContactPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/kab/kab-main.cpp b/lib/engine/components/kab/kab-main.cpp
index c7fd71c..fe8fecb 100644
--- a/lib/engine/components/kab/kab-main.cpp
+++ b/lib/engine/components/kab/kab-main.cpp
@@ -49,11 +49,11 @@ struct KABSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr kde_core = core.get ("kde-core");
-    gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+    boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
 
     if (contact_core && kde_core) {
 
-      gmref_ptr<KAB::Source> source (new KAB::Source (*contact_core));
+      boost::shared_ptr<KAB::Source> source (new KAB::Source (*contact_core));
       core.add (source);
       contact_core->add_source (source);
       result = true;
@@ -75,6 +75,6 @@ struct KABSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new KABSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new KABSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/kab/kab-source.h b/lib/engine/components/kab/kab-source.h
index ac0870c..d103263 100644
--- a/lib/engine/components/kab/kab-source.h
+++ b/lib/engine/components/kab/kab-source.h
@@ -76,7 +76,7 @@ namespace KAB
     Ekiga::ContactCore &core;
   };
 
-  typedef gmref_ptr<Source> SourcePtr;
+  typedef boost::shared_ptr<Source> SourcePtr;
 
 /**
  * @}
diff --git a/lib/engine/components/kde/kde-main.cpp b/lib/engine/components/kde/kde-main.cpp
index 15d036e..28e7295 100644
--- a/lib/engine/components/kde/kde-main.cpp
+++ b/lib/engine/components/kde/kde-main.cpp
@@ -86,6 +86,6 @@ struct KDESpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new KDESpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new KDESpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/ldap/ldap-book.cpp b/lib/engine/components/ldap/ldap-book.cpp
index 6ef7f2a..2bfdf63 100644
--- a/lib/engine/components/ldap/ldap-book.cpp
+++ b/lib/engine/components/ldap/ldap-book.cpp
@@ -169,7 +169,7 @@ struct RefreshData
 /* actual implementation */
 
 OPENLDAP::Book::Book (Ekiga::ServiceCore &_core,
-		      std::tr1::shared_ptr<xmlDoc> _doc,
+		      boost::shared_ptr<xmlDoc> _doc,
 		      xmlNodePtr _node):
   saslform(NULL), core(_core), doc(_doc), node(_node),
   name_node(NULL), uri_node(NULL), authcID_node(NULL), password_node(NULL),
@@ -338,7 +338,7 @@ OPENLDAP::Book::Book (Ekiga::ServiceCore &_core,
 }
 
 OPENLDAP::Book::Book (Ekiga::ServiceCore &_core,
-		      std::tr1::shared_ptr<xmlDoc> _doc,
+		      boost::shared_ptr<xmlDoc> _doc,
 		      OPENLDAP::BookInfo _bookinfo):
   saslform(NULL), core(_core), doc(_doc), name_node(NULL),
   uri_node(NULL), authcID_node(NULL), password_node(NULL),
@@ -535,7 +535,7 @@ extern "C" {
 
     /* If there are missing items, try to get them all in one dialog */
     if (nprompts) {
-      gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (ctx->book, &OPENLDAP::Book::on_sasl_form_submitted)));
+      boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (ctx->book, &OPENLDAP::Book::on_sasl_form_submitted)));
       Ekiga::FormBuilder result;
       std::string prompt;
       std::string ctxt = "";
@@ -909,7 +909,7 @@ OPENLDAP::Book::refresh_result ()
 }
 
 void
-OPENLDAP::BookForm (gmref_ptr<Ekiga::FormRequestSimple> request,
+OPENLDAP::BookForm (boost::shared_ptr<Ekiga::FormRequestSimple> request,
 		    struct BookInfo &info,
 		    std::string title)
 {
@@ -985,7 +985,7 @@ OPENLDAP::BookForm (gmref_ptr<Ekiga::FormRequestSimple> request,
 void
 OPENLDAP::Book::edit ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Book::on_edit_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Book::on_edit_form_submitted)));
 
   OPENLDAP::BookForm (request, bookinfo, std::string(_("Edit LDAP directory")));
 
@@ -1095,7 +1095,7 @@ OPENLDAP::Book::on_edit_form_submitted (bool submitted,
 
   std::string errmsg;
   if (OPENLDAP::BookFormInfo (result, bookinfo, errmsg)) {
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Book::on_edit_form_submitted)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Book::on_edit_form_submitted)));
 
     result.visit (*request);
     request->error (errmsg);
diff --git a/lib/engine/components/ldap/ldap-book.h b/lib/engine/components/ldap/ldap-book.h
index eea73e1..0e99849 100644
--- a/lib/engine/components/ldap/ldap-book.h
+++ b/lib/engine/components/ldap/ldap-book.h
@@ -40,7 +40,7 @@
 #define __LDAP_BOOK_H__
 
 #include <vector>
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 #include <libxml/tree.h>
 #include <glib/gi18n.h>
 
@@ -68,7 +68,7 @@ namespace OPENLDAP
     bool starttls;
   };
 
-  void BookForm (gmref_ptr<Ekiga::FormRequestSimple> req,
+  void BookForm (boost::shared_ptr<Ekiga::FormRequestSimple> req,
 		 struct BookInfo &info,
 		 std::string title );
 
@@ -89,11 +89,11 @@ namespace OPENLDAP
   public:
 
     Book (Ekiga::ServiceCore &_core,
-	  std::tr1::shared_ptr<xmlDoc> _doc,
+	  boost::shared_ptr<xmlDoc> _doc,
 	  xmlNodePtr node);
 
     Book (Ekiga::ServiceCore &_core,
-	  std::tr1::shared_ptr<xmlDoc> _doc,
+	  boost::shared_ptr<xmlDoc> _doc,
     	  OPENLDAP::BookInfo _bookinfo);
 
     ~Book ();
@@ -136,7 +136,7 @@ namespace OPENLDAP
 				 Ekiga::Form &form);
 
     Ekiga::ServiceCore &core;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr node;
 
     xmlNodePtr name_node;
@@ -153,7 +153,7 @@ namespace OPENLDAP
     std::string search_filter;
   };
 
-  typedef gmref_ptr<Book> BookPtr;
+  typedef boost::shared_ptr<Book> BookPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/ldap/ldap-contact.cpp b/lib/engine/components/ldap/ldap-contact.cpp
index 3c84840..6391cbe 100644
--- a/lib/engine/components/ldap/ldap-contact.cpp
+++ b/lib/engine/components/ldap/ldap-contact.cpp
@@ -62,7 +62,7 @@ OPENLDAP::Contact::get_name () const
 bool
 OPENLDAP::Contact::populate_menu (Ekiga::MenuBuilder &builder)
 {
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
   /* FIXME: add here the specific actions we want to allow
    * (before or after the uri-specific actions)
    */
diff --git a/lib/engine/components/ldap/ldap-contact.h b/lib/engine/components/ldap/ldap-contact.h
index 31cd75e..1268c2d 100644
--- a/lib/engine/components/ldap/ldap-contact.h
+++ b/lib/engine/components/ldap/ldap-contact.h
@@ -74,7 +74,7 @@ namespace OPENLDAP
     std::map<std::string, std::string> uris;
   };
 
-  typedef gmref_ptr<Contact> ContactPtr;
+  typedef boost::shared_ptr<Contact> ContactPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/ldap/ldap-main.cpp b/lib/engine/components/ldap/ldap-main.cpp
index 0f4ecda..896612e 100644
--- a/lib/engine/components/ldap/ldap-main.cpp
+++ b/lib/engine/components/ldap/ldap-main.cpp
@@ -52,11 +52,11 @@ struct LDAPSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
+    boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
 
     if (contact_core) {
 
-      gmref_ptr<OPENLDAP::Source> service (new OPENLDAP::Source (core));
+      boost::shared_ptr<OPENLDAP::Source> service (new OPENLDAP::Source (core));
       core.add (service);
       contact_core->add_source (service);
       sasl_client_init (NULL); // FIXME: shouldn't it be done by the source!?
@@ -78,6 +78,6 @@ struct LDAPSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new LDAPSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new LDAPSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/ldap/ldap-source.cpp b/lib/engine/components/ldap/ldap-source.cpp
index b8ade6b..48e00af 100644
--- a/lib/engine/components/ldap/ldap-source.cpp
+++ b/lib/engine/components/ldap/ldap-source.cpp
@@ -57,9 +57,9 @@ OPENLDAP::Source::Source (Ekiga::ServiceCore &_core):
 
     const std::string raw = c_raw;
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
 
     root = xmlDocGetRootElement (doc.get ());
 
@@ -82,7 +82,7 @@ OPENLDAP::Source::Source (Ekiga::ServiceCore &_core):
     g_free (c_raw);
   } else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
     root = xmlNewDocNode (doc.get (), NULL, BAD_CAST "list", NULL);
     xmlDocSetRootElement (doc.get (), root);
 
@@ -136,7 +136,7 @@ OPENLDAP::Source::populate_menu (Ekiga::MenuBuilder &builder)
 void
 OPENLDAP::Source::new_book ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Source::on_new_book_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Source::on_new_book_form_submitted)));
 
   bookinfo.name = "";
   bookinfo.uri = "ldap://localhost/dc=net?cn,telephoneNumber?sub?(cn=$)",
@@ -180,7 +180,7 @@ OPENLDAP::Source::on_new_book_form_submitted (bool submitted,
   std::string errmsg;
 
   if (OPENLDAP::BookFormInfo (result, bookinfo, errmsg)) {
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Source::on_new_book_form_submitted)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &OPENLDAP::Source::on_new_book_form_submitted)));
 
     result.visit (*request);
     request->error (errmsg);
diff --git a/lib/engine/components/ldap/ldap-source.h b/lib/engine/components/ldap/ldap-source.h
index 3cc1418..4259b33 100644
--- a/lib/engine/components/ldap/ldap-source.h
+++ b/lib/engine/components/ldap/ldap-source.h
@@ -76,7 +76,7 @@ namespace OPENLDAP
   private:
 
     Ekiga::ServiceCore &core;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
 
     struct BookInfo bookinfo;
 
diff --git a/lib/engine/components/libnotify/libnotify-main.cpp b/lib/engine/components/libnotify/libnotify-main.cpp
index 124143f..dab3550 100644
--- a/lib/engine/components/libnotify/libnotify-main.cpp
+++ b/lib/engine/components/libnotify/libnotify-main.cpp
@@ -36,7 +36,7 @@
  */
 
 #include <map>
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 #include <libnotify/notify.h>
 
@@ -52,7 +52,7 @@ class LibNotify:
 {
 public:
 
-  LibNotify (gmref_ptr<Ekiga::NotificationCore> core);
+  LibNotify (boost::shared_ptr<Ekiga::NotificationCore> core);
 
   ~LibNotify ();
 
@@ -64,10 +64,10 @@ public:
 
 private:
 
-  void on_notification_added (gmref_ptr<Ekiga::Notification> notif);
-  void on_notification_removed (gmref_ptr<Ekiga::Notification> notif);
+  void on_notification_added (boost::shared_ptr<Ekiga::Notification> notif);
+  void on_notification_removed (boost::shared_ptr<Ekiga::Notification> notif);
 
-  typedef std::map<gmref_ptr<Ekiga::Notification>, std::pair<sigc::connection, std::tr1::shared_ptr<NotifyNotification> > > container_type;
+  typedef std::map<boost::shared_ptr<Ekiga::Notification>, std::pair<sigc::connection, boost::shared_ptr<NotifyNotification> > > container_type;
   container_type live;
 };
 
@@ -81,7 +81,7 @@ struct LIBNOTIFYSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::NotificationCore> notification = core.get ("notification-core");
+    boost::shared_ptr<Ekiga::NotificationCore> notification = core.get<Ekiga::NotificationCore> ("notification-core");
     Ekiga::ServicePtr service = core.get ("libnotify");
 
     if (notification && !service) {
@@ -106,11 +106,11 @@ struct LIBNOTIFYSpark: public Ekiga::Spark
 void
 libnotify_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new LIBNOTIFYSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new LIBNOTIFYSpark);
   kickstart.add_spark (spark);
 }
 
-LibNotify::LibNotify (gmref_ptr<Ekiga::NotificationCore> core)
+LibNotify::LibNotify (boost::shared_ptr<Ekiga::NotificationCore> core)
 {
   notify_init ("Ekiga");
   core->notification_added.connect (sigc::mem_fun (this, &LibNotify::on_notification_added));
@@ -131,7 +131,7 @@ on_notif_closed (NotifyNotification* /*notif*/,
 }
 
 void
-LibNotify::on_notification_added (gmref_ptr<Ekiga::Notification> notification)
+LibNotify::on_notification_added (boost::shared_ptr<Ekiga::Notification> notification)
 {
   NotifyNotification* notif = NULL;
   const gchar* urgency = NULL;
@@ -164,13 +164,13 @@ LibNotify::on_notification_added (gmref_ptr<Ekiga::Notification> notification)
 		    G_CALLBACK (on_notif_closed), notification.get ());
   sigc::connection conn = notification->removed.connect (sigc::bind (sigc::mem_fun (this, &LibNotify::on_notification_removed), notification));
 
-  live[notification] = std::pair<sigc::connection, std::tr1::shared_ptr<NotifyNotification> > (conn, std::tr1::shared_ptr<NotifyNotification> (notif, g_object_unref));
+  live[notification] = std::pair<sigc::connection, boost::shared_ptr<NotifyNotification> > (conn, boost::shared_ptr<NotifyNotification> (notif, g_object_unref));
 
   (void)notify_notification_show (notif, NULL);
 }
 
 void
-LibNotify::on_notification_removed (gmref_ptr<Ekiga::Notification> notification)
+LibNotify::on_notification_removed (boost::shared_ptr<Ekiga::Notification> notification)
 {
   container_type::iterator iter = live.find (notification);
 
diff --git a/lib/engine/components/local-roster/local-cluster.cpp b/lib/engine/components/local-roster/local-cluster.cpp
index 4c4fd19..27f67fb 100644
--- a/lib/engine/components/local-roster/local-cluster.cpp
+++ b/lib/engine/components/local-roster/local-cluster.cpp
@@ -42,7 +42,7 @@
 
 Local::Cluster::Cluster (Ekiga::ServiceCore &_core): core(_core)
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
   heap = HeapPtr (new Heap (core));
 
@@ -59,7 +59,7 @@ Local::Cluster::~Cluster ()
 bool
 Local::Cluster::is_supported_uri (const std::string uri) const
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
   return presence_core->is_supported_uri (uri);
 }
diff --git a/lib/engine/components/local-roster/local-cluster.h b/lib/engine/components/local-roster/local-cluster.h
index fcab78e..45d39da 100644
--- a/lib/engine/components/local-roster/local-cluster.h
+++ b/lib/engine/components/local-roster/local-cluster.h
@@ -90,7 +90,7 @@ namespace Local
 			     std::string status);
   };
 
-  typedef gmref_ptr<Cluster> ClusterPtr;
+  typedef boost::shared_ptr<Cluster> ClusterPtr;
 /**
  * @}
  */
diff --git a/lib/engine/components/local-roster/local-heap.cpp b/lib/engine/components/local-roster/local-heap.cpp
index c84a769..0177699 100644
--- a/lib/engine/components/local-roster/local-heap.cpp
+++ b/lib/engine/components/local-roster/local-heap.cpp
@@ -59,9 +59,9 @@ Local::Heap::Heap (Ekiga::ServiceCore &_core): core (_core), doc ()
   if (c_raw != NULL) {
 
     const std::string raw = c_raw;
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
 
     root = xmlDocGetRootElement (doc.get ());
     if (root == NULL) {
@@ -82,7 +82,7 @@ Local::Heap::Heap (Ekiga::ServiceCore &_core): core (_core), doc ()
   }
   else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
     root = xmlNewDocNode (doc.get (), NULL, BAD_CAST "list", NULL);
     xmlDocSetRootElement (doc.get (), root);
 
@@ -138,9 +138,10 @@ struct has_presentity_with_uri_helper
 
   bool found;
 
-  bool test (Local::PresentityPtr presentity)
+  bool test (Ekiga::PresentityPtr pres)
   {
-    if (presentity->get_uri () == uri) {
+    Local::PresentityPtr presentity = boost::dynamic_pointer_cast<Local::Presentity> (pres);
+    if (presentity && presentity->get_uri () == uri) {
 
       found = true;
     }
@@ -163,12 +164,17 @@ struct existing_groups_helper
 {
   std::set<std::string> groups;
 
-  bool test (Local::PresentityPtr presentity)
+  bool test (Ekiga::PresentityPtr pres)
   {
-    const std::set<std::string> presentity_groups = presentity->get_groups ();
+    Local::PresentityPtr presentity = boost::dynamic_pointer_cast<Local::Presentity> (pres);
 
-    groups.insert (presentity_groups.begin (),
-		   presentity_groups.end ());
+    if (pres) {
+
+      const std::set<std::string> presentity_groups = presentity->get_groups ();
+
+      groups.insert (presentity_groups.begin (),
+		     presentity_groups.end ());
+    }
 
     return true;
   }
@@ -218,8 +224,8 @@ Local::Heap::new_presentity (const std::string name,
 {
   if (!has_presentity_with_uri (uri)) {
 
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted)));
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted)));
     std::set<std::string> groups = existing_groups ();
 
     request->title (_("Add to local roster"));
@@ -254,9 +260,10 @@ struct push_presence_helper
 						      presence(presence_)
   {}
 
-  bool test (Local::PresentityPtr presentity)
+  bool test (Ekiga::PresentityPtr pres_)
   {
-    if (presentity->get_uri () == uri) {
+    Local::PresentityPtr presentity = boost::dynamic_pointer_cast<Local::Presentity> (pres_);
+    if (presentity && presentity->get_uri () == uri) {
 
       presentity->set_presence (presence);
     }
@@ -284,9 +291,10 @@ struct push_status_helper
 						  status(status_)
   {}
 
-  bool test (Local::PresentityPtr presentity)
+  bool test (Ekiga::PresentityPtr pres_)
   {
-    if (presentity->get_uri () == uri) {
+    Local::PresentityPtr presentity = boost::dynamic_pointer_cast<Local::Presentity> (pres_);
+    if (presentity && presentity->get_uri () == uri) {
 
       presentity->set_status (status);
     }
@@ -341,7 +349,7 @@ Local::Heap::add (const std::string name,
 void
 Local::Heap::common_add (PresentityPtr presentity)
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
   // Add the presentity to this Heap
   add_presentity (presentity);
@@ -375,7 +383,7 @@ Local::Heap::new_presentity_form_submitted (bool submitted,
   if (!submitted)
     return;
 
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   const std::string name = result.text ("name");
   const std::string good_uri = result.hidden ("good-uri");
   std::string uri;
@@ -396,7 +404,7 @@ Local::Heap::new_presentity_form_submitted (bool submitted,
     save ();
   } else {
 
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted)));
 
     result.visit (*request);
     if (!presence_core->is_supported_uri (uri))
@@ -411,7 +419,7 @@ Local::Heap::new_presentity_form_submitted (bool submitted,
 void
 Local::Heap::on_rename_group (std::string name)
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind<0>(sigc::mem_fun (this, &Local::Heap::rename_group_form_submitted), name)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind<0>(sigc::mem_fun (this, &Local::Heap::rename_group_form_submitted), name)));
 
   request->title (_("Rename group"));
   request->instructions (_("Please edit this group name"));
@@ -431,9 +439,11 @@ struct rename_group_form_submitted_helper
   const std::string old_name;
   const std::string new_name;
 
-  bool rename_group (Local::PresentityPtr presentity)
+  bool rename_group (Ekiga::PresentityPtr pres)
   {
-    presentity->rename_group (old_name, new_name);
+    Local::PresentityPtr presentity = boost::dynamic_pointer_cast<Local::Presentity> (pres);
+    if (presentity)
+      presentity->rename_group (old_name, new_name);
     return true;
   }
 };
diff --git a/lib/engine/components/local-roster/local-heap.h b/lib/engine/components/local-roster/local-heap.h
index a21638d..e571c2d 100644
--- a/lib/engine/components/local-roster/local-heap.h
+++ b/lib/engine/components/local-roster/local-heap.h
@@ -206,10 +206,10 @@ namespace Local
 				      Ekiga::Form& result);
 
     Ekiga::ServiceCore &core;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
   };
 
-  typedef gmref_ptr<Heap> HeapPtr;
+  typedef boost::shared_ptr<Heap> HeapPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/local-roster/local-presentity.cpp b/lib/engine/components/local-roster/local-presentity.cpp
index 4d13cb4..ed3ae42 100644
--- a/lib/engine/components/local-roster/local-presentity.cpp
+++ b/lib/engine/components/local-roster/local-presentity.cpp
@@ -47,7 +47,7 @@
  * Public API
  */
 Local::Presentity::Presentity (Ekiga::ServiceCore &_core,
-			       std::tr1::shared_ptr<xmlDoc> _doc,
+			       boost::shared_ptr<xmlDoc> _doc,
 			       xmlNodePtr _node) :
   core(_core), doc(_doc), node(_node), presence("unknown")
 {
@@ -55,7 +55,7 @@ Local::Presentity::Presentity (Ekiga::ServiceCore &_core,
 
 
 Local::Presentity::Presentity (Ekiga::ServiceCore &_core,
-			       std::tr1::shared_ptr<xmlDoc> _doc,
+			       boost::shared_ptr<xmlDoc> _doc,
 			       const std::string name,
 			       const std::string uri,
 			       const std::set<std::string> groups) :
@@ -200,7 +200,7 @@ bool
 Local::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
 {
   bool populated = false;
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
   populated
     = presence_core->populate_presentity_menu (PresentityPtr(this),
@@ -228,8 +228,8 @@ Local::Presentity::get_node () const
 void
 Local::Presentity::edit_presentity ()
 {
-  ClusterPtr cluster = core.get ("local-cluster");
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Presentity::edit_presentity_form_submitted)));
+  ClusterPtr cluster = core.get<Local::Cluster> ("local-cluster");
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Local::Presentity::edit_presentity_form_submitted)));
 
   std::string name = get_name ();
   std::string uri = get_uri ();
@@ -284,7 +284,7 @@ Local::Presentity::edit_presentity_form_submitted (bool submitted,
 
   if (uri != new_uri) {
 
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
     presence_core->unfetch_presence (uri);
     presence = "unknown";
     presence_core->fetch_presence (new_uri);
@@ -414,7 +414,7 @@ Local::Presentity::rename_group (const std::string old_name,
 void
 Local::Presentity::remove ()
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   presence_core->unfetch_presence (get_uri ());
 
   xmlUnlinkNode (node);
diff --git a/lib/engine/components/local-roster/local-presentity.h b/lib/engine/components/local-roster/local-presentity.h
index df6ae9d..0bee718 100644
--- a/lib/engine/components/local-roster/local-presentity.h
+++ b/lib/engine/components/local-roster/local-presentity.h
@@ -40,7 +40,7 @@
 
 #include <libxml/tree.h>
 
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 
 #include "form.h"
@@ -73,11 +73,11 @@ namespace Local
      * Constructors (and destructor)
      */
     Presentity (Ekiga::ServiceCore &_core,
-		std::tr1::shared_ptr<xmlDoc> _doc,
+		boost::shared_ptr<xmlDoc> _doc,
 		xmlNodePtr _node);
 
     Presentity (Ekiga::ServiceCore &_core,
-		std::tr1::shared_ptr<xmlDoc> _doc,
+		boost::shared_ptr<xmlDoc> _doc,
 		const std::string _name,
 		const std::string _uri,
 		const std::set<std::string> _groups);
@@ -185,7 +185,7 @@ namespace Local
 
     Ekiga::ServiceCore &core;
 
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr node;
 
     std::string presence;
@@ -193,7 +193,7 @@ namespace Local
     std::string avatar;
   };
 
-  typedef gmref_ptr<Presentity> PresentityPtr;
+  typedef boost::shared_ptr<Presentity> PresentityPtr;
 
 /**
  * @}
diff --git a/lib/engine/components/local-roster/local-roster-bridge.cpp b/lib/engine/components/local-roster/local-roster-bridge.cpp
index 014dd7b..0add77e 100644
--- a/lib/engine/components/local-roster/local-roster-bridge.cpp
+++ b/lib/engine/components/local-roster/local-roster-bridge.cpp
@@ -113,12 +113,12 @@ struct LOCALROSTERBRIDGESpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("local-roster-bridge");
-    gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
-    gmref_ptr<Local::Cluster> cluster = core.get ("local-cluster");
+    boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
+    boost::shared_ptr<Local::Cluster> cluster = core.get<Local::Cluster> ("local-cluster");
 
     if (cluster && contact_core && !service) {
 
-      gmref_ptr<Local::ContactDecorator> decorator (new Local::ContactDecorator (cluster));
+      boost::shared_ptr<Local::ContactDecorator> decorator (new Local::ContactDecorator (cluster));
       core.add (decorator);
       contact_core->add_contact_decorator (decorator);
       result = true;
@@ -139,6 +139,6 @@ struct LOCALROSTERBRIDGESpark: public Ekiga::Spark
 void
 local_roster_bridge_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new LOCALROSTERBRIDGESpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new LOCALROSTERBRIDGESpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/local-roster/local-roster-main.cpp b/lib/engine/components/local-roster/local-roster-main.cpp
index d698847..659407d 100644
--- a/lib/engine/components/local-roster/local-roster-main.cpp
+++ b/lib/engine/components/local-roster/local-roster-main.cpp
@@ -50,12 +50,12 @@ struct LOCALROSTERSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("local-cluster");
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-    gmref_ptr<Ekiga::FriendOrFoe> iff = core.get ("friend-or-foe");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<Ekiga::FriendOrFoe> iff = core.get<Ekiga::FriendOrFoe> ("friend-or-foe");
 
     if (presence_core && iff && !service) {
 
-      gmref_ptr<Local::Cluster> cluster (new Local::Cluster (core));
+      boost::shared_ptr<Local::Cluster> cluster (new Local::Cluster (core));
       core.add (cluster);
       iff->add_helper (cluster->get_heap ());
       presence_core->add_cluster (cluster);
@@ -77,6 +77,6 @@ struct LOCALROSTERSpark: public Ekiga::Spark
 void
 local_roster_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new LOCALROSTERSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new LOCALROSTERSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/loudmouth/loudmouth-account.cpp b/lib/engine/components/loudmouth/loudmouth-account.cpp
index 1821b14..8cfec88 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-account.cpp
@@ -66,9 +66,9 @@ on_authenticate_c (LmConnection* /*unused*/,
 
 /* and here is the C++ code : */
 
-LM::Account::Account (gmref_ptr<Ekiga::PersonalDetails> details_,
-		      gmref_ptr<Dialect> dialect_,
-		      gmref_ptr<Cluster> cluster_,
+LM::Account::Account (boost::shared_ptr<Ekiga::PersonalDetails> details_,
+		      boost::shared_ptr<Dialect> dialect_,
+		      boost::shared_ptr<Cluster> cluster_,
 		      xmlNodePtr node_):
   details(details_), dialect(dialect_), cluster(cluster_), node(node_)
 {
@@ -229,7 +229,7 @@ LM::Account::on_authenticate (bool result)
 {
   if (result) {
 
-    heap = gmref_ptr<Heap> (new Heap (details, dialect, connection));
+    heap = boost::shared_ptr<Heap> (new Heap (details, dialect, connection));
     {
       xmlChar *xml_str = xmlGetProp (node, BAD_CAST "name");
       heap->set_name ((const char*)xml_str);
@@ -256,7 +256,7 @@ LM::Account::get_node () const
 void
 LM::Account::edit ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Account::on_edit_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Account::on_edit_form_submitted)));
   xmlChar* xml_str = NULL;
 
   request->title (_("Edit account"));
diff --git a/lib/engine/components/loudmouth/loudmouth-account.h b/lib/engine/components/loudmouth/loudmouth-account.h
index 93c8a2c..183c757 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.h
+++ b/lib/engine/components/loudmouth/loudmouth-account.h
@@ -48,9 +48,9 @@ namespace LM
   class Account: public Ekiga::Account
   {
   public:
-    Account (gmref_ptr<Ekiga::PersonalDetails> details_,
-	     gmref_ptr<Dialect> dialect_,
-	     gmref_ptr<Cluster> cluster_,
+    Account (boost::shared_ptr<Ekiga::PersonalDetails> details_,
+	     boost::shared_ptr<Dialect> dialect_,
+	     boost::shared_ptr<Cluster> cluster_,
 	     xmlNodePtr node_);
 
     ~Account ();
@@ -86,16 +86,16 @@ namespace LM
 
     void remove ();
 
-    gmref_ptr<Ekiga::PersonalDetails> details;
-    gmref_ptr<Dialect> dialect;
-    gmref_ptr<Cluster> cluster;
+    boost::shared_ptr<Ekiga::PersonalDetails> details;
+    boost::shared_ptr<Dialect> dialect;
+    boost::shared_ptr<Cluster> cluster;
     xmlNodePtr node;
 
     std::string status;
 
     LmConnection* connection;
 
-    gmref_ptr<Heap> heap;
+    boost::shared_ptr<Heap> heap;
   };
 };
 
diff --git a/lib/engine/components/loudmouth/loudmouth-bank.cpp b/lib/engine/components/loudmouth/loudmouth-bank.cpp
index 520cc26..bd2969e 100644
--- a/lib/engine/components/loudmouth/loudmouth-bank.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-bank.cpp
@@ -43,9 +43,9 @@
 
 #define KEY "/apps/" PACKAGE_NAME "/contacts/jabber"
 
-LM::Bank::Bank (gmref_ptr<Ekiga::PersonalDetails> details_,
-		gmref_ptr<Dialect> dialect_,
-		gmref_ptr<Cluster> cluster_):
+LM::Bank::Bank (boost::shared_ptr<Ekiga::PersonalDetails> details_,
+		boost::shared_ptr<Dialect> dialect_,
+		boost::shared_ptr<Cluster> cluster_):
   details(details_), cluster(cluster_), dialect(dialect_), doc (NULL)
 {
   gchar* c_raw = gm_conf_get_string (KEY);
@@ -81,7 +81,7 @@ LM::Bank::Bank (gmref_ptr<Ekiga::PersonalDetails> details_,
 void
 LM::Bank::add (xmlNodePtr node)
 {
-  gmref_ptr<Account> account (new Account (details, dialect, cluster, node));
+  boost::shared_ptr<Account> account (new Account (details, dialect, cluster, node));
 
   if (node == NULL) { // that was a new one
 
diff --git a/lib/engine/components/loudmouth/loudmouth-bank.h b/lib/engine/components/loudmouth/loudmouth-bank.h
index df6f5ec..91e0411 100644
--- a/lib/engine/components/loudmouth/loudmouth-bank.h
+++ b/lib/engine/components/loudmouth/loudmouth-bank.h
@@ -51,9 +51,9 @@ namespace LM
     public Ekiga::BankImpl<Account>
   {
   public:
-    Bank (gmref_ptr<Ekiga::PersonalDetails> details_,
-	  gmref_ptr<Dialect> dialect_,
-	  gmref_ptr<Cluster> cluster_);
+    Bank (boost::shared_ptr<Ekiga::PersonalDetails> details_,
+	  boost::shared_ptr<Dialect> dialect_,
+	  boost::shared_ptr<Cluster> cluster_);
 
     ~Bank ();
 
@@ -71,9 +71,9 @@ namespace LM
 
   private:
 
-    gmref_ptr<Ekiga::PersonalDetails> details;
-    gmref_ptr<Cluster> cluster;
-    gmref_ptr<Dialect> dialect;
+    boost::shared_ptr<Ekiga::PersonalDetails> details;
+    boost::shared_ptr<Cluster> cluster;
+    boost::shared_ptr<Dialect> dialect;
 
     xmlDocPtr doc;
 
@@ -82,7 +82,7 @@ namespace LM
     void save () const;
   };
 
-  typedef gmref_ptr<Bank> BankPtr;
+  typedef boost::shared_ptr<Bank> BankPtr;
 };
 
 #endif
diff --git a/lib/engine/components/loudmouth/loudmouth-chat-simple.cpp b/lib/engine/components/loudmouth/loudmouth-chat-simple.cpp
index 7198acf..0f884a1 100644
--- a/lib/engine/components/loudmouth/loudmouth-chat-simple.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-chat-simple.cpp
@@ -58,13 +58,13 @@ LM::SimpleChat::get_title () const
 }
 
 void
-LM::SimpleChat::connect (gmref_ptr<Ekiga::ChatObserver> observer)
+LM::SimpleChat::connect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observers.push_back (observer);
 }
 
 void
-LM::SimpleChat::disconnect (gmref_ptr<Ekiga::ChatObserver> observer)
+LM::SimpleChat::disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observers.remove (observer);
 }
@@ -77,7 +77,7 @@ LM::SimpleChat::send_message (const std::string msg)
   if (lm_connection_is_authenticated (presentity->get_connection ())) {
 
     result = true;
-    gmref_ptr<Ekiga::PersonalDetails> details = core.get ("personal-details");
+    boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
     const std::string my_name = details->get_display_name ();
     LmMessage* message = lm_message_new (NULL, LM_MESSAGE_TYPE_MESSAGE);
     lm_message_node_set_attributes (lm_message_get_node (message),
@@ -87,7 +87,7 @@ LM::SimpleChat::send_message (const std::string msg)
     lm_message_node_add_child (lm_message_get_node (message), "body", msg.c_str ());
     lm_connection_send (presentity->get_connection (), message, NULL);
     lm_message_unref (message);
-    for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+    for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
 	 iter != observers.end ();
 	 ++iter) {
 
@@ -101,7 +101,7 @@ LM::SimpleChat::send_message (const std::string msg)
 void
 LM::SimpleChat::got_message (const std::string msg)
 {
-  for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+  for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
        iter != observers.end ();
        ++iter) {
 
diff --git a/lib/engine/components/loudmouth/loudmouth-chat-simple.h b/lib/engine/components/loudmouth/loudmouth-chat-simple.h
index d52953b..80410ba 100644
--- a/lib/engine/components/loudmouth/loudmouth-chat-simple.h
+++ b/lib/engine/components/loudmouth/loudmouth-chat-simple.h
@@ -55,9 +55,9 @@ namespace LM
 
     const std::string get_title () const;
 
-    void connect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void connect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
-    void disconnect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
     bool send_message (const std::string msg);
 
@@ -73,10 +73,10 @@ namespace LM
 
     Ekiga::ServiceCore& core;
     PresentityPtr presentity;
-    std::list<gmref_ptr<Ekiga::ChatObserver> > observers;
+    std::list<boost::shared_ptr<Ekiga::ChatObserver> > observers;
   };
 
-  typedef gmref_ptr<SimpleChat> SimpleChatPtr;
+  typedef boost::shared_ptr<SimpleChat> SimpleChatPtr;
 
 };
 
diff --git a/lib/engine/components/loudmouth/loudmouth-cluster.h b/lib/engine/components/loudmouth/loudmouth-cluster.h
index 7125ca2..f99c1b8 100644
--- a/lib/engine/components/loudmouth/loudmouth-cluster.h
+++ b/lib/engine/components/loudmouth/loudmouth-cluster.h
@@ -56,7 +56,7 @@ namespace LM
     bool populate_menu (Ekiga::MenuBuilder& builder);
   };
 
-  typedef gmref_ptr<Cluster> ClusterPtr;
+  typedef boost::shared_ptr<Cluster> ClusterPtr;
 
 };
 
diff --git a/lib/engine/components/loudmouth/loudmouth-dialect.h b/lib/engine/components/loudmouth/loudmouth-dialect.h
index 18dcaf3..2d91c51 100644
--- a/lib/engine/components/loudmouth/loudmouth-dialect.h
+++ b/lib/engine/components/loudmouth/loudmouth-dialect.h
@@ -64,7 +64,7 @@ namespace LM
     Ekiga::ServiceCore& core;
   };
 
-  typedef gmref_ptr<Dialect> DialectPtr;
+  typedef boost::shared_ptr<Dialect> DialectPtr;
 };
 
 #endif
diff --git a/lib/engine/components/loudmouth/loudmouth-heap.cpp b/lib/engine/components/loudmouth/loudmouth-heap.cpp
index e8dbe0a..b6242aa 100644
--- a/lib/engine/components/loudmouth/loudmouth-heap.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-heap.cpp
@@ -67,7 +67,7 @@ message_handler_c (LmMessageHandler* /*handler*/,
   return heap->message_handler (message);
 }
 
-LM::Heap::Heap (gmref_ptr<Ekiga::PersonalDetails> details_,
+LM::Heap::Heap (boost::shared_ptr<Ekiga::PersonalDetails> details_,
 		DialectPtr dialect_,
 		LmConnection* connection_):
   details(details_), dialect(dialect_), connection(connection_)
@@ -194,7 +194,7 @@ LM::Heap::presence_handler (LmMessage* message)
 
   if (type_attr != NULL && strcmp (type_attr, "subscribe") == 0) {
 
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Heap::subscribe_from_form_submitted)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Heap::subscribe_from_form_submitted)));
     LmMessageNode* status = lm_message_node_find_child (lm_message_get_node (message), "status");
     gchar* instructions = NULL;
     std::string item_name;
@@ -310,7 +310,7 @@ LM::Heap::parse_roster (LmMessageNode* query)
 void
 LM::Heap::add_item ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Heap::add_item_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Heap::add_item_form_submitted)));
 
   request->title (_("Add a roster element"));
   request->instructions (_("Please fill in this form to add a new"
diff --git a/lib/engine/components/loudmouth/loudmouth-heap.h b/lib/engine/components/loudmouth/loudmouth-heap.h
index 016db45..2a5a913 100644
--- a/lib/engine/components/loudmouth/loudmouth-heap.h
+++ b/lib/engine/components/loudmouth/loudmouth-heap.h
@@ -48,7 +48,7 @@ namespace LM
   {
   public:
 
-    Heap (gmref_ptr<Ekiga::PersonalDetails> details_,
+    Heap (boost::shared_ptr<Ekiga::PersonalDetails> details_,
 	  DialectPtr dialect_,
 	  LmConnection* connection_);
 
@@ -77,7 +77,7 @@ namespace LM
 
   private:
 
-    gmref_ptr<Ekiga::PersonalDetails> details;
+    boost::shared_ptr<Ekiga::PersonalDetails> details;
 
     DialectPtr dialect;
 
@@ -108,7 +108,7 @@ namespace LM
     void on_chat_requested (PresentityPtr presentity);
   };
 
-  typedef gmref_ptr<Heap> HeapPtr;
+  typedef boost::shared_ptr<Heap> HeapPtr;
 
 };
 
diff --git a/lib/engine/components/loudmouth/loudmouth-main.cpp b/lib/engine/components/loudmouth/loudmouth-main.cpp
index ce08c9a..20624ee 100644
--- a/lib/engine/components/loudmouth/loudmouth-main.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-main.cpp
@@ -55,10 +55,10 @@ struct LOUDMOUTHSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("loudmouth-bank");
-    gmref_ptr<Ekiga::PresenceCore> presence = core.get ("presence-core");
-    gmref_ptr<Ekiga::AccountCore> account = core.get ("account-core");
-    gmref_ptr<Ekiga::ChatCore> chat = core.get ("chat-core");
-    gmref_ptr<Ekiga::PersonalDetails> details = core.get ("personal-details");
+    boost::shared_ptr<Ekiga::PresenceCore> presence = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<Ekiga::AccountCore> account = core.get<Ekiga::AccountCore> ("account-core");
+    boost::shared_ptr<Ekiga::ChatCore> chat = core.get<Ekiga::ChatCore> ("chat-core");
+    boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
 
     if ( !service && presence && account && chat && details) {
 
@@ -87,6 +87,6 @@ struct LOUDMOUTHSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new LOUDMOUTHSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new LOUDMOUTHSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/loudmouth/loudmouth-presentity.cpp b/lib/engine/components/loudmouth/loudmouth-presentity.cpp
index 909e8af..87f18d0 100644
--- a/lib/engine/components/loudmouth/loudmouth-presentity.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-presentity.cpp
@@ -257,7 +257,7 @@ LM::Presentity::push_presence (const std::string resource,
 void
 LM::Presentity::edit_presentity ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Presentity::edit_presentity_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &LM::Presentity::edit_presentity_form_submitted)));
 
   request->title (_("Edit roster element"));
   request->instructions (_("Please fill in this form to change an existing "
diff --git a/lib/engine/components/loudmouth/loudmouth-presentity.h b/lib/engine/components/loudmouth/loudmouth-presentity.h
index 884a2ff..d90a54b 100644
--- a/lib/engine/components/loudmouth/loudmouth-presentity.h
+++ b/lib/engine/components/loudmouth/loudmouth-presentity.h
@@ -107,7 +107,7 @@ namespace LM
     void remove_presentity ();
   };
 
-  typedef gmref_ptr<Presentity> PresentityPtr;
+  typedef boost::shared_ptr<Presentity> PresentityPtr;
 
 };
 
diff --git a/lib/engine/components/mlogo-videoinput/videoinput-main-mlogo.cpp b/lib/engine/components/mlogo-videoinput/videoinput-main-mlogo.cpp
index 4a07bed..baf23a4 100644
--- a/lib/engine/components/mlogo-videoinput/videoinput-main-mlogo.cpp
+++ b/lib/engine/components/mlogo-videoinput/videoinput-main-mlogo.cpp
@@ -46,7 +46,7 @@ videoinput_mlogo_init (Ekiga::ServiceCore &core,
 	    char **/*argv*/[])
 {
   bool result = false;
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core.get ("videoinput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core.get<Ekiga::VideoInputCore> ("videoinput-core");
 
   if (videoinput_core) {
 
diff --git a/lib/engine/components/null-audioinput/audioinput-main-null.cpp b/lib/engine/components/null-audioinput/audioinput-main-null.cpp
index 72c1e86..790e624 100644
--- a/lib/engine/components/null-audioinput/audioinput-main-null.cpp
+++ b/lib/engine/components/null-audioinput/audioinput-main-null.cpp
@@ -49,7 +49,7 @@ struct NULLAUDIOINPUTSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core.get ("audioinput-core");
+    boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core.get<Ekiga::AudioInputCore> ("audioinput-core");
 
     if (audioinput_core) {
 
@@ -76,6 +76,6 @@ struct NULLAUDIOINPUTSpark: public Ekiga::Spark
 void
 audioinput_null_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new NULLAUDIOINPUTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new NULLAUDIOINPUTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/null-audiooutput/audiooutput-main-null.cpp b/lib/engine/components/null-audiooutput/audiooutput-main-null.cpp
index 12ba429..f41368b 100644
--- a/lib/engine/components/null-audiooutput/audiooutput-main-null.cpp
+++ b/lib/engine/components/null-audiooutput/audiooutput-main-null.cpp
@@ -50,7 +50,7 @@ struct NULLAUDIOOUTPUTSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("null-audio-output");
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get ("audiooutput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
     if (audiooutput_core && !service) {
 
@@ -78,6 +78,6 @@ struct NULLAUDIOOUTPUTSpark: public Ekiga::Spark
 void
 audiooutput_null_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new NULLAUDIOOUTPUTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new NULLAUDIOOUTPUTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/opal/opal-account.cpp b/lib/engine/components/opal/opal-account.cpp
index 7d6820b..439b4fa 100644
--- a/lib/engine/components/opal/opal-account.cpp
+++ b/lib/engine/components/opal/opal-account.cpp
@@ -280,7 +280,7 @@ void Opal::Account::enable ()
 {
   enabled = true;
 
-  gmref_ptr<Sip::EndPoint> endpoint = core.get ("opal-sip-endpoint");
+  boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->subscribe (*this);
 
   updated.emit ();
@@ -292,7 +292,7 @@ void Opal::Account::disable ()
 {
   enabled = false;
 
-  gmref_ptr<Sip::EndPoint> endpoint = core.get ("opal-sip-endpoint");
+  boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->unsubscribe (*this);
 
   updated.emit ();
@@ -323,7 +323,7 @@ void Opal::Account::remove ()
   enabled = false;
   dead = true;
 
-  gmref_ptr<Sip::EndPoint> endpoint = core.get ("opal-sip-endpoint");
+  boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->unsubscribe (*this);
 
   trigger_saving.emit ();
@@ -379,7 +379,7 @@ bool Opal::Account::populate_menu (Ekiga::MenuBuilder &builder)
 
 void Opal::Account::edit ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Opal::Account::on_edit_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Opal::Account::on_edit_form_submitted)));
   std::stringstream str;
 
   str << get_timeout ();
@@ -437,7 +437,7 @@ void Opal::Account::on_edit_form_submitted (bool submitted,
 
   if (!error.empty ()) {
 
-    gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Opal::Account::on_edit_form_submitted)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &Opal::Account::on_edit_form_submitted)));
     result.visit (*request);
     request->error (error);
 
@@ -478,8 +478,8 @@ Opal::Account::handle_registration_event (RegistrationState state_,
     if (state != Registered) {
 
       status = _("Registered");
-      gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-      gmref_ptr<Ekiga::PersonalDetails> personal_details = core.get ("personal-details");
+      boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+      boost::shared_ptr<Ekiga::PersonalDetails> personal_details = core.get<Ekiga::PersonalDetails> ("personal-details");
       if (presence_core && personal_details) {
 
 	presence_core->publish (personal_details);
@@ -507,7 +507,7 @@ Opal::Account::handle_registration_event (RegistrationState state_,
 
     if (!limited) {
       limited = true;
-      gmref_ptr<Sip::EndPoint> endpoint = core.get ("opal-sip-endpoint");
+      boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
       endpoint->subscribe (*this);
     } else {
       status = _("Could not register");
@@ -535,7 +535,7 @@ Opal::Account::handle_message_waiting_information (const std::string info)
 
   if (loc != std::string::npos) {
 
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get ("audiooutput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
     std::stringstream new_messages;
     new_messages << info.substr (0, loc);
     new_messages >> message_waiting_number;
diff --git a/lib/engine/components/opal/opal-account.h b/lib/engine/components/opal/opal-account.h
index e6b5e7c..ba1d410 100644
--- a/lib/engine/components/opal/opal-account.h
+++ b/lib/engine/components/opal/opal-account.h
@@ -178,7 +178,7 @@ private:
     Ekiga::ServiceCore & core;
   };
 
-  typedef gmref_ptr<Account> AccountPtr;
+  typedef boost::shared_ptr<Account> AccountPtr;
 
   /**
    * @}
diff --git a/lib/engine/components/opal/opal-audio.cpp b/lib/engine/components/opal/opal-audio.cpp
index 7505624..d1e8d47 100644
--- a/lib/engine/components/opal/opal-audio.cpp
+++ b/lib/engine/components/opal/opal-audio.cpp
@@ -78,8 +78,8 @@ PCREATE_PLUGIN(EKIGA, PSoundChannel, &PSoundChannel_EKIGA_descriptor);
 
 PSoundChannel_EKIGA::PSoundChannel_EKIGA (Ekiga::ServiceCore & _core):
   core (_core),
-  audioinput_core (core.get ("audioinput-core")),
-  audiooutput_core (core.get ("audiooutput-core"))
+  audioinput_core (core.get<Ekiga::AudioInputCore> ("audioinput-core")),
+  audiooutput_core (core.get<Ekiga::AudioOutputCore> ("audiooutput-core"))
 {
   opened = false;
 }
@@ -92,8 +92,8 @@ PSoundChannel_EKIGA::PSoundChannel_EKIGA (const PString & /*_device*/,
 					  unsigned bitsPerSample,
 					  Ekiga::ServiceCore & _core):
   core (_core),
-  audioinput_core (core.get ("audioinput-core")),
-  audiooutput_core (core.get ("audiooutput-core"))
+  audioinput_core (core.get<Ekiga::AudioInputCore> ("audioinput-core")),
+  audiooutput_core (core.get<Ekiga::AudioOutputCore> ("audiooutput-core"))
 {
   opened = false;
   Open (device, dir, numChannels, sampleRate, bitsPerSample);
diff --git a/lib/engine/components/opal/opal-audio.h b/lib/engine/components/opal/opal-audio.h
index 87943e8..6dcd828 100644
--- a/lib/engine/components/opal/opal-audio.h
+++ b/lib/engine/components/opal/opal-audio.h
@@ -92,8 +92,8 @@ public:
   PINDEX storedVolume;
 
   Ekiga::ServiceCore & core;
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core;
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core;
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core;
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core;
   bool opened;
 };
 
diff --git a/lib/engine/components/opal/opal-bank.cpp b/lib/engine/components/opal/opal-bank.cpp
index da36a95..0f53a2c 100644
--- a/lib/engine/components/opal/opal-bank.cpp
+++ b/lib/engine/components/opal/opal-bank.cpp
@@ -56,7 +56,7 @@ Opal::Bank::Bank (Ekiga::ServiceCore &_core): core(_core)
 
   while (accounts_iter) {
 
-    gmref_ptr<Account> account = gmref_ptr<Account> (new Account (core, (char *)accounts_iter->data));
+    boost::shared_ptr<Account> account = boost::shared_ptr<Account> (new Account (core, (char *)accounts_iter->data));
 
     add_account (account);
     Ekiga::BankImpl<Account>::add_connection (account, account->trigger_saving.connect (sigc::mem_fun (this, &Opal::Bank::save)));
@@ -89,7 +89,7 @@ Opal::Bank::new_account (Account::Type acc_type,
 			 std::string username,
 			 std::string password)
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind (sigc::mem_fun (this, &Opal::Bank::on_new_account_form_submitted), acc_type)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind (sigc::mem_fun (this, &Opal::Bank::on_new_account_form_submitted), acc_type)));
 
   request->title (_("Edit account"));
   request->instructions (_("Please update the following fields."));
@@ -152,7 +152,7 @@ void Opal::Bank::on_new_account_form_submitted (bool submitted,
   if (!submitted)
     return;
 
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind (sigc::mem_fun (this, &Opal::Bank::on_new_account_form_submitted) ,acc_type)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::bind (sigc::mem_fun (this, &Opal::Bank::on_new_account_form_submitted) ,acc_type)));
 
   std::string error;
   std::string new_name = (acc_type == Opal::Account::SIP
diff --git a/lib/engine/components/opal/opal-call-manager.cpp b/lib/engine/components/opal/opal-call-manager.cpp
index 72b6045..e849d94 100644
--- a/lib/engine/components/opal/opal-call-manager.cpp
+++ b/lib/engine/components/opal/opal-call-manager.cpp
@@ -631,10 +631,10 @@ void CallManager::get_video_options (CallManager::VideoOptions & options) const
 void
 CallManager::create_call_in_main (Opal::Call* call)
 {
-  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
 
-  call_core->add_call (gmref_ptr<Opal::Call>(call),
-		       gmref_ptr<CallManager>(this));
+  call_core->add_call (boost::shared_ptr<Opal::Call>(call),
+		       boost::shared_ptr<CallManager>(this));
 }
 
 OpalCall *CallManager::CreateCall (void *uri)
@@ -766,7 +766,7 @@ CallManager::HandleSTUNResult ()
 void
 CallManager::ReportSTUNError (const std::string error)
 {
-  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
 
   // notice we're in for an infinite loop if nobody ever reports to the user!
   if ( !call_core->errors.emit (error)) {
diff --git a/lib/engine/components/opal/opal-gmconf-bridge.cpp b/lib/engine/components/opal/opal-gmconf-bridge.cpp
index e1d04fc..b241b0f 100644
--- a/lib/engine/components/opal/opal-gmconf-bridge.cpp
+++ b/lib/engine/components/opal/opal-gmconf-bridge.cpp
@@ -266,7 +266,7 @@ void ConfBridge::on_property_changed (std::string key, GmConfEntry *entry)
 #ifdef HAVE_SIP
   else if (key.find (SIP_KEY) != string::npos) {
 
-    gmref_ptr<Opal::Sip::EndPoint> sip_manager = manager.get_protocol_manager ("sip");
+    boost::shared_ptr<Opal::Sip::EndPoint> sip_manager = boost::dynamic_pointer_cast<Opal::Sip::EndPoint> (manager.get_protocol_manager ("sip"));
     if (sip_manager) {
 
       if (key == SIP_KEY "outbound_proxy_host") {
@@ -299,7 +299,7 @@ void ConfBridge::on_property_changed (std::string key, GmConfEntry *entry)
 #ifdef HAVE_H323
   else if (key.find (SIP_KEY) != string::npos) {
 
-    gmref_ptr<Opal::H323::EndPoint> h323_manager = manager.get_protocol_manager ("h323");
+    boost::shared_ptr<Opal::H323::EndPoint> h323_manager = boost::dynamic_pointer_cast<Opal::H323::EndPoint> (manager.get_protocol_manager ("h323"));
     if (h323_manager) {
 
       if (key == H323_KEY "enable_h245_tunneling") {
diff --git a/lib/engine/components/opal/opal-main.cpp b/lib/engine/components/opal/opal-main.cpp
index ed23dac..87be8c7 100644
--- a/lib/engine/components/opal/opal-main.cpp
+++ b/lib/engine/components/opal/opal-main.cpp
@@ -103,16 +103,16 @@ struct OPALSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-    gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
-    gmref_ptr<Ekiga::ChatCore> chat_core = core.get ("chat-core");
-    gmref_ptr<Ekiga::AccountCore> account_core = core.get ("account-core");
-    gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core.get ("audioinput-core");
-    gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core.get ("videoinput-core");
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get ("audiooutput-core");
-    gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get ("videooutput-core");
-    gmref_ptr<Ekiga::PersonalDetails> personal_details = core.get ("personal-details");
+    boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
+    boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
+    boost::shared_ptr<Ekiga::AccountCore> account_core = core.get<Ekiga::AccountCore> ("account-core");
+    boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core.get<Ekiga::AudioInputCore> ("audioinput-core");
+    boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core.get<Ekiga::VideoInputCore> ("videoinput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
+    boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get<Ekiga::VideoOutputCore> ("videooutput-core");
+    boost::shared_ptr<Ekiga::PersonalDetails> personal_details = core.get<Ekiga::PersonalDetails> ("personal-details");
     Ekiga::ServicePtr account_store = core.get ("opal-account-store");
     Ekiga::ServicePtr sip_endpoint = core.get ("opal-sip-endpoint");
 
@@ -121,9 +121,9 @@ struct OPALSpark: public Ekiga::Spark
 	&& audiooutput_core && videooutput_core && personal_details
 	&& !account_store && !sip_endpoint) {
 
-      gmref_ptr<CallManager> call_manager (new CallManager (core));
+      boost::shared_ptr<CallManager> call_manager (new CallManager (core));
 
-      gmref_ptr<Opal::Bank> bank (new Bank (core));
+      boost::shared_ptr<Opal::Bank> bank (new Bank (core));
 
       account_core->add_bank (bank);
       core.add (bank);
@@ -131,7 +131,7 @@ struct OPALSpark: public Ekiga::Spark
 
 #ifdef HAVE_SIP
       unsigned sip_port = gm_conf_get_int (SIP_KEY "listen_port");
-      gmref_ptr<Sip::EndPoint> sip_manager (new Sip::EndPoint (*call_manager, core, sip_port));
+      boost::shared_ptr<Sip::EndPoint> sip_manager (new Sip::EndPoint (*call_manager, core, sip_port));
       call_manager->add_protocol_manager (sip_manager);
       contact_core->add_contact_decorator (sip_manager);
       presence_core->add_presentity_decorator (sip_manager);
@@ -142,7 +142,7 @@ struct OPALSpark: public Ekiga::Spark
 
 #ifdef HAVE_H323
       unsigned h323_port = gm_conf_get_int (H323_KEY "listen_port");
-      gmref_ptr<H323::EndPoint> h323_manager (new H323::EndPoint (*call_manager, core, h323_port));
+      boost::shared_ptr<H323::EndPoint> h323_manager (new H323::EndPoint (*call_manager, core, h323_port));
       call_manager->add_protocol_manager (h323_manager);
       contact_core->add_contact_decorator (h323_manager);
       presence_core->add_presentity_decorator (h323_manager);
@@ -179,6 +179,6 @@ struct OPALSpark: public Ekiga::Spark
 void
 opal_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new OPALSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new OPALSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/opal/opal-videoinput.cpp b/lib/engine/components/opal/opal-videoinput.cpp
index e23fc46..4a168b7 100644
--- a/lib/engine/components/opal/opal-videoinput.cpp
+++ b/lib/engine/components/opal/opal-videoinput.cpp
@@ -80,11 +80,7 @@ int PVideoInputDevice_EKIGA::devices_nbr = 0;
 PVideoInputDevice_EKIGA::PVideoInputDevice_EKIGA (Ekiga::ServiceCore & _core):
   core (_core)
 {
-  {
-    gmref_ptr<Ekiga::VideoInputCore> smart = core.get ("videoinput-core");
-    smart->reference (); // take a reference in the main thread
-    videoinput_core = smart.get ();
-  }
+  videoinput_core = core.get<Ekiga::VideoInputCore> ("videoinput-core");
   opened = false;
   is_active = false;
 }
@@ -93,7 +89,6 @@ PVideoInputDevice_EKIGA::PVideoInputDevice_EKIGA (Ekiga::ServiceCore & _core):
 PVideoInputDevice_EKIGA::~PVideoInputDevice_EKIGA ()
 {
   Close ();
-  videoinput_core->unreference (); // leave a reference in the main thread
 }
 
 bool
diff --git a/lib/engine/components/opal/opal-videoinput.h b/lib/engine/components/opal/opal-videoinput.h
index ab97f64..b9192e5 100644
--- a/lib/engine/components/opal/opal-videoinput.h
+++ b/lib/engine/components/opal/opal-videoinput.h
@@ -181,7 +181,7 @@ class PVideoInputDevice_EKIGA : public PVideoInputDevice
   
 protected:
   Ekiga::ServiceCore & core;
-  Ekiga::VideoInputCore* videoinput_core;
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core;
 
   bool opened;
 };
diff --git a/lib/engine/components/opal/opal-videooutput.cpp b/lib/engine/components/opal/opal-videooutput.cpp
index 457699e..41dadf6 100644
--- a/lib/engine/components/opal/opal-videooutput.cpp
+++ b/lib/engine/components/opal/opal-videooutput.cpp
@@ -87,11 +87,7 @@ PVideoOutputDevice_EKIGA::PVideoOutputDevice_EKIGA (Ekiga::ServiceCore & _core)
 					 * or not mutex.
 					 */
 
- {
-   gmref_ptr<Ekiga::VideoOutputCore> smart = core.get ("videooutput-core");
-   smart->reference (); // take a reference in the main thread
-   videooutput_core = smart.get ();
- }
+  videooutput_core = core.get<Ekiga::VideoOutputCore> ("videooutput-core");
 
   is_active = FALSE;
   
@@ -107,8 +103,6 @@ PVideoOutputDevice_EKIGA::~PVideoOutputDevice_EKIGA()
 					 * have played with 'core' from a thread
 					 */
 
-  videooutput_core-> unreference (); // leave a reference in the main thread
-
   if (is_active) {
     devices_nbr--;
     if (devices_nbr==0)
diff --git a/lib/engine/components/opal/opal-videooutput.h b/lib/engine/components/opal/opal-videooutput.h
index 2127028..fdd7eeb 100644
--- a/lib/engine/components/opal/opal-videooutput.h
+++ b/lib/engine/components/opal/opal-videooutput.h
@@ -140,7 +140,7 @@ class PVideoOutputDevice_EKIGA : public PVideoOutputDevice
   enum {REMOTE, LOCAL};
 
   Ekiga::ServiceCore & core;
-  Ekiga::VideoOutputCore* videooutput_core;
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core;
 };
 
 #endif
diff --git a/lib/engine/components/opal/sip-chat-simple.cpp b/lib/engine/components/opal/sip-chat-simple.cpp
index aa23eff..695fb20 100644
--- a/lib/engine/components/opal/sip-chat-simple.cpp
+++ b/lib/engine/components/opal/sip-chat-simple.cpp
@@ -45,7 +45,7 @@ SIP::SimpleChat::SimpleChat (Ekiga::ServiceCore& core_,
 			     sigc::slot1<bool, std::string> sender_)
   : core(core_), sender(sender_), uri(uri_)
 {
-  presentity = gmref_ptr<Ekiga::URIPresentity> (new Ekiga::URIPresentity (core, name, uri,
+  presentity = boost::shared_ptr<Ekiga::URIPresentity> (new Ekiga::URIPresentity (core, name, uri,
 									  std::set<std::string>()));
 }
 
@@ -67,13 +67,13 @@ SIP::SimpleChat::get_title () const
 }
 
 void
-SIP::SimpleChat::connect (gmref_ptr<Ekiga::ChatObserver> observer)
+SIP::SimpleChat::connect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observers.push_front (observer);
 }
 
 void
-SIP::SimpleChat::disconnect (gmref_ptr<Ekiga::ChatObserver> observer)
+SIP::SimpleChat::disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer)
 {
   observers.remove (observer);
 
@@ -85,9 +85,9 @@ bool
 SIP::SimpleChat::send_message (const std::string msg)
 {
   bool result;
-  gmref_ptr<Ekiga::PersonalDetails> personal = core.get ("personal-details");
+  boost::shared_ptr<Ekiga::PersonalDetails> personal = core.get<Ekiga::PersonalDetails> ("personal-details");
   result = sender (msg);
-  for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+  for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
        iter != observers.end ();
        ++iter)
     (*iter)->message (personal->get_display_name (), msg);
@@ -97,7 +97,7 @@ SIP::SimpleChat::send_message (const std::string msg)
 void
 SIP::SimpleChat::receive_message (const std::string msg)
 {
-  for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+  for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
        iter != observers.end ();
        ++iter)
     (*iter)->message (presentity->get_name (), msg);
@@ -106,7 +106,7 @@ SIP::SimpleChat::receive_message (const std::string msg)
 void
 SIP::SimpleChat::receive_notice (const std::string msg)
 {
-  for (std::list<gmref_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
+  for (std::list<boost::shared_ptr<Ekiga::ChatObserver> >::iterator iter = observers.begin ();
        iter != observers.end ();
        ++iter)
     (*iter)->notice (msg);
diff --git a/lib/engine/components/opal/sip-chat-simple.h b/lib/engine/components/opal/sip-chat-simple.h
index 7a3de61..490869d 100644
--- a/lib/engine/components/opal/sip-chat-simple.h
+++ b/lib/engine/components/opal/sip-chat-simple.h
@@ -57,9 +57,9 @@ namespace SIP
 
     const std::string get_title () const;
 
-    void connect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void connect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
-    void disconnect (gmref_ptr<Ekiga::ChatObserver> observer);
+    void disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer);
 
     bool send_message (const std::string msg);
 
@@ -75,12 +75,12 @@ namespace SIP
 
     Ekiga::ServiceCore& core;
     sigc::slot1<bool, std::string> sender;
-    std::list<gmref_ptr<Ekiga::ChatObserver> > observers;
+    std::list<boost::shared_ptr<Ekiga::ChatObserver> > observers;
     Ekiga::PresentityPtr presentity;
     std::string uri;
   };
 
-  typedef gmref_ptr<SimpleChat> SimpleChatPtr;
+  typedef boost::shared_ptr<SimpleChat> SimpleChatPtr;
 
 };
 
diff --git a/lib/engine/components/opal/sip-dialect.cpp b/lib/engine/components/opal/sip-dialect.cpp
index b4d4bc7..f54903d 100644
--- a/lib/engine/components/opal/sip-dialect.cpp
+++ b/lib/engine/components/opal/sip-dialect.cpp
@@ -86,7 +86,7 @@ SIP::Dialect::start_chat_with (std::string uri,
   (void)open_chat_with (uri, name, true);
 }
 
-gmref_ptr<SIP::SimpleChat>
+boost::shared_ptr<SIP::SimpleChat>
 SIP::Dialect::open_chat_with (std::string uri,
 			      std::string name,
 			      bool user_request)
diff --git a/lib/engine/components/opal/sip-dialect.h b/lib/engine/components/opal/sip-dialect.h
index b047147..60637a3 100644
--- a/lib/engine/components/opal/sip-dialect.h
+++ b/lib/engine/components/opal/sip-dialect.h
@@ -75,7 +75,7 @@ namespace SIP
 					  bool user_request);
   };
 
-  typedef gmref_ptr<Dialect> DialectPtr;
+  typedef boost::shared_ptr<Dialect> DialectPtr;
 
 };
 
diff --git a/lib/engine/components/opal/sip-endpoint.cpp b/lib/engine/components/opal/sip-endpoint.cpp
index a079347..d86066b 100644
--- a/lib/engine/components/opal/sip-endpoint.cpp
+++ b/lib/engine/components/opal/sip-endpoint.cpp
@@ -108,15 +108,15 @@ Opal::Sip::EndPoint::EndPoint (Opal::CallManager & _manager,
 	manager (_manager),
 	core (_core)
 {
-  gmref_ptr<Ekiga::ChatCore> chat_core = core.get ("chat-core");
-  gmref_ptr<Opal::Bank> bank = core.get ("opal-account-store");
+  boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
+  boost::shared_ptr<Opal::Bank> bank = core.get<Opal::Bank> ("opal-account-store");
 
   auto_answer_call = false;
   protocol_name = "sip";
   uri_prefix = "sip:";
   listen_port = (_listen_port > 0 ? _listen_port : 5060);
 
-  dialect = gmref_ptr<SIP::Dialect>(new SIP::Dialect (core, sigc::mem_fun (this, &Opal::Sip::EndPoint::send_message)));
+  dialect = boost::shared_ptr<SIP::Dialect>(new SIP::Dialect (core, sigc::mem_fun (this, &Opal::Sip::EndPoint::send_message)));
   chat_core->add_dialect (dialect);
 
   bank->account_added.connect (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_bank_updated));
@@ -176,7 +176,7 @@ Opal::Sip::EndPoint::menu_builder_add_actions (const std::string& fullname,
 {
   bool populated = false;
 
-  gmref_ptr<Opal::Bank> bank = core.get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = core.get<Opal::Bank> ("opal-account-store");
 
   std::list<std::string> uris;
   std::list<std::string> accounts;
@@ -1254,7 +1254,7 @@ Opal::Sip::EndPoint::registration_event_in_main (const std::string aor,
 						 Opal::Account::RegistrationState state,
 						 const std::string msg)
 {
-  gmref_ptr<Opal::Bank> bank = core.get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = core.get<Opal::Bank> ("opal-account-store");
   AccountPtr account = bank->find_account (aor);
 
   if (account) {
@@ -1293,7 +1293,7 @@ void
 Opal::Sip::EndPoint::mwi_received_in_main (const std::string aor,
 					   const std::string info)
 {
-  gmref_ptr<Opal::Bank> bank = core.get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = core.get<Opal::Bank> ("opal-account-store");
   AccountPtr account = bank->find_account (aor);
 
   if (account) {
@@ -1303,7 +1303,7 @@ Opal::Sip::EndPoint::mwi_received_in_main (const std::string aor,
 }
 
 void
-Opal::Sip::EndPoint::on_bank_updated (Ekiga::ContactPtr /*contact*/)
+Opal::Sip::EndPoint::on_bank_updated (Ekiga::AccountPtr /*account*/)
 {
   { // first we flush the existing value
     PWaitAndSignal mut(defaultAORMutex);
@@ -1311,14 +1311,15 @@ Opal::Sip::EndPoint::on_bank_updated (Ekiga::ContactPtr /*contact*/)
   }
 
   { // and now we compute it again
-    gmref_ptr<Opal::Bank> bank = core.get ("opal-account-store");
+    boost::shared_ptr<Opal::Bank> bank = core.get<Opal::Bank> ("opal-account-store");
     bank->visit_accounts (sigc::mem_fun (this, &Opal::Sip::EndPoint::search_for_default_account));
   }
 }
 
 bool
-Opal::Sip::EndPoint::search_for_default_account (Opal::AccountPtr account)
+Opal::Sip::EndPoint::search_for_default_account (Ekiga::AccountPtr account_)
 {
+  Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account> (account_);
   PWaitAndSignal mut(defaultAORMutex);
   bool result = true;
 
diff --git a/lib/engine/components/opal/sip-endpoint.h b/lib/engine/components/opal/sip-endpoint.h
index 4de4108..0b4d4b4 100644
--- a/lib/engine/components/opal/sip-endpoint.h
+++ b/lib/engine/components/opal/sip-endpoint.h
@@ -235,8 +235,8 @@ namespace Opal {
 
       PMutex defaultAORMutex;
       std::string default_aor;
-      void on_bank_updated (Ekiga::ContactPtr contact);
-      bool search_for_default_account(Opal::AccountPtr account);
+      void on_bank_updated (Ekiga::AccountPtr account);
+      bool search_for_default_account(Ekiga::AccountPtr account);
 
       Ekiga::ServiceCore & core;
 
@@ -250,7 +250,7 @@ namespace Opal {
       unsigned listen_port;
       bool auto_answer_call;
 
-      gmref_ptr<SIP::Dialect> dialect;
+      boost::shared_ptr<SIP::Dialect> dialect;
 
       domain_list active_domains;   // List of active domains
       uri_info_map presence_infos;  // List of uri presences
diff --git a/lib/engine/components/ptlib/audioinput-main-ptlib.cpp b/lib/engine/components/ptlib/audioinput-main-ptlib.cpp
index de46151..ab1ab8f 100644
--- a/lib/engine/components/ptlib/audioinput-main-ptlib.cpp
+++ b/lib/engine/components/ptlib/audioinput-main-ptlib.cpp
@@ -49,7 +49,7 @@ struct PTLIBAUDIOINPUTSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core.get ("audioinput-core");
+    boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core.get<Ekiga::AudioInputCore> ("audioinput-core");
 
     if (audioinput_core) {
 
@@ -76,6 +76,6 @@ struct PTLIBAUDIOINPUTSpark: public Ekiga::Spark
 void
 audioinput_ptlib_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new PTLIBAUDIOINPUTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new PTLIBAUDIOINPUTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/ptlib/audiooutput-main-ptlib.cpp b/lib/engine/components/ptlib/audiooutput-main-ptlib.cpp
index 45e5e04..b26df07 100644
--- a/lib/engine/components/ptlib/audiooutput-main-ptlib.cpp
+++ b/lib/engine/components/ptlib/audiooutput-main-ptlib.cpp
@@ -49,7 +49,7 @@ struct PTLIBAUDIOOUTPUTSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get ("audiooutput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
     if (audiooutput_core) {
 
@@ -76,6 +76,6 @@ struct PTLIBAUDIOOUTPUTSpark: public Ekiga::Spark
 void
 audiooutput_ptlib_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new PTLIBAUDIOOUTPUTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new PTLIBAUDIOOUTPUTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/ptlib/videoinput-main-ptlib.cpp b/lib/engine/components/ptlib/videoinput-main-ptlib.cpp
index ecd0c6d..0972afd 100644
--- a/lib/engine/components/ptlib/videoinput-main-ptlib.cpp
+++ b/lib/engine/components/ptlib/videoinput-main-ptlib.cpp
@@ -49,7 +49,7 @@ struct PTLIBVIDEOINPUTSpark: public Ekiga::Spark
 			    int* /*argc*/,
 			    char** /*argv*/[])
   {
-    gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core.get ("videoinput-core");
+    boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core.get<Ekiga::VideoInputCore> ("videoinput-core");
 
     if (videoinput_core) {
 
@@ -76,6 +76,6 @@ struct PTLIBVIDEOINPUTSpark: public Ekiga::Spark
 void
 videoinput_ptlib_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new PTLIBVIDEOINPUTSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new PTLIBVIDEOINPUTSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/resource-list/resource-list-main.cpp b/lib/engine/components/resource-list/resource-list-main.cpp
index 61c0b8e..23d8110 100644
--- a/lib/engine/components/resource-list/resource-list-main.cpp
+++ b/lib/engine/components/resource-list/resource-list-main.cpp
@@ -51,12 +51,12 @@ struct RLSpark: public Ekiga::Spark
 			    char** /*argv*/[])
   {
     Ekiga::ServicePtr service = core.get ("resource-list");
-    gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-    gmref_ptr<XCAP::Core> xcap = core.get ("xcap-core");
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+    boost::shared_ptr<XCAP::Core> xcap = core.get<XCAP::Core> ("xcap-core");
 
     if ( !service && presence_core && xcap) {
 
-      gmref_ptr<RL::Cluster> cluster (new RL::Cluster (core));
+      boost::shared_ptr<RL::Cluster> cluster (new RL::Cluster (core));
       core.add (cluster);
       presence_core->add_cluster (cluster);
       result = true;
@@ -77,6 +77,6 @@ struct RLSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new RLSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new RLSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/resource-list/rl-cluster.cpp b/lib/engine/components/resource-list/rl-cluster.cpp
index f531c00..66bc0ce 100644
--- a/lib/engine/components/resource-list/rl-cluster.cpp
+++ b/lib/engine/components/resource-list/rl-cluster.cpp
@@ -52,7 +52,7 @@ RL::Cluster::Cluster (Ekiga::ServiceCore& core_): core(core_), doc()
 {
   gchar* c_raw = NULL;
 
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
 
   presence_core->presence_received.connect (sigc::mem_fun (this, &RL::Cluster::on_presence_received));
   presence_core->status_received.connect (sigc::mem_fun (this, &RL::Cluster::on_status_received));
@@ -62,9 +62,9 @@ RL::Cluster::Cluster (Ekiga::ServiceCore& core_): core(core_), doc()
   if (c_raw != NULL) {
 
     const std::string raw = c_raw;
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
 
     xmlNodePtr root = xmlDocGetRootElement (doc.get ());
     if (root == NULL) {
@@ -85,7 +85,7 @@ RL::Cluster::Cluster (Ekiga::ServiceCore& core_): core(core_), doc()
 
   } else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
     xmlNodePtr root = xmlNewDocNode (doc.get (), NULL, BAD_CAST "list", NULL);
     xmlDocSetRootElement (doc.get (), root);
     add ("https://xcap.sipthor.net/xcap-root";, "alice", "123", "alice example com", "XCAP Test", false); // FIXME: remove
@@ -161,7 +161,7 @@ RL::Cluster::new_heap (const std::string name,
 		       const std::string user,
 		       bool writable)
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Cluster::on_new_heap_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Cluster::on_new_heap_form_submitted)));
 
   request->title (_("Add new resource-list"));
   request->instructions (_("Please fill in this form to add a new "
diff --git a/lib/engine/components/resource-list/rl-cluster.h b/lib/engine/components/resource-list/rl-cluster.h
index 89352d3..5e169fc 100644
--- a/lib/engine/components/resource-list/rl-cluster.h
+++ b/lib/engine/components/resource-list/rl-cluster.h
@@ -65,7 +65,7 @@ namespace RL {
   private:
 
     Ekiga::ServiceCore& core;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
 
     void add (xmlNodePtr node);
     void add (const std::string uri,
@@ -93,7 +93,7 @@ namespace RL {
 			     std::string presence);
   };
 
-  typedef gmref_ptr<Cluster> ClusterPtr;
+  typedef boost::shared_ptr<Cluster> ClusterPtr;
 
 };
 
diff --git a/lib/engine/components/resource-list/rl-entry-ref.cpp b/lib/engine/components/resource-list/rl-entry-ref.cpp
index 8cd462f..a6a96a4 100644
--- a/lib/engine/components/resource-list/rl-entry-ref.cpp
+++ b/lib/engine/components/resource-list/rl-entry-ref.cpp
@@ -126,7 +126,7 @@ bool
 RL::EntryRef::populate_menu (Ekiga::MenuBuilder& builder)
 {
   bool populated = false;
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   std::string uri(get_uri ());
 
   builder.add_action ("refresh", _("_Refresh"),
diff --git a/lib/engine/components/resource-list/rl-entry-ref.h b/lib/engine/components/resource-list/rl-entry-ref.h
index 77574a4..5195ab5 100644
--- a/lib/engine/components/resource-list/rl-entry-ref.h
+++ b/lib/engine/components/resource-list/rl-entry-ref.h
@@ -39,7 +39,7 @@
 #ifndef __RL_ENTRY_REF_H__
 #define __RL_ENTRY_REF_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "services.h"
 #include "presentity.h"
@@ -49,7 +49,6 @@
 namespace RL {
 
   class EntryRef:
-    public virtual GmRefCounted,
     public Ekiga::Presentity
   {
   public:
diff --git a/lib/engine/components/resource-list/rl-entry.cpp b/lib/engine/components/resource-list/rl-entry.cpp
index df2e3a6..bcdfcfe 100644
--- a/lib/engine/components/resource-list/rl-entry.cpp
+++ b/lib/engine/components/resource-list/rl-entry.cpp
@@ -44,10 +44,10 @@
 #include "presence-core.h"
 
 RL::Entry::Entry (Ekiga::ServiceCore& core_,
-		  gmref_ptr<XCAP::Path> path_,
+		  boost::shared_ptr<XCAP::Path> path_,
 		  int pos,
 		  const std::string group,
-		  std::tr1::shared_ptr<xmlDoc> doc_,
+		  boost::shared_ptr<xmlDoc> doc_,
 		  xmlNodePtr node_):
   core(core_), position(pos), doc(doc_), node(node_), name_node(NULL),
   presence("unknown"), status("")
@@ -138,7 +138,7 @@ bool
 RL::Entry::populate_menu (Ekiga::MenuBuilder& builder)
 {
   bool populated = false;
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   std::string uri(get_uri ());
 
   builder.add_action ("refresh", _("_Refresh"),
@@ -161,7 +161,7 @@ RL::Entry::refresh ()
   status = ("");
   updated.emit ();
 
-  gmref_ptr<XCAP::Core> xcap = core.get ("xcap-core");
+  boost::shared_ptr<XCAP::Core> xcap = core.get<XCAP::Core> ("xcap-core");
   xcap->read (path, sigc::mem_fun (this, &RL::Entry::on_xcap_answer));
 }
 
@@ -175,9 +175,9 @@ RL::Entry::on_xcap_answer (bool error,
 
   } else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (value.c_str (), value.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (value.c_str (), value.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
 
     node = xmlDocGetRootElement (doc.get ());
     if (node == NULL
diff --git a/lib/engine/components/resource-list/rl-entry.h b/lib/engine/components/resource-list/rl-entry.h
index 60dd474..10e8bf5 100644
--- a/lib/engine/components/resource-list/rl-entry.h
+++ b/lib/engine/components/resource-list/rl-entry.h
@@ -44,21 +44,20 @@
 
 #include <libxml/tree.h>
 
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 namespace RL {
 
   class Entry:
-    public virtual GmRefCounted,
     public Ekiga::Presentity
   {
   public:
 
     Entry (Ekiga::ServiceCore& core_,
-	   gmref_ptr<XCAP::Path> path_,
+	   boost::shared_ptr<XCAP::Path> path_,
 	   int pos,
 	   const std::string group,
-	   std::tr1::shared_ptr<xmlDoc> doc_,
+	   boost::shared_ptr<xmlDoc> doc_,
 	   xmlNodePtr node_);
 
     ~Entry ();
@@ -91,12 +90,12 @@ namespace RL {
   private:
     Ekiga::ServiceCore& core;
 
-    gmref_ptr<XCAP::Path> path;
+    boost::shared_ptr<XCAP::Path> path;
     int position;
 
     std::set<std::string> groups;
 
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr node;
     xmlNodePtr name_node;
 
diff --git a/lib/engine/components/resource-list/rl-heap.cpp b/lib/engine/components/resource-list/rl-heap.cpp
index e2cd8fc..2cf6b7e 100644
--- a/lib/engine/components/resource-list/rl-heap.cpp
+++ b/lib/engine/components/resource-list/rl-heap.cpp
@@ -44,7 +44,7 @@
 #include "rl-heap.h"
 
 RL::Heap::Heap (Ekiga::ServiceCore& services_,
-		std::tr1::shared_ptr<xmlDoc> doc_,
+		boost::shared_ptr<xmlDoc> doc_,
 		xmlNodePtr node_):
   services(services_),
   node(node_), name(NULL),
@@ -113,7 +113,7 @@ RL::Heap::Heap (Ekiga::ServiceCore& services_,
 }
 
 RL::Heap::Heap (Ekiga::ServiceCore& services_,
-		std::tr1::shared_ptr<xmlDoc> doc_,
+		boost::shared_ptr<xmlDoc> doc_,
 		const std::string name_,
 		const std::string root_,
 		const std::string user_,
@@ -220,7 +220,7 @@ RL::Heap::get_node () const
 void
 RL::Heap::refresh ()
 {
-  gmref_ptr<XCAP::Core> xcap = services.get ("xcap-core");
+  boost::shared_ptr<XCAP::Core> xcap = services.get<XCAP::Core> ("xcap-core");
   std::string root_str;
   std::string username_str;
   std::string password_str;
@@ -246,7 +246,7 @@ RL::Heap::refresh ()
     if (str != NULL)
       password_str = (const char*)str;
   }
-  gmref_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
+  boost::shared_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
 					     user_str));
   path->set_credentials (username_str, password_str);
   path = path->build_child ("resource-lists");
@@ -284,9 +284,9 @@ RL::Heap::on_document_received (bool error,
 void
 RL::Heap::parse_doc (std::string raw)
 {
-  doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
+  doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (raw.c_str (), raw.length ()), xmlFreeDoc);
   if ( !doc)
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
   xmlNodePtr doc_root = xmlDocGetRootElement (doc.get ());
 
   if (doc_root == NULL
@@ -352,7 +352,7 @@ RL::Heap::parse_list (xmlNodePtr list)
     }
   }
 
-  gmref_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
+  boost::shared_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
 					     user_str));
   path->set_credentials (username_str, password_str);
   path = path->build_child ("resource-lists");
@@ -408,7 +408,7 @@ RL::Heap::push_status (const std::string uri_,
 void
 RL::Heap::edit ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Heap::on_edit_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Heap::on_edit_form_submitted)));
 
   std::string name_str;
   std::string root_str;
@@ -507,7 +507,7 @@ RL::Heap::on_edit_form_submitted (bool submitted,
 void
 RL::Heap::new_entry ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Heap::on_new_entry_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Heap::on_new_entry_form_submitted)));
 
   request->title (_("Add a remote contact"));
   request->instructions (_("Please fill in this form to create a new "
@@ -593,13 +593,13 @@ RL::Heap::on_new_entry_form_submitted (bool submitted,
       if (str != NULL)
 	password_str = (const char*)str;
     }
-    gmref_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
+    boost::shared_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
 					       user_str));
     path->set_credentials (username_str, password_str);
     path = path->build_child ("resource-lists");
     path = path->build_child ("list");
     path = path->build_child_with_attribute ("entry", "uri", entry_uri);
-    gmref_ptr<XCAP::Core> xcap = services.get ("xcap-core");
+    boost::shared_ptr<XCAP::Core> xcap = services.get<XCAP::Core> ("xcap-core");
     xcap->write (path, "application/xcap-el+xml",
 		 (const char*)xmlBufferContent (buffer),
 		 sigc::mem_fun (this, &RL::Heap::new_entry_result));
diff --git a/lib/engine/components/resource-list/rl-heap.h b/lib/engine/components/resource-list/rl-heap.h
index c9fef1f..76f7ff1 100644
--- a/lib/engine/components/resource-list/rl-heap.h
+++ b/lib/engine/components/resource-list/rl-heap.h
@@ -49,7 +49,7 @@ namespace RL {
   public:
 
     Heap (Ekiga::ServiceCore& services_,
-	  std::tr1::shared_ptr<xmlDoc> doc_,
+	  boost::shared_ptr<xmlDoc> doc_,
 	  xmlNodePtr node);
 
     /* name: the name of the Heap in the GUI
@@ -63,7 +63,7 @@ namespace RL {
      *
      */
     Heap (Ekiga::ServiceCore& core_,
-	  std::tr1::shared_ptr<xmlDoc> doc_,
+	  boost::shared_ptr<xmlDoc> doc_,
 	  const std::string name_,
 	  const std::string root_,
 	  const std::string user_,
@@ -103,7 +103,7 @@ namespace RL {
     xmlNodePtr username;
     xmlNodePtr password;
 
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr list_node;
 
     std::map<PresentityPtr, std::list<sigc::connection> > presentities;
@@ -126,7 +126,7 @@ namespace RL {
     void new_entry_result (std::string error);
   };
 
-  typedef gmref_ptr<Heap> HeapPtr;
+  typedef boost::shared_ptr<Heap> HeapPtr;
 
 };
 
diff --git a/lib/engine/components/resource-list/rl-list.cpp b/lib/engine/components/resource-list/rl-list.cpp
index 359e9af..9f14ed4 100644
--- a/lib/engine/components/resource-list/rl-list.cpp
+++ b/lib/engine/components/resource-list/rl-list.cpp
@@ -47,7 +47,7 @@ class RL::ListImpl
 public: // no need to make anything private
 
   ListImpl (Ekiga::ServiceCore& core_,
-	    gmref_ptr<XCAP::Path> path_,
+	    boost::shared_ptr<XCAP::Path> path_,
 	    int pos,
 	    const std::string group_,
 	    xmlNodePtr node_);
@@ -77,12 +77,12 @@ public: // no need to make anything private
 
   Ekiga::ServiceCore& core;
 
-  gmref_ptr<XCAP::Path> path;
+  boost::shared_ptr<XCAP::Path> path;
   int position;
 
   std::string group;
 
-  std::tr1::shared_ptr<xmlDoc> doc;
+  boost::shared_ptr<xmlDoc> doc;
   xmlNodePtr node;
 
   xmlNodePtr name_node;
@@ -94,24 +94,24 @@ public: // no need to make anything private
 
   void publish () const;
 
-  sigc::signal1<void, gmref_ptr<Entry> > entry_added;
-  sigc::signal1<void, gmref_ptr<Entry> > entry_updated;
-  sigc::signal1<void, gmref_ptr<Entry> > entry_removed;
+  sigc::signal1<void, boost::shared_ptr<Entry> > entry_added;
+  sigc::signal1<void, boost::shared_ptr<Entry> > entry_updated;
+  sigc::signal1<void, boost::shared_ptr<Entry> > entry_removed;
 
 
   /* data for its children */
   typedef enum { LIST, ENTRY } ChildType;
 
   std::list<ChildType> ordering;
-  std::list<gmref_ptr<List> > lists;
-  std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > > entries;
+  std::list<boost::shared_ptr<List> > lists;
+  std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > > entries;
 };
 
 
 /* implementation of the List class */
 
 RL::List::List (Ekiga::ServiceCore& core_,
-		gmref_ptr<XCAP::Path> path_,
+		boost::shared_ptr<XCAP::Path> path_,
 		int pos,
 		const std::string group_,
 		xmlNodePtr node_)
@@ -168,7 +168,7 @@ RL::List::publish () const
 /* implementation of the ListImpl class */
 
 RL::ListImpl::ListImpl (Ekiga::ServiceCore& core_,
-			gmref_ptr<XCAP::Path> path_,
+			boost::shared_ptr<XCAP::Path> path_,
 			int pos,
 			const std::string group_,
 			xmlNodePtr node_):
@@ -227,13 +227,13 @@ RL::ListImpl::flush ()
 {
   ordering.clear ();
 
-  for (std::list<gmref_ptr<List> >::iterator iter = lists.begin ();
+  for (std::list<boost::shared_ptr<List> >::iterator iter = lists.begin ();
        iter != lists.end ();
        ++iter)
     (*iter)->flush ();
   lists.clear ();
 
-  for (std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > >::iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
@@ -256,7 +256,7 @@ RL::ListImpl::refresh ()
 {
   flush ();
 
-  gmref_ptr<XCAP::Core> xcap = core.get ("xcap-core");
+  boost::shared_ptr<XCAP::Core> xcap = core.get<XCAP::Core> ("xcap-core");
   xcap->read (path, sigc::mem_fun (this, &RL::ListImpl::on_xcap_answer));
 }
 
@@ -270,9 +270,9 @@ RL::ListImpl::on_xcap_answer (bool error,
 
   } else {
 
-    doc = std::tr1::shared_ptr<xmlDoc> (xmlRecoverMemory (value.c_str (), value.length ()), xmlFreeDoc);
+    doc = boost::shared_ptr<xmlDoc> (xmlRecoverMemory (value.c_str (), value.length ()), xmlFreeDoc);
     if ( !doc)
-      doc = std::tr1::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
+      doc = boost::shared_ptr<xmlDoc> (xmlNewDoc (BAD_CAST "1.0"), xmlFreeDoc);
     node = xmlDocGetRootElement (doc.get ());
     if (node == NULL
 	|| node->name == NULL
@@ -319,7 +319,7 @@ RL::ListImpl::parse ()
 	&& child->name != NULL
 	&& xmlStrEqual (BAD_CAST "list", child->name)) {
 
-      gmref_ptr<List> list = gmref_ptr<List> (new List (core, path,
+      boost::shared_ptr<List> list = boost::shared_ptr<List> (new List (core, path,
 							list_pos, display_name,
 							child));
       list->entry_added.connect (entry_added.make_slot ());
@@ -336,14 +336,14 @@ RL::ListImpl::parse ()
 	&& child->name != NULL
 	&& xmlStrEqual (BAD_CAST "entry", child->name)) {
 
-      gmref_ptr<Entry> entry = gmref_ptr<Entry> (new Entry (core, path,
+      boost::shared_ptr<Entry> entry = boost::shared_ptr<Entry> (new Entry (core, path,
 							    entry_pos,
 							    display_name,
 							    doc, child));
       std::list<sigc::connection> conns;
       conns.push_back (entry->updated.connect (sigc::bind (entry_updated.make_slot (), entry)));
       conns.push_back (entry->removed.connect (sigc::bind (entry_removed.make_slot (), entry)));
-      entries.push_back (std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > (entry, conns));
+      entries.push_back (std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > (entry, conns));
       ordering.push_back (ENTRY);
       entry_pos++;
       entry_added.emit (entry);
@@ -356,12 +356,12 @@ void
 RL::ListImpl::push_presence (const std::string uri_,
 			     const std::string presence)
 {
-  for (std::list<gmref_ptr<List> >::const_iterator iter = lists.begin ();
+  for (std::list<boost::shared_ptr<List> >::const_iterator iter = lists.begin ();
        iter != lists.end ();
        ++iter)
     (*iter)->push_presence (uri_, presence);
 
-  for (std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
@@ -374,12 +374,12 @@ void
 RL::ListImpl::push_status (const std::string uri_,
 			   const std::string status)
 {
-  for (std::list<gmref_ptr<List> >::const_iterator iter = lists.begin ();
+  for (std::list<boost::shared_ptr<List> >::const_iterator iter = lists.begin ();
        iter != lists.end ();
        ++iter)
     (*iter)->push_status (uri_, status);
 
-  for (std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
@@ -393,12 +393,12 @@ RL::ListImpl::visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor)
 {
   bool go_on = true;
 
-  for (std::list<gmref_ptr<List> >::const_iterator iter = lists.begin ();
+  for (std::list<boost::shared_ptr<List> >::const_iterator iter = lists.begin ();
        go_on && iter != lists.end ();
        ++iter)
     go_on = (*iter)->visit_presentities (visitor);
 
-  for (std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
        go_on && iter != entries.end ();
        ++iter) {
 
@@ -411,12 +411,12 @@ RL::ListImpl::visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor)
 void
 RL::ListImpl::publish () const
 {
-  for (std::list<gmref_ptr<List> >::const_iterator iter = lists.begin ();
+  for (std::list<boost::shared_ptr<List> >::const_iterator iter = lists.begin ();
        iter != lists.end ();
        ++iter)
     (*iter)->publish ();
 
-  for (std::list<std::pair<gmref_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
diff --git a/lib/engine/components/resource-list/rl-list.h b/lib/engine/components/resource-list/rl-list.h
index 5f2dae4..65d5e4b 100644
--- a/lib/engine/components/resource-list/rl-list.h
+++ b/lib/engine/components/resource-list/rl-list.h
@@ -45,12 +45,12 @@ namespace RL
 {
   class ListImpl; // pimpling : both it and external need to know each other
 
-  class List: public virtual GmRefCounted
+  class List
   {
   public:
 
     List (Ekiga::ServiceCore& core_,
-	  gmref_ptr<XCAP::Path> path_,
+	  boost::shared_ptr<XCAP::Path> path_,
 	  int pos,
 	  const std::string group_,
 	  xmlNodePtr node_);
@@ -74,9 +74,9 @@ namespace RL
 
     void publish () const;
 
-    sigc::signal1<void, gmref_ptr<Entry> > entry_added;
-    sigc::signal1<void, gmref_ptr<Entry> > entry_updated;
-    sigc::signal1<void, gmref_ptr<Entry> > entry_removed;
+    sigc::signal1<void, boost::shared_ptr<Entry> > entry_added;
+    sigc::signal1<void, boost::shared_ptr<Entry> > entry_updated;
+    sigc::signal1<void, boost::shared_ptr<Entry> > entry_removed;
 
     /* this method orders the list to get rid of all its children */
     void flush ();
diff --git a/lib/engine/components/resource-list/rl-presentity.cpp b/lib/engine/components/resource-list/rl-presentity.cpp
index d47a523..7560626 100644
--- a/lib/engine/components/resource-list/rl-presentity.cpp
+++ b/lib/engine/components/resource-list/rl-presentity.cpp
@@ -46,14 +46,14 @@
 
 
 RL::Presentity::Presentity (Ekiga::ServiceCore &services_,
-			    gmref_ptr<XCAP::Path> path_,
-			    std::tr1::shared_ptr<xmlDoc> doc_,
+			    boost::shared_ptr<XCAP::Path> path_,
+			    boost::shared_ptr<xmlDoc> doc_,
 			    xmlNodePtr node_,
 			    bool writable_) :
   services(services_), doc(doc_), node(node_), writable(writable_),
   name_node(NULL), presence("unknown"), status(""), avatar("")
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core(services.get ("presence-core"));
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core(services.get<Ekiga::PresenceCore> ("presence-core"));
   xmlChar *xml_str = NULL;
   xmlNsPtr ns = xmlSearchNsByHref (doc.get (), node,
 				   BAD_CAST "http://www.ekiga.org";);
@@ -191,7 +191,7 @@ bool
 RL::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
 {
   bool populated = false;
-  gmref_ptr<Ekiga::PresenceCore> presence_core(services.get ("presence-core"));
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core(services.get<Ekiga::PresenceCore> ("presence-core"));
 
   populated = presence_core->populate_presentity_menu (PresentityPtr (this), uri, builder);
 
@@ -213,7 +213,7 @@ RL::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
 void
 RL::Presentity::edit_presentity ()
 {
-  gmref_ptr<Ekiga::FormRequestSimple> request = gmref_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Presentity::edit_presentity_form_submitted)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (sigc::mem_fun (this, &RL::Presentity::edit_presentity_form_submitted)));
 
   // FIXME: we should be able to know all groups in the heap
   std::set<std::string> all_groups = groups;
@@ -251,7 +251,7 @@ RL::Presentity::edit_presentity_form_submitted (bool submitted,
   if (uri != new_uri) {
 
     xmlSetProp (node, (const xmlChar*)"uri", (const xmlChar*)uri.c_str ());
-    gmref_ptr<Ekiga::PresenceCore> presence_core(services.get ("presence-core"));
+    boost::shared_ptr<Ekiga::PresenceCore> presence_core(services.get<Ekiga::PresenceCore> ("presence-core"));
     presence_core->unfetch_presence (uri);
     reload = true;
   }
@@ -295,7 +295,7 @@ RL::Presentity::save (bool reload)
 
   if (result >= 0) {
 
-    gmref_ptr<XCAP::Core> xcap = services.get ("xcap-core");
+    boost::shared_ptr<XCAP::Core> xcap = services.get<XCAP::Core> ("xcap-core");
     xcap->write (path, "application/xcap-el+xml",
 		 (const char*)xmlBufferContent (buffer),
 		 sigc::bind (sigc::mem_fun (this, &RL::Presentity::save_result),
@@ -311,11 +311,11 @@ RL::Presentity::remove ()
 {
   xmlUnlinkNode (node);
   xmlFreeNode (node);
-  gmref_ptr<Ekiga::PresenceCore> presence_core = services.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = services.get<Ekiga::PresenceCore> ("presence-core");
 
   presence_core->unfetch_presence (uri);
 
-  gmref_ptr<XCAP::Core> xcap = services.get ("xcap-core");
+  boost::shared_ptr<XCAP::Core> xcap = services.get<XCAP::Core> ("xcap-core");
   xcap->erase (path,
 	       sigc::mem_fun (this, &RL::Presentity::erase_result));
 }
diff --git a/lib/engine/components/resource-list/rl-presentity.h b/lib/engine/components/resource-list/rl-presentity.h
index 9ba50bc..bab874d 100644
--- a/lib/engine/components/resource-list/rl-presentity.h
+++ b/lib/engine/components/resource-list/rl-presentity.h
@@ -39,7 +39,7 @@
 #define __RL_PRESENTITY_H__
 
 #include <libxml/tree.h>
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 #include "form.h"
 #include "presence-core.h"
@@ -49,14 +49,13 @@
 namespace RL
 {
   class Presentity:
-    public virtual GmRefCounted,
     public Ekiga::Presentity
   {
   public:
 
     Presentity (Ekiga::ServiceCore &_core,
-		gmref_ptr<XCAP::Path> path_,
-		std::tr1::shared_ptr<xmlDoc> doc_,
+		boost::shared_ptr<XCAP::Path> path_,
+		boost::shared_ptr<xmlDoc> doc_,
 		xmlNodePtr _node,
 		bool writable_);
 
@@ -100,8 +99,8 @@ namespace RL
 
     Ekiga::ServiceCore &services;
 
-    gmref_ptr<XCAP::Path> path;
-    std::tr1::shared_ptr<xmlDoc> doc;
+    boost::shared_ptr<XCAP::Path> path;
+    boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr node;
     bool writable;
 
@@ -116,7 +115,7 @@ namespace RL
     std::set<std::string> groups;
   };
 
-  typedef gmref_ptr<Presentity> PresentityPtr;
+  typedef boost::shared_ptr<Presentity> PresentityPtr;
 
 };
 
diff --git a/lib/engine/components/x-videooutput/videooutput-main-x.cpp b/lib/engine/components/x-videooutput/videooutput-main-x.cpp
index b25ab22..7659abe 100644
--- a/lib/engine/components/x-videooutput/videooutput-main-x.cpp
+++ b/lib/engine/components/x-videooutput/videooutput-main-x.cpp
@@ -45,7 +45,7 @@ videooutput_x_init (Ekiga::ServiceCore &core,
 	    char **/*argv*/[])
 {
   bool result = false;
-  gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get ("videooutput-core");
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = core.get<Ekiga::VideoOutputCore> ("videooutput-core");
 
   if (videooutput_core) {
 
diff --git a/lib/engine/components/xcap/xcap-core.cpp b/lib/engine/components/xcap/xcap-core.cpp
index e59fd44..0a53db2 100644
--- a/lib/engine/components/xcap/xcap-core.cpp
+++ b/lib/engine/components/xcap/xcap-core.cpp
@@ -52,13 +52,13 @@ public:
 
   ~CoreImpl ();
 
-  void read (gmref_ptr<XCAP::Path> path,
+  void read (boost::shared_ptr<XCAP::Path> path,
 	     sigc::slot2<void,bool,std::string> callback);
-  void write (gmref_ptr<Path>,
+  void write (boost::shared_ptr<Path>,
 	      const std::string content_type,
 	      const std::string content,
 	      sigc::slot1<void,std::string> callback);
-  void erase (gmref_ptr<Path>,
+  void erase (boost::shared_ptr<Path>,
 	      sigc::slot1<void,std::string> callback);
 
   /* public to be used by C callbacks */
@@ -102,14 +102,14 @@ public:
 struct cb_read_data
 {
   XCAP::CoreImpl* core;
-  gmref_ptr<XCAP::Path> path;
+  boost::shared_ptr<XCAP::Path> path;
   sigc::slot2<void, bool, std::string> callback;
 };
 
 struct cb_other_data
 {
   XCAP::CoreImpl* core;
-  gmref_ptr<XCAP::Path> path;
+  boost::shared_ptr<XCAP::Path> path;
   sigc::slot1<void, std::string> callback;
 };
 
@@ -222,7 +222,7 @@ XCAP::CoreImpl::clear_old_sessions ()
 }
 
 void
-XCAP::CoreImpl::read (gmref_ptr<Path> path,
+XCAP::CoreImpl::read (boost::shared_ptr<Path> path,
 		      sigc::slot2<void, bool, std::string> callback)
 {
   SoupSession* session = NULL;
@@ -249,7 +249,7 @@ XCAP::CoreImpl::read (gmref_ptr<Path> path,
 }
 
 void
-XCAP::CoreImpl::write (gmref_ptr<Path> path,
+XCAP::CoreImpl::write (boost::shared_ptr<Path> path,
 		       const std::string content_type,
 		       const std::string content,
 		       sigc::slot1<void,std::string> callback)
@@ -282,7 +282,7 @@ XCAP::CoreImpl::write (gmref_ptr<Path> path,
 }
 
 void
-XCAP::CoreImpl::erase (gmref_ptr<Path> path,
+XCAP::CoreImpl::erase (boost::shared_ptr<Path> path,
 		       sigc::slot1<void,std::string> callback)
 {
   SoupSession* session = NULL;
@@ -321,14 +321,14 @@ XCAP::Core::~Core ()
 }
 
 void
-XCAP::Core::read (gmref_ptr<XCAP::Path> path,
+XCAP::Core::read (boost::shared_ptr<XCAP::Path> path,
 		  sigc::slot2<void, bool,std::string> callback)
 {
   impl->read (path, callback);
 }
 
 void
-XCAP::Core::write (gmref_ptr<Path> path,
+XCAP::Core::write (boost::shared_ptr<Path> path,
 		   const std::string content_type,
 		   const std::string content,
 		   sigc::slot1<void,std::string> callback)
@@ -337,7 +337,7 @@ XCAP::Core::write (gmref_ptr<Path> path,
 }
 
 void
-XCAP::Core::erase (gmref_ptr<Path> path,
+XCAP::Core::erase (boost::shared_ptr<Path> path,
 		   sigc::slot1<void,std::string> callback)
 {
   impl->erase (path, callback);
diff --git a/lib/engine/components/xcap/xcap-core.h b/lib/engine/components/xcap/xcap-core.h
index 745aec6..356e6a7 100644
--- a/lib/engine/components/xcap/xcap-core.h
+++ b/lib/engine/components/xcap/xcap-core.h
@@ -61,14 +61,14 @@ namespace XCAP
      * - if the boolean is true, there was an error and the string is the
      * error message.
      */
-    void read (gmref_ptr<Path>,
+    void read (boost::shared_ptr<Path>,
 	       sigc::slot2<void,bool,std::string> callback);
 
     /* the callback gets only a string :
      * - if the string is empty, all went well ;
      * - if it's not, then it's the error message.
      */
-    void write (gmref_ptr<Path>,
+    void write (boost::shared_ptr<Path>,
 		const std::string content_type,
 		const std::string content,
 		sigc::slot1<void,std::string> callback);
@@ -77,7 +77,7 @@ namespace XCAP
      * - if the string is empty, all went well ;
      * - if it's not, then it's the error message.
      */
-    void erase (gmref_ptr<Path>,
+    void erase (boost::shared_ptr<Path>,
 		sigc::slot1<void,std::string> callback);
 
     /* implementation of the Ekiga::Service api */
diff --git a/lib/engine/components/xcap/xcap-main.cpp b/lib/engine/components/xcap/xcap-main.cpp
index 170f3fc..0a0e6d5 100644
--- a/lib/engine/components/xcap/xcap-main.cpp
+++ b/lib/engine/components/xcap/xcap-main.cpp
@@ -51,7 +51,7 @@ struct XCAPSpark: public Ekiga::Spark
 
     if ( !service) {
 
-      gmref_ptr<XCAP::Core> xcap(new XCAP::Core ());
+      boost::shared_ptr<XCAP::Core> xcap(new XCAP::Core ());
 
       core.add (xcap);
       result = true;
@@ -73,6 +73,6 @@ struct XCAPSpark: public Ekiga::Spark
 extern "C" void
 ekiga_plugin_init (Ekiga::KickStart& kickstart)
 {
-  gmref_ptr<Ekiga::Spark> spark(new XCAPSpark);
+  boost::shared_ptr<Ekiga::Spark> spark(new XCAPSpark);
   kickstart.add_spark (spark);
 }
diff --git a/lib/engine/components/xcap/xcap-path.cpp b/lib/engine/components/xcap/xcap-path.cpp
index c6748e8..8009e6d 100644
--- a/lib/engine/components/xcap/xcap-path.cpp
+++ b/lib/engine/components/xcap/xcap-path.cpp
@@ -86,34 +86,34 @@ XCAP::Path::set_credentials (std::string username_,
   password = password_;
 }
 
-gmref_ptr<XCAP::Path>
+boost::shared_ptr<XCAP::Path>
 XCAP::Path::build_child (const std::string name)
 {
-  gmref_ptr<Path> result (new Path (root, application, user,
+  boost::shared_ptr<Path> result (new Path (root, application, user,
 				    relative, username, password));
   result->relative = relative + "/" + name;
 
   return result;
 }
 
-gmref_ptr<XCAP::Path>
+boost::shared_ptr<XCAP::Path>
 XCAP::Path::build_child_with_attribute (const std::string name,
 					const std::string attr,
 					const std::string value)
 {
-  gmref_ptr<Path> result (new Path (root, application, user, relative,
+  boost::shared_ptr<Path> result (new Path (root, application, user, relative,
 				    username, password));
   result->relative = relative + "/" + name +"%5b@" + attr + "=%22" + value + "%22%5d";
 
   return result;
 }
 
-gmref_ptr<XCAP::Path>
+boost::shared_ptr<XCAP::Path>
 XCAP::Path::build_child_with_position (const std::string name,
 				       int position)
 {
   std::ostringstream stream;
-  gmref_ptr<Path> result (new Path (root, application, user, relative,
+  boost::shared_ptr<Path> result (new Path (root, application, user, relative,
 				    username, password));
 
   /* notice: Snark hates C++ */
diff --git a/lib/engine/components/xcap/xcap-path.h b/lib/engine/components/xcap/xcap-path.h
index 27c27ff..824317a 100644
--- a/lib/engine/components/xcap/xcap-path.h
+++ b/lib/engine/components/xcap/xcap-path.h
@@ -38,14 +38,14 @@
 #ifndef __XCAP_PATH_H__
 #define __XCAP_PATH_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include <string>
 #include <list>
 
 namespace XCAP
 {
-  class Path: public virtual GmRefCounted
+  class Path
   {
   public:
 
@@ -66,13 +66,13 @@ namespace XCAP
     void set_credentials (std::string username,
 			  std::string password);
 
-    gmref_ptr<Path> build_child (const std::string name);
+    boost::shared_ptr<Path> build_child (const std::string name);
 
-    gmref_ptr<Path> build_child_with_attribute (const std::string name,
+    boost::shared_ptr<Path> build_child_with_attribute (const std::string name,
 						const std::string attr,
 						const std::string value);
 
-    gmref_ptr<Path> build_child_with_position (const std::string name,
+    boost::shared_ptr<Path> build_child_with_position (const std::string name,
 					       int position);
 
   private:
diff --git a/lib/engine/engine.cpp b/lib/engine/engine.cpp
index 4ee148e..47219be 100644
--- a/lib/engine/engine.cpp
+++ b/lib/engine/engine.cpp
@@ -117,16 +117,16 @@ engine_init (int argc,
   /* VideoInputCore depends on VideoOutputCore and must this              *
    * be constructed thereafter                                      */
 
-  gmref_ptr<Ekiga::AccountCore> account_core (new Ekiga::AccountCore);
-  gmref_ptr<Ekiga::ContactCore> contact_core (new Ekiga::ContactCore);
-  gmref_ptr<Ekiga::CallCore> call_core (new Ekiga::CallCore);
-  gmref_ptr<Ekiga::ChatCore> chat_core (new Ekiga::ChatCore);
-  gmref_ptr<Ekiga::VideoOutputCore> videooutput_core (new Ekiga::VideoOutputCore);
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core (new Ekiga::VideoInputCore(*videooutput_core));
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core (new Ekiga::AudioOutputCore);
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core (new Ekiga::AudioInputCore(*audiooutput_core));
-  gmref_ptr<Ekiga::HalCore> hal_core (new Ekiga::HalCore);
-  gmref_ptr<Ekiga::FriendOrFoe> friend_or_foe (new Ekiga::FriendOrFoe);
+  boost::shared_ptr<Ekiga::AccountCore> account_core (new Ekiga::AccountCore);
+  boost::shared_ptr<Ekiga::ContactCore> contact_core (new Ekiga::ContactCore);
+  boost::shared_ptr<Ekiga::CallCore> call_core (new Ekiga::CallCore);
+  boost::shared_ptr<Ekiga::ChatCore> chat_core (new Ekiga::ChatCore);
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core (new Ekiga::VideoOutputCore);
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core (new Ekiga::VideoInputCore(*videooutput_core));
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core (new Ekiga::AudioOutputCore);
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core (new Ekiga::AudioInputCore(*audiooutput_core));
+  boost::shared_ptr<Ekiga::HalCore> hal_core (new Ekiga::HalCore);
+  boost::shared_ptr<Ekiga::FriendOrFoe> friend_or_foe (new Ekiga::FriendOrFoe);
 
 
   /* The last item in the following list will be destroyed first.   *
@@ -150,7 +150,7 @@ engine_init (int argc,
     return;
   }
 
-  gmref_ptr<Ekiga::PresenceCore> presence_core (new Ekiga::PresenceCore (*service_core));
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core (new Ekiga::PresenceCore (*service_core));
   service_core->add (presence_core);
 
 #ifndef WIN32
diff --git a/lib/engine/framework/form-request.h b/lib/engine/framework/form-request.h
index 630933d..10f4fc3 100644
--- a/lib/engine/framework/form-request.h
+++ b/lib/engine/framework/form-request.h
@@ -38,7 +38,7 @@
 
 #include "form.h"
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 namespace Ekiga
 {
@@ -49,7 +49,6 @@ namespace Ekiga
  */
 
   class FormRequest:
-    public virtual GmRefCounted,
     public virtual Form
   {
   public:
@@ -60,7 +59,7 @@ namespace Ekiga
 
   };
 
-  typedef gmref_ptr<FormRequest> FormRequestPtr;
+  typedef boost::shared_ptr<FormRequest> FormRequestPtr;
 
 /**
  * @}
diff --git a/lib/engine/framework/gmref.h b/lib/engine/framework/gmref.h
index f570070..202b3b3 100644
--- a/lib/engine/framework/gmref.h
+++ b/lib/engine/framework/gmref.h
@@ -60,7 +60,7 @@ public:
 
   gmref_ptr (const gmref_ptr& ptr);
 
-  template<typename Tprim> gmref_ptr (const gmref_ptr<Tprim>& ptr);
+  template<typename Tprim> gmref_ptr (const boost::shared_ptr<Tprim>& ptr);
 
   gmref_ptr& operator= (const gmref_ptr& other);
 
@@ -83,14 +83,14 @@ private:
   T* obj;
 };
 
-template<typename T> bool operator==(const gmref_ptr<T>& a,
-				     const gmref_ptr<T>& b);
+template<typename T> bool operator==(const boost::shared_ptr<T>& a,
+				     const boost::shared_ptr<T>& b);
 
-template<typename T> bool operator!=(const gmref_ptr<T>& a,
-				     const gmref_ptr<T>& b);
+template<typename T> bool operator!=(const boost::shared_ptr<T>& a,
+				     const boost::shared_ptr<T>& b);
 
-template<typename T> bool operator<(const gmref_ptr<T>& a,
-				    const gmref_ptr<T>& b);
+template<typename T> bool operator<(const boost::shared_ptr<T>& a,
+				    const boost::shared_ptr<T>& b);
 
 /* base class for a reference counted object
  */
@@ -120,25 +120,25 @@ private:
 /* implementation of the templates */
 
 template<typename T>
-gmref_ptr<T>::gmref_ptr (): obj(0)
+boost::shared_ptr<T>::gmref_ptr (): obj(0)
 {
 }
 
 template<typename T>
-gmref_ptr<T>::~gmref_ptr ()
+boost::shared_ptr<T>::~gmref_ptr ()
 {
   reset ();
 }
 
 template<typename T>
-gmref_ptr<T>::gmref_ptr (T* obj_): obj(obj_)
+boost::shared_ptr<T>::gmref_ptr (T* obj_): obj(obj_)
 {
   if (obj != 0)
     obj->reference ();
 }
 
 template<typename T>
-gmref_ptr<T>::gmref_ptr (const gmref_ptr<T>& ptr): obj(ptr.obj)
+boost::shared_ptr<T>::gmref_ptr (const boost::shared_ptr<T>& ptr): obj(ptr.obj)
 {
   if (obj != 0)
     obj->reference ();
@@ -146,17 +146,17 @@ gmref_ptr<T>::gmref_ptr (const gmref_ptr<T>& ptr): obj(ptr.obj)
 
 template<typename T>
 template<typename Tprim>
-gmref_ptr<T>::gmref_ptr (const gmref_ptr<Tprim>& ptr): obj(dynamic_cast<T*>(ptr.obj))
+boost::shared_ptr<T>::gmref_ptr (const boost::shared_ptr<Tprim>& ptr): obj(dynamic_cast<T*>(ptr.obj))
 {
   if (obj != 0)
     obj->reference ();
 }
 
 template<typename T>
-gmref_ptr<T>&
-gmref_ptr<T>::operator= (const gmref_ptr<T>& other)
+boost::shared_ptr<T>&
+boost::shared_ptr<T>::operator= (const boost::shared_ptr<T>& other)
 {
-  gmref_ptr<T> temp(other);
+  boost::shared_ptr<T> temp(other);
   this->swap (temp);
 
   return *this;
@@ -164,28 +164,28 @@ gmref_ptr<T>::operator= (const gmref_ptr<T>& other)
 
 template<typename T>
 T*
-gmref_ptr<T>::operator-> () const
+boost::shared_ptr<T>::operator-> () const
 {
   return obj;
 }
 
 template<typename T>
 T&
-gmref_ptr<T>::operator* () const
+boost::shared_ptr<T>::operator* () const
 {
   return *obj;
 }
 
 template<typename T>
 T*
-gmref_ptr<T>::get () const
+boost::shared_ptr<T>::get () const
 {
   return obj;
 }
 
 template<typename T>
 void
-gmref_ptr<T>::swap (gmref_ptr<T>& other)
+boost::shared_ptr<T>::swap (boost::shared_ptr<T>& other)
 {
   T* temp = obj;
   obj = other.obj;
@@ -193,14 +193,14 @@ gmref_ptr<T>::swap (gmref_ptr<T>& other)
 }
 
 template<typename T>
-gmref_ptr<T>::operator bool () const
+boost::shared_ptr<T>::operator bool () const
 {
   return obj != 0;
 }
 
 template<typename T>
 void
-gmref_ptr<T>::reset ()
+boost::shared_ptr<T>::reset ()
 {
   if (obj != 0)
     obj->unreference ();
@@ -209,23 +209,23 @@ gmref_ptr<T>::reset ()
 
 template<typename T>
 bool
-operator==(const gmref_ptr<T>& a,
-	   const gmref_ptr<T>& b)
+operator==(const boost::shared_ptr<T>& a,
+	   const boost::shared_ptr<T>& b)
 {
   return a.get () == b.get ();
 }
 
 template<typename T>
-bool operator!=(const gmref_ptr<T>& a,
-		const gmref_ptr<T>& b)
+bool operator!=(const boost::shared_ptr<T>& a,
+		const boost::shared_ptr<T>& b)
 {
   return !operator==(a, b);
 }
 
 template<typename T>
 bool
-operator<(const gmref_ptr<T>& a,
-	  const gmref_ptr<T>& b)
+operator<(const boost::shared_ptr<T>& a,
+	  const boost::shared_ptr<T>& b)
 {
   return a.get () < b.get ();
 }
diff --git a/lib/engine/framework/kickstart.cpp b/lib/engine/framework/kickstart.cpp
index 8a5b331..88213c1 100644
--- a/lib/engine/framework/kickstart.cpp
+++ b/lib/engine/framework/kickstart.cpp
@@ -54,7 +54,7 @@ Ekiga::KickStart::~KickStart ()
 	    << std::endl;
 
   std::cout << "\tBLANK: ";
-  for (std::list<gmref_ptr<Spark> >::iterator iter = blanks.begin ();
+  for (std::list<boost::shared_ptr<Spark> >::iterator iter = blanks.begin ();
        iter != blanks.end ();
        ++iter) {
     std::cout << (*iter)->get_name () << ", ";
@@ -62,7 +62,7 @@ Ekiga::KickStart::~KickStart ()
   std::cout << std::endl;
 
   std::cout << "\tPARTIAL: ";
-  for (std::list<gmref_ptr<Spark> >::iterator iter = partials.begin ();
+  for (std::list<boost::shared_ptr<Spark> >::iterator iter = partials.begin ();
        iter != partials.end ();
        ++iter) {
     std::cout << (*iter)->get_name () << ", ";
@@ -72,7 +72,7 @@ Ekiga::KickStart::~KickStart ()
 }
 
 void
-Ekiga::KickStart::add_spark (gmref_ptr<Ekiga::Spark>& spark)
+Ekiga::KickStart::add_spark (boost::shared_ptr<Ekiga::Spark>& spark)
 {
   blanks.push_back (spark);
 #if KICKSTART_DEBUG
@@ -114,7 +114,7 @@ Ekiga::KickStart::kick (Ekiga::ServiceCore& core,
     went_on = false;
 
     { // first try the blanks
-      std::list<gmref_ptr<Spark> > temp;
+      std::list<boost::shared_ptr<Spark> > temp;
       temp.swap (blanks);
 
 #if KICKSTART_DEBUG
@@ -122,7 +122,7 @@ Ekiga::KickStart::kick (Ekiga::ServiceCore& core,
 	std::cout << "KickStart(kick): looping on BLANK sparks" << std::endl;
 #endif
 
-      for (std::list<gmref_ptr<Spark> >::iterator iter = temp.begin ();
+      for (std::list<boost::shared_ptr<Spark> >::iterator iter = temp.begin ();
 	   iter != temp.end ();
 	   ++iter) {
 
@@ -192,7 +192,7 @@ Ekiga::KickStart::kick (Ekiga::ServiceCore& core,
     }
 
     { // then try the partials
-      std::list<gmref_ptr<Spark> > temp;
+      std::list<boost::shared_ptr<Spark> > temp;
       temp.swap (partials);
 
 #if KICKSTART_DEBUG
@@ -200,7 +200,7 @@ Ekiga::KickStart::kick (Ekiga::ServiceCore& core,
 	std::cout << "KickStart(kick): looping on PARTIAL sparks" << std::endl;
 #endif
 
-      for (std::list<gmref_ptr<Spark> >::iterator iter = temp.begin ();
+      for (std::list<boost::shared_ptr<Spark> >::iterator iter = temp.begin ();
 	   iter != temp.end ();
 	   ++iter) {
 
diff --git a/lib/engine/framework/kickstart.h b/lib/engine/framework/kickstart.h
index a4d4b06..23942fc 100644
--- a/lib/engine/framework/kickstart.h
+++ b/lib/engine/framework/kickstart.h
@@ -66,7 +66,7 @@
 namespace Ekiga
 {
 
-  struct Spark: public virtual GmRefCounted
+  struct Spark
   {
     typedef enum { BLANK, PARTIAL, FULL } state;
 
@@ -90,7 +90,7 @@ namespace Ekiga
 
     ~KickStart ();
 
-    void add_spark (gmref_ptr<Spark>& spark);
+    void add_spark (boost::shared_ptr<Spark>& spark);
 
     /* try to do more with the known blank/partial sparks */
     void kick (Ekiga::ServiceCore& core,
@@ -98,8 +98,8 @@ namespace Ekiga
 	       char** argv[]);
 
   private:
-    std::list<gmref_ptr<Spark> > blanks;
-    std::list<gmref_ptr<Spark> > partials;
+    std::list<boost::shared_ptr<Spark> > blanks;
+    std::list<boost::shared_ptr<Spark> > partials;
   };
 };
 
diff --git a/lib/engine/framework/menu-xml.cpp b/lib/engine/framework/menu-xml.cpp
index 24b36cd..6f01140 100644
--- a/lib/engine/framework/menu-xml.cpp
+++ b/lib/engine/framework/menu-xml.cpp
@@ -52,7 +52,7 @@ static void run_command (const std::string command)
   g_spawn_command_line_async (command.c_str (), NULL);
 }
 
-static void pull_trigger (gmref_ptr<Ekiga::Trigger> trigger)
+static void pull_trigger (boost::shared_ptr<Ekiga::Trigger> trigger)
 {
   trigger->pull ();
 }
@@ -175,7 +175,7 @@ populate_item (Ekiga::ServiceCore &core,
 					  command));
 	} else {
 
-	  gmref_ptr<Ekiga::Trigger> trigger = core.get (command);
+	  boost::shared_ptr<Ekiga::Trigger> trigger = core.get<Ekiga::Trigger> (command);
 	  if (trigger)
 	    builder.add_action (icon, label,
 				sigc::bind (sigc::ptr_fun (pull_trigger),
diff --git a/lib/engine/framework/reflister.h b/lib/engine/framework/reflister.h
index 08bc5f0..98cacf3 100644
--- a/lib/engine/framework/reflister.h
+++ b/lib/engine/framework/reflister.h
@@ -40,7 +40,7 @@
 #include <sigc++/sigc++.h>
 #include <list>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "map-key-iterator.h"
 #include "map-key-const-iterator.h"
 
@@ -51,20 +51,20 @@ namespace Ekiga
   {
   protected:
 
-    typedef std::map<gmref_ptr<ObjectType>,std::list<sigc::connection> > container_type;
+    typedef std::map<boost::shared_ptr<ObjectType>,std::list<sigc::connection> > container_type;
     typedef Ekiga::map_key_iterator<container_type> iterator;
     typedef Ekiga::map_key_const_iterator<container_type> const_iterator;
 
     virtual ~RefLister ();
 
-    void visit_objects (sigc::slot1<bool, gmref_ptr<ObjectType> > visitor);
+    void visit_objects (sigc::slot1<bool, boost::shared_ptr<ObjectType> > visitor);
 
-    void add_object (gmref_ptr<ObjectType> obj);
+    void add_object (boost::shared_ptr<ObjectType> obj);
 
-    void add_connection (gmref_ptr<ObjectType> obj,
+    void add_connection (boost::shared_ptr<ObjectType> obj,
 			 sigc::connection connection);
 
-    void remove_object (gmref_ptr<ObjectType> obj);
+    void remove_object (boost::shared_ptr<ObjectType> obj);
 
     void remove_all_objects ();
 
@@ -74,9 +74,9 @@ namespace Ekiga
     const_iterator begin () const;
     const_iterator end () const;
 
-    sigc::signal1<void, gmref_ptr<ObjectType> > object_added;
-    sigc::signal1<void, gmref_ptr<ObjectType> > object_removed;
-    sigc::signal1<void, gmref_ptr<ObjectType> > object_updated;
+    sigc::signal1<void, boost::shared_ptr<ObjectType> > object_added;
+    sigc::signal1<void, boost::shared_ptr<ObjectType> > object_removed;
+    sigc::signal1<void, boost::shared_ptr<ObjectType> > object_updated;
 
   private:
     container_type objects;
@@ -102,7 +102,7 @@ Ekiga::RefLister<ObjectType>::~RefLister ()
 
 template<typename ObjectType>
 void
-Ekiga::RefLister<ObjectType>::visit_objects (sigc::slot1<bool, gmref_ptr<ObjectType> > visitor)
+Ekiga::RefLister<ObjectType>::visit_objects (sigc::slot1<bool, boost::shared_ptr<ObjectType> > visitor)
 {
   bool go_on = true;
   for (typename container_type::iterator iter = objects.begin ();
@@ -113,7 +113,7 @@ Ekiga::RefLister<ObjectType>::visit_objects (sigc::slot1<bool, gmref_ptr<ObjectT
 
 template<typename ObjectType>
 void
-Ekiga::RefLister<ObjectType>::add_object (gmref_ptr<ObjectType> obj)
+Ekiga::RefLister<ObjectType>::add_object (boost::shared_ptr<ObjectType> obj)
 {
   objects[obj].push_back (obj->updated.connect (sigc::bind (object_updated.make_slot (), obj)));
   objects[obj].push_back (obj->removed.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::RefLister<ObjectType>::remove_object), obj)));
@@ -123,7 +123,7 @@ Ekiga::RefLister<ObjectType>::add_object (gmref_ptr<ObjectType> obj)
 
 template<typename ObjectType>
 void
-Ekiga::RefLister<ObjectType>::add_connection (gmref_ptr<ObjectType> obj,
+Ekiga::RefLister<ObjectType>::add_connection (boost::shared_ptr<ObjectType> obj,
 					      sigc::connection connection)
 {
   objects[obj].push_back (connection);
@@ -131,7 +131,7 @@ Ekiga::RefLister<ObjectType>::add_connection (gmref_ptr<ObjectType> obj,
 
 template<typename ObjectType>
 void
-Ekiga::RefLister<ObjectType>::remove_object (gmref_ptr<ObjectType> obj)
+Ekiga::RefLister<ObjectType>::remove_object (boost::shared_ptr<ObjectType> obj)
 {
   std::list<sigc::connection> connections = objects[obj];
   for (std::list<sigc::connection>::iterator iter = connections.begin ();
diff --git a/lib/engine/framework/services.h b/lib/engine/framework/services.h
index d50d20e..bc122e9 100644
--- a/lib/engine/framework/services.h
+++ b/lib/engine/framework/services.h
@@ -40,7 +40,7 @@
  * it!
  */
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include <list>
 #include <string>
@@ -54,7 +54,7 @@ namespace Ekiga
  * @{
  */
 
-  struct Service: public virtual GmRefCounted
+  struct Service
   {
     virtual ~Service () {}
 
@@ -62,7 +62,7 @@ namespace Ekiga
 
     virtual const std::string get_description () const = 0;
   };
-  typedef gmref_ptr<Service> ServicePtr;
+  typedef boost::shared_ptr<Service> ServicePtr;
 
 
   class ServiceCore
@@ -77,6 +77,10 @@ namespace Ekiga
 
     ServicePtr get (const std::string name);
 
+    template<typename T>
+    boost::shared_ptr<T> get (const std::string name)
+    { return boost::dynamic_pointer_cast<T> (get (name)); }
+
     void dump (std::ostream &stream) const;
 
     sigc::signal1<void, ServicePtr> service_added;
diff --git a/lib/engine/friend-or-foe/friend-or-foe.cpp b/lib/engine/friend-or-foe/friend-or-foe.cpp
index b0b75b9..343a605 100644
--- a/lib/engine/friend-or-foe/friend-or-foe.cpp
+++ b/lib/engine/friend-or-foe/friend-or-foe.cpp
@@ -20,7 +20,7 @@ Ekiga::FriendOrFoe::decide (const std::string domain,
 }
 
 void
-Ekiga::FriendOrFoe::add_helper (gmref_ptr<Ekiga::FriendOrFoe::Helper> helper)
+Ekiga::FriendOrFoe::add_helper (boost::shared_ptr<Ekiga::FriendOrFoe::Helper> helper)
 {
   helpers.push_front (helper);
 }
diff --git a/lib/engine/friend-or-foe/friend-or-foe.h b/lib/engine/friend-or-foe/friend-or-foe.h
index fd8bb7b..54fc7fe 100644
--- a/lib/engine/friend-or-foe/friend-or-foe.h
+++ b/lib/engine/friend-or-foe/friend-or-foe.h
@@ -63,7 +63,7 @@ namespace Ekiga
     /* beware of the order : we prefer erring on the side of safety */
     typedef enum { Unknown, Foe, Neutral, Friend } Identification;
 
-    class Helper: public virtual GmRefCounted
+    class Helper
     {
     public:
       virtual ~Helper ()
@@ -76,7 +76,7 @@ namespace Ekiga
     Identification decide (const std::string domain,
 			   const std::string token) const;
 
-    void add_helper (gmref_ptr<Helper> helper);
+    void add_helper (boost::shared_ptr<Helper> helper);
 
     /* this turns us into a service */
     const std::string get_name () const
@@ -86,7 +86,7 @@ namespace Ekiga
     { return "\tObject helping determine if an incoming call is acceptable"; }
 
   private:
-    typedef std::list<gmref_ptr<Helper> > helpers_type;
+    typedef std::list<boost::shared_ptr<Helper> > helpers_type;
     helpers_type helpers;
   };
 };
diff --git a/lib/engine/gui/gtk-core/gtk-core-main.cpp b/lib/engine/gui/gtk-core/gtk-core-main.cpp
index 612c0a0..34b8679 100644
--- a/lib/engine/gui/gtk-core/gtk-core-main.cpp
+++ b/lib/engine/gui/gtk-core/gtk-core-main.cpp
@@ -48,7 +48,7 @@ gtk_core_init (Ekiga::ServiceCore &core,
 {
   if (gtk_init_check (argc, argv)) {
 
-    gmref_ptr<Gtk::Core> gtk (new Gtk::Core);
+    boost::shared_ptr<Gtk::Core> gtk (new Gtk::Core);
 
     core.add (gtk);
 
diff --git a/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp b/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
index 0054fc4..9c5d631 100644
--- a/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
@@ -78,7 +78,7 @@ on_contact_added (Ekiga::ContactPtr contact,
   std::stringstream info;
   const gchar *id = NULL;
 
-  gmref_ptr<History::Contact> hcontact = contact;
+  boost::shared_ptr<History::Contact> hcontact = boost::dynamic_pointer_cast<History::Contact> (contact);
   GtkTreeIter iter;
 
   if (hcontact) {
@@ -189,7 +189,7 @@ on_clicked (GtkWidget *tree,
 /* public api */
 
 GtkWidget *
-call_history_view_gtk_new (gmref_ptr<History::Book> book)
+call_history_view_gtk_new (boost::shared_ptr<History::Book> book)
 {
   GtkWidget *result = NULL;
   std::list<sigc::connection> *conns = NULL;
diff --git a/lib/engine/gui/gtk-frontend/call-history-view-gtk.h b/lib/engine/gui/gtk-frontend/call-history-view-gtk.h
index 7f767f5..6b48ea0 100644
--- a/lib/engine/gui/gtk-frontend/call-history-view-gtk.h
+++ b/lib/engine/gui/gtk-frontend/call-history-view-gtk.h
@@ -41,6 +41,6 @@
 #include <gtk/gtk.h>
 #include "history-book.h"
 
-GtkWidget *call_history_view_gtk_new (gmref_ptr<History::Book> book);
+GtkWidget *call_history_view_gtk_new (boost::shared_ptr<History::Book> book);
 
 #endif
diff --git a/lib/engine/gui/gtk-frontend/chat-area.cpp b/lib/engine/gui/gtk-frontend/chat-area.cpp
index 663ee68..dfe4a11 100644
--- a/lib/engine/gui/gtk-frontend/chat-area.cpp
+++ b/lib/engine/gui/gtk-frontend/chat-area.cpp
@@ -59,7 +59,7 @@ struct _ChatAreaPrivate
 {
   Ekiga::Chat* chat;
   sigc::connection connection;
-  gmref_ptr<ChatAreaHelper> helper;
+  boost::shared_ptr<ChatAreaHelper> helper;
   GmTextBufferEnhancer* enhancer;
   GtkWidget* smiley_menu;
 
@@ -689,7 +689,7 @@ chat_area_set_property (GObject* obj,
     ptr = g_value_get_pointer (value);
     self->priv->chat = (Ekiga::Chat *)ptr;
     self->priv->connection = self->priv->chat->removed.connect (sigc::bind (sigc::ptr_fun (on_chat_removed), self));
-    self->priv->helper = gmref_ptr<ChatAreaHelper>(new ChatAreaHelper (self));
+    self->priv->helper = boost::shared_ptr<ChatAreaHelper>(new ChatAreaHelper (self));
     self->priv->chat->connect (self->priv->helper);
     break;
 
@@ -1009,7 +1009,7 @@ chat_area_get_type ()
 /* public api */
 
 GtkWidget*
-chat_area_new (gmref_ptr<Ekiga::Chat> chat)
+chat_area_new (boost::shared_ptr<Ekiga::Chat> chat)
 {
   return (GtkWidget*)g_object_new (TYPE_CHAT_AREA,
 				   "chat", chat.get (),
diff --git a/lib/engine/gui/gtk-frontend/chat-area.h b/lib/engine/gui/gtk-frontend/chat-area.h
index 1ba9c5c..e03073a 100644
--- a/lib/engine/gui/gtk-frontend/chat-area.h
+++ b/lib/engine/gui/gtk-frontend/chat-area.h
@@ -65,7 +65,7 @@ struct _ChatAreaClass
 
 /* public api */
 
-GtkWidget *chat_area_new (gmref_ptr<Ekiga::Chat> chat);
+GtkWidget *chat_area_new (boost::shared_ptr<Ekiga::Chat> chat);
 
 const std::string chat_area_get_title (ChatArea* chat);
 
diff --git a/lib/engine/gui/gtk-frontend/gtk-frontend.cpp b/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
index cababba..634bd17 100644
--- a/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
+++ b/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
@@ -63,14 +63,14 @@ gtk_frontend_init (Ekiga::ServiceCore &core,
 {
   bool result = false;
 
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
-  gmref_ptr<Ekiga::ChatCore> chat_core = core.get ("chat-core");
-  gmref_ptr<History::Source> history_source = core.get ("call-history-store");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
+  boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
+  boost::shared_ptr<History::Source> history_source = core.get<History::Source> ("call-history-store");
 
   if (presence_core && contact_core && chat_core && history_source) {
 
-    gmref_ptr<GtkFrontend> gtk_frontend (new GtkFrontend (core));
+    boost::shared_ptr<GtkFrontend> gtk_frontend (new GtkFrontend (core));
     core.add (gtk_frontend);
     result = true;
   }
@@ -80,8 +80,8 @@ gtk_frontend_init (Ekiga::ServiceCore &core,
 
 GtkFrontend::GtkFrontend (Ekiga::ServiceCore &core)
 {
-  gmref_ptr<Ekiga::ContactCore> contact_core = core.get ("contact-core");
-  gmref_ptr<Ekiga::ChatCore> chat_core = core.get ("chat-core");
+  boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
+  boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
 
   addressbook_window =
     addressbook_window_new_with_key (*contact_core, "/apps/" PACKAGE_NAME "/general/user_interface/addressbook_window");
diff --git a/lib/engine/notification/notification-core.h b/lib/engine/notification/notification-core.h
index 45dbfdf..f1252eb 100644
--- a/lib/engine/notification/notification-core.h
+++ b/lib/engine/notification/notification-core.h
@@ -36,7 +36,7 @@
 #ifndef __NOTIFICATION_CORE_H__
 #define __NOTIFICATION_CORE_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 namespace Ekiga
 {
@@ -44,7 +44,7 @@ namespace Ekiga
    * with a decent memory management and a signal to know if it's still
    * there
    */
-  class Notification: public virtual GmRefCounted
+  class Notification
   {
   public:
 
@@ -94,10 +94,10 @@ namespace Ekiga
 
     /*** Public API ***/
 
-    void push_notification (gmref_ptr<Notification> notification)
+    void push_notification (boost::shared_ptr<Notification> notification)
     { notification_added.emit (notification); }
 
-    sigc::signal1<void, gmref_ptr<Notification> > notification_added;
+    sigc::signal1<void, boost::shared_ptr<Notification> > notification_added;
   };
 };
 
diff --git a/lib/engine/presence/cluster-impl.h b/lib/engine/presence/cluster-impl.h
index 68fefad..77c17d3 100644
--- a/lib/engine/presence/cluster-impl.h
+++ b/lib/engine/presence/cluster-impl.h
@@ -84,9 +84,9 @@ namespace Ekiga
 
   protected:
 
-    void add_heap (gmref_ptr<HeapType> heap);
+    void add_heap (boost::shared_ptr<HeapType> heap);
 
-    void remove_heap (gmref_ptr<HeapType> heap);
+    void remove_heap (boost::shared_ptr<HeapType> heap);
 
     using RefLister<HeapType>::add_connection;
 
@@ -97,13 +97,13 @@ namespace Ekiga
 
   private:
 
-    void common_removal_steps (gmref_ptr<HeapType> heap);
+    void common_removal_steps (boost::shared_ptr<HeapType> heap);
 
-    void on_presentity_added (PresentityPtr presentity, gmref_ptr<HeapType> heap);
+    void on_presentity_added (PresentityPtr presentity, boost::shared_ptr<HeapType> heap);
 
-    void on_presentity_updated (PresentityPtr presentity, gmref_ptr<HeapType> heap);
+    void on_presentity_updated (PresentityPtr presentity, boost::shared_ptr<HeapType> heap);
 
-    void on_presentity_removed (PresentityPtr presentity, gmref_ptr<HeapType> heap);
+    void on_presentity_removed (PresentityPtr presentity, boost::shared_ptr<HeapType> heap);
   };
 
 /**
@@ -137,7 +137,7 @@ Ekiga::ClusterImpl<HeapType>::visit_heaps (sigc::slot1<bool, HeapPtr > visitor)
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::add_heap (gmref_ptr<HeapType> heap)
+Ekiga::ClusterImpl<HeapType>::add_heap (boost::shared_ptr<HeapType> heap)
 {
   add_connection (heap, heap->presentity_added.connect (sigc::bind (sigc::mem_fun (this, &ClusterImpl::on_presentity_added), heap)));
 
@@ -152,28 +152,28 @@ Ekiga::ClusterImpl<HeapType>::add_heap (gmref_ptr<HeapType> heap)
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::remove_heap (gmref_ptr<HeapType> heap)
+Ekiga::ClusterImpl<HeapType>::remove_heap (boost::shared_ptr<HeapType> heap)
 {
   remove_object (heap);
 }
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::on_presentity_added (PresentityPtr presentity, gmref_ptr<HeapType> heap)
+Ekiga::ClusterImpl<HeapType>::on_presentity_added (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
   presentity_added.emit (heap, presentity);
 }
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::on_presentity_updated (PresentityPtr presentity, gmref_ptr<HeapType> heap)
+Ekiga::ClusterImpl<HeapType>::on_presentity_updated (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
   presentity_updated.emit (heap, presentity);
 }
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::on_presentity_removed (PresentityPtr presentity, gmref_ptr<HeapType> heap)
+Ekiga::ClusterImpl<HeapType>::on_presentity_removed (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
   presentity_removed.emit (heap, presentity);
 }
diff --git a/lib/engine/presence/cluster.h b/lib/engine/presence/cluster.h
index 38a5456..0b07551 100644
--- a/lib/engine/presence/cluster.h
+++ b/lib/engine/presence/cluster.h
@@ -47,7 +47,7 @@ namespace Ekiga
  * @{
  */
 
-  class Cluster: public virtual GmRefCounted
+  class Cluster
   {
 
   public:
@@ -86,7 +86,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Cluster> ClusterPtr;
+  typedef boost::shared_ptr<Cluster> ClusterPtr;
 
 /**
  * @}
diff --git a/lib/engine/presence/heap-impl.h b/lib/engine/presence/heap-impl.h
index 9d71f77..901b9f5 100644
--- a/lib/engine/presence/heap-impl.h
+++ b/lib/engine/presence/heap-impl.h
@@ -92,9 +92,9 @@ namespace Ekiga
 
     using RefLister<PresentityType>::add_connection;
 
-    void add_presentity (gmref_ptr<PresentityType> presentity);
+    void add_presentity (boost::shared_ptr<PresentityType> presentity);
 
-    void remove_presentity (gmref_ptr<PresentityType> presentity);
+    void remove_presentity (boost::shared_ptr<PresentityType> presentity);
   };
 
 /**
@@ -156,7 +156,7 @@ Ekiga::HeapImpl<PresentityType>::end () const
 
 template<typename PresentityType>
 void
-Ekiga::HeapImpl<PresentityType>::add_presentity (gmref_ptr<PresentityType> presentity)
+Ekiga::HeapImpl<PresentityType>::add_presentity (boost::shared_ptr<PresentityType> presentity)
 {
   presentity->questions.connect (questions.make_slot ());
 
@@ -165,7 +165,7 @@ Ekiga::HeapImpl<PresentityType>::add_presentity (gmref_ptr<PresentityType> prese
 
 template<typename PresentityType>
 void
-Ekiga::HeapImpl<PresentityType>::remove_presentity (gmref_ptr<PresentityType> presentity)
+Ekiga::HeapImpl<PresentityType>::remove_presentity (boost::shared_ptr<PresentityType> presentity)
 {
   remove_object (presentity);
 }
diff --git a/lib/engine/presence/heap.h b/lib/engine/presence/heap.h
index 9201f79..775569c 100644
--- a/lib/engine/presence/heap.h
+++ b/lib/engine/presence/heap.h
@@ -38,7 +38,7 @@
 #ifndef __HEAP_H__
 #define __HEAP_H__
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "presentity.h"
 
@@ -50,7 +50,7 @@ namespace Ekiga
  * @{
  */
 
-  class Heap: public virtual GmRefCounted
+  class Heap
   {
 
   public:
@@ -112,7 +112,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Heap> HeapPtr;
+  typedef boost::shared_ptr<Heap> HeapPtr;
 
 /**
  * @}
diff --git a/lib/engine/presence/presence-core.cpp b/lib/engine/presence/presence-core.cpp
index cd17db3..8a598a9 100644
--- a/lib/engine/presence/presence-core.cpp
+++ b/lib/engine/presence/presence-core.cpp
@@ -41,7 +41,7 @@
 
 Ekiga::PresenceCore::PresenceCore (Ekiga::ServiceCore& core)
 {
-  gmref_ptr<Ekiga::PersonalDetails> details = core.get ("personal-details");
+  boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
 
   if (details)
     conns.push_back (details->updated.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::publish), details)));
@@ -135,7 +135,7 @@ Ekiga::PresenceCore::on_presentity_removed (HeapPtr heap,
 }
 
 void
-Ekiga::PresenceCore::add_presentity_decorator (gmref_ptr<PresentityDecorator> decorator)
+Ekiga::PresenceCore::add_presentity_decorator (boost::shared_ptr<PresentityDecorator> decorator)
 {
   presentity_decorators.push_back (decorator);
 }
@@ -147,7 +147,7 @@ Ekiga::PresenceCore::populate_presentity_menu (PresentityPtr presentity,
 {
   bool populated = false;
 
-  for (std::list<gmref_ptr<PresentityDecorator> >::const_iterator iter
+  for (std::list<boost::shared_ptr<PresentityDecorator> >::const_iterator iter
 	 = presentity_decorators.begin ();
        iter != presentity_decorators.end ();
        ++iter) {
@@ -159,7 +159,7 @@ Ekiga::PresenceCore::populate_presentity_menu (PresentityPtr presentity,
 }
 
 void
-Ekiga::PresenceCore::add_presence_fetcher (gmref_ptr<PresenceFetcher> fetcher)
+Ekiga::PresenceCore::add_presence_fetcher (boost::shared_ptr<PresenceFetcher> fetcher)
 {
   presence_fetchers.push_back (fetcher);
   conns.push_back (fetcher->presence_received.connect (sigc::mem_fun (this, &Ekiga::PresenceCore::on_presence_received)));
@@ -178,7 +178,7 @@ Ekiga::PresenceCore::fetch_presence (const std::string uri)
 
   if (uri_infos[uri].count == 1) {
 
-    for (std::list<gmref_ptr<PresenceFetcher> >::iterator iter
+    for (std::list<boost::shared_ptr<PresenceFetcher> >::iterator iter
 	   = presence_fetchers.begin ();
 	 iter != presence_fetchers.end ();
 	 ++iter)
@@ -197,7 +197,7 @@ void Ekiga::PresenceCore::unfetch_presence (const std::string uri)
 
     uri_infos.erase (uri_infos.find (uri));
 
-    for (std::list<gmref_ptr<PresenceFetcher> >::iterator iter
+    for (std::list<boost::shared_ptr<PresenceFetcher> >::iterator iter
 	   = presence_fetchers.begin ();
 	 iter != presence_fetchers.end ();
 	 ++iter)
@@ -222,14 +222,14 @@ Ekiga::PresenceCore::on_status_received (const std::string uri,
 }
 
 void
-Ekiga::PresenceCore::add_presence_publisher (gmref_ptr<PresencePublisher> publisher)
+Ekiga::PresenceCore::add_presence_publisher (boost::shared_ptr<PresencePublisher> publisher)
 {
   presence_publishers.push_back (publisher);
 }
 
-void Ekiga::PresenceCore::publish (gmref_ptr<PersonalDetails> details) 
+void Ekiga::PresenceCore::publish (boost::shared_ptr<PersonalDetails> details) 
 {
-  for (std::list<gmref_ptr<PresencePublisher> >::iterator iter
+  for (std::list<boost::shared_ptr<PresencePublisher> >::iterator iter
 	 = presence_publishers.begin ();
        iter != presence_publishers.end ();
        ++iter)
diff --git a/lib/engine/presence/presence-core.h b/lib/engine/presence/presence-core.h
index 18d4ff3..f7099da 100644
--- a/lib/engine/presence/presence-core.h
+++ b/lib/engine/presence/presence-core.h
@@ -52,7 +52,7 @@ namespace Ekiga
  */
 
 
-  class PresentityDecorator: public virtual GmRefCounted
+  class PresentityDecorator
   {
   public:
 
@@ -70,7 +70,7 @@ namespace Ekiga
 				MenuBuilder &/*builder*/) = 0;
   };
 
-  class PresenceFetcher: public virtual GmRefCounted
+  class PresenceFetcher
   {
   public:
 
@@ -101,7 +101,7 @@ namespace Ekiga
     sigc::signal2<void, std::string, std::string> status_received;
   };
 
-  class PresencePublisher: public virtual GmRefCounted
+  class PresencePublisher
   {
   public:
 
@@ -218,7 +218,7 @@ namespace Ekiga
     /** Adds a decorator to the pool of presentity decorators.
      * @param The presentity decorator.
      */
-    void add_presentity_decorator (gmref_ptr<PresentityDecorator> decorator);
+    void add_presentity_decorator (boost::shared_ptr<PresentityDecorator> decorator);
 
     /** Populates a menu with the actions available on a given uri.
      * @param The uri for which the decoration is needed.
@@ -230,7 +230,7 @@ namespace Ekiga
 
   private:
 
-    std::list<gmref_ptr<PresentityDecorator> > presentity_decorators;
+    std::list<boost::shared_ptr<PresentityDecorator> > presentity_decorators;
 
     /*** API to help presentities get presence ***/
   public:
@@ -238,7 +238,7 @@ namespace Ekiga
     /** Adds a fetcher to the pool of presentce fetchers.
      * @param The presence fetcher.
      */
-    void add_presence_fetcher (gmref_ptr<PresenceFetcher> fetcher);
+    void add_presence_fetcher (boost::shared_ptr<PresenceFetcher> fetcher);
 
     /** Tells the PresenceCore that someone is interested in presence
      * information for the given uri.
@@ -260,7 +260,7 @@ namespace Ekiga
 
   private:
 
-    std::list<gmref_ptr<PresenceFetcher> > presence_fetchers;
+    std::list<boost::shared_ptr<PresenceFetcher> > presence_fetchers;
     void on_presence_received (const std::string uri,
 			       const std::string presence);
     void on_status_received (const std::string uri,
@@ -280,13 +280,13 @@ namespace Ekiga
     /* help publishing presence */
   public:
 
-    void add_presence_publisher (gmref_ptr<PresencePublisher> publisher);
+    void add_presence_publisher (boost::shared_ptr<PresencePublisher> publisher);
 
-    void publish (gmref_ptr<PersonalDetails> details);
+    void publish (boost::shared_ptr<PersonalDetails> details);
 
   private:
 
-    std::list<gmref_ptr<PresencePublisher> > presence_publishers;
+    std::list<boost::shared_ptr<PresencePublisher> > presence_publishers;
     void on_personal_details_updated (PersonalDetails &details);
 
     /*** API to control which uri are supported by runtime ***/
diff --git a/lib/engine/presence/presentity.h b/lib/engine/presence/presentity.h
index 99a9a2a..4e31985 100644
--- a/lib/engine/presence/presentity.h
+++ b/lib/engine/presence/presentity.h
@@ -39,7 +39,7 @@
 #include <set>
 #include <string>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "chain-of-responsibility.h"
 #include "form-request.h"
 #include "menu-builder.h"
@@ -54,7 +54,7 @@ namespace Ekiga
 
   /** A presentity is a piece of presence information for a single URI.
    */
-  class Presentity: public virtual GmRefCounted
+  class Presentity
   {
   public:
 
@@ -105,7 +105,7 @@ namespace Ekiga
     ChainOfResponsibility<FormRequestPtr> questions;
   };
 
-  typedef gmref_ptr<Presentity> PresentityPtr;
+  typedef boost::shared_ptr<Presentity> PresentityPtr;
 /**
  * @}
  */
diff --git a/lib/engine/presence/uri-presentity.cpp b/lib/engine/presence/uri-presentity.cpp
index a7a750b..db931ac 100644
--- a/lib/engine/presence/uri-presentity.cpp
+++ b/lib/engine/presence/uri-presentity.cpp
@@ -41,7 +41,7 @@ Ekiga::URIPresentity::URIPresentity (Ekiga::ServiceCore &_core,
 				     std::set<std::string> groups_)
   : core(_core), name(name_), uri(uri_), presence("unknown"), groups(groups_)
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   presence_core->presence_received.connect (sigc::mem_fun (this, &Ekiga::URIPresentity::on_presence_received));
   presence_core->status_received.connect (sigc::mem_fun (this, &Ekiga::URIPresentity::on_status_received));
   presence_core->fetch_presence (uri);
@@ -49,7 +49,7 @@ Ekiga::URIPresentity::URIPresentity (Ekiga::ServiceCore &_core,
 
 Ekiga::URIPresentity::~URIPresentity ()
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   if (presence_core)
     presence_core->unfetch_presence (uri);
 }
@@ -93,7 +93,7 @@ Ekiga::URIPresentity::get_uri () const
 bool
 Ekiga::URIPresentity::populate_menu (Ekiga::MenuBuilder &builder)
 {
-  gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = core.get<Ekiga::PresenceCore> ("presence-core");
   return presence_core->populate_presentity_menu (PresentityPtr(this),
 						  uri, builder);
 }
diff --git a/lib/engine/protocol/call-core.cpp b/lib/engine/protocol/call-core.cpp
index 92c60ab..40f7839 100644
--- a/lib/engine/protocol/call-core.cpp
+++ b/lib/engine/protocol/call-core.cpp
@@ -52,7 +52,7 @@ CallCore::~CallCore ()
 }
 
 
-void CallCore::add_manager (gmref_ptr<CallManager> manager)
+void CallCore::add_manager (boost::shared_ptr<CallManager> manager)
 {
   managers.insert (manager);
   manager_added.emit (manager);
@@ -87,7 +87,7 @@ CallCore::const_iterator CallCore::end () const
 
 bool CallCore::dial (const std::string uri)
 {
-  for (std::set<gmref_ptr<CallManager> >::iterator iter = managers.begin ();
+  for (std::set<boost::shared_ptr<CallManager> >::iterator iter = managers.begin ();
        iter != managers.end ();
        iter++) {
     if ((*iter)->dial (uri))
@@ -98,7 +98,7 @@ bool CallCore::dial (const std::string uri)
 }
 
 
-void CallCore::add_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::add_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   std::list<sigc::connection> conns;
 
@@ -119,7 +119,7 @@ void CallCore::add_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
 }
 
 
-void CallCore::remove_call (gmref_ptr<Call> call)
+void CallCore::remove_call (boost::shared_ptr<Call> call)
 {
   for (std::list<sigc::connection>::iterator iter2 = call_connections [call->get_id ()].begin ();
        iter2 != call_connections [call->get_id ()].end ();
@@ -130,73 +130,73 @@ void CallCore::remove_call (gmref_ptr<Call> call)
 }
 
 
-void CallCore::on_ringing_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_ringing_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   ringing_call.emit (manager, call);
 }
 
 
-void CallCore::on_setup_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_setup_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   setup_call.emit (manager, call);
 }
 
 
-void CallCore::on_missed_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_missed_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   missed_call.emit (manager, call);
 }
 
 
-void CallCore::on_cleared_call (std::string reason, gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_cleared_call (std::string reason, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   cleared_call.emit (manager, call, reason); 
 }
 
 
-void CallCore::on_established_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_established_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   established_call.emit (manager, call);
 }
 
 
-void CallCore::on_held_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_held_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   held_call.emit (manager, call);
 }
 
 
-void CallCore::on_retrieved_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_retrieved_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   retrieved_call.emit (manager, call);
 }
 
 
-void CallCore::on_stream_opened (std::string name, Call::StreamType type, bool is_transmitting, gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_stream_opened (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   stream_opened.emit (manager, call, name, type, is_transmitting);
 }
 
 
-void CallCore::on_stream_closed (std::string name, Call::StreamType type, bool is_transmitting, gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_stream_closed (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   stream_closed.emit (manager, call, name, type, is_transmitting);
 }
 
 
-void CallCore::on_stream_paused (std::string name, Call::StreamType type, gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_stream_paused (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   stream_paused.emit (manager, call, name, type);
 }
 
 
-void CallCore::on_stream_resumed (std::string name, Call::StreamType type, gmref_ptr<Call> call, gmref_ptr<CallManager> manager)
+void CallCore::on_stream_resumed (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
   stream_resumed.emit (manager, call, name, type);
 }
 
 
-void CallCore::on_manager_ready (gmref_ptr<CallManager> manager)
+void CallCore::on_manager_ready (boost::shared_ptr<CallManager> manager)
 {
   manager_ready.emit (manager);
   nr_ready++;
@@ -206,7 +206,7 @@ void CallCore::on_manager_ready (gmref_ptr<CallManager> manager)
 }
 
 
-void CallCore::on_call_removed (gmref_ptr<Call> call)
+void CallCore::on_call_removed (boost::shared_ptr<Call> call)
 {
   remove_call (call);
 }
diff --git a/lib/engine/protocol/call-core.h b/lib/engine/protocol/call-core.h
index 1c7c407..8ccae9f 100644
--- a/lib/engine/protocol/call-core.h
+++ b/lib/engine/protocol/call-core.h
@@ -43,7 +43,7 @@
 #include "call.h"
 #include "call-manager.h"
 #include "call-protocol-manager.h"
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include <sigc++/sigc++.h>
 #include <set>
@@ -66,8 +66,8 @@ namespace Ekiga
     {
 
   public:
-      typedef std::set<gmref_ptr<CallManager> >::iterator iterator;
-      typedef std::set<gmref_ptr<CallManager> >::const_iterator const_iterator;
+      typedef std::set<boost::shared_ptr<CallManager> >::iterator iterator;
+      typedef std::set<boost::shared_ptr<CallManager> >::const_iterator const_iterator;
 
       /** The constructor
        */
@@ -98,17 +98,17 @@ namespace Ekiga
        * @param call is the call to be added.
        * @param manager is the CallManager handling it.
        */
-      void add_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
+      void add_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
 
       /** Remove a call handled by the CallCore serice.
        * @param call is the call to be removed.
        */
-      void remove_call (gmref_ptr<Call> call);
+      void remove_call (boost::shared_ptr<Call> call);
 
       /** Adds a CallManager to the CallCore service.
        * @param The manager to be added.
        */
-      void add_manager (gmref_ptr<CallManager> manager);
+      void add_manager (boost::shared_ptr<CallManager> manager);
 
       /** Return iterator to beginning
        * @return iterator to beginning
@@ -125,7 +125,7 @@ namespace Ekiga
       /** This signal is emitted when a Ekiga::CallManager has been
        * added to the CallCore Service.
        */
-      sigc::signal1<void, gmref_ptr<CallManager> > manager_added;
+      sigc::signal1<void, boost::shared_ptr<CallManager> > manager_added;
 
 
       /*** Call Management ***/                 
@@ -140,20 +140,20 @@ namespace Ekiga
       
       /** See call.h for the API
        */
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > ringing_call;
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > setup_call;
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > missed_call;
-      sigc::signal3<void, gmref_ptr<CallManager> , gmref_ptr<Call>, std::string> cleared_call;
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > established_call;
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > held_call;
-      sigc::signal2<void, gmref_ptr<CallManager> , gmref_ptr<Call> > retrieved_call;
-      sigc::signal5<void, gmref_ptr<CallManager> , gmref_ptr<Call>, std::string, Call::StreamType, bool> stream_opened;
-      sigc::signal5<void, gmref_ptr<CallManager> , gmref_ptr<Call>, std::string, Call::StreamType, bool> stream_closed;
-      sigc::signal4<void, gmref_ptr<CallManager> , gmref_ptr<Call>, std::string, Call::StreamType> stream_paused;
-      sigc::signal4<void, gmref_ptr<CallManager> , gmref_ptr<Call>, std::string, Call::StreamType> stream_resumed;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > ringing_call;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > setup_call;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > missed_call;
+      sigc::signal3<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string> cleared_call;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > established_call;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > held_call;
+      sigc::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > retrieved_call;
+      sigc::signal5<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType, bool> stream_opened;
+      sigc::signal5<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType, bool> stream_closed;
+      sigc::signal4<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType> stream_paused;
+      sigc::signal4<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType> stream_resumed;
 
       /*** Misc ***/
-      sigc::signal1<void, gmref_ptr<CallManager> > manager_ready;
+      sigc::signal1<void, boost::shared_ptr<CallManager> > manager_ready;
       sigc::signal0<void> ready;
 
       /** This chain allows the CallCore to report errors to the user
@@ -161,30 +161,30 @@ namespace Ekiga
       ChainOfResponsibility<std::string> errors;
 
   private:
-      void on_new_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_ringing_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_setup_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_missed_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_cleared_call (std::string, gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_established_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_held_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_retrieved_call (gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_stream_opened (std::string name, Call::StreamType type, bool is_transmitting, gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_stream_closed (std::string name, Call::StreamType type, bool is_transmitting, gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_stream_paused (std::string name, Call::StreamType type, gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-      void on_stream_resumed (std::string name, Call::StreamType type, gmref_ptr<Call> call, gmref_ptr<CallManager> manager);
-
-      void on_im_failed (std::string, std::string, gmref_ptr<CallManager> manager);
-      void on_im_sent (std::string, std::string, gmref_ptr<CallManager> manager);
-      void on_im_received (std::string, std::string, std::string, gmref_ptr<CallManager> manager);
-      void on_new_chat (std::string, std::string, gmref_ptr<CallManager> manager);
-
-      void on_manager_ready (gmref_ptr<CallManager> manager);
-
-      void on_call_removed (gmref_ptr<Call> call);
+      void on_new_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_ringing_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_setup_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_missed_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_cleared_call (std::string, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_established_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_held_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_retrieved_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_stream_opened (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_stream_closed (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_stream_paused (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+      void on_stream_resumed (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager);
+
+      void on_im_failed (std::string, std::string, boost::shared_ptr<CallManager> manager);
+      void on_im_sent (std::string, std::string, boost::shared_ptr<CallManager> manager);
+      void on_im_received (std::string, std::string, std::string, boost::shared_ptr<CallManager> manager);
+      void on_new_chat (std::string, std::string, boost::shared_ptr<CallManager> manager);
+
+      void on_manager_ready (boost::shared_ptr<CallManager> manager);
+
+      void on_call_removed (boost::shared_ptr<Call> call);
 
       
-      std::set<gmref_ptr<CallManager> > managers;
+      std::set<boost::shared_ptr<CallManager> > managers;
       std::list<sigc::connection> manager_connections;
       std::map<std::string, std::list<sigc::connection> > call_connections;
       unsigned nr_ready;
diff --git a/lib/engine/protocol/call-manager.cpp b/lib/engine/protocol/call-manager.cpp
index c6368cd..b7121d5 100644
--- a/lib/engine/protocol/call-manager.cpp
+++ b/lib/engine/protocol/call-manager.cpp
@@ -43,14 +43,14 @@
 using namespace Ekiga;
 
 
-void CallManager::add_protocol_manager (gmref_ptr<CallProtocolManager> manager)
+void CallManager::add_protocol_manager (boost::shared_ptr<CallProtocolManager> manager)
 {
   managers.insert (manager);
   manager_added.emit (manager);
 }
 
 
-gmref_ptr<CallProtocolManager> CallManager::get_protocol_manager (const std::string &protocol) const
+boost::shared_ptr<CallProtocolManager> CallManager::get_protocol_manager (const std::string &protocol) const
 {
   for (CallManager::iterator iter = begin ();
        iter != end ();
@@ -58,7 +58,7 @@ gmref_ptr<CallProtocolManager> CallManager::get_protocol_manager (const std::str
     if ((*iter)->get_protocol_name () == protocol)
       return (*iter);
 
-  return gmref_ptr<CallProtocolManager>();
+  return boost::shared_ptr<CallProtocolManager>();
 }
 
 
diff --git a/lib/engine/protocol/call-manager.h b/lib/engine/protocol/call-manager.h
index bd891aa..92867e3 100644
--- a/lib/engine/protocol/call-manager.h
+++ b/lib/engine/protocol/call-manager.h
@@ -42,7 +42,7 @@
 #include <set>
 #include <sigc++/sigc++.h>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 #include "call-protocol-manager.h"
 #include "codec-description.h"
@@ -55,14 +55,14 @@ namespace Ekiga
  * @{
  */
 
-  class CallManager : public virtual GmRefCounted
+  class CallManager 
   {
 
     public:
 
     typedef std::list<CallProtocolManager::Interface> InterfaceList;
-    typedef std::set<gmref_ptr<CallProtocolManager> >::iterator iterator;
-    typedef std::set<gmref_ptr<CallProtocolManager> >::const_iterator const_iterator;
+    typedef std::set<boost::shared_ptr<CallProtocolManager> >::iterator iterator;
+    typedef std::set<boost::shared_ptr<CallProtocolManager> >::const_iterator const_iterator;
 
     /* The constructor
      */
@@ -75,13 +75,13 @@ namespace Ekiga
     /** Add a CallProtocolManager to the CallManager.
      * @param The manager to be added.
      */
-    void add_protocol_manager (gmref_ptr<CallProtocolManager> manager);
+    void add_protocol_manager (boost::shared_ptr<CallProtocolManager> manager);
 
     /** Return a pointer to a CallProtocolManager of the CallManager.
      * @param protocol is the protcol name.
      * @return a pointer to the CallProtocolManager or NULL if none.
      */
-    gmref_ptr<CallProtocolManager> get_protocol_manager (const std::string &protocol) const;
+    boost::shared_ptr<CallProtocolManager> get_protocol_manager (const std::string &protocol) const;
 
     /** Return iterator to beginning
      * @return iterator to beginning
@@ -98,7 +98,7 @@ namespace Ekiga
     /** This signal is emitted when a Ekiga::CallProtocolManager has been
      * added to the CallManager.
      */
-    sigc::signal1<void, gmref_ptr<CallProtocolManager> > manager_added;
+    sigc::signal1<void, boost::shared_ptr<CallProtocolManager> > manager_added;
 
 
     /*                 
@@ -215,7 +215,7 @@ namespace Ekiga
     sigc::signal0<void> ready;
 
     private:
-    std::set<gmref_ptr<CallProtocolManager> > managers;
+    std::set<boost::shared_ptr<CallProtocolManager> > managers;
   };
 
   /**
diff --git a/lib/engine/protocol/call-protocol-manager.h b/lib/engine/protocol/call-protocol-manager.h
index c96a088..93271fa 100644
--- a/lib/engine/protocol/call-protocol-manager.h
+++ b/lib/engine/protocol/call-protocol-manager.h
@@ -41,7 +41,7 @@
 
 #include <string>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 namespace Ekiga
 {
@@ -51,7 +51,7 @@ namespace Ekiga
  * @{:
  */
 
-  class CallProtocolManager: public virtual GmRefCounted
+  class CallProtocolManager
   {
 
     public:
diff --git a/lib/engine/protocol/call.h b/lib/engine/protocol/call.h
index 289506f..098002b 100644
--- a/lib/engine/protocol/call.h
+++ b/lib/engine/protocol/call.h
@@ -41,7 +41,7 @@
 #include <sigc++/sigc++.h>
 #include <string>
 
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 
 namespace Ekiga
 {
@@ -55,7 +55,7 @@ namespace Ekiga
    * Everything is handled asynchronously and signaled through the
    * Ekiga::CallManager
    */
-  class Call : public virtual GmRefCounted
+  class Call 
     {
 
   public:
diff --git a/lib/engine/videoinput/videoinput-core.cpp b/lib/engine/videoinput/videoinput-core.cpp
index b9d3730..4b64f6f 100644
--- a/lib/engine/videoinput/videoinput-core.cpp
+++ b/lib/engine/videoinput/videoinput-core.cpp
@@ -49,7 +49,6 @@ VideoInputCore::VideoPreviewManager::VideoPreviewManager (VideoInputCore& _video
     videoinput_core (_videoinput_core),
   videooutput_core (_videooutput_core)
 {
-  videooutput_core.reference ();
   width = 176;
   height = 144;;
   pause_thread = true;
@@ -68,7 +67,6 @@ VideoInputCore::VideoPreviewManager::~VideoPreviewManager ()
   end_thread = true;
   run_thread.Signal();
   thread_ended.Wait();
-  videooutput_core.unreference ();
 }
 
 void VideoInputCore::VideoPreviewManager::start (unsigned _width, unsigned _height)
diff --git a/lib/gui/xwindow.cpp b/lib/gui/xwindow.cpp
index d58bad0..be476d4 100644
--- a/lib/gui/xwindow.cpp
+++ b/lib/gui/xwindow.cpp
@@ -270,7 +270,7 @@ XWindow::Init (Display* dp,
   if (!_colorConverter)
     return 0;
 
-  _frameBuffer = std::tr1::shared_ptr<void> (malloc (_imageWidth * _imageHeight * _planes), free);
+  _frameBuffer = boost::shared_ptr<void> (malloc (_imageWidth * _imageHeight * _planes), free);
 
   // detect the window manager type
   _wmType = GetWMType ();
diff --git a/lib/gui/xwindow.h b/lib/gui/xwindow.h
index 325c6d3..b5cdec9 100644
--- a/lib/gui/xwindow.h
+++ b/lib/gui/xwindow.h
@@ -39,7 +39,7 @@
 #include <stdint.h>
 #include "config.h"
 
-#include <tr1/memory>
+#include <boost/smart_ptr.hpp>
 
 #include <ptlib.h>
 #include <ptlib/vconvert.h>
@@ -245,7 +245,7 @@ private:
   int _planes;
 
   PColourConverter* _colorConverter;
-  std::tr1::shared_ptr<void> _frameBuffer;
+  boost::shared_ptr<void> _frameBuffer;
   
 #ifdef HAVE_SHM
   XShmSegmentInfo _XShmInfo;
diff --git a/src/dbus-helper/dbus.cpp b/src/dbus-helper/dbus.cpp
index 79fd3ea..46be4ae 100644
--- a/src/dbus-helper/dbus.cpp
+++ b/src/dbus-helper/dbus.cpp
@@ -136,7 +136,7 @@ ekiga_dbus_component_call (EkigaDBusComponent *self,
                            const gchar *uri,
                            G_GNUC_UNUSED GError **error)
 {
-  gmref_ptr<Ekiga::CallCore> call_core = self->priv->core->get ("call-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = self->priv->core->get<Ekiga::CallCore> ("call-core");
   call_core->dial (uri);
 
   return TRUE;
diff --git a/src/gui/accounts.cpp b/src/gui/accounts.cpp
index 348bdcb..ff8d7a9 100644
--- a/src/gui/accounts.cpp
+++ b/src/gui/accounts.cpp
@@ -175,7 +175,7 @@ populate_menu (GtkWidget *window)
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (aw->accounts_list));
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (aw->accounts_list));
 
-  gmref_ptr<Ekiga::AccountCore> account_core = aw->core.get ("account-core");
+  boost::shared_ptr<Ekiga::AccountCore> account_core = aw->core.get<Ekiga::AccountCore> ("account-core");
 
   if (account_core->populate_menu (builder)) {
     item = gtk_separator_menu_item_new ();
@@ -708,7 +708,7 @@ gm_accounts_window_new (Ekiga::ServiceCore &core)
   /* Engine Signals callbacks */
   // FIXME sigc::connection conn;
 
-  gmref_ptr<Ekiga::AccountCore> account_core = core.get ("account-core");
+  boost::shared_ptr<Ekiga::AccountCore> account_core = core.get<Ekiga::AccountCore> ("account-core");
   account_core->bank_added.connect (sigc::bind (sigc::ptr_fun (on_bank_added), window));
   account_core->account_added.connect (sigc::bind (sigc::ptr_fun (on_account_added), window));
   account_core->account_updated.connect (sigc::bind (sigc::ptr_fun (on_account_updated), window));
diff --git a/src/gui/assistant.cpp b/src/gui/assistant.cpp
index 3b9d476..b5b75a9 100644
--- a/src/gui/assistant.cpp
+++ b/src/gui/assistant.cpp
@@ -624,7 +624,7 @@ create_ekiga_net_page (EkigaAssistant *assistant)
 static void
 prepare_ekiga_net_page (EkigaAssistant *assistant)
 {
-  gmref_ptr<Opal::Bank> bank = assistant->priv->core->get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = assistant->priv->core->get<Opal::Bank> ("opal-account-store");
   Opal::AccountPtr account = bank->find_account ("ekiga.net");
 
   if (account && !account->get_username ().empty ())
@@ -641,7 +641,7 @@ prepare_ekiga_net_page (EkigaAssistant *assistant)
 static void
 apply_ekiga_net_page (EkigaAssistant *assistant)
 {
-  gmref_ptr<Opal::Bank> bank = assistant->priv->core->get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = assistant->priv->core->get<Opal::Bank> ("opal-account-store");
   Opal::AccountPtr account = bank->find_account ("ekiga.net");
   bool new_account = !account;
 
@@ -768,7 +768,7 @@ create_ekiga_out_page (EkigaAssistant *assistant)
 static void
 prepare_ekiga_out_page (EkigaAssistant *assistant)
 {
-  gmref_ptr<Opal::Bank> account_core = assistant->priv->core->get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> account_core = assistant->priv->core->get<Opal::Bank> ("opal-account-store");
   Opal::AccountPtr account = account_core->find_account ("sip.diamondcard.us");
 
   if (account && !account->get_username ().empty ())
@@ -786,7 +786,7 @@ static void
 apply_ekiga_out_page (EkigaAssistant *assistant)
 {
   /* Some specific Opal stuff for the Ekiga.net account */
-  gmref_ptr<Opal::Bank> bank = assistant->priv->core->get ("opal-account-store");
+  boost::shared_ptr<Opal::Bank> bank = assistant->priv->core->get<Opal::Bank> ("opal-account-store");
   Opal::AccountPtr account = bank->find_account ("sip.diamondcard.us");
   bool new_account = !account;
 
@@ -1213,7 +1213,7 @@ void
 get_audiooutput_devices_list (Ekiga::ServiceCore *core,
                               std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
   std::vector <Ekiga::AudioOutputDevice> devices;
 
   device_list.clear();
@@ -1236,7 +1236,7 @@ void
 get_audioinput_devices_list (Ekiga::ServiceCore *core,
                              std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core->get ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core->get<Ekiga::AudioInputCore> ("audioinput-core");
   std::vector <Ekiga::AudioInputDevice> devices;
 
   device_list.clear();
@@ -1259,7 +1259,7 @@ void
 get_videoinput_devices_list (Ekiga::ServiceCore *core,
                                         std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core->get ("videoinput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core->get<Ekiga::VideoInputCore> ("videoinput-core");
   std::vector<Ekiga::VideoInputDevice> devices;
 
   device_list.clear();
@@ -1623,9 +1623,9 @@ ekiga_assistant_new (Ekiga::ServiceCore *core)
                     G_CALLBACK (ekiga_assistant_key_press_cb), NULL);
 
   sigc::connection conn;
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core->get ("videoinput-core");
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core->get<Ekiga::VideoInputCore> ("videoinput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   conn = videoinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_added_cb), assistant));
   assistant->priv->connections.push_back (conn);
diff --git a/src/gui/main.cpp b/src/gui/main.cpp
index fdf3441..f363e45 100644
--- a/src/gui/main.cpp
+++ b/src/gui/main.cpp
@@ -55,7 +55,7 @@
 #include "gmconnectbutton.h"
 #include "gmstockicons.h"
 #include "gmconf.h"
-#include "gmref.h"
+#include <boost/smart_ptr.hpp>
 #include "gmwindow.h"
 #include "gmmenuaddon.h"
 #include "gmlevelmeter.h"
@@ -181,7 +181,7 @@ struct _EkigaMainWindowPrivate
   GtkWidget *transfer_call_popup;
 
   /* Calls */
-  gmref_ptr<Ekiga::Call> current_call;
+  boost::shared_ptr<Ekiga::Call> current_call;
   unsigned timeout_id;
   unsigned calling_state;
   bool audio_transmission_active;
@@ -252,11 +252,11 @@ void ekiga_main_window_clear_signal_levels (EkigaMainWindow *mw);
 static void ekiga_main_window_selected_presentity_build_menu (EkigaMainWindow *mw);
 
 static void ekiga_main_window_incoming_call_dialog_show (EkigaMainWindow *mw,
-                                                      gmref_ptr<Ekiga::Call>  call);
+                                                      boost::shared_ptr<Ekiga::Call>  call);
 
 #ifdef HAVE_NOTIFY
 static void ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
-                                                    gmref_ptr<Ekiga::Call>  call);
+                                                    boost::shared_ptr<Ekiga::Call>  call);
 #endif
 
 
@@ -534,12 +534,12 @@ on_account_updated (Ekiga::BankPtr /*bank*/,
 }
 
 
-static void on_setup_call_cb (gmref_ptr<Ekiga::CallManager> manager,
-                              gmref_ptr<Ekiga::Call>  call,
+static void on_setup_call_cb (boost::shared_ptr<Ekiga::CallManager> manager,
+                              boost::shared_ptr<Ekiga::Call>  call,
                               gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   if (!call->is_outgoing () && !manager->get_auto_answer ()) {
     ekiga_main_window_update_calling_state (mw, Called);
@@ -560,12 +560,12 @@ static void on_setup_call_cb (gmref_ptr<Ekiga::CallManager> manager,
 }
 
 
-static void on_ringing_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                gmref_ptr<Ekiga::Call>  call,
+static void on_ringing_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                boost::shared_ptr<Ekiga::Call>  call,
                                 gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   if (call->is_outgoing ()) {
     audiooutput_core->start_play_event("ring_tone_sound", 3000, 256);
@@ -583,7 +583,7 @@ static gboolean on_stats_refresh_cb (gpointer self)
   if (mw->priv->calling_state == Connected && mw->priv->current_call) {
 
     Ekiga::VideoOutputStats videooutput_stats;
-    gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get ("videooutput-core");
+    boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get<Ekiga::VideoOutputCore> ("videooutput-core");
     videooutput_core->get_videooutput_stats(videooutput_stats);
   
     msg = g_strdup_printf (_("A:%.1f/%.1f   V:%.1f/%.1f   FPS:%d/%d"), 
@@ -615,16 +615,16 @@ static gboolean on_signal_level_refresh_cb (gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
 
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   gm_level_meter_set_level (GM_LEVEL_METER (mw->priv->output_signal), audiooutput_core->get_average_level());
   gm_level_meter_set_level (GM_LEVEL_METER (mw->priv->input_signal), audioinput_core->get_average_level());
   return true;
 }
 
-static void on_established_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                    gmref_ptr<Ekiga::Call>  call,
+static void on_established_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                    boost::shared_ptr<Ekiga::Call>  call,
                                     gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
@@ -651,7 +651,7 @@ static void on_established_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
   mw->priv->timeout_id = g_timeout_add (1000, on_stats_refresh_cb, self);
 #endif
 
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   audiooutput_core->stop_play_event("incoming_call_sound");
   audiooutput_core->stop_play_event("ring_tone_sound");
@@ -660,8 +660,8 @@ static void on_established_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_cleared_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                gmref_ptr<Ekiga::Call>  call,
+static void on_cleared_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                boost::shared_ptr<Ekiga::Call>  call,
                                 std::string reason, 
                                 gpointer self)
 {
@@ -681,11 +681,11 @@ static void on_cleared_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
   ekiga_main_window_update_logo_have_window (mw);
 
   if (mw->priv->current_call && mw->priv->current_call->get_id () == call->get_id ()) {
-    mw->priv->current_call = gmref_ptr<Ekiga::Call>();
+    mw->priv->current_call = boost::shared_ptr<Ekiga::Call>();
     g_source_remove (mw->priv->timeout_id);
     mw->priv->timeout_id = -1;
   }
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   audiooutput_core->stop_play_event("incoming_call_sound");
   audiooutput_core->stop_play_event("ring_tone_sound");
@@ -700,7 +700,7 @@ static void on_cleared_incoming_call_cb (std::string /*reason*/,
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (GnomeMeeting::Process ()->GetMainWindow ());
 
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
   audiooutput_core->stop_play_event("incoming_call_sound");
   audiooutput_core->stop_play_event("ring_tone_sound");
 
@@ -722,8 +722,8 @@ static void on_incoming_call_gone_cb (gpointer self)
 }
 
 
-static void on_held_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                             gmref_ptr<Ekiga::Call>  /*call*/,
+static void on_held_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                             boost::shared_ptr<Ekiga::Call>  /*call*/,
                              gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
@@ -733,8 +733,8 @@ static void on_held_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_retrieved_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                  gmref_ptr<Ekiga::Call>  /*call*/,
+static void on_retrieved_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
                                   gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
@@ -744,12 +744,12 @@ static void on_retrieved_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_missed_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                               gmref_ptr<Ekiga::Call>  call,
+static void on_missed_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                               boost::shared_ptr<Ekiga::Call>  call,
                                gpointer self)
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   audiooutput_core->stop_play_event ("incoming_call_sound");
   audiooutput_core->stop_play_event ("ring_tone_sound");
@@ -764,8 +764,8 @@ static void on_missed_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_stream_opened_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                 gmref_ptr<Ekiga::Call>  /* call */,
+static void on_stream_opened_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                 boost::shared_ptr<Ekiga::Call>  /* call */,
                                  std::string name,
                                  Ekiga::Call::StreamType type,
                                  bool is_transmitting,
@@ -813,8 +813,8 @@ static void on_stream_opened_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_stream_closed_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                 gmref_ptr<Ekiga::Call>  /* call */,
+static void on_stream_closed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                 boost::shared_ptr<Ekiga::Call>  /* call */,
                                  std::string name,
                                  Ekiga::Call::StreamType type,
                                  bool is_transmitting,
@@ -862,8 +862,8 @@ static void on_stream_closed_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_stream_paused_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                 gmref_ptr<Ekiga::Call>  /*call*/,
+static void on_stream_paused_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                 boost::shared_ptr<Ekiga::Call>  /*call*/,
                                  std::string /*name*/,
                                  Ekiga::Call::StreamType type,
                                  gpointer self)
@@ -872,8 +872,8 @@ static void on_stream_paused_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 }
 
 
-static void on_stream_resumed_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                                  gmref_ptr<Ekiga::Call>  /*call*/,
+static void on_stream_resumed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
                                   std::string /*name*/,
                                   Ekiga::Call::StreamType type,
                                   gpointer self)
@@ -1450,7 +1450,7 @@ place_call_cb (GtkWidget * /*widget*/,
         return;
 
     ekiga_main_window_update_calling_state (mw, Calling);
-    gmref_ptr<Ekiga::CallCore> call_core = mw->priv->core->get ("call-core");
+    boost::shared_ptr<Ekiga::CallCore> call_core = mw->priv->core->get<Ekiga::CallCore> ("call-core");
 
     // Remove appended spaces
     pos = uri.find_first_of (' ');
@@ -1830,7 +1830,7 @@ on_chat_unread_alert (G_GNUC_UNUSED GtkWidget* widget,
     return;
 
   Ekiga::ServiceCore *core = GnomeMeeting::Process ()->GetServiceCore ();
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   std::string file_name_string = gm_conf_get_string (SOUND_EVENTS_KEY "new_message_sound");
 
@@ -1964,8 +1964,8 @@ audio_volume_changed_cb (GtkAdjustment * /*adjustment*/,
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
 
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   audiooutput_core->set_volume (Ekiga::primary, (unsigned) GTK_ADJUSTMENT (mw->priv->adj_output_volume)->value);
   audioinput_core->set_volume ((unsigned) GTK_ADJUSTMENT (mw->priv->adj_input_volume)->value);
@@ -1977,8 +1977,8 @@ audio_volume_window_shown_cb (GtkWidget * /*widget*/,
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
 
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   audioinput_core->set_average_collection (true);
   audiooutput_core->set_average_collection (true);
@@ -1992,8 +1992,8 @@ audio_volume_window_hidden_cb (GtkWidget * /*widget*/,
 {
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
 
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   g_source_remove (mw->priv->levelmeter_timeout_id);
   audioinput_core->set_average_collection (false);
@@ -2006,7 +2006,7 @@ video_settings_changed_cb (GtkAdjustment * /*adjustment*/,
 { 
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
 
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = mw->priv->core->get ("videoinput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = mw->priv->core->get<Ekiga::VideoInputCore> ("videoinput-core");
 
   videoinput_core->set_whiteness ((unsigned) GTK_ADJUSTMENT (mw->priv->adj_whiteness)->value);
   videoinput_core->set_brightness ((unsigned) GTK_ADJUSTMENT (mw->priv->adj_brightness)->value);
@@ -2197,11 +2197,12 @@ fullscreen_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
 
 
 static bool
-account_completion_helper (Opal::AccountPtr account,
+account_completion_helper (Ekiga::AccountPtr acc,
 			   const gchar* text,
 			   EkigaMainWindow* mw)
 {
-  if (account->is_active ()) {
+  Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account>(acc);
+  if (account && account->is_active ()) {
 
     if (g_ascii_strncasecmp (text, "sip:", 4) == 0 && account->get_protocol_name () == "SIP") {
 
@@ -2229,7 +2230,7 @@ url_changed_cb (GtkEditable *e,
 
   if (g_strrstr (tip_text, "@") == NULL) {
 
-    gmref_ptr<Opal::Bank> bank = mw->priv->core->get ("opal-account-store");
+    boost::shared_ptr<Opal::Bank> bank = mw->priv->core->get<Opal::Bank> ("opal-account-store");
 
     if (bank) {
 
@@ -2632,7 +2633,7 @@ ekiga_main_window_selected_presentity_build_menu (EkigaMainWindow *mw)
 
 static void
 ekiga_main_window_incoming_call_dialog_show (EkigaMainWindow *mw,
-                                             gmref_ptr<Ekiga::Call>  call)
+                                             boost::shared_ptr<Ekiga::Call>  call)
 {
   GdkPixbuf *pixbuf = NULL;
 
@@ -2768,14 +2769,14 @@ closed_cb (NotifyNotification* /*notify*/,
 
   mw = EKIGA_MAIN_WINDOW (main_window);
 
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
   if (audiooutput_core) 
     audiooutput_core->stop_play_event ("incoming_call_sound");
 }
 
 static void
 ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
-                                        gmref_ptr<Ekiga::Call>  call)
+                                        boost::shared_ptr<Ekiga::Call>  call)
 {
   NotifyNotification *notify = NULL;
   
@@ -3099,8 +3100,8 @@ ekiga_main_window_init_menu (EkigaMainWindow *mw)
   g_return_if_fail (mw != NULL);
 
   services = GnomeMeeting::Process ()->GetServiceCore ();
-  gmref_ptr<Ekiga::Trigger> local_cluster_trigger = services->get ("local-cluster");
-  gmref_ptr<GtkFrontend> gtk_frontend = services->get ("gtk-frontend");
+  boost::shared_ptr<Ekiga::Trigger> local_cluster_trigger = services->get<Ekiga::Trigger> ("local-cluster");
+  boost::shared_ptr<GtkFrontend> gtk_frontend = services->get<GtkFrontend> ("gtk-frontend");
   addressbook_window = GTK_WIDGET (gtk_frontend->get_addressbook_window ()); 
   accounts_window = GnomeMeeting::Process ()->GetAccountsWindow ();
 
@@ -3403,7 +3404,7 @@ ekiga_main_window_init_contact_list (EkigaMainWindow *mw)
   services = GnomeMeeting::Process ()->GetServiceCore ();
   g_return_if_fail (services != NULL);
 
-  gmref_ptr<Ekiga::PresenceCore> presence_core = services->get ("presence-core");
+  boost::shared_ptr<Ekiga::PresenceCore> presence_core = services->get<Ekiga::PresenceCore> ("presence-core");
 
   label = gtk_label_new (_("Contacts"));
   roster_view = roster_view_gtk_new (*presence_core);
@@ -3446,8 +3447,8 @@ ekiga_main_window_init_history (EkigaMainWindow *mw)
   services = GnomeMeeting::Process ()->GetServiceCore ();
   g_return_if_fail (services != NULL);
 
-  gmref_ptr<History::Source> history_source = services->get ("call-history-store");
-  gmref_ptr<History::Book> history_book = history_source->get_book ();
+  boost::shared_ptr<History::Source> history_source = services->get<History::Source> ("call-history-store");
+  boost::shared_ptr<History::Book> history_book = history_source->get_book ();
   GtkWidget* call_history_view = call_history_view_gtk_new (history_book);
 
   label = gtk_label_new (_("Call history"));
@@ -3736,7 +3737,7 @@ ekiga_main_window_init (EkigaMainWindow *mw)
 
   mw->priv->presentity = NULL;
   mw->priv->transfer_call_popup = NULL;
-  mw->priv->current_call = gmref_ptr<Ekiga::Call>();
+  mw->priv->current_call = boost::shared_ptr<Ekiga::Call>();
   mw->priv->timeout_id = -1;
   mw->priv->levelmeter_timeout_id = -1;
   mw->priv->audio_transmission_active = false;
@@ -3827,7 +3828,7 @@ ekiga_main_window_expose_event (GtkWidget      *widget,
 
   display_info.widget_info_set = TRUE;
 
-  gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get ("videooutput-core");
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get<Ekiga::VideoOutputCore> ("videooutput-core");
   videooutput_core->set_display_info (display_info);
 
   return handled;
@@ -3940,7 +3941,7 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   g_return_if_fail (EKIGA_IS_MAIN_WINDOW (mw));
 
   /* New Display Engine signals */
-  gmref_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get ("videooutput-core");
+  boost::shared_ptr<Ekiga::VideoOutputCore> videooutput_core = mw->priv->core->get<Ekiga::VideoOutputCore> ("videooutput-core");
 
   conn = videooutput_core->device_opened.connect (sigc::bind (sigc::ptr_fun (on_videooutput_device_opened_cb), (gpointer) mw));
   mw->priv->connections.push_back (conn);
@@ -3958,7 +3959,7 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   mw->priv->connections.push_back (conn);
 
   /* New VideoInput Engine signals */
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = mw->priv->core->get ("videoinput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = mw->priv->core->get<Ekiga::VideoInputCore> ("videoinput-core");
 
   conn = videoinput_core->device_opened.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_opened_cb), (gpointer) mw));
   mw->priv->connections.push_back (conn);
@@ -3976,7 +3977,7 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   mw->priv->connections.push_back (conn);
 
   /* New AudioInput Engine signals */
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = mw->priv->core->get<Ekiga::AudioInputCore> ("audioinput-core");
 
   conn = audioinput_core->device_opened.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_opened_cb), (gpointer) mw));
   mw->priv->connections.push_back (conn);
@@ -3994,7 +3995,7 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   mw->priv->connections.push_back (conn);
 
   /* New AudioOutput Engine signals */
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   conn = audiooutput_core->device_opened.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_opened_cb), (gpointer) mw));
   mw->priv->connections.push_back (conn);
@@ -4012,8 +4013,8 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   mw->priv->connections.push_back (conn);
     
   /* New Call Engine signals */
-  gmref_ptr<Ekiga::CallCore> call_core = mw->priv->core->get ("call-core");
-  gmref_ptr<Ekiga::AccountCore> account_core = mw->priv->core->get ("account-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = mw->priv->core->get<Ekiga::CallCore> ("call-core");
+  boost::shared_ptr<Ekiga::AccountCore> account_core = mw->priv->core->get<Ekiga::AccountCore> ("account-core");
 
   /* Engine Signals callbacks */
   conn = account_core->account_updated.connect (sigc::bind (sigc::ptr_fun (on_account_updated), (gpointer) mw));
@@ -4081,7 +4082,7 @@ gm_main_window_new (Ekiga::ServiceCore & core)
 
   /* initialize the callback to play IM message sound */
   /* FIXME: move this to the chat window code */
-  gmref_ptr<GtkFrontend> gtk_frontend = core.get ("gtk-frontend");
+  boost::shared_ptr<GtkFrontend> gtk_frontend = core.get<GtkFrontend> ("gtk-frontend");
   chat_window = GTK_WIDGET (gtk_frontend->get_chat_window ());
 
   g_signal_connect (chat_window, "unread-alert",
@@ -4457,7 +4458,7 @@ main (int argc,
    */
   main_window = GnomeMeeting::Process ()->GetMainWindow ();
   EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (main_window); //TODO no priv here
-  gmref_ptr<Ekiga::CallCore> call_core = mw->priv->core->get ("call-core");
+  boost::shared_ptr<Ekiga::CallCore> call_core = mw->priv->core->get<Ekiga::CallCore> ("call-core");
   if (error == -1) {
 
     if (gm_conf_get_int (GENERAL_KEY "version") 
diff --git a/src/gui/preferences.cpp b/src/gui/preferences.cpp
index c61dcd3..551f3dc 100644
--- a/src/gui/preferences.cpp
+++ b/src/gui/preferences.cpp
@@ -788,7 +788,7 @@ void
 gm_prefs_window_get_videoinput_devices_list (Ekiga::ServiceCore *core,
                                         std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core->get ("videoinput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core->get<Ekiga::VideoInputCore> ("videoinput-core");
   std::vector <Ekiga::VideoInputDevice> devices;
 
   device_list.clear();
@@ -810,7 +810,7 @@ void
 gm_prefs_window_get_audiooutput_devices_list (Ekiga::ServiceCore *core,
                                         std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
   std::vector <Ekiga::AudioOutputDevice> devices;
 
   std::string device_string;
@@ -835,7 +835,7 @@ void
 gm_prefs_window_get_audioinput_devices_list (Ekiga::ServiceCore *core,
                                         std::vector<std::string> & device_list)
 {
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core->get ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core->get<Ekiga::AudioInputCore> ("audioinput-core");
   std::vector <Ekiga::AudioInputDevice> devices;
 
   device_list.clear();
@@ -1159,7 +1159,7 @@ sound_event_play_cb (G_GNUC_UNUSED GtkWidget *widget,
 
     //FIXME
     Ekiga::ServiceCore *core = GnomeMeeting::Process ()->GetServiceCore (); 
-    gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
     if (sound_event) { 
       audiooutput_core->play_event(sound_event);
@@ -1206,7 +1206,7 @@ audioev_filename_browse_play_cb (GtkWidget* /* playbutton */,
 
   //FIXME
   Ekiga::ServiceCore *core = GnomeMeeting::Process ()->GetServiceCore (); 
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   gchar* file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (data));
   std::string file_name_string = file_name;
@@ -1406,9 +1406,9 @@ gm_prefs_window_new (Ekiga::ServiceCore *core)
 		    G_CALLBACK (delete_window_cb), NULL);
 
   sigc::connection conn;
-  gmref_ptr<Ekiga::VideoInputCore> videoinput_core = core->get ("videoinput-core");
-  gmref_ptr<Ekiga::AudioInputCore> audioinput_core = core->get ("audioinput-core");
-  gmref_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get ("audiooutput-core");
+  boost::shared_ptr<Ekiga::VideoInputCore> videoinput_core = core->get<Ekiga::VideoInputCore> ("videoinput-core");
+  boost::shared_ptr<Ekiga::AudioInputCore> audioinput_core = core->get<Ekiga::AudioInputCore> ("audioinput-core");
+  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
   conn = videoinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_added_cb), window));
   pw->connections.push_back (conn);
diff --git a/src/gui/statusicon.cpp b/src/gui/statusicon.cpp
index 4c8d1e9..f0586ba 100644
--- a/src/gui/statusicon.cpp
+++ b/src/gui/statusicon.cpp
@@ -127,13 +127,13 @@ statusicon_set_inacall (StatusIcon *widget,
                         bool inacall);
 
 static void 
-established_call_cb (gmref_ptr<Ekiga::CallManager>  manager,
-                     gmref_ptr<Ekiga::Call>  call,
+established_call_cb (boost::shared_ptr<Ekiga::CallManager>  manager,
+                     boost::shared_ptr<Ekiga::Call>  call,
                      gpointer self);
 
 static void 
-cleared_call_cb (gmref_ptr<Ekiga::CallManager>  manager,
-                 gmref_ptr<Ekiga::Call>  call,
+cleared_call_cb (boost::shared_ptr<Ekiga::CallManager>  manager,
+                 boost::shared_ptr<Ekiga::Call>  call,
                  std::string reason,
                  gpointer self);
 
@@ -278,7 +278,7 @@ statusicon_activated_cb (G_GNUC_UNUSED GtkStatusIcon *icon,
   }
   else {
 
-    gmref_ptr<GtkFrontend> frontend = self->priv->core.get ("gtk-frontend");
+    boost::shared_ptr<GtkFrontend> frontend = self->priv->core.get<GtkFrontend> ("gtk-frontend");
     GtkWidget *w = GTK_WIDGET (frontend->get_chat_window ());
 
     gtk_widget_show (w);
@@ -337,7 +337,7 @@ statusicon_blink_cb (gpointer data)
 
   g_return_val_if_fail (data != NULL, false);
 
-  gmref_ptr<GtkFrontend> frontend = statusicon->priv->core.get ("gtk-frontend");
+  boost::shared_ptr<GtkFrontend> frontend = statusicon->priv->core.get<GtkFrontend> ("gtk-frontend");
   // FIXME use main_window here
   chat_window = GTK_WIDGET (frontend->get_chat_window ());
 
@@ -357,15 +357,15 @@ statusicon_blink_cb (gpointer data)
 
 static void
 personal_details_updated_cb (StatusIcon* self,
-			     gmref_ptr<Ekiga::PersonalDetails> details)
+			     boost::shared_ptr<Ekiga::PersonalDetails> details)
 {
   statusicon_set_status (self, details->get_presence ());
 }
 
 
 static void 
-established_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                     gmref_ptr<Ekiga::Call>  /*call*/,
+established_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                     boost::shared_ptr<Ekiga::Call>  /*call*/,
                      gpointer self)
 {
   statusicon_set_inacall (STATUSICON (self), true);
@@ -373,8 +373,8 @@ established_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
 
 
 static void 
-cleared_call_cb (gmref_ptr<Ekiga::CallManager>  /*manager*/,
-                 gmref_ptr<Ekiga::Call>  /*call*/,
+cleared_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                 boost::shared_ptr<Ekiga::Call>  /*call*/,
                  std::string /*reason*/,
                  gpointer self)
 {
@@ -393,7 +393,7 @@ statusicon_build_menu ()
   Ekiga::ServiceCore *services = NULL;
 
   services = GnomeMeeting::Process ()->GetServiceCore ();
-  gmref_ptr<GtkFrontend> gtk_frontend = services->get ("gtk-frontend");
+  boost::shared_ptr<GtkFrontend> gtk_frontend = services->get<GtkFrontend> ("gtk-frontend");
   main_window = GnomeMeeting::Process ()->GetMainWindow ();
 
   static MenuEntry menu [] =
@@ -469,7 +469,7 @@ statusicon_set_status (StatusIcon *statusicon,
 
   g_return_if_fail (statusicon != NULL);
 
-  gmref_ptr<GtkFrontend> frontend = statusicon->priv->core.get ("gtk-frontend");
+  boost::shared_ptr<GtkFrontend> frontend = statusicon->priv->core.get<GtkFrontend> ("gtk-frontend");
   // FIXME use main_window here
   chat_window = GTK_WIDGET (frontend->get_chat_window ());
 
@@ -501,7 +501,7 @@ statusicon_set_inacall (StatusIcon *statusicon,
 
   g_return_if_fail (statusicon != NULL);
 
-  gmref_ptr<GtkFrontend> frontend = statusicon->priv->core.get ("gtk-frontend");
+  boost::shared_ptr<GtkFrontend> frontend = statusicon->priv->core.get<GtkFrontend> ("gtk-frontend");
   // FIXME use main_window here
   chat_window = GTK_WIDGET (frontend->get_chat_window ());
 
@@ -543,9 +543,9 @@ statusicon_new (Ekiga::ServiceCore & core)
   self->priv->blink_image = NULL;
   self->priv->unread_messages = false;
 
-  gmref_ptr<GtkFrontend> frontend = core.get ("gtk-frontend");
-  gmref_ptr<Ekiga::PersonalDetails> details = core.get ("personal-details");
-  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+  boost::shared_ptr<GtkFrontend> frontend = core.get<GtkFrontend> ("gtk-frontend");
+  boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
+  boost::shared_ptr<Ekiga::CallCore> call_core = core.get<Ekiga::CallCore> ("call-core");
   GtkWidget *chat_window = GTK_WIDGET (frontend->get_chat_window ());
 
   statusicon_set_status (self, details->get_presence ());
diff --git a/src/gui/statusmenu.cpp b/src/gui/statusmenu.cpp
index 2ccd02d..845c300 100644
--- a/src/gui/statusmenu.cpp
+++ b/src/gui/statusmenu.cpp
@@ -50,7 +50,7 @@
 
 struct _StatusMenuPrivate
 {
-  gmref_ptr<Ekiga::PersonalDetails> personal_details;
+  boost::shared_ptr<Ekiga::PersonalDetails> personal_details;
   std::vector<sigc::connection> connections;
 
   GtkListStore *list_store; // List store storing the menu
@@ -810,7 +810,7 @@ status_menu_new (Ekiga::ServiceCore & core)
   self = (StatusMenu *) g_object_new (STATUS_MENU_TYPE, NULL);
   self->priv = new StatusMenuPrivate ();
 
-  self->priv->personal_details = core.get ("personal-details");
+  self->priv->personal_details = core.get<Ekiga::PersonalDetails> ("personal-details");
   self->priv->parent = NULL;
   self->priv->list_store = gtk_list_store_new (NUM_COLUMNS,
                                                GDK_TYPE_PIXBUF,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]