[ekiga] Moved the signals from sigc++ to boost::signals



commit 13a5cc0d28ddbd34d0ac7d109846d5be1da8d620
Author: Julien Puydt <jpuydt gnome org>
Date:   Sun Aug 30 01:19:01 2009 +0200

    Moved the signals from sigc++ to boost::signals
    
    This transition was done with a little sed magic and a huge
    dose of stupid work. Not all components have been checked to
    compile : those problems can wait.

 configure.ac                                       |   11 +--
 lib/engine/Makefile.am                             |    2 +-
 lib/engine/account/Makefile.am                     |    2 +-
 lib/engine/account/account-core.cpp                |   12 +-
 lib/engine/account/account-core.h                  |   14 ++--
 lib/engine/account/account.h                       |    4 +-
 lib/engine/account/bank-impl.h                     |   14 ++--
 lib/engine/account/bank.h                          |    8 +-
 lib/engine/addressbook/Makefile.am                 |    2 +-
 lib/engine/addressbook/book-impl.h                 |   12 +-
 lib/engine/addressbook/book.h                      |   12 +-
 lib/engine/addressbook/contact-core.cpp            |   22 ++--
 lib/engine/addressbook/contact-core.h              |   20 ++--
 lib/engine/addressbook/contact.h                   |    4 +-
 lib/engine/addressbook/source-impl.h               |   18 ++--
 lib/engine/addressbook/source.h                    |   14 ++--
 lib/engine/audioinput/Makefile.am                  |    2 +-
 lib/engine/audioinput/audioinput-core.cpp          |   20 ++--
 lib/engine/audioinput/audioinput-core.h            |   14 ++--
 lib/engine/audioinput/audioinput-gmconf-bridge.cpp |    2 +-
 lib/engine/audioinput/audioinput-manager.h         |    9 +-
 lib/engine/audiooutput/Makefile.am                 |    2 +-
 lib/engine/audiooutput/audiooutput-core.cpp        |   20 ++--
 lib/engine/audiooutput/audiooutput-core.h          |   14 ++--
 .../audiooutput/audiooutput-gmconf-bridge.cpp      |    2 +-
 lib/engine/audiooutput/audiooutput-manager.h       |    9 +-
 lib/engine/chat/Makefile.am                        |    2 +-
 lib/engine/chat/chat-core.cpp                      |    6 +-
 lib/engine/chat/chat-core.h                        |    6 +-
 lib/engine/chat/chat.h                             |    9 +-
 lib/engine/chat/dialect-impl.h                     |   50 +++++-----
 lib/engine/chat/dialect.h                          |    8 +-
 lib/engine/components/avahi-publisher/Makefile.am  |    2 +-
 .../components/avahi-publisher/avahi-publisher.cpp |    2 +-
 lib/engine/components/avahi/Makefile.am            |    2 +-
 lib/engine/components/avahi/avahi-cluster.h        |    2 +-
 lib/engine/components/avahi/avahi-heap.cpp         |   14 ++--
 lib/engine/components/avahi/avahi-heap.h           |    2 +-
 lib/engine/components/call-history/Makefile.am     |    2 +-
 .../components/call-history/history-book.cpp       |    8 +-
 lib/engine/components/call-history/history-book.h  |    4 +-
 .../videooutput-manager-common.cpp                 |    8 +-
 lib/engine/components/dx-videooutput/Makefile.am   |    2 +-
 .../dx-videooutput/videooutput-manager-dx.cpp      |   26 +++---
 lib/engine/components/echo/Makefile.am             |    2 +-
 lib/engine/components/echo/echo-dialect.cpp        |    4 +-
 lib/engine/components/echo/echo-simple.cpp         |    2 +-
 lib/engine/components/evolution/Makefile.am        |    2 +-
 lib/engine/components/evolution/evolution-book.cpp |   18 ++--
 .../components/evolution/evolution-contact.cpp     |   14 ++--
 .../components/evolution/evolution-source.cpp      |    4 +-
 .../components/gmconf-personal-details/Makefile.am |    2 +-
 .../gmconf-personal-details.cpp                    |    8 +-
 lib/engine/components/gnome-session/Makefile.am    |    2 +-
 .../gnome-session/gnome-session-main.cpp           |    4 +-
 lib/engine/components/gstreamer/Makefile.am        |    2 +-
 lib/engine/components/gstreamer/gst-audioinput.cpp |    4 +-
 .../components/gstreamer/gst-audiooutput.cpp       |    4 +-
 lib/engine/components/gstreamer/gst-videoinput.cpp |    4 +-
 lib/engine/components/hal-dbus/Makefile.am         |    2 +-
 .../components/hal-dbus/hal-manager-dbus.cpp       |   28 +++---
 lib/engine/components/kab/kab-book.cpp             |    2 +-
 lib/engine/components/kab/kab-contact.h            |    2 +-
 lib/engine/components/kde/Makefile.am              |    2 +-
 lib/engine/components/ldap/Makefile.am             |    2 +-
 lib/engine/components/ldap/ldap-book.cpp           |   64 ++++++------
 lib/engine/components/ldap/ldap-book.h             |    2 +-
 lib/engine/components/ldap/ldap-source.cpp         |   14 ++--
 lib/engine/components/libnotify/Makefile.am        |    2 +-
 lib/engine/components/libnotify/libnotify-main.cpp |   12 +-
 lib/engine/components/local-roster/Makefile.am     |    2 +-
 .../components/local-roster/local-cluster.cpp      |    6 +-
 lib/engine/components/local-roster/local-cluster.h |    2 +-
 lib/engine/components/local-roster/local-heap.cpp  |   28 +++---
 .../components/local-roster/local-presentity.cpp   |   24 ++--
 .../components/local-roster/local-presentity.h     |    2 +-
 .../local-roster/local-roster-bridge.cpp           |    4 +-
 lib/engine/components/loudmouth/Makefile.am        |    2 +-
 .../components/loudmouth/loudmouth-account.cpp     |   34 +++---
 .../components/loudmouth/loudmouth-account.h       |    2 +-
 lib/engine/components/loudmouth/loudmouth-bank.cpp |    4 +-
 .../components/loudmouth/loudmouth-dialect.cpp     |    2 +-
 lib/engine/components/loudmouth/loudmouth-heap.cpp |   20 ++--
 lib/engine/components/loudmouth/loudmouth-heap.h   |    2 +-
 .../components/loudmouth/loudmouth-presentity.cpp  |   26 +++---
 .../components/loudmouth/loudmouth-presentity.h    |    2 +-
 lib/engine/components/mlogo-videoinput/Makefile.am |    2 +-
 .../mlogo-videoinput/videoinput-manager-mlogo.cpp  |    8 +-
 lib/engine/components/null-audioinput/Makefile.am  |    2 +-
 .../null-audioinput/audioinput-manager-null.cpp    |    8 +-
 lib/engine/components/null-audiooutput/Makefile.am |    2 +-
 .../null-audiooutput/audiooutput-manager-null.cpp  |    8 +-
 lib/engine/components/opal/Makefile.am             |    2 +-
 lib/engine/components/opal/h323-endpoint.cpp       |   21 +---
 lib/engine/components/opal/h323-endpoint.h         |    2 +-
 lib/engine/components/opal/opal-account.cpp        |   52 +++++-----
 lib/engine/components/opal/opal-account.h          |   12 ++-
 lib/engine/components/opal/opal-bank.cpp           |   20 ++--
 lib/engine/components/opal/opal-call-manager.cpp   |   23 ++---
 lib/engine/components/opal/opal-call-manager.h     |    3 +-
 lib/engine/components/opal/opal-call.cpp           |   40 ++++----
 lib/engine/components/opal/opal-call.h             |    2 +-
 lib/engine/components/opal/opal-gmconf-bridge.cpp  |    5 +-
 lib/engine/components/opal/opal-main.cpp           |   14 ++-
 lib/engine/components/opal/sip-chat-simple.cpp     |    6 +-
 lib/engine/components/opal/sip-chat-simple.h       |    4 +-
 lib/engine/components/opal/sip-dialect.cpp         |    6 +-
 lib/engine/components/opal/sip-dialect.h           |    4 +-
 lib/engine/components/opal/sip-endpoint.cpp        |   46 ++++-----
 lib/engine/components/ptlib/Makefile.am            |    2 +-
 .../components/ptlib/audioinput-manager-ptlib.cpp  |   12 +-
 .../components/ptlib/audiooutput-manager-ptlib.cpp |   14 ++--
 .../components/ptlib/videoinput-manager-ptlib.cpp  |   12 +-
 lib/engine/components/resource-list/Makefile.am    |    2 +-
 lib/engine/components/resource-list/rl-cluster.cpp |   12 +-
 .../components/resource-list/rl-entry-ref.cpp      |    6 +-
 lib/engine/components/resource-list/rl-entry.cpp   |   12 +-
 lib/engine/components/resource-list/rl-heap.cpp    |   46 ++++----
 lib/engine/components/resource-list/rl-heap.h      |    6 +-
 lib/engine/components/resource-list/rl-list.cpp    |   54 +++++-----
 lib/engine/components/resource-list/rl-list.h      |    8 +-
 .../components/resource-list/rl-presentity.cpp     |   24 ++--
 .../components/resource-list/rl-presentity.h       |    2 +-
 lib/engine/components/x-videooutput/Makefile.am    |    2 +-
 .../x-videooutput/videooutput-manager-x.cpp        |   26 +++---
 lib/engine/components/xcap/Makefile.am             |    2 +-
 lib/engine/components/xcap/xcap-core.cpp           |   22 ++--
 lib/engine/components/xcap/xcap-core.h             |    6 +-
 lib/engine/engine.cpp                              |   16 ++--
 lib/engine/framework/Makefile.am                   |    2 +-
 lib/engine/framework/chain-of-responsibility.h     |   13 ++-
 lib/engine/framework/form-request-simple.cpp       |    2 +-
 lib/engine/framework/form-request-simple.h         |    7 +-
 lib/engine/framework/gmconf-bridge.cpp             |    2 +-
 lib/engine/framework/gmconf-bridge.h               |    5 +-
 lib/engine/framework/lister.h                      |   25 +++--
 lib/engine/framework/menu-builder-tools.cpp        |   12 +-
 lib/engine/framework/menu-builder-tools.h          |    8 +-
 lib/engine/framework/menu-builder.cpp              |    2 +-
 lib/engine/framework/menu-builder.h                |    5 +-
 lib/engine/framework/menu-xml.cpp                  |    4 +-
 lib/engine/framework/personal-details.h            |    5 +-
 lib/engine/framework/reflister.h                   |   33 +++---
 lib/engine/framework/runtime-glib.cpp              |    6 +-
 lib/engine/framework/runtime.h                     |    5 +-
 lib/engine/framework/services.h                    |    5 +-
 lib/engine/gui/gtk-core/menu-builder-gtk.cpp       |    6 +-
 lib/engine/gui/gtk-core/menu-builder-gtk.h         |    2 +-
 lib/engine/gui/gtk-core/optional-buttons-gtk.cpp   |    6 +-
 lib/engine/gui/gtk-core/optional-buttons-gtk.h     |    2 +-
 lib/engine/gui/gtk-frontend/addressbook-window.cpp |   38 +++++---
 lib/engine/gui/gtk-frontend/book-view-gtk.cpp      |   29 ++++--
 .../gui/gtk-frontend/call-history-view-gtk.cpp     |   26 +++--
 lib/engine/gui/gtk-frontend/chat-area.cpp          |    4 +-
 lib/engine/gui/gtk-frontend/chat-window.cpp        |   20 ++--
 lib/engine/gui/gtk-frontend/presentity-view.cpp    |    8 +-
 lib/engine/gui/gtk-frontend/roster-view-gtk.cpp    |   54 ++++++----
 lib/engine/hal/Makefile.am                         |    2 +-
 lib/engine/hal/hal-core.cpp                        |   36 ++++----
 lib/engine/hal/hal-core.h                          |   23 ++--
 lib/engine/hal/hal-manager.h                       |   16 ++--
 lib/engine/notification/Makefile.am                |    2 +-
 lib/engine/notification/notification-core.h        |    6 +-
 lib/engine/plugin/Makefile.am                      |    2 +-
 lib/engine/plugin/plugin-core.cpp                  |    2 +-
 lib/engine/presence/Makefile.am                    |    2 +-
 lib/engine/presence/cluster-impl.h                 |   24 ++--
 lib/engine/presence/cluster.h                      |   14 ++--
 lib/engine/presence/heap-impl.h                    |   12 +-
 lib/engine/presence/heap.h                         |   12 +-
 lib/engine/presence/presence-core.cpp              |   50 +++++-----
 lib/engine/presence/presence-core.h                |   30 +++---
 lib/engine/presence/presentity.h                   |    4 +-
 lib/engine/presence/proxy-presentity.cpp           |    4 +-
 lib/engine/presence/uri-presentity.cpp             |    8 +-
 lib/engine/presence/uri-presentity.h               |    2 +-
 lib/engine/protocol/Makefile.am                    |    2 +-
 lib/engine/protocol/call-core.cpp                  |   60 ++++++------
 lib/engine/protocol/call-core.h                    |   35 ++++---
 lib/engine/protocol/call-manager.cpp               |    2 +-
 lib/engine/protocol/call-manager.h                 |    7 +-
 lib/engine/protocol/call.h                         |   29 +++---
 lib/engine/videoinput/Makefile.am                  |    2 +-
 lib/engine/videoinput/videoinput-core.cpp          |   20 ++--
 lib/engine/videoinput/videoinput-core.h            |   17 ++--
 lib/engine/videoinput/videoinput-gmconf-bridge.cpp |    2 +-
 lib/engine/videoinput/videoinput-manager.h         |    9 +-
 lib/engine/videooutput/Makefile.am                 |    2 +-
 lib/engine/videooutput/videooutput-core.cpp        |   24 ++--
 lib/engine/videooutput/videooutput-core.h          |   17 ++--
 .../videooutput/videooutput-gmconf-bridge.cpp      |    2 +-
 lib/engine/videooutput/videooutput-manager.h       |   13 ++-
 lib/gui/Makefile.am                                |    2 +-
 m4/ax_boost_signals.m4                             |  108 ++++++++++++++++++++
 src/Makefile.am                                    |    2 +-
 src/gui/accounts.cpp                               |   23 +++--
 src/gui/assistant.cpp                              |   16 ++--
 src/gui/main.cpp                                   |   84 ++++++++--------
 src/gui/preferences.cpp                            |   16 ++--
 src/gui/statusicon.cpp                             |   15 ++--
 src/gui/statusmenu.cpp                             |    6 +-
 201 files changed, 1318 insertions(+), 1152 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 46d421b..407b1aa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -191,14 +191,9 @@ dnl ###############################
 dnl   Mandatory BOOST support
 dnl ###############################
 AX_BOOST_BASE([1.34])
-
-dnl ###############################
-dnl   Mandatory SIGC++ support
-dnl ###############################
-PKG_CHECK_MODULES([SIGC], [sigc++-2.0])
-AC_SUBST(SIGC_CFLAGS)
-AC_SUBST(SIGC_LIBS)
-
+AX_BOOST_SIGNALS
+BOOST_LIBS="${BOOST_SIGNALS_LIB}"
+AC_SUBST(BOOST_LIBS)
 
 dnl ###############################
 dnl   Mandatory libXML support
diff --git a/lib/engine/Makefile.am b/lib/engine/Makefile.am
index 0bb7918..e616b6a 100644
--- a/lib/engine/Makefile.am
+++ b/lib/engine/Makefile.am
@@ -48,7 +48,7 @@ INCLUDES = 								\
 libekiga_engine_la_SOURCES = engine.h engine.cpp
 
 AM_CXXFLAGS = $(BOOST_CPPFLAGS) $(SIGC_CFLAGS) $(GTK_CFLAGS)
-AM_LIBS = $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GTK_LIBS)
+AM_LIBS = $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GTK_LIBS)
 
 libekiga_engine_la_LDFLAGS = -export-dynamic
 libekiga_engine_la_LIBADD = \
diff --git a/lib/engine/account/Makefile.am b/lib/engine/account/Makefile.am
index bc80894..811e457 100644
--- a/lib/engine/account/Makefile.am
+++ b/lib/engine/account/Makefile.am
@@ -15,4 +15,4 @@ libaccount_la_SOURCES = \
 	$(account_dir)/account-core.h			\
 	$(account_dir)/account-core.cpp
 
-libaccount_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+libaccount_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/account/account-core.cpp b/lib/engine/account/account-core.cpp
index 5934324..fda3803 100644
--- a/lib/engine/account/account-core.cpp
+++ b/lib/engine/account/account-core.cpp
@@ -71,18 +71,18 @@ Ekiga::AccountCore::add_bank (BankPtr bank)
 {
   banks.push_back (bank);
 
-  bank->account_added.connect (sigc::bind<0>(account_added.make_slot (), bank));
-  bank->account_removed.connect (sigc::bind<0>(account_removed.make_slot (), bank));
-  bank->account_updated.connect (sigc::bind<0>(account_updated.make_slot (), bank));
+  bank->account_added.connect (boost::bind (boost::ref (account_added), bank, _1));
+  bank->account_removed.connect (boost::bind (boost::ref (account_removed), bank, _1));
+  bank->account_updated.connect (boost::bind (boost::ref (account_updated), bank, _1));
 
-  bank_added.emit (bank);
+  bank_added (bank);
 
-  bank->questions.connect (questions.make_slot ());
+  bank->questions.connect (boost::ref (questions));
 }
 
 
 void
-Ekiga::AccountCore::visit_banks (sigc::slot1<bool, BankPtr> visitor)
+Ekiga::AccountCore::visit_banks (boost::function1<bool, BankPtr> visitor)
 {
   bool go_on = true;
 
diff --git a/lib/engine/account/account-core.h b/lib/engine/account/account-core.h
index 49bd14f..90b693e 100644
--- a/lib/engine/account/account-core.h
+++ b/lib/engine/account/account-core.h
@@ -101,31 +101,31 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_banks (sigc::slot1<bool, BankPtr> visitor);
+    void visit_banks (boost::function1<bool, BankPtr> visitor);
 
 
     /** This signal is emitted when a bank has been added to the core
      */
-    sigc::signal1<void, BankPtr> bank_added;
+    boost::signal1<void, BankPtr> bank_added;
 
     /** This signal is emitted when a bank has been removed from the core
      */
-    sigc::signal1<void, BankPtr> bank_removed;
+    boost::signal1<void, BankPtr> bank_removed;
 
     /** This signal is emitted when a account has been added to one of
      * the banks
      */
-    sigc::signal2<void, BankPtr, AccountPtr> account_added;
+    boost::signal2<void, BankPtr, AccountPtr> account_added;
 
     /** This signal is emitted when a account has been removed from one of
      * the banks
      */
-    sigc::signal2<void, BankPtr, AccountPtr> account_removed;
+    boost::signal2<void, BankPtr, AccountPtr> account_removed;
 
     /** This signal is emitted when a account has been updated in one of
      * the banks
      */
-    sigc::signal2<void, BankPtr, AccountPtr> account_updated;
+    boost::signal2<void, BankPtr, AccountPtr> account_updated;
 
   private:
 
@@ -147,7 +147,7 @@ namespace Ekiga
     /** This signal is emitted when the AccountCore Service has been
      * updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
 
     /** This chain allows the AccountCore to present forms to the user
diff --git a/lib/engine/account/account.h b/lib/engine/account/account.h
index 533055b..df7c79a 100644
--- a/lib/engine/account/account.h
+++ b/lib/engine/account/account.h
@@ -101,12 +101,12 @@ namespace Ekiga
 
     /** This signal is emitted when the Account has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
 
     /** This signal is emitted when the Account has been removed.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
 
     /** This chain allows the Account to present forms to the user
diff --git a/lib/engine/account/bank-impl.h b/lib/engine/account/bank-impl.h
index e3b6e26..b40f1ac 100644
--- a/lib/engine/account/bank-impl.h
+++ b/lib/engine/account/bank-impl.h
@@ -74,7 +74,7 @@ namespace Ekiga
   template<class AccountType = Account>
   class BankImpl:
     public Bank,
-    public sigc::trackable,
+    public boost::signals::trackable,
     protected RefLister<AccountType>
   {
 
@@ -95,7 +95,7 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_accounts (sigc::slot1<bool, AccountPtr> visitor);
+    void visit_accounts (boost::function1<bool, AccountPtr> visitor);
 
     /** Returns an iterator to the first Account of the collection
      */
@@ -147,9 +147,9 @@ template<typename AccountType>
 Ekiga::BankImpl<AccountType>::BankImpl ()
 {
   /* this is signal forwarding */
-  RefLister<AccountType>::object_added.connect (account_added.make_slot ());
-  RefLister<AccountType>::object_removed.connect (account_removed.make_slot ());
-  RefLister<AccountType>::object_updated.connect (account_updated.make_slot ());
+  RefLister<AccountType>::object_added.connect (boost::ref (account_added));
+  RefLister<AccountType>::object_removed.connect (boost::ref (account_removed));
+  RefLister<AccountType>::object_updated.connect (boost::ref (account_updated));
 }
 
 
@@ -161,7 +161,7 @@ Ekiga::BankImpl<AccountType>::~BankImpl ()
 
 template<typename AccountType>
 void
-Ekiga::BankImpl<AccountType>::visit_accounts (sigc::slot1<bool, AccountPtr> visitor)
+Ekiga::BankImpl<AccountType>::visit_accounts (boost::function1<bool, AccountPtr> visitor)
 {
   RefLister<AccountType>::visit_objects (visitor);
 }
@@ -205,7 +205,7 @@ Ekiga::BankImpl<AccountType>::add_account (boost::shared_ptr<AccountType> accoun
 {
   add_object (account);
 
-  account->questions.connect (questions.make_slot ());
+  account->questions.connect (boost::ref (questions));
 }
 
 
diff --git a/lib/engine/account/bank.h b/lib/engine/account/bank.h
index 053342d..ebc0bf2 100644
--- a/lib/engine/account/bank.h
+++ b/lib/engine/account/bank.h
@@ -61,7 +61,7 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    virtual void visit_accounts (sigc::slot1<bool, AccountPtr> visitor) = 0;
+    virtual void visit_accounts (boost::function1<bool, AccountPtr> visitor) = 0;
 
 
     /** Create the menu for that Bank and its actions.
@@ -74,15 +74,15 @@ namespace Ekiga
 
     /** This signal is emitted when a account has been added.
      */
-    sigc::signal1<void, AccountPtr> account_added;
+    boost::signal1<void, AccountPtr> account_added;
 
     /** This signal is emitted when a account has been removed.
      */
-    sigc::signal1<void, AccountPtr> account_removed;
+    boost::signal1<void, AccountPtr> account_removed;
 
     /** This signal is emitted when a account has been updated.
      */
-    sigc::signal1<void, AccountPtr> account_updated;
+    boost::signal1<void, AccountPtr> account_updated;
 
     /** This chain allows the BankImpl to present forms to the user
      */
diff --git a/lib/engine/addressbook/Makefile.am b/lib/engine/addressbook/Makefile.am
index 07b39fe..e9dbfcd 100644
--- a/lib/engine/addressbook/Makefile.am
+++ b/lib/engine/addressbook/Makefile.am
@@ -19,4 +19,4 @@ libgmaddressbook_la_SOURCES = \
 libgmaddressbook_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmaddressbook_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/addressbook/book-impl.h b/lib/engine/addressbook/book-impl.h
index 0db3bd9..16d343e 100644
--- a/lib/engine/addressbook/book-impl.h
+++ b/lib/engine/addressbook/book-impl.h
@@ -94,7 +94,7 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_contacts (sigc::slot1<bool, ContactPtr > visitor);
+    void visit_contacts (boost::function1<bool, ContactPtr > visitor);
 
   protected:
 
@@ -147,9 +147,9 @@ template<typename ContactType>
 Ekiga::BookImpl<ContactType>::BookImpl ()
 {
   /* this is signal forwarding */
-  RefLister<ContactType>::object_added.connect (contact_added.make_slot ());
-  RefLister<ContactType>::object_removed.connect (contact_removed.make_slot ());
-  RefLister<ContactType>::object_updated.connect (contact_updated.make_slot ());
+  RefLister<ContactType>::object_added.connect (contact_added);
+  RefLister<ContactType>::object_removed.connect (contact_removed);
+  RefLister<ContactType>::object_updated.connect (contact_updated);
 }
 
 
@@ -161,7 +161,7 @@ Ekiga::BookImpl<ContactType>::~BookImpl ()
 
 template<typename ContactType>
 void
-Ekiga::BookImpl<ContactType>::visit_contacts (sigc::slot1<bool, ContactPtr > visitor)
+Ekiga::BookImpl<ContactType>::visit_contacts (boost::function1<bool, ContactPtr > visitor)
 {
   RefLister<ContactType>::visit_objects (visitor);
 }
@@ -203,7 +203,7 @@ template<typename ContactType>
 void
 Ekiga::BookImpl<ContactType>::add_contact (boost::shared_ptr<ContactType> contact)
 {
-  contact->questions.connect (questions.make_slot ());
+  contact->questions.connect (boost::ref (questions));
   add_object (contact);
 }
 
diff --git a/lib/engine/addressbook/book.h b/lib/engine/addressbook/book.h
index debf5c1..e2a32a2 100644
--- a/lib/engine/addressbook/book.h
+++ b/lib/engine/addressbook/book.h
@@ -63,7 +63,7 @@ namespace Ekiga {
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    virtual void visit_contacts (sigc::slot1<bool, ContactPtr>) = 0;
+    virtual void visit_contacts (boost::function1<bool, ContactPtr>) = 0;
 
 
     /** Create the menu for that book and its actions.
@@ -108,27 +108,27 @@ namespace Ekiga {
 
     /** This signal is emitted when the Book has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
 
     /** This signal is emitted when the Book has been removed from the Source.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
 
     /** This signal is emitted when a Contact has been added to the Book.
      */
-    sigc::signal1<void, ContactPtr > contact_added;
+    boost::signal1<void, ContactPtr > contact_added;
 
 
     /** This signal is emitted when a Contact has been removed from the Book.
      */
-    sigc::signal1<void, ContactPtr > contact_removed;
+    boost::signal1<void, ContactPtr > contact_removed;
 
 
     /** This signal is emitted when a Contact has been updated in the Book.
      */
-    sigc::signal1<void, ContactPtr > contact_updated;
+    boost::signal1<void, ContactPtr > contact_updated;
 
 
     /** This chain allows the Book to present forms to the user
diff --git a/lib/engine/addressbook/contact-core.cpp b/lib/engine/addressbook/contact-core.cpp
index 2821b20..d3f56ab 100644
--- a/lib/engine/addressbook/contact-core.cpp
+++ b/lib/engine/addressbook/contact-core.cpp
@@ -48,7 +48,7 @@ on_search ()
 
 Ekiga::ContactCore::~ContactCore ()
 {
-  for (std::list<sigc::connection>::iterator iter = conns.begin (); iter != conns.end (); ++iter)
+  for (std::list<boost::signals::connection>::iterator iter = conns.begin (); iter != conns.end (); ++iter)
     iter->disconnect ();
 }
 
@@ -57,7 +57,7 @@ Ekiga::ContactCore::populate_menu (MenuBuilder &builder)
 {
   bool populated = false;
 
-  builder.add_action ("search", _("_Find"), sigc::ptr_fun (on_search));
+  builder.add_action ("search", _("_Find"), &on_search);
   populated = true;
 
   for (std::list<SourcePtr >::const_iterator iter = sources.begin ();
@@ -76,18 +76,18 @@ void
 Ekiga::ContactCore::add_source (SourcePtr source)
 {
   sources.push_back (source);
-  source_added.emit (source);
-  conns.push_back (source->book_added.connect (sigc::bind<0> (book_added.make_slot (), source)));
-  conns.push_back (source->book_removed.connect (sigc::bind<0> (book_removed.make_slot (), source)));
-  conns.push_back (source->book_updated.connect (sigc::bind<0> (book_updated.make_slot (), source)));
-  conns.push_back (source->contact_added.connect (sigc::bind<0> (contact_added.make_slot (), source)));
-  conns.push_back (source->contact_removed.connect (sigc::bind<0> (contact_removed.make_slot (), source)));
-  conns.push_back (source->contact_updated.connect (sigc::bind<0> (contact_updated.make_slot (), source)));
-  source->questions.connect (questions.make_slot ());
+  source_added (source);
+  conns.push_back (source->book_added.connect (boost::bind (boost::ref (book_added), source, _1)));
+  conns.push_back (source->book_removed.connect (boost::bind (boost::ref (book_removed), source, _1)));
+  conns.push_back (source->book_updated.connect (boost::bind (boost::ref (book_updated), source, _1)));
+  conns.push_back (source->contact_added.connect (boost::bind (boost::ref (contact_added), source, _1, _2)));
+  conns.push_back (source->contact_removed.connect (boost::bind (boost::ref (contact_removed), source, _1, _2)));
+  conns.push_back (source->contact_updated.connect (boost::bind (boost::ref (contact_updated), source, _1, _2)));
+  source->questions.connect (boost::ref (questions));
 }
 
 void
-Ekiga::ContactCore::visit_sources (sigc::slot1<bool, SourcePtr > visitor)
+Ekiga::ContactCore::visit_sources (boost::function1<bool, SourcePtr > visitor)
 {
   bool go_on = true;
 
diff --git a/lib/engine/addressbook/contact-core.h b/lib/engine/addressbook/contact-core.h
index 3c298b0..e664b99 100644
--- a/lib/engine/addressbook/contact-core.h
+++ b/lib/engine/addressbook/contact-core.h
@@ -109,43 +109,43 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_sources (sigc::slot1<bool, SourcePtr > visitor);
+    void visit_sources (boost::function1<bool, SourcePtr > visitor);
 
 
     /** This signal is emitted when a Ekiga::Source has been
      * added to the ContactCore Service.
      */
-    sigc::signal1<void, SourcePtr > source_added;
+    boost::signal1<void, SourcePtr > source_added;
 
     /** This signal is emitted when a book has been added to one of
      * the sources
      */
-    sigc::signal2<void, SourcePtr, BookPtr > book_added;
+    boost::signal2<void, SourcePtr, BookPtr > book_added;
 
     /** This signal is emitted when a book has been removed from one of
      * the sources
      */
-    sigc::signal2<void, SourcePtr, BookPtr > book_removed;
+    boost::signal2<void, SourcePtr, BookPtr > book_removed;
 
     /** This signal is emitted when a book has been updated in one of
      * the sources
      */
-    sigc::signal2<void, SourcePtr, BookPtr > book_updated;
+    boost::signal2<void, SourcePtr, BookPtr > book_updated;
 
     /** This signal is emitted when a contact has been added to one of
      * the book of one of the sources
      */
-    sigc::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_added;
+    boost::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_added;
 
     /** This signal is emitted when a contact has been removed from one of
      * the book of one of the sources
      */
-    sigc::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_removed;
+    boost::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_removed;
 
     /** This signal is emitted when a contact has been updated in one of
      * the book of one of the sources
      */
-    sigc::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_updated;
+    boost::signal3<void, SourcePtr, BookPtr, ContactPtr > contact_updated;
 
   private:
 
@@ -183,14 +183,14 @@ namespace Ekiga
     /** This signal is emitted when the ContactCore Service has been
      * updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
 
     /** This chain allows the ContactCore to present forms to the user
      */
     ChainOfResponsibility<FormRequestPtr> questions;
 
-    std::list<sigc::connection> conns;
+    std::list<boost::signals::connection> conns;
   };
 
 /**
diff --git a/lib/engine/addressbook/contact.h b/lib/engine/addressbook/contact.h
index b581186..20ea0ba 100644
--- a/lib/engine/addressbook/contact.h
+++ b/lib/engine/addressbook/contact.h
@@ -91,12 +91,12 @@ namespace Ekiga
 
     /** This signal is emitted when the Contact has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
 
     /** This signal is emitted when the Contact has been removed.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
     /** This chain allows the Contact to present forms to the user
      */
diff --git a/lib/engine/addressbook/source-impl.h b/lib/engine/addressbook/source-impl.h
index 62dec74..154de70 100644
--- a/lib/engine/addressbook/source-impl.h
+++ b/lib/engine/addressbook/source-impl.h
@@ -100,7 +100,7 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_books (sigc::slot1<bool, BookPtr > visitor);
+    void visit_books (boost::function1<bool, BookPtr > visitor);
 
   protected:
 
@@ -183,9 +183,9 @@ template<typename BookType>
 Ekiga::SourceImpl<BookType>::SourceImpl ()
 {
   /* signal forwarding */
-  RefLister<BookType>::object_added.connect (book_added.make_slot ());
-  RefLister<BookType>::object_removed.connect (book_removed.make_slot ());
-  RefLister<BookType>::object_updated.connect (book_updated.make_slot ());
+  RefLister<BookType>::object_added.connect (boost::ref (book_added));
+  RefLister<BookType>::object_removed.connect (boost::ref (book_removed));
+  RefLister<BookType>::object_updated.connect (boost::ref (book_updated));
 }
 
 template<typename BookType>
@@ -196,7 +196,7 @@ Ekiga::SourceImpl<BookType>::~SourceImpl ()
 
 template<typename BookType>
 void
-Ekiga::SourceImpl<BookType>::visit_books (sigc::slot1<bool, BookPtr > visitor)
+Ekiga::SourceImpl<BookType>::visit_books (boost::function1<bool, BookPtr > visitor)
 {
   RefLister<BookType>::visit_objects (visitor);
 }
@@ -208,13 +208,13 @@ Ekiga::SourceImpl<BookType>::add_book (boost::shared_ptr<BookType> book)
 {
   add_object (book);
 
-  add_connection (book, book->contact_added.connect (sigc::bind<0> (contact_added.make_slot (), book)));
+  add_connection (book, book->contact_added.connect (boost::bind (boost::ref (contact_added), book, _1)));
 
-  add_connection (book, book->contact_removed.connect (sigc::bind<0> (contact_removed.make_slot (), book)));
+  add_connection (book, book->contact_removed.connect (boost::bind (boost::ref (contact_removed), book, _1)));
 
-  add_connection (book, book->contact_updated.connect (sigc::bind<0> (contact_updated.make_slot (), book)));
+  add_connection (book, book->contact_updated.connect (boost::bind (boost::ref (contact_updated), book, _1)));
 
-  add_connection (book, book->questions.connect (questions.make_slot ()));
+  add_connection (book, book->questions.connect (boost::ref (questions)));
 }
 
 
diff --git a/lib/engine/addressbook/source.h b/lib/engine/addressbook/source.h
index 53ceb7b..dd895d4 100644
--- a/lib/engine/addressbook/source.h
+++ b/lib/engine/addressbook/source.h
@@ -57,7 +57,7 @@ namespace Ekiga {
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    virtual void visit_books (sigc::slot1<bool, BookPtr >) = 0;
+    virtual void visit_books (boost::function1<bool, BookPtr >) = 0;
 
 
     /** Create the menu for that source and its actions.
@@ -70,32 +70,32 @@ namespace Ekiga {
 
     /** This signal is emitted when a Book has been added to the Source.
      */
-    sigc::signal1<void, BookPtr > book_added;
+    boost::signal1<void, BookPtr > book_added;
     
     
     /** This signal is emitted when a Book has been updated in the Source.
      */
-    sigc::signal1<void, BookPtr > book_updated;
+    boost::signal1<void, BookPtr > book_updated;
     
     
     /** This signal is emitted when a Book has been removed in the Source.
      */
-    sigc::signal1<void, BookPtr > book_removed;
+    boost::signal1<void, BookPtr > book_removed;
 
     /** This signal is emitted when a Contact has been added to a book in
      *  this source.
      */
-    sigc::signal2<void, BookPtr, ContactPtr > contact_added;
+    boost::signal2<void, BookPtr, ContactPtr > contact_added;
 
     /** This signal is emitted when a Contact has been removed from a book in
      *  this source.
      */
-    sigc::signal2<void, BookPtr, ContactPtr > contact_removed;
+    boost::signal2<void, BookPtr, ContactPtr > contact_removed;
 
     /** This signal is emitted when a Contact has been updated in a book in
      *  this source
      */
-    sigc::signal2<void, BookPtr, ContactPtr > contact_updated;
+    boost::signal2<void, BookPtr, ContactPtr > contact_updated;
 
     /** This chain allows the Source to present forms to the user
      */
diff --git a/lib/engine/audioinput/Makefile.am b/lib/engine/audioinput/Makefile.am
index 99a8bdb..afbe98c 100644
--- a/lib/engine/audioinput/Makefile.am
+++ b/lib/engine/audioinput/Makefile.am
@@ -22,4 +22,4 @@ libgmaudioinput_la_SOURCES = \
 libgmaudioinput_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmaudioinput_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/audioinput/audioinput-core.cpp b/lib/engine/audioinput/audioinput-core.cpp
index 767416b..d1190fe 100644
--- a/lib/engine/audioinput/audioinput-core.cpp
+++ b/lib/engine/audioinput/audioinput-core.cpp
@@ -164,15 +164,15 @@ void AudioInputCore::setup_conf_bridge ()
 void AudioInputCore::add_manager (AudioInputManager &manager)
 {
   managers.insert (&manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager.device_error.connect   (sigc::bind (sigc::mem_fun (this, &AudioInputCore::on_device_error), &manager));
-  manager.device_opened.connect  (sigc::bind (sigc::mem_fun (this, &AudioInputCore::on_device_opened), &manager));
-  manager.device_closed.connect  (sigc::bind (sigc::mem_fun (this, &AudioInputCore::on_device_closed), &manager));
+  manager.device_error.connect   (boost::bind (&AudioInputCore::on_device_error, this, _1, _2, &manager));
+  manager.device_opened.connect  (boost::bind (&AudioInputCore::on_device_opened, this, _1, _2, &manager));
+  manager.device_closed.connect  (boost::bind (&AudioInputCore::on_device_closed, this, _1, &manager));
 }
 
 
-void AudioInputCore::visit_managers (sigc::slot1<bool, AudioInputManager &> visitor)
+void AudioInputCore::visit_managers (boost::function1<bool, AudioInputManager &> visitor)
 {
   yield = true;
   PWaitAndSignal m(core_mutex);
@@ -231,7 +231,7 @@ void AudioInputCore::add_device (const std::string & source, const std::string &
        if ( desired_device == device)
          internal_set_device(desired_device);
 
-       device_added.emit (device, desired_device == device);
+       device_added (device, desired_device == device);
      }
   }
 }
@@ -256,7 +256,7 @@ void AudioInputCore::remove_device (const std::string & source, const std::strin
             new_device.name = AUDIO_INPUT_FALLBACK_DEVICE_NAME;
             internal_set_device( new_device);
        }
-       device_removed.emit (device,  current_device == device);
+       device_removed (device,  current_device == device);
      }
   }
 }
@@ -403,17 +403,17 @@ void AudioInputCore::on_device_opened (AudioInputDevice device,
                                        AudioInputSettings settings, 
                                        AudioInputManager *manager)
 {
-  device_opened.emit (*manager, device, settings);
+  device_opened (*manager, device, settings);
 }
 
 void AudioInputCore::on_device_closed (AudioInputDevice device, AudioInputManager *manager)
 {
-  device_closed.emit (*manager, device);
+  device_closed (*manager, device);
 }
 
 void AudioInputCore::on_device_error (AudioInputDevice device, AudioInputErrorCodes error_code, AudioInputManager *manager)
 {
- device_error.emit (*manager, device, error_code);
+ device_error (*manager, device, error_code);
 }
 
 void AudioInputCore::internal_set_device(const AudioInputDevice & device)
diff --git a/lib/engine/audioinput/audioinput-core.h b/lib/engine/audioinput/audioinput-core.h
index 3758562..6c7e27e 100644
--- a/lib/engine/audioinput/audioinput-core.h
+++ b/lib/engine/audioinput/audioinput-core.h
@@ -132,12 +132,12 @@ namespace Ekiga
       /** Triggers a callback for all Ekiga::AudioInputManager sources of the
        * AudioInputCore service.
        */
-      void visit_managers (sigc::slot1<bool, AudioInputManager &> visitor);
+      void visit_managers (boost::function1<bool, AudioInputManager &> visitor);
 
       /** This signal is emitted when a Ekiga::AudioInputManager has been
        * added to the AudioInputCore Service.
        */
-      sigc::signal1<void, AudioInputManager &> manager_added;
+      boost::signal1<void, AudioInputManager &> manager_added;
 
 
       /*** AudioInput Device Management ***/
@@ -255,23 +255,23 @@ namespace Ekiga
 
       /** See audioinput-manager.h for the API
        */
-      sigc::signal3<void, AudioInputManager &, AudioInputDevice &, AudioInputSettings&> device_opened;
-      sigc::signal2<void, AudioInputManager &, AudioInputDevice &> device_closed;
-      sigc::signal3<void, AudioInputManager &, AudioInputDevice &, AudioInputErrorCodes> device_error;
+      boost::signal3<void, AudioInputManager &, AudioInputDevice &, AudioInputSettings&> device_opened;
+      boost::signal2<void, AudioInputManager &, AudioInputDevice &> device_closed;
+      boost::signal3<void, AudioInputManager &, AudioInputDevice &, AudioInputErrorCodes> device_error;
 
       /** This signal is emitted when an audio device input has been added to the system.
        * This signal will be emitted if add_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the audio input device that was added.
        */
-      sigc::signal2<void, AudioInputDevice, bool> device_added;
+      boost::signal2<void, AudioInputDevice, bool> device_added;
 
       /** This signal is emitted when an audio input device has been removed from the system.
        * This signal will be emitted if remove_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the audio input device that was removed.
        */
-      sigc::signal2<void, AudioInputDevice, bool> device_removed;
+      boost::signal2<void, AudioInputDevice, bool> device_removed;
 
   private:
       void on_device_opened (AudioInputDevice device,  
diff --git a/lib/engine/audioinput/audioinput-gmconf-bridge.cpp b/lib/engine/audioinput/audioinput-gmconf-bridge.cpp
index cc61741..fc95e23 100644
--- a/lib/engine/audioinput/audioinput-gmconf-bridge.cpp
+++ b/lib/engine/audioinput/audioinput-gmconf-bridge.cpp
@@ -48,7 +48,7 @@ AudioInputCoreConfBridge::AudioInputCoreConfBridge (Ekiga::Service & _service)
  : Ekiga::ConfBridge (_service)
 {
   Ekiga::ConfKeys keys;
-  property_changed.connect (sigc::mem_fun (this, &AudioInputCoreConfBridge::on_property_changed));
+  property_changed.connect (boost::bind (&AudioInputCoreConfBridge::on_property_changed, this, _1, _2));
 
   keys.push_back (AUDIO_DEVICES_KEY "input_device"); 
   load (keys);
diff --git a/lib/engine/audioinput/audioinput-manager.h b/lib/engine/audioinput/audioinput-manager.h
index 02abf43..0ae9296 100644
--- a/lib/engine/audioinput/audioinput-manager.h
+++ b/lib/engine/audioinput/audioinput-manager.h
@@ -39,7 +39,8 @@
 #define __AUDIOINPUT_MANAGER_H__
 
 #include <vector>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "audioinput-info.h"
 
@@ -147,18 +148,18 @@ namespace Ekiga
        * @param device the audio input device that was opened.
        * @param config the current audio input device configuration (current volume, etc.).
        */
-      sigc::signal2<void, AudioInputDevice, AudioInputSettings> device_opened;
+      boost::signal2<void, AudioInputDevice, AudioInputSettings> device_opened;
 
       /** This signal is emitted when an audio input device is closed.
        * @param device the audio input device that was closed.
        */
-      sigc::signal1<void, AudioInputDevice> device_closed;
+      boost::signal1<void, AudioInputDevice> device_closed;
 
       /** This signal is emitted when an error occurs when opening a audio input device.
        * @param device the audio input device that caused the error.
        * @param error_code the audio input device error code.
        */
-      sigc::signal2<void, AudioInputDevice, AudioInputErrorCodes> device_error;
+      boost::signal2<void, AudioInputDevice, AudioInputErrorCodes> device_error;
 
 
   protected:  
diff --git a/lib/engine/audiooutput/Makefile.am b/lib/engine/audiooutput/Makefile.am
index 1ba4028..d4ae76b 100644
--- a/lib/engine/audiooutput/Makefile.am
+++ b/lib/engine/audiooutput/Makefile.am
@@ -24,4 +24,4 @@ libgmaudiooutput_la_SOURCES = \
 libgmaudiooutput_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmaudiooutput_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/audiooutput/audiooutput-core.cpp b/lib/engine/audiooutput/audiooutput-core.cpp
index 183423d..4ac298d 100644
--- a/lib/engine/audiooutput/audiooutput-core.cpp
+++ b/lib/engine/audiooutput/audiooutput-core.cpp
@@ -92,14 +92,14 @@ void AudioOutputCore::setup_conf_bridge ()
 void AudioOutputCore::add_manager (AudioOutputManager &manager)
 {
   managers.insert (&manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager.device_error.connect (sigc::bind (sigc::mem_fun (this, &AudioOutputCore::on_device_error), &manager));
-  manager.device_opened.connect (sigc::bind (sigc::mem_fun (this, &AudioOutputCore::on_device_opened), &manager));
-  manager.device_closed.connect (sigc::bind (sigc::mem_fun (this, &AudioOutputCore::on_device_closed), &manager));
+  manager.device_error.connect (boost::bind (&AudioOutputCore::on_device_error, this, _1, _2, _3, &manager));
+  manager.device_opened.connect (boost::bind (&AudioOutputCore::on_device_opened, this, _1, _2, _3, &manager));
+  manager.device_closed.connect (boost::bind (&AudioOutputCore::on_device_closed, this, _1, _2, &manager));
 }
 
-void AudioOutputCore::visit_managers (sigc::slot1<bool, AudioOutputManager &> visitor)
+void AudioOutputCore::visit_managers (boost::function1<bool, AudioOutputManager &> visitor)
 {
   yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
@@ -208,7 +208,7 @@ void AudioOutputCore::add_device (const std::string & sink, const std::string &
          internal_set_primary_device(desired_primary_device);
        }
 
-       device_added.emit(device, desired_primary_device == device);
+       device_added(device, desired_primary_device == device);
      }
   }
 }
@@ -233,7 +233,7 @@ void AudioOutputCore::remove_device (const std::string & sink, const std::string
          internal_set_primary_device(new_device);
        }
 
-       device_removed.emit(device, device == current_device[primary]);
+       device_removed(device, device == current_device[primary]);
      }
   }
 }
@@ -371,17 +371,17 @@ void AudioOutputCore::on_device_opened (AudioOutputPS ps,
     settings.volume = desired_primary_volume;
   }
 #endif
-  device_opened.emit (*manager, ps, device, settings);
+  device_opened (*manager, ps, device, settings);
 }
 
 void AudioOutputCore::on_device_closed (AudioOutputPS ps, AudioOutputDevice device, AudioOutputManager *manager)
 {
-  device_closed.emit (*manager, ps, device);
+  device_closed (*manager, ps, device);
 }
 
 void AudioOutputCore::on_device_error (AudioOutputPS ps, AudioOutputDevice device, AudioOutputErrorCodes error_code, AudioOutputManager *manager)
 {
-  device_error.emit (*manager, ps, device, error_code);
+  device_error (*manager, ps, device, error_code);
 }
 
 void AudioOutputCore::internal_set_primary_device(const AudioOutputDevice & device)
diff --git a/lib/engine/audiooutput/audiooutput-core.h b/lib/engine/audiooutput/audiooutput-core.h
index 2d4c827..6a44b86 100644
--- a/lib/engine/audiooutput/audiooutput-core.h
+++ b/lib/engine/audiooutput/audiooutput-core.h
@@ -122,12 +122,12 @@ namespace Ekiga
       /** Triggers a callback for all Ekiga::AudioOutputManager sources of the
        * AudioOutputCore service.
        */
-      void visit_managers (sigc::slot1<bool, AudioOutputManager &> visitor);
+      void visit_managers (boost::function1<bool, AudioOutputManager &> visitor);
 
       /** This signal is emitted when a Ekiga::AudioOutputManager has been
        * added to the AudioOutputCore Service.
        */
-      sigc::signal1<void, AudioOutputManager &> manager_added;
+      boost::signal1<void, AudioOutputManager &> manager_added;
 
 
       /** Get a list of all devices supported by all managers registered to the core.
@@ -298,23 +298,23 @@ namespace Ekiga
 
       /** See audiooutput-manager.h for the API
        */
-      sigc::signal4<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&, AudioOutputSettings&> device_opened;
-      sigc::signal3<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&> device_closed;
-      sigc::signal4<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&, AudioOutputErrorCodes> device_error;
+      boost::signal4<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&, AudioOutputSettings&> device_opened;
+      boost::signal3<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&> device_closed;
+      boost::signal4<void, AudioOutputManager &, AudioOutputPS, AudioOutputDevice&, AudioOutputErrorCodes> device_error;
 
       /** This signal is emitted when an audio output device has been added to the system.
        * This signal will be emitted if add_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the audio output device that was added.
        */
-      sigc::signal2<void, AudioOutputDevice, bool> device_added;
+      boost::signal2<void, AudioOutputDevice, bool> device_added;
 
       /** This signal is emitted when an audio output device has been removed from the system.
        * This signal will be emitted if remove_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the audio output device that was removed.
        */
-      sigc::signal2<void, AudioOutputDevice, bool> device_removed;
+      boost::signal2<void, AudioOutputDevice, bool> device_removed;
 
   private:
       void on_device_opened (AudioOutputPS ps, 
diff --git a/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp b/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp
index 79bd8b8..11574e3 100644
--- a/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp
+++ b/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp
@@ -49,7 +49,7 @@ AudioOutputCoreConfBridge::AudioOutputCoreConfBridge (Ekiga::Service & _service)
  : Ekiga::ConfBridge (_service)
 {
   Ekiga::ConfKeys keys;
-  property_changed.connect (sigc::mem_fun (this, &AudioOutputCoreConfBridge::on_property_changed));
+  property_changed.connect (boost::bind (&AudioOutputCoreConfBridge::on_property_changed, this, _1, _2));
 
   keys.push_back (AUDIO_DEVICES_KEY "output_device"); 
   keys.push_back (SOUND_EVENTS_KEY "output_device"); 
diff --git a/lib/engine/audiooutput/audiooutput-manager.h b/lib/engine/audiooutput/audiooutput-manager.h
index 4bbfa67..e613e00 100644
--- a/lib/engine/audiooutput/audiooutput-manager.h
+++ b/lib/engine/audiooutput/audiooutput-manager.h
@@ -39,7 +39,8 @@
 #define __AUDIOOUTPUT_MANAGER_H__
 
 #include <vector>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "audiooutput-info.h"
 
@@ -151,20 +152,20 @@ namespace Ekiga
        * @param device the audio output device that was opened.
        * @param config the current audio output device configuration (current volume, etc.).
        */
-      sigc::signal3<void, AudioOutputPS, AudioOutputDevice, AudioOutputSettings> device_opened;
+      boost::signal3<void, AudioOutputPS, AudioOutputDevice, AudioOutputSettings> device_opened;
 
       /** This signal is emitted when an audio output device is closed.
        * @param prim whether the primary or secondary audio output device was closed.
        * @param device the audio output device that was closed.
        */
-      sigc::signal2<void, AudioOutputPS, AudioOutputDevice> device_closed;
+      boost::signal2<void, AudioOutputPS, AudioOutputDevice> device_closed;
 
       /** This signal is emitted when an error occurs when opening an audio output device.
        * @param prim whether the primary or secondary audio output device caused the error.
        * @param device the audio output device that caused the error.
        * @param error_code the audio output device error code.
        */
-      sigc::signal3<void, AudioOutputPS, AudioOutputDevice, AudioOutputErrorCodes> device_error;
+      boost::signal3<void, AudioOutputPS, AudioOutputDevice, AudioOutputErrorCodes> device_error;
 
   protected:  
       typedef struct ManagerState {
diff --git a/lib/engine/chat/Makefile.am b/lib/engine/chat/Makefile.am
index 61f19cc..79d8da4 100644
--- a/lib/engine/chat/Makefile.am
+++ b/lib/engine/chat/Makefile.am
@@ -17,4 +17,4 @@ libgmchat_la_SOURCES = \
 	$(chat_dir)/chat-simple.h		\
 	$(chat_dir)/chat-multiple.h
 
-libgmchat_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(SIGC_LIBS)
+libgmchat_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(BOOST_LIBS)
diff --git a/lib/engine/chat/chat-core.cpp b/lib/engine/chat/chat-core.cpp
index 1adbd0b..3e933b6 100644
--- a/lib/engine/chat/chat-core.cpp
+++ b/lib/engine/chat/chat-core.cpp
@@ -45,12 +45,12 @@ void
 Ekiga::ChatCore::add_dialect (DialectPtr dialect)
 {
   dialects.push_back (dialect);
-  dialect->questions.connect (questions.make_slot ());
-  dialect_added.emit (dialect);
+  dialect->questions.connect (boost::ref (questions));
+  dialect_added (dialect);
 }
 
 void
-Ekiga::ChatCore::visit_dialects (sigc::slot1<bool, DialectPtr > visitor)
+Ekiga::ChatCore::visit_dialects (boost::function1<bool, DialectPtr > visitor)
 {
   bool go_on = true;
 
diff --git a/lib/engine/chat/chat-core.h b/lib/engine/chat/chat-core.h
index c9e3543..c970910 100644
--- a/lib/engine/chat/chat-core.h
+++ b/lib/engine/chat/chat-core.h
@@ -95,12 +95,12 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows stopping
      * the visit)
      */
-    void visit_dialects (sigc::slot1<bool, DialectPtr > visitor);
+    void visit_dialects (boost::function1<bool, DialectPtr > visitor);
 
     /** This signal is emitted when an Ekiga::Dialect has been added to
      * the ChatCore service.
      */
-    sigc::signal1<void, DialectPtr > dialect_added;
+    boost::signal1<void, DialectPtr > dialect_added;
 
   private:
 
@@ -116,7 +116,7 @@ namespace Ekiga
 
     /** This signal is emitted when the ChatCore service has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
     /** This chain allows the ChatCore to present forms to the user
      */
diff --git a/lib/engine/chat/chat.h b/lib/engine/chat/chat.h
index 61c8a5e..08f568f 100644
--- a/lib/engine/chat/chat.h
+++ b/lib/engine/chat/chat.h
@@ -37,7 +37,8 @@
 #define __CHAT_H__
 
 #include <string>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include <boost/smart_ptr.hpp>
 
@@ -112,15 +113,15 @@ namespace Ekiga
 
     /** This signal is emitted when the Chat has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
     /** This signal is emitted when the user requested to see this Chat
      */
-    sigc::signal0<void> user_requested;
+    boost::signal0<void> user_requested;
 
     /** This signal is emitted when the Chat has been removed.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
     /** Feed possible actions on this Chat to the given MenuBuilder
      * @param A MenuBuilder object to populate.
diff --git a/lib/engine/chat/dialect-impl.h b/lib/engine/chat/dialect-impl.h
index b4199e9..a698efb 100644
--- a/lib/engine/chat/dialect-impl.h
+++ b/lib/engine/chat/dialect-impl.h
@@ -47,7 +47,7 @@ namespace Ekiga
 	   typename MultipleChatType = MultipleChat>
   class DialectImpl:
     public Dialect,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
@@ -63,22 +63,22 @@ namespace Ekiga
      * @param: The callback (the return value means "go on" and allows
      * stopping the visit)
      */
-    void visit_simple_chats (sigc::slot1<bool, SimpleChatPtr > visitor);
+    void visit_simple_chats (boost::function1<bool, SimpleChatPtr > visitor);
 
     /** Triggers a callback for all multiple chats of the Dialect.
      * @param: The callback (the return value means "go on" and allows
      * stopping the visit)
      */
-    void visit_multiple_chats (sigc::slot1<bool, MultipleChatPtr > visitor);
+    void visit_multiple_chats (boost::function1<bool, MultipleChatPtr > visitor);
 
   protected:
 
     /* More STL-like ways to access the chats within this Ekiga::DialectImpl
      */
-    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;
+    typedef typename Ekiga::map_key_iterator<std::map<boost::shared_ptr<SimpleChatType>, std::list<boost::signals::connection> > > simple_iterator;
+    typedef typename Ekiga::map_key_const_iterator<std::map<boost::shared_ptr<SimpleChatType>, std::list<boost::signals::connection> > > simple_const_iterator;
+    typedef typename Ekiga::map_key_iterator<std::map<boost::shared_ptr<MultipleChatType>, std::list<boost::signals::connection> > > multiple_iterator;
+    typedef typename Ekiga::map_key_const_iterator<std::map<boost::shared_ptr<MultipleChatType>, std::list<boost::signals::connection> > > multiple_const_iterator;
 
     simple_iterator simple_begin ();
     simple_iterator simple_end ();
@@ -116,8 +116,8 @@ namespace Ekiga
 
   private:
 
-    std::map<boost::shared_ptr<SimpleChatType>, std::list<sigc::connection> > simple_chats;
-    std::map<boost::shared_ptr<MultipleChatType>, std::list<sigc::connection> > multiple_chats;
+    std::map<boost::shared_ptr<SimpleChatType>, std::list<boost::signals::connection> > simple_chats;
+    std::map<boost::shared_ptr<MultipleChatType>, std::list<boost::signals::connection> > multiple_chats;
 
     void on_simple_chat_removed (boost::shared_ptr<SimpleChatType> chat);
 
@@ -133,22 +133,22 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::DialectImpl ()
 template<typename SimpleChatType, typename MultipleChatType>
 Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::~DialectImpl ()
 {
-  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<boost::signals::connection> >::iterator iter = simple_chats.begin ();
        iter != simple_chats.end ();
        iter++) {
 
-    for (std::list<sigc::connection>::iterator conn_iter = iter->second.begin ();
+    for (std::list<boost::signals::connection>::iterator conn_iter = iter->second.begin ();
 	 conn_iter != iter->second.end ();
 	 ++conn_iter) {
 
       conn_iter->disconnect ();
     }
   }
-  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<boost::signals::connection> >::iterator iter = multiple_chats.begin ();
        iter != multiple_chats.end ();
        iter++) {
 
-    for (std::list<sigc::connection>::iterator conn_iter = iter->second.begin ();
+    for (std::list<boost::signals::connection>::iterator conn_iter = iter->second.begin ();
 	 conn_iter != iter->second.end ();
 	 ++conn_iter) {
 
@@ -159,11 +159,11 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::~DialectImpl ()
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_simple_chats (sigc::slot1<bool, SimpleChatPtr > visitor)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_simple_chats (boost::function1<bool, SimpleChatPtr > visitor)
 {
   bool go_on = true;
 
-  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<sigc::connection> >::iterator iter = simple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<SimpleChatType>,std::list<boost::signals::connection> >::iterator iter = simple_chats.begin ();
        go_on && iter != simple_chats.end ();
        iter++) {
 
@@ -173,11 +173,11 @@ Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_simple_chats (sigc::
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
-Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_multiple_chats (sigc::slot1<bool, MultipleChatPtr > visitor)
+Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::visit_multiple_chats (boost::function1<bool, MultipleChatPtr > visitor)
 {
   bool go_on = true;
 
-  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<sigc::connection> >::iterator iter = multiple_chats.begin ();
+  for (typename std::map<boost::shared_ptr<MultipleChatType>,std::list<boost::signals::connection> >::iterator iter = multiple_chats.begin ();
        go_on && iter != multiple_chats.end ();
        iter++) {
 
@@ -245,37 +245,37 @@ template<typename SimpleChatType, typename MultipleChatType>
 void
 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);
+  simple_chats[chat].push_back (chat->removed.connect (boost::bind (&Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_simple_chat_removed, this, chat)));
+  simple_chat_added (chat);
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
 Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_simple_chat (boost::shared_ptr<SimpleChatType> chat)
 {
-  chat->removed.emit ();
+  chat->removed ();
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
 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);
+  multiple_chats[chat].push_back (chat->removed.connect (boost::bind (&Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::on_multiple_chat_removed, this, chat)));
+  multiple_chat_added (chat);
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
 Ekiga::DialectImpl<SimpleChatType, MultipleChatType>::remove_multiple_chat (boost::shared_ptr<MultipleChatType> chat)
 {
-  chat->removed.emit ();
+  chat->removed ();
 }
 
 template<typename SimpleChatType, typename MultipleChatType>
 void
 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 ();
+  for (typename std::list<boost::signals::connection>::iterator iter = simple_chats[chat].begin ();
        iter != simple_chats[chat].end ();
        ++iter) {
 
@@ -288,7 +288,7 @@ template<typename SimpleChatType, typename MultipleChatType>
 void
 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 ();
+  for (typename std::list<boost::signals::connection>::iterator iter = multiple_chats[chat].begin ();
        iter != multiple_chats[chat].end ();
        ++iter) {
 
diff --git a/lib/engine/chat/dialect.h b/lib/engine/chat/dialect.h
index 0b22eab..5d26629 100644
--- a/lib/engine/chat/dialect.h
+++ b/lib/engine/chat/dialect.h
@@ -55,13 +55,13 @@ namespace Ekiga
      * @param: The callback (the return value means "go on" and allows
      * stopping the visit)
      */
-    virtual void visit_simple_chats (sigc::slot1<bool, SimpleChatPtr > visitor) = 0;
+    virtual void visit_simple_chats (boost::function1<bool, SimpleChatPtr > visitor) = 0;
 
     /** Triggers a callback for all multiple chats of the Dialect.
      * @param: The callback (the return value means "go on" and allows
      * stopping the visit)
      */
-    virtual void visit_multiple_chats (sigc::slot1<bool, MultipleChatPtr > visitor) = 0;
+    virtual void visit_multiple_chats (boost::function1<bool, MultipleChatPtr > visitor) = 0;
 
 
     /** Feed possible actions on this Dialect to the given MenuBuilder
@@ -72,12 +72,12 @@ namespace Ekiga
     /** This signal is emitted when an Ekiga::SimpleChat has been added to
      * the dialect.
      */
-    sigc::signal1<void, SimpleChatPtr> simple_chat_added;
+    boost::signal1<void, SimpleChatPtr> simple_chat_added;
 
     /** This signal is emitted when an Ekiga::MultipleChat has been added to
      * the dialect.
      */
-    sigc::signal1<void, MultipleChatPtr> multiple_chat_added;
+    boost::signal1<void, MultipleChatPtr> multiple_chat_added;
 
     /** This chain allows the Dialect to present forms to the user.
      */
diff --git a/lib/engine/components/avahi-publisher/Makefile.am b/lib/engine/components/avahi-publisher/Makefile.am
index cb0658c..783720f 100644
--- a/lib/engine/components/avahi-publisher/Makefile.am
+++ b/lib/engine/components/avahi-publisher/Makefile.am
@@ -22,4 +22,4 @@ libavahipublisher_la_LIBADD = 						\
 	$(top_builddir)/lib/engine/framework/libgmframework.la		\
 	$(top_builddir)/lib/engine/presence/libgmpresence.la
 
-libavahipublisher_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(AVAHI_LIBS)
+libavahipublisher_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(AVAHI_LIBS)
diff --git a/lib/engine/components/avahi-publisher/avahi-publisher.cpp b/lib/engine/components/avahi-publisher/avahi-publisher.cpp
index bb1764a..0e24ac2 100644
--- a/lib/engine/components/avahi-publisher/avahi-publisher.cpp
+++ b/lib/engine/components/avahi-publisher/avahi-publisher.cpp
@@ -72,7 +72,7 @@ Avahi::PresencePublisher::PresencePublisher (Ekiga::ServiceCore& core_,
   client(NULL), group(NULL)
 {
   display_name = details.get_display_name ();
-  details.updated.connect (sigc::mem_fun (this, &Avahi::PresencePublisher::on_details_updated));
+  details.updated.connect (boost::bind (&Avahi::PresencePublisher::on_details_updated, this));
   name = avahi_strdup (display_name.c_str ());
   glib_poll = avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);
   create_client ();
diff --git a/lib/engine/components/avahi/Makefile.am b/lib/engine/components/avahi/Makefile.am
index ef1b4b3..4f8bbea 100644
--- a/lib/engine/components/avahi/Makefile.am
+++ b/lib/engine/components/avahi/Makefile.am
@@ -20,4 +20,4 @@ libgmavahi_la_SOURCES = \
 libgmavahi_la_LIBADD = \
 	$(top_builddir)/lib/engine/presence/libgmpresence.la
 
-libgmavahi_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(AVAHI_LIBS)
+libgmavahi_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(AVAHI_LIBS)
diff --git a/lib/engine/components/avahi/avahi-cluster.h b/lib/engine/components/avahi/avahi-cluster.h
index 38c95f9..602e8d0 100644
--- a/lib/engine/components/avahi/avahi-cluster.h
+++ b/lib/engine/components/avahi/avahi-cluster.h
@@ -53,7 +53,7 @@ namespace Avahi
   class Cluster:
     public Ekiga::Service,
     public Ekiga::ClusterImpl<Heap>,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
diff --git a/lib/engine/components/avahi/avahi-heap.cpp b/lib/engine/components/avahi/avahi-heap.cpp
index cf262c8..680de69 100644
--- a/lib/engine/components/avahi/avahi-heap.cpp
+++ b/lib/engine/components/avahi/avahi-heap.cpp
@@ -206,7 +206,7 @@ Avahi::Heap::BrowserCallback (AvahiServiceBrowser *browser,
     break;
 
   case AVAHI_BROWSER_REMOVE:
-    visit_presentities (sigc::bind (sigc::mem_fun (this, &Avahi::Heap::remover), name));
+    visit_presentities (boost::bind (&Avahi::Heap::remover, this, _1, name));
     break;
   case AVAHI_BROWSER_CACHE_EXHAUSTED:
     // FIXME: do I care?
@@ -302,12 +302,12 @@ Avahi::Heap::ResolverCallback (AvahiServiceResolver *resolver,
     }
 
     resolver_callback_helper helper(name);
-    visit_presentities (sigc::mem_fun (helper, &resolver_callback_helper::test));
+    visit_presentities (boost::bind (&resolver_callback_helper::test, helper, _1));
     if (helper.found_presentity ()) {
 
       /* known contact has been updated */
-      presence_received.emit (helper.found_presentity ()->get_uri (), presence);
-      status_received.emit (helper.found_presentity ()->get_uri (), status);
+      presence_received (helper.found_presentity ()->get_uri (), presence);
+      status_received (helper.found_presentity ()->get_uri (), status);
     } else {
 
       /* ok, this is a new contact */
@@ -320,8 +320,8 @@ Avahi::Heap::ResolverCallback (AvahiServiceResolver *resolver,
 	groups.insert (_("Neighbours"));
 	url = g_strdup_printf ("%s:neighbour %s:%d", broken[1], host_name, port);
 	boost::shared_ptr<Ekiga::URIPresentity> presentity (new Ekiga::URIPresentity (core, name, url, groups));
-	status_received.emit (url, status);
-	presence_received.emit (url, presence);
+	status_received (url, status);
+	presence_received (url, presence);
 	add_presentity (presentity);
 	g_free (url);
       }
@@ -348,7 +348,7 @@ Avahi::Heap::remover (Ekiga::PresentityPtr presentity,
   if (presentity->get_name () == name) {
 
     result = false;
-    presentity->removed.emit ();
+    presentity->removed ();
   }
 
   return result;
diff --git a/lib/engine/components/avahi/avahi-heap.h b/lib/engine/components/avahi/avahi-heap.h
index 1272cce..dea9946 100644
--- a/lib/engine/components/avahi/avahi-heap.h
+++ b/lib/engine/components/avahi/avahi-heap.h
@@ -60,7 +60,7 @@ namespace Avahi
   class Heap:
     public Ekiga::PresenceFetcher,
     public Ekiga::HeapImpl<Ekiga::URIPresentity>,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
diff --git a/lib/engine/components/call-history/Makefile.am b/lib/engine/components/call-history/Makefile.am
index afc7e29..1315046 100644
--- a/lib/engine/components/call-history/Makefile.am
+++ b/lib/engine/components/call-history/Makefile.am
@@ -23,4 +23,4 @@ libcall_history_la_SOURCES = \
 libcall_history_la_LIBADD = \
 	$(top_builddir)/lib/engine/addressbook/libgmaddressbook.la
 
-libcall_history_la_LDFLAGS = -export-dynamic -no-undefined $(XML_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+libcall_history_la_LDFLAGS = -export-dynamic -no-undefined $(XML_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/components/call-history/history-book.cpp b/lib/engine/components/call-history/history-book.cpp
index 79148ba..d71acf6 100644
--- a/lib/engine/components/call-history/history-book.cpp
+++ b/lib/engine/components/call-history/history-book.cpp
@@ -87,8 +87,8 @@ History::Book::Book (Ekiga::ServiceCore &_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));
+  call_core->missed_call.connect (boost::bind (&History::Book::on_missed_call, this, _1, _2));
+  call_core->cleared_call.connect (boost::bind (&History::Book::on_cleared_call, this, _1, _2, _3));
 }
 
 History::Book::~Book ()
@@ -134,7 +134,7 @@ bool
 History::Book::populate_menu (Ekiga::MenuBuilder &builder)
 {
   builder.add_action ("clear",
-		      _("Clear List"), sigc::mem_fun (this, &History::Book::clear));
+		      _("Clear List"), boost::bind (&History::Book::clear, this));
   return true;
 }
 
@@ -181,7 +181,7 @@ History::Book::clear ()
   xmlDocSetRootElement (doc.get (), root);
 
   save ();
-  cleared.emit ();
+  cleared ();
 }
 
 void
diff --git a/lib/engine/components/call-history/history-book.h b/lib/engine/components/call-history/history-book.h
index ae9400e..a85e25c 100644
--- a/lib/engine/components/call-history/history-book.h
+++ b/lib/engine/components/call-history/history-book.h
@@ -53,7 +53,7 @@ namespace History
 
   class Book:
     public Ekiga::BookImpl<Contact>,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
@@ -86,7 +86,7 @@ namespace History
 
     void clear ();
 
-    sigc::signal0<void> cleared;
+    boost::signal0<void> cleared;
 
   private:
 
diff --git a/lib/engine/components/common-videooutput/videooutput-manager-common.cpp b/lib/engine/components/common-videooutput/videooutput-manager-common.cpp
index 31dd3f2..9597217 100644
--- a/lib/engine/components/common-videooutput/videooutput-manager-common.cpp
+++ b/lib/engine/components/common-videooutput/videooutput-manager-common.cpp
@@ -250,8 +250,8 @@ void GMVideoOutputManager::uninit ()
 void GMVideoOutputManager::update_gui_device ()
 {
   last_frame.both_streams_active = current_frame.both_streams_active;
-  Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &GMVideoOutputManager::device_closed_in_main));
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager::device_opened_in_main), current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager::device_closed_in_main, this));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager::device_opened_in_main, this, current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
 
 }
 
@@ -349,11 +349,11 @@ GMVideoOutputManager::device_opened_in_main (Ekiga::VideoOutputAccel accel,
 					     unsigned zoom,
 					     bool both)
 {
-  device_opened.emit (accel, mode, zoom, both);
+  device_opened (accel, mode, zoom, both);
 }
 
 void
 GMVideoOutputManager::device_closed_in_main ()
 {
-  device_closed.emit ();
+  device_closed ();
 }
diff --git a/lib/engine/components/dx-videooutput/Makefile.am b/lib/engine/components/dx-videooutput/Makefile.am
index 8c3127b..05827ee 100644
--- a/lib/engine/components/dx-videooutput/Makefile.am
+++ b/lib/engine/components/dx-videooutput/Makefile.am
@@ -20,4 +20,4 @@ libgmvideooutput_dx_la_SOURCES = \
 	$(videooutput_dir)/videooutput-main-dx.cpp    \
 	$(videooutput_dir)/videooutput-main-dx.h
 
-libgmvideooutput_dx_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(PTLIB_LIBS) $(DX_LIBS) $(GLIB_LIBS)
+libgmvideooutput_dx_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(PTLIB_LIBS) $(DX_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/components/dx-videooutput/videooutput-manager-dx.cpp b/lib/engine/components/dx-videooutput/videooutput-manager-dx.cpp
index d3845c9..957be14 100644
--- a/lib/engine/components/dx-videooutput/videooutput-manager-dx.cpp
+++ b/lib/engine/components/dx-videooutput/videooutput-manager-dx.cpp
@@ -78,17 +78,17 @@ GMVideoOutputManager_dx::setup_frame_display ()
 
   switch (current_frame.mode) {
   case Ekiga::VO_MODE_LOCAL:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::size_changed_in_main), (unsigned) (current_frame.local_width * current_frame.zoom / 100), (unsigned) (current_frame.local_height * current_frame.zoom / 100)));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::size_changed_in_main, this), (unsigned) (current_frame.local_width * current_frame.zoom / 100), (unsigned) (current_frame.local_height * current_frame.zoom / 100)));
     break;
   case Ekiga::VO_MODE_REMOTE:
   case Ekiga::VO_MODE_PIP:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::size_changed_in_main), (unsigned) (current_frame.remote_width * current_frame.zoom / 100), (unsigned) (current_frame.remote_height * current_frame.zoom / 100)));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::size_changed_in_main, this), (unsigned) (current_frame.remote_width * current_frame.zoom / 100), (unsigned) (current_frame.remote_height * current_frame.zoom / 100)));
     break;
   case Ekiga::VO_MODE_FULLSCREEN:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::size_changed_in_main), 176, 144));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::size_changed_in_main, this), 176, 144));
     break;
   case Ekiga::VO_MODE_PIP_WINDOW:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::size_changed_in_main), 176, 144));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::size_changed_in_main, this), 176, 144));
     break;
   case Ekiga::VO_MODE_UNSET:
   default:
@@ -197,18 +197,18 @@ GMVideoOutputManager_dx::setup_frame_display ()
   if (video_disabled) {
     delete dxWindow;
     dxWindow = NULL;
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::device_error_in_main), Ekiga::VO_ERROR));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::device_error_in_main, this), Ekiga::VO_ERROR));
   }
   else {
     current_frame.accel = Ekiga::VO_ACCEL_ALL; 
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::device_opened_in_main), current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::device_opened_in_main, this), current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
   }
 }
 
 void
 GMVideoOutputManager_dx::close_frame_display ()
 {
-  Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &GMVideoOutputManager_dx::device_closed_in_main));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_dx::device_closed_in_main, this));
 
   if (dxWindow) {
 
@@ -240,7 +240,7 @@ GMVideoOutputManager_dx::display_pip_frames (const char *local_frame,
     dxWindow->ProcessEvents(); 
 
   if (current_frame.mode == Ekiga::VO_MODE_FULLSCREEN && dxWindow && !dxWindow->IsFullScreen ())
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_dx::fullscreen_mode_changed_in_main), Ekiga::VO_FS_OFF));
+    Ekiga::Runtime::run_in_main (boost::bind (boost::bind (&GMVideoOutputManager_dx::fullscreen_mode_changed_in_main, this), Ekiga::VO_FS_OFF));
 
   if (dxWindow) {
     if (update_required.remote || (!update_required.remote && !update_required.local)) {
@@ -264,7 +264,7 @@ void
 GMVideoOutputManager_dx::size_changed_in_main (unsigned width,
 		      unsigned height)
 {
-  size_changed.emit (width, height);
+  size_changed (width, height);
 }
 
 void
@@ -273,23 +273,23 @@ GMVideoOutputManager_dx::device_opened_in_main (Ekiga::VideoOutputAccel accel,
 		       unsigned zoom,
 		       bool both)
 {
-  device_opened.emit (accel, mode, zoom, both);
+  device_opened (accel, mode, zoom, both);
 }
 
 void
 GMVideoOutputManager_dx::device_closed_in_main ()
 {
-  device_closed.emit ();
+  device_closed ();
 }
 
 void
 GMVideoOutputManager_dx::device_error_in_main (Ekiga::VideoOutputErrorCodes code)
 {
-  device_error.emit (code);
+  device_error (code);
 }
 
 void
 GMVideoOutputManager_dx::fullscreen_mode_changed_in_main (Ekiga::VideoOutputFSToggle val)
 {
-  fullscreen_mode_changed.emit (val);
+  fullscreen_mode_changed (val);
 }
diff --git a/lib/engine/components/echo/Makefile.am b/lib/engine/components/echo/Makefile.am
index f835de4..e8f3575 100644
--- a/lib/engine/components/echo/Makefile.am
+++ b/lib/engine/components/echo/Makefile.am
@@ -19,4 +19,4 @@ libgmechochat_la_SOURCES = \
 	$(echochat_dir)/echo-main.h		\
 	$(echochat_dir)/echo-main.cpp
 
-libgmechochat_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS)
+libgmechochat_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS)
diff --git a/lib/engine/components/echo/echo-dialect.cpp b/lib/engine/components/echo/echo-dialect.cpp
index f34480c..df9826e 100644
--- a/lib/engine/components/echo/echo-dialect.cpp
+++ b/lib/engine/components/echo/echo-dialect.cpp
@@ -52,7 +52,7 @@ bool
 Echo::Dialect::populate_menu (Ekiga::MenuBuilder &builder)
 
 {
-  builder.add_action ("FIXME", "New echo", sigc::mem_fun (this, &Echo::Dialect::new_chat));
+  builder.add_action ("FIXME", "New echo", boost::bind (&Echo::Dialect::new_chat, this));
 
   return true;
 }
@@ -62,5 +62,5 @@ Echo::Dialect::new_chat ()
 {
   SimpleChatPtr chat (new SimpleChat);
   add_simple_chat (chat);
-  chat->user_requested.emit ();
+  chat->user_requested ();
 }
diff --git a/lib/engine/components/echo/echo-simple.cpp b/lib/engine/components/echo/echo-simple.cpp
index 1b6ca6e..429e6ac 100644
--- a/lib/engine/components/echo/echo-simple.cpp
+++ b/lib/engine/components/echo/echo-simple.cpp
@@ -74,7 +74,7 @@ Echo::SimpleChat::disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer)
   observers.remove (observer);
 
   if (observers.empty ())
-    removed.emit ();
+    removed ();
 }
 
 bool
diff --git a/lib/engine/components/evolution/Makefile.am b/lib/engine/components/evolution/Makefile.am
index 544c7a1..ee9455d 100644
--- a/lib/engine/components/evolution/Makefile.am
+++ b/lib/engine/components/evolution/Makefile.am
@@ -22,4 +22,4 @@ libgmevolution_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
 libgmevolution_la_LIBADD =  \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
 	$(top_builddir)/lib/engine/addressbook/libgmaddressbook.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(EDS_LIBS) $(GLIB_LIBS)
\ No newline at end of file
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(EDS_LIBS) $(GLIB_LIBS)
\ No newline at end of file
diff --git a/lib/engine/components/evolution/evolution-book.cpp b/lib/engine/components/evolution/evolution-book.cpp
index 2720469..004a022 100644
--- a/lib/engine/components/evolution/evolution-book.cpp
+++ b/lib/engine/components/evolution/evolution-book.cpp
@@ -77,7 +77,7 @@ Evolution::Book::on_view_contacts_added (GList *econtacts)
   status = c_status;
   g_free (c_status);
 
-  updated.emit ();
+  updated ();
 }
 
 static void
@@ -102,7 +102,7 @@ public:
 
     if (contact && contact->get_id () == id) {
 
-      contact->removed.emit ();
+      contact->removed ();
       result = false;
     }
 
@@ -119,7 +119,7 @@ Evolution::Book::on_view_contacts_removed (GList *ids)
   for (; ids != NULL; ids = g_list_next (ids)) {
 
     contacts_removed_helper helper((gchar*)ids->data);
-    visit_contacts (sigc::mem_fun (helper, &contacts_removed_helper::test));
+    visit_contacts (boost::bind (&contacts_removed_helper::test, helper, _1));
   }
 }
 
@@ -166,7 +166,7 @@ Evolution::Book::on_view_contacts_changed (GList *econtacts)
 
     contact_updated_helper helper (E_CONTACT (econtacts->data));
 
-    visit_contacts (sigc::mem_fun (helper, &contact_updated_helper::test));
+    visit_contacts (boost::bind (&contact_updated_helper::test, helper, _1));
   }
 }
 
@@ -204,7 +204,7 @@ Evolution::Book::on_book_view_obtained (EBookStatus _status,
 
     e_book_view_start (view);
   } else
-    removed.emit ();
+    removed ();
 }
 
 static void
@@ -238,7 +238,7 @@ Evolution::Book::on_book_opened (EBookStatus _status)
   else {
 
     book = NULL;
-    removed.emit ();
+    removed ();
   }
 }
 
@@ -282,7 +282,7 @@ bool
 Evolution::Book::populate_menu (Ekiga::MenuBuilder &builder)
 {
   builder.add_action ("new", _("New _Contact"),
-		      sigc::mem_fun (this, &Evolution::Book::new_contact_action));
+		      boost::bind (&Evolution::Book::new_contact_action, this));
   return true;
 }
 
@@ -315,7 +315,7 @@ Evolution::Book::refresh ()
 void
 Evolution::Book::new_contact_action ()
 {
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Evolution::Book::on_new_contact_form_submitted, this, _1, _2)));
 
   request->title (_("New contact"));
 
@@ -328,7 +328,7 @@ Evolution::Book::new_contact_action ()
   request->text ("cell", _("_Cell phone:"), "");
   request->text ("pager", _("_Pager:"), "");
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
diff --git a/lib/engine/components/evolution/evolution-contact.cpp b/lib/engine/components/evolution/evolution-contact.cpp
index 15ea8eb..5d0e58e 100644
--- a/lib/engine/components/evolution/evolution-contact.cpp
+++ b/lib/engine/components/evolution/evolution-contact.cpp
@@ -172,7 +172,7 @@ Evolution::Contact::update_econtact (EContact *_econtact)
       }
     }
   }
-  updated.emit ();
+  updated ();
 }
 
 void
@@ -212,9 +212,9 @@ Evolution::Contact::populate_menu (Ekiga::MenuBuilder &builder)
     builder.add_separator ();
 
   builder.add_action ("edit", _("_Edit"),
-		      sigc::mem_fun (this, &Evolution::Contact::edit_action));
+		      boost::bind (&Evolution::Contact::edit_action, this));
   builder.add_action ("remove", _("_Remove"),
-		      sigc::mem_fun (this, &Evolution::Contact::remove_action));
+		      boost::bind (&Evolution::Contact::remove_action, this));
   populated = true;
 
   return populated;
@@ -301,7 +301,7 @@ Evolution::Contact::set_attribute_value (unsigned int attr_type,
 void
 Evolution::Contact::edit_action ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&Evolution::Contact::on_edit_form_submitted, this, _1, _2)));;
 
   request->title (_("Edit contact"));
 
@@ -323,7 +323,7 @@ Evolution::Contact::edit_action ()
     request->text ("pager", _("_Pager:"), pager_uri);
   }
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
@@ -354,7 +354,7 @@ Evolution::Contact::on_edit_form_submitted (bool submitted,
 void
 Evolution::Contact::remove_action ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&Evolution::Contact::on_remove_form_submitted, this, _1, _2)));
   gchar* instructions = NULL;
 
   request->title (_("Remove contact"));
@@ -363,7 +363,7 @@ Evolution::Contact::remove_action ()
   request->instructions (instructions);
   g_free (instructions);
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
diff --git a/lib/engine/components/evolution/evolution-source.cpp b/lib/engine/components/evolution/evolution-source.cpp
index a7c2c22..aa439c5 100644
--- a/lib/engine/components/evolution/evolution-source.cpp
+++ b/lib/engine/components/evolution/evolution-source.cpp
@@ -121,7 +121,7 @@ public :
 
       if (book_group == group) {
 
-	book->removed.emit ();
+	book->removed ();
 	found = true;
       }
     }
@@ -145,7 +145,7 @@ Evolution::Source::remove_group (ESourceGroup *group)
   do {
 
     helper.ready ();
-    visit_books (sigc::mem_fun (helper, &remove_helper::test));
+    visit_books (boost::bind (&remove_helper::test, helper, _1));
 
   } while (helper.has_found ());
 }
diff --git a/lib/engine/components/gmconf-personal-details/Makefile.am b/lib/engine/components/gmconf-personal-details/Makefile.am
index 510c6c3..98538ac 100644
--- a/lib/engine/components/gmconf-personal-details/Makefile.am
+++ b/lib/engine/components/gmconf-personal-details/Makefile.am
@@ -19,4 +19,4 @@ libgmconfpersonaldetails_la_SOURCES = 						\
 libgmconfpersonaldetails_la_LIBADD = 						\
 	$(top_builddir)/lib/engine/framework/libgmframework.la
 
-libgmconfpersonaldetails_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+libgmconfpersonaldetails_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/components/gmconf-personal-details/gmconf-personal-details.cpp b/lib/engine/components/gmconf-personal-details/gmconf-personal-details.cpp
index 3f434dd..c8966c0 100644
--- a/lib/engine/components/gmconf-personal-details/gmconf-personal-details.cpp
+++ b/lib/engine/components/gmconf-personal-details/gmconf-personal-details.cpp
@@ -172,14 +172,14 @@ Gmconf::PersonalDetails::set_presence_info (const std::string _presence,
   set_presence (_presence);
   set_status (_status);
 
-  updated.emit ();
+  updated ();
 }
 
 void
 Gmconf::PersonalDetails::display_name_changed (std::string val)
 {
   display_name = val;
-  updated.emit ();
+  updated ();
 }
 
 void
@@ -187,7 +187,7 @@ Gmconf::PersonalDetails::presence_changed (std::string val)
 {
   if (presence != val) {
     presence = val;
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -196,6 +196,6 @@ Gmconf::PersonalDetails::status_changed (std::string val)
 {
   if (status != val) {
     status = val;
-    updated.emit ();
+    updated ();
   }
 }
diff --git a/lib/engine/components/gnome-session/Makefile.am b/lib/engine/components/gnome-session/Makefile.am
index f2ddc06..3002a79 100644
--- a/lib/engine/components/gnome-session/Makefile.am
+++ b/lib/engine/components/gnome-session/Makefile.am
@@ -15,4 +15,4 @@ libgmgnomesession_la_SOURCES = \
 libgmgnomesession_la_LIBADD = \
 	$(top_builddir)/lib/engine/protocol/libgmprotocol.la
 
-libgmgnomesession_la_LDFLAGS = -export-dynamic -no-undefined $(LDAP_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(DBUS_LIBS)
+libgmgnomesession_la_LDFLAGS = -export-dynamic -no-undefined $(LDAP_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(DBUS_LIBS)
diff --git a/lib/engine/components/gnome-session/gnome-session-main.cpp b/lib/engine/components/gnome-session/gnome-session-main.cpp
index 980fc49..0b453bc 100644
--- a/lib/engine/components/gnome-session/gnome-session-main.cpp
+++ b/lib/engine/components/gnome-session/gnome-session-main.cpp
@@ -125,8 +125,8 @@ GNOMESESSIONService::GNOMESESSIONService (boost::shared_ptr<Ekiga::CallCore> cal
 
     if (error == NULL) {
 
-      call_core->established_call.connect (sigc::mem_fun (this, &GNOMESESSIONService::on_established_call));
-      call_core->setup_call.connect (sigc::mem_fun (this, &GNOMESESSIONService::on_cleared_call));
+      call_core->established_call.connect (boost::bind (&GNOMESESSIONService::on_established_call, this));
+      call_core->setup_call.connect (boost::bind (&GNOMESESSIONService::on_cleared_call, this));
     } else {
 
       proxy = NULL;
diff --git a/lib/engine/components/gstreamer/Makefile.am b/lib/engine/components/gstreamer/Makefile.am
index b2a7e10..6e8da7a 100644
--- a/lib/engine/components/gstreamer/Makefile.am
+++ b/lib/engine/components/gstreamer/Makefile.am
@@ -25,4 +25,4 @@ libgmgstreamer_la_SOURCES = \
 
 libgmgstreamer_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
 libgmgstreamer_la_LIBADD = \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GSTREAMER_LIBS) $(PTLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GSTREAMER_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/gstreamer/gst-audioinput.cpp b/lib/engine/components/gstreamer/gst-audioinput.cpp
index 370ea40..2b93778 100644
--- a/lib/engine/components/gstreamer/gst-audioinput.cpp
+++ b/lib/engine/components/gstreamer/gst-audioinput.cpp
@@ -145,7 +145,7 @@ GST::AudioInputManager::open (unsigned channels,
       current_state.channels = channels;
       current_state.samplerate = samplerate;
       current_state.bits_per_sample = bits_per_sample;
-      device_opened.emit (current_state.device, settings);
+      device_opened (current_state.device, settings);
       result = true;
     }
 
@@ -169,7 +169,7 @@ GST::AudioInputManager::close ()
     gst_element_set_state (pipeline, GST_STATE_NULL);
     g_object_unref (pipeline);
     pipeline = NULL;
-    device_closed.emit (current_state.device);
+    device_closed (current_state.device);
   }
   current_state.opened = false;
 }
diff --git a/lib/engine/components/gstreamer/gst-audiooutput.cpp b/lib/engine/components/gstreamer/gst-audiooutput.cpp
index c02e9d2..83aea45 100644
--- a/lib/engine/components/gstreamer/gst-audiooutput.cpp
+++ b/lib/engine/components/gstreamer/gst-audiooutput.cpp
@@ -171,7 +171,7 @@ GST::AudioOutputManager::open (Ekiga::AudioOutputPS ps,
       current_state[ii].channels = channels;
       current_state[ii].samplerate = samplerate;
       current_state[ii].bits_per_sample = bits_per_sample;
-      device_opened.emit (ps, current_state[ii].device, settings);
+      device_opened (ps, current_state[ii].device, settings);
       result = true;
     }
 
@@ -211,7 +211,7 @@ GST::AudioOutputManager::close (Ekiga::AudioOutputPS ps)
       gst_bus_add_watch (bus, pipeline_cleaner, pipeline[ii]);
       gst_object_unref (bus);
       pipeline[ii] = NULL;
-      device_closed.emit (ps, current_state[ii].device);
+      device_closed (ps, current_state[ii].device);
     }
   }
   current_state[ii].opened = false;
diff --git a/lib/engine/components/gstreamer/gst-videoinput.cpp b/lib/engine/components/gstreamer/gst-videoinput.cpp
index 3e5160e..0c804fc 100644
--- a/lib/engine/components/gstreamer/gst-videoinput.cpp
+++ b/lib/engine/components/gstreamer/gst-videoinput.cpp
@@ -139,7 +139,7 @@ GST::VideoInputManager::open (unsigned width,
 
       Ekiga::VideoInputSettings settings;
       settings.modifyable = false;
-      device_opened.emit (current_state.device, settings);
+      device_opened (current_state.device, settings);
       result = true;
     }
   } else {
@@ -159,7 +159,7 @@ GST::VideoInputManager::close ()
 {
   if (pipeline != NULL) {
 
-    device_closed.emit (current_state.device);
+    device_closed (current_state.device);
     g_object_unref (pipeline);
     pipeline = NULL;
   }
diff --git a/lib/engine/components/hal-dbus/Makefile.am b/lib/engine/components/hal-dbus/Makefile.am
index 82b395b..393f89a 100644
--- a/lib/engine/components/hal-dbus/Makefile.am
+++ b/lib/engine/components/hal-dbus/Makefile.am
@@ -35,7 +35,7 @@ BUILT_SOURCES = hal-marshal.h hal-marshal.c
 
 CLEANFILES = $(BUILT_SOURCES)
 
-libgmhal_dbus_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(DBUS_LIBS) $(PTLIB_LIBS)
+libgmhal_dbus_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(DBUS_LIBS) $(PTLIB_LIBS)
 
 hal-marshal.h: hal-marshal.list
 	$(LIBTOOL) --mode=execute glib-genmarshal --prefix=gm_hal_dbus_marshal $^ --header > $  tmp && mv $  tmp $@
diff --git a/lib/engine/components/hal-dbus/hal-manager-dbus.cpp b/lib/engine/components/hal-dbus/hal-manager-dbus.cpp
index c28036d..a7283ed 100644
--- a/lib/engine/components/hal-dbus/hal-manager-dbus.cpp
+++ b/lib/engine/components/hal-dbus/hal-manager-dbus.cpp
@@ -149,21 +149,21 @@ void HalManager_dbus::device_added_cb (const char *device)
   if (hal_device.category == "alsa") {
 
     if (hal_device.type == "capture") {
-      audioinput_device_added.emit(hal_device.category, hal_device.name);
+      audioinput_device_added(hal_device.category, hal_device.name);
     }
     else if (hal_device.type == "playback") {
-      audiooutput_device_added.emit(hal_device.category, hal_device.name);
+      audiooutput_device_added(hal_device.category, hal_device.name);
     }
   }
   else if (hal_device.category == "oss") {
-    audioinput_device_added.emit(hal_device.category, hal_device.name);
-    audiooutput_device_added.emit(hal_device.category, hal_device.name);
+    audioinput_device_added(hal_device.category, hal_device.name);
+    audiooutput_device_added(hal_device.category, hal_device.name);
   }
   else if (hal_device.category == "video4linux") {
       if (hal_device.video_capabilities & 0x01) 
-        videoinput_device_added.emit(hal_device.category, hal_device.name, 0x01);
+        videoinput_device_added(hal_device.category, hal_device.name, 0x01);
       if (hal_device.video_capabilities & 0x02) 
-        videoinput_device_added.emit(hal_device.category, hal_device.name, 0x02);
+        videoinput_device_added(hal_device.category, hal_device.name, 0x02);
   }
 
 }
@@ -187,21 +187,21 @@ void HalManager_dbus::device_removed_cb (const char *device)
     if (iter->category == "alsa") {
   
       if (iter->type == "capture") {
-        audioinput_device_removed.emit(iter->category, iter->name);
+        audioinput_device_removed(iter->category, iter->name);
       }
       else if (iter->type == "playback") {
-        audiooutput_device_removed.emit(iter->category, iter->name);
+        audiooutput_device_removed(iter->category, iter->name);
       }
     }
     else if (iter->category == "oss") {
-      audioinput_device_removed.emit(iter->category, iter->name);
-      audiooutput_device_removed.emit(iter->category, iter->name);
+      audioinput_device_removed(iter->category, iter->name);
+      audiooutput_device_removed(iter->category, iter->name);
     }
     else if (iter->category == "video4linux") {
       if (iter->video_capabilities & 0x01) 
-        videoinput_device_removed.emit(iter->category, iter->name, 0x01);
+        videoinput_device_removed(iter->category, iter->name, 0x01);
       if (iter->video_capabilities & 0x02) 
-        videoinput_device_removed.emit(iter->category, iter->name, 0x02);
+        videoinput_device_removed(iter->category, iter->name, 0x02);
 	
     }
 
@@ -220,7 +220,7 @@ void HalManager_dbus::interface_now_active_cb (const char *interface)
   nm_interfaces.push_back(nm_interface);
 
   PTRACE(4, "HalManager_dbus\tActivated network device " <<  nm_interface.name << "/"<< nm_interface.ip4_address);
-  network_interface_up.emit(nm_interface.name, nm_interface.ip4_address);
+  network_interface_up(nm_interface.name, nm_interface.ip4_address);
 }
 
 void HalManager_dbus::interface_no_longer_active_cb (const char *interface)
@@ -238,7 +238,7 @@ void HalManager_dbus::interface_no_longer_active_cb (const char *interface)
 
   if (found) {
     PTRACE(4, "HalManager_dbus\tDeactivated network interface " << iter->name << "/" << iter->ip4_address);
-    network_interface_down.emit(iter->name, iter->ip4_address);
+    network_interface_down(iter->name, iter->ip4_address);
     nm_interfaces.erase(iter);
   }
 }
diff --git a/lib/engine/components/kab/kab-book.cpp b/lib/engine/components/kab/kab-book.cpp
index ce117dc..429881d 100644
--- a/lib/engine/components/kab/kab-book.cpp
+++ b/lib/engine/components/kab/kab-book.cpp
@@ -39,7 +39,7 @@
 
 #include "kab-book.h"
 
-// include this *after* the rest, or qt will suicide sigc++
+// include this *after* the rest, or qt will suicide boost
 #include <kabc/stdaddressbook.h>
 
 KAB::Book::Book (Ekiga::ContactCore &_core): core(_core)
diff --git a/lib/engine/components/kab/kab-contact.h b/lib/engine/components/kab/kab-contact.h
index f57cfde..dd76e1b 100644
--- a/lib/engine/components/kab/kab-contact.h
+++ b/lib/engine/components/kab/kab-contact.h
@@ -40,7 +40,7 @@
 
 #include "contact-core.h"
 
-// include this *after* the rest, or qt will suicide sigc++
+// include this *after* the rest, or qt will suicide boost
 #include <kabc/addressee.h>
 
 namespace KAB
diff --git a/lib/engine/components/kde/Makefile.am b/lib/engine/components/kde/Makefile.am
index a40f487..83d05f7 100644
--- a/lib/engine/components/kde/Makefile.am
+++ b/lib/engine/components/kde/Makefile.am
@@ -13,4 +13,4 @@ libgmkde_la_SOURCES = \
 
 libgmkde_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
 libgmkde_la_LIBADD = \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(KDE_LIBS)
\ No newline at end of file
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(KDE_LIBS)
\ No newline at end of file
diff --git a/lib/engine/components/ldap/Makefile.am b/lib/engine/components/ldap/Makefile.am
index 054c4b2..aae653b 100644
--- a/lib/engine/components/ldap/Makefile.am
+++ b/lib/engine/components/ldap/Makefile.am
@@ -23,4 +23,4 @@ libgmldap_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
 libgmldap_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
 	$(top_builddir)/lib/engine/addressbook/libgmaddressbook.la \
-	$(LDAP_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(XML_LIBS)
+	$(LDAP_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(XML_LIBS)
diff --git a/lib/engine/components/ldap/ldap-book.cpp b/lib/engine/components/ldap/ldap-book.cpp
index 2bfdf63..ed49ab2 100644
--- a/lib/engine/components/ldap/ldap-book.cpp
+++ b/lib/engine/components/ldap/ldap-book.cpp
@@ -137,7 +137,7 @@ struct RefreshData
 	       const std::string _authcID,
 	       const std::string _password,
 	       const std::string _search_string,
-	       sigc::slot1<void, std::vector<OPENLDAP::Contact *> > _publish_results):
+	       boost::function1<void, std::vector<OPENLDAP::Contact *> > _publish_results):
     core(_core), name(_name), uri(_uri),
     base(_base), scope(_scope), call_attribute(_call_attribute),
     authcID(_authcID), password(_password), search_string(_search_string),
@@ -162,7 +162,7 @@ struct RefreshData
   std::string error_message;
 
   /* callback */
-  sigc::slot1<void, std::vector<OPENLDAP::Contact *> > publish_results;
+  boost::function1<void, std::vector<OPENLDAP::Contact *> > publish_results;
 };
 #endif
 
@@ -332,7 +332,7 @@ OPENLDAP::Book::Book (Ekiga::ServiceCore &_core,
       xmlUnlinkNode (call_attribute_node);
       xmlFreeNode (call_attribute_node);
     }
-    trigger_saving.emit ();
+    trigger_saving ();
   }
   OPENLDAP::BookInfoParse (bookinfo);
 }
@@ -412,12 +412,12 @@ bool
 OPENLDAP::Book::populate_menu (Ekiga::MenuBuilder &builder)
 {
   builder.add_action ("refresh", _("_Refresh"),
-		      sigc::mem_fun (this, &OPENLDAP::Book::refresh));
+		      boost::bind (&OPENLDAP::Book::refresh, this));
   builder.add_separator ();
   builder.add_action ("remove", _("_Remove addressbook"),
-		      sigc::mem_fun (this, &OPENLDAP::Book::remove));
+		      boost::bind (&OPENLDAP::Book::remove, this));
   builder.add_action ("properties", _("Addressbook _properties"),
-		      sigc::mem_fun (this, &OPENLDAP::Book::edit));
+		      boost::bind (&OPENLDAP::Book::edit, this));
 
   return true;
 }
@@ -452,8 +452,8 @@ OPENLDAP::Book::remove ()
   xmlUnlinkNode (node);
   xmlFreeNode (node);
 
-  trigger_saving.emit ();
-  removed.emit ();
+  trigger_saving ();
+  removed ();
 }
 
 xmlNodePtr
@@ -535,7 +535,7 @@ extern "C" {
 
     /* If there are missing items, try to get them all in one dialog */
     if (nprompts) {
-      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)));
+      boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&OPENLDAP::Book::on_sasl_form_submitted, ctx->book, _1, _2)));
       Ekiga::FormBuilder result;
       std::string prompt;
       std::string ctxt = "";
@@ -612,7 +612,7 @@ extern "C" {
 
       /* Save a pointer for storing the form result */
       ctx->book->saslform = &result;
-      ctx->book->questions.emit (request);
+      ctx->book->questions (request);
 
       /* Extract answers from the result form */
       for (i=0, in = (sasl_interact_t *)inter;
@@ -659,13 +659,13 @@ OPENLDAP::Book::refresh_start ()
   int ldap_version = LDAP_VERSION3;
 
   status = std::string (_("Refreshing"));
-  updated.emit ();
+  updated ();
 
   result = ldap_initialize (&ldap_context, bookinfo.uri_host.c_str());
   if (result != LDAP_SUCCESS) {
 
     status = std::string (_("Could not initialize server"));
-    updated.emit ();
+    updated ();
     return;
   }
 
@@ -680,7 +680,7 @@ OPENLDAP::Book::refresh_start ()
     if (result != LDAP_SUCCESS) {
       status = std::string (_("LDAP Error: ")) +
         std::string (ldap_err2string (result));
-      updated.emit ();
+      updated ();
       ldap_unbind_ext (ldap_context, NULL, NULL);
       ldap_context = NULL;
       return;
@@ -725,7 +725,7 @@ OPENLDAP::Book::refresh_start ()
 
     status = std::string (_("LDAP Error: ")) +
       std::string (ldap_err2string (result));
-    updated.emit ();
+    updated ();
 
     ldap_unbind_ext (ldap_context, NULL, NULL);
     ldap_context = NULL;
@@ -733,7 +733,7 @@ OPENLDAP::Book::refresh_start ()
   }
 
   status = std::string (_("Contacted server"));
-  updated.emit ();
+  updated ();
 
   patience = 3;
   refresh_bound ();
@@ -760,19 +760,19 @@ OPENLDAP::Book::refresh_bound ()
 
     if (patience == 3) {
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_bound), 12);
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_bound, this), 12);
     } else if (patience == 2) {
 
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_bound), 21);
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_bound, this), 21);
     } else if (patience == 1) {
 
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_bound), 30);
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_bound, this), 30);
     } else { // patience == 0
 
       status = std::string (_("Could not connect to server"));
-      updated.emit ();
+      updated ();
 
       ldap_unbind_ext (ldap_context, NULL, NULL);
       ldap_context = NULL;
@@ -820,7 +820,7 @@ OPENLDAP::Book::refresh_bound ()
   if (msgid == -1) {
 
     status = std::string (_("Could not search"));
-    updated.emit ();
+    updated ();
 
     ldap_unbind_ext (ldap_context, NULL, NULL);
     ldap_context = NULL;
@@ -828,7 +828,7 @@ OPENLDAP::Book::refresh_bound ()
   } else {
 
     status = std::string (_("Waiting for search results"));
-    updated.emit ();
+    updated ();
   }
 
   patience = 3;
@@ -854,22 +854,22 @@ OPENLDAP::Book::refresh_result ()
     if (patience == 3) {
 
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_result),
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_result, this),
 				   12);
     } else if (patience == 2) {
 
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_result),
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_result, this),
 				   21);
     } else if (patience == 1) {
 
       patience--;
-      Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &OPENLDAP::Book::refresh_result),
+      Ekiga::Runtime::run_in_main (boost::bind (&OPENLDAP::Book::refresh_result, this),
 				   30);
     } else { // patience == 0
 
       status = std::string (_("Could not search"));
-      updated.emit ();
+      updated ();
 
       ldap_unbind_ext (ldap_context, NULL, NULL);
       ldap_context = NULL;
@@ -900,7 +900,7 @@ OPENLDAP::Book::refresh_result ()
   status = c_status;
   g_free (c_status);
 
-  updated.emit ();
+  updated ();
 
   (void)ldap_msgfree (msg_entry);
 
@@ -985,11 +985,11 @@ OPENLDAP::BookForm (boost::shared_ptr<Ekiga::FormRequestSimple> request,
 void
 OPENLDAP::Book::edit ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&OPENLDAP::Book::on_edit_form_submitted, this, _1, _2)));
 
   OPENLDAP::BookForm (request, bookinfo, std::string(_("Edit LDAP directory")));
 
-  questions.emit (request);
+  questions (request);
 }
 
 int
@@ -1095,12 +1095,12 @@ OPENLDAP::Book::on_edit_form_submitted (bool submitted,
 
   std::string errmsg;
   if (OPENLDAP::BookFormInfo (result, bookinfo, errmsg)) {
-    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&OPENLDAP::Book::on_edit_form_submitted, this, _1, _2)));
 
     result.visit (*request);
     request->error (errmsg);
 
-    questions.emit (request);
+    questions (request);
     return;
   }
 
@@ -1111,6 +1111,6 @@ OPENLDAP::Book::on_edit_form_submitted (bool submitted,
   robust_xmlNodeSetContent (node, &authcID_node, "authcID", bookinfo.authcID);
 
   robust_xmlNodeSetContent (node, &password_node, "password", bookinfo.password);
-  updated.emit ();
-  trigger_saving.emit ();
+  updated ();
+  trigger_saving ();
 }
diff --git a/lib/engine/components/ldap/ldap-book.h b/lib/engine/components/ldap/ldap-book.h
index 0e99849..7bc8ffc 100644
--- a/lib/engine/components/ldap/ldap-book.h
+++ b/lib/engine/components/ldap/ldap-book.h
@@ -115,7 +115,7 @@ namespace OPENLDAP
 
     xmlNodePtr get_node ();
 
-    sigc::signal0<void> trigger_saving;
+    boost::signal0<void> trigger_saving;
 
     /* public for access from C */
     void on_sasl_form_submitted (bool, Ekiga::Form &);
diff --git a/lib/engine/components/ldap/ldap-source.cpp b/lib/engine/components/ldap/ldap-source.cpp
index 48e00af..b29d819 100644
--- a/lib/engine/components/ldap/ldap-source.cpp
+++ b/lib/engine/components/ldap/ldap-source.cpp
@@ -119,7 +119,7 @@ OPENLDAP::Source::add ()
 void
 OPENLDAP::Source::common_add (BookPtr book)
 {
-  book->trigger_saving.connect (sigc::mem_fun (this, &OPENLDAP::Source::save));
+  book->trigger_saving.connect (boost::bind (&OPENLDAP::Source::save, this));
   add_book (book);
 }
 
@@ -127,16 +127,16 @@ bool
 OPENLDAP::Source::populate_menu (Ekiga::MenuBuilder &builder)
 {
   builder.add_action ("add", _("Add an LDAP Address Book"),
-		      sigc::mem_fun (this, &OPENLDAP::Source::new_book));
+		      boost::bind (&OPENLDAP::Source::new_book, this));
   builder.add_action ("add", _("Add the Ekiga.net Directory"),
-		      sigc::mem_fun (this, &OPENLDAP::Source::new_ekiga_net_book));
+		      boost::bind (&OPENLDAP::Source::new_ekiga_net_book, this));
   return true;
 }
 
 void
 OPENLDAP::Source::new_book ()
 {
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&OPENLDAP::Source::on_new_book_form_submitted, this, _1, _2)));
 
   bookinfo.name = "";
   bookinfo.uri = "ldap://localhost/dc=net?cn,telephoneNumber?sub?(cn=$)",
@@ -150,7 +150,7 @@ OPENLDAP::Source::new_book ()
   OPENLDAP::BookInfoParse (bookinfo);
   OPENLDAP::BookForm (request, bookinfo, _("Create LDAP directory"));
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
@@ -180,12 +180,12 @@ OPENLDAP::Source::on_new_book_form_submitted (bool submitted,
   std::string errmsg;
 
   if (OPENLDAP::BookFormInfo (result, bookinfo, errmsg)) {
-    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)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&OPENLDAP::Source::on_new_book_form_submitted, this, _1, _2)));
 
     result.visit (*request);
     request->error (errmsg);
 
-    questions.emit (request);
+    questions (request);
     return;
   }
 
diff --git a/lib/engine/components/libnotify/Makefile.am b/lib/engine/components/libnotify/Makefile.am
index 4729649..7b5c7fa 100644
--- a/lib/engine/components/libnotify/Makefile.am
+++ b/lib/engine/components/libnotify/Makefile.am
@@ -16,4 +16,4 @@ libgmlibnotify_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
 	$(top_builddir)/lib/engine/notification/libnotification.la
 
-libgmlibnotify_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(NOTIFY_LIBS)
+libgmlibnotify_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(NOTIFY_LIBS)
diff --git a/lib/engine/components/libnotify/libnotify-main.cpp b/lib/engine/components/libnotify/libnotify-main.cpp
index dab3550..54ea259 100644
--- a/lib/engine/components/libnotify/libnotify-main.cpp
+++ b/lib/engine/components/libnotify/libnotify-main.cpp
@@ -48,7 +48,7 @@
 
 class LibNotify:
   public Ekiga::Service,
-  public sigc::trackable
+  public boost::signals::trackable
 {
 public:
 
@@ -67,7 +67,7 @@ private:
   void on_notification_added (boost::shared_ptr<Ekiga::Notification> notif);
   void on_notification_removed (boost::shared_ptr<Ekiga::Notification> notif);
 
-  typedef std::map<boost::shared_ptr<Ekiga::Notification>, std::pair<sigc::connection, boost::shared_ptr<NotifyNotification> > > container_type;
+  typedef std::map<boost::shared_ptr<Ekiga::Notification>, std::pair<boost::signals::connection, boost::shared_ptr<NotifyNotification> > > container_type;
   container_type live;
 };
 
@@ -113,7 +113,7 @@ libnotify_init (Ekiga::KickStart& kickstart)
 LibNotify::LibNotify (boost::shared_ptr<Ekiga::NotificationCore> core)
 {
   notify_init ("Ekiga");
-  core->notification_added.connect (sigc::mem_fun (this, &LibNotify::on_notification_added));
+  core->notification_added.connect (boost::bind (&LibNotify::on_notification_added, this, _1));
 }
 
 LibNotify::~LibNotify ()
@@ -127,7 +127,7 @@ on_notif_closed (NotifyNotification* /*notif*/,
 {
   Ekiga::Notification* notification = (Ekiga::Notification*)data;
 
-  notification->removed.emit ();
+  notification->removed ();
 }
 
 void
@@ -162,9 +162,9 @@ LibNotify::on_notification_added (boost::shared_ptr<Ekiga::Notification> notific
 
   g_signal_connect (notif, "closed",
 		    G_CALLBACK (on_notif_closed), notification.get ());
-  sigc::connection conn = notification->removed.connect (sigc::bind (sigc::mem_fun (this, &LibNotify::on_notification_removed), notification));
+  boost::signals::connection conn = notification->removed.connect (boost::bind (&LibNotify::on_notification_removed, this, notification));
 
-  live[notification] = std::pair<sigc::connection, boost::shared_ptr<NotifyNotification> > (conn, boost::shared_ptr<NotifyNotification> (notif, g_object_unref));
+  live[notification] = std::pair<boost::signals::connection, boost::shared_ptr<NotifyNotification> > (conn, boost::shared_ptr<NotifyNotification> (notif, g_object_unref));
 
   (void)notify_notification_show (notif, NULL);
 }
diff --git a/lib/engine/components/local-roster/Makefile.am b/lib/engine/components/local-roster/Makefile.am
index 3789e9d..c406b68 100644
--- a/lib/engine/components/local-roster/Makefile.am
+++ b/lib/engine/components/local-roster/Makefile.am
@@ -28,4 +28,4 @@ liblocal_roster_la_LIBADD = \
 	$(top_builddir)/lib/engine/addressbook/libgmaddressbook.la \
 	$(top_builddir)/lib/engine/presence/libgmpresence.la
 
-liblocal_roster_la_LDFLAGS = -export-dynamic -no-undefined $(XML_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+liblocal_roster_la_LDFLAGS = -export-dynamic -no-undefined $(XML_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/components/local-roster/local-cluster.cpp b/lib/engine/components/local-roster/local-cluster.cpp
index 27f67fb..a331847 100644
--- a/lib/engine/components/local-roster/local-cluster.cpp
+++ b/lib/engine/components/local-roster/local-cluster.cpp
@@ -46,8 +46,8 @@ Local::Cluster::Cluster (Ekiga::ServiceCore &_core): core(_core)
 
   heap = HeapPtr (new Heap (core));
 
-  presence_core->presence_received.connect (sigc::mem_fun (this, &Local::Cluster::on_presence_received));
-  presence_core->status_received.connect (sigc::mem_fun (this, &Local::Cluster::on_status_received));
+  presence_core->presence_received.connect (boost::bind (&Local::Cluster::on_presence_received, this, _1, _2));
+  presence_core->status_received.connect (boost::bind (&Local::Cluster::on_status_received, this, _1, _2));
 
   add_heap (heap);
 }
@@ -80,7 +80,7 @@ bool
 Local::Cluster::populate_menu (Ekiga::MenuBuilder& builder)
 {
   builder.add_action ("new", _("New contact"),
-		      sigc::mem_fun (this, &Local::Cluster::on_new_presentity));
+		      boost::bind (&Local::Cluster::on_new_presentity, this));
 
   return true;
 }
diff --git a/lib/engine/components/local-roster/local-cluster.h b/lib/engine/components/local-roster/local-cluster.h
index 45d39da..dc8fa46 100644
--- a/lib/engine/components/local-roster/local-cluster.h
+++ b/lib/engine/components/local-roster/local-cluster.h
@@ -51,7 +51,7 @@ namespace Local
   class Cluster :
     public Ekiga::ClusterImpl<Heap>,
     public Ekiga::Trigger,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
diff --git a/lib/engine/components/local-roster/local-heap.cpp b/lib/engine/components/local-roster/local-heap.cpp
index 0177699..14bcee6 100644
--- a/lib/engine/components/local-roster/local-heap.cpp
+++ b/lib/engine/components/local-roster/local-heap.cpp
@@ -114,7 +114,7 @@ bool
 Local::Heap::populate_menu (Ekiga::MenuBuilder &builder)
 {
   builder.add_action ("new", _("New contact"),
-		      sigc::bind (sigc::mem_fun (this, &Local::Heap::new_presentity), "", ""));
+		      boost::bind (&Local::Heap::new_presentity, this, "", ""));
   return true;
 }
 
@@ -124,7 +124,7 @@ Local::Heap::populate_menu_for_group (const std::string name,
 				      Ekiga::MenuBuilder& builder)
 {
   builder.add_action ("rename_group", _("Rename"),
-		      sigc::bind (sigc::mem_fun (this, &Local::Heap::on_rename_group), name));
+		      boost::bind (&Local::Heap::on_rename_group, this, name));
   return true;
 }
 
@@ -155,7 +155,7 @@ Local::Heap::has_presentity_with_uri (const std::string uri)
 {
   has_presentity_with_uri_helper helper(uri);
 
-  visit_presentities (sigc::mem_fun (helper, &has_presentity_with_uri_helper::test));
+  visit_presentities (boost::bind (&has_presentity_with_uri_helper::test, helper, _1));
 
   return helper.found;
 }
@@ -188,7 +188,7 @@ Local::Heap::existing_groups ()
   {
     existing_groups_helper helper;
 
-    visit_presentities (sigc::mem_fun (helper, &existing_groups_helper::test));
+    visit_presentities (boost::bind (&existing_groups_helper::test, helper, _1));
     result = helper.groups;
   }
 
@@ -225,7 +225,7 @@ Local::Heap::new_presentity (const std::string name,
   if (!has_presentity_with_uri (uri)) {
 
     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)));
+    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Local::Heap::new_presentity_form_submitted, this, _1, _2)));
     std::set<std::string> groups = existing_groups ();
 
     request->title (_("Add to local roster"));
@@ -249,7 +249,7 @@ Local::Heap::new_presentity (const std::string name,
 			   _("Put contact in groups:"),
 			   std::set<std::string>(), groups);
 
-    questions.emit (request);
+    questions (request);
   }
 }
 
@@ -281,7 +281,7 @@ Local::Heap::push_presence (const std::string uri,
 {
   push_presence_helper helper(uri, presence);
 
-  visit_presentities (sigc::mem_fun (helper, &push_presence_helper::test));
+  visit_presentities (boost::bind (&push_presence_helper::test, helper, _1));
 }
 
 struct push_status_helper
@@ -312,7 +312,7 @@ Local::Heap::push_status (const std::string uri,
 {
   push_status_helper helper(uri, status);
 
-  visit_presentities (sigc::mem_fun (helper, &push_status_helper::test));
+  visit_presentities (boost::bind (&push_status_helper::test, helper, _1));
 }
 
 
@@ -358,7 +358,7 @@ Local::Heap::common_add (PresentityPtr presentity)
   presence_core->fetch_presence (presentity->get_uri ());
 
   // Connect the Local::Presentity signals.
-  add_connection (presentity, presentity->trigger_saving.connect (sigc::mem_fun (this, &Local::Heap::save)));
+  add_connection (presentity, presentity->trigger_saving.connect (boost::bind (&Local::Heap::save, this)));
 }
 
 
@@ -404,7 +404,7 @@ Local::Heap::new_presentity_form_submitted (bool submitted,
     save ();
   } else {
 
-    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&Local::Heap::new_presentity_form_submitted, this, _1, _2)));
 
     result.visit (*request);
     if (!presence_core->is_supported_uri (uri))
@@ -412,20 +412,20 @@ Local::Heap::new_presentity_form_submitted (bool submitted,
     else
       request->error (_("You already have a contact with this address!"));
 
-    questions.emit (request);
+    questions (request);
   }
 }
 
 void
 Local::Heap::on_rename_group (std::string 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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Local::Heap::rename_group_form_submitted, this, name, _1, _2)));
 
   request->title (_("Rename group"));
   request->instructions (_("Please edit this group name"));
   request->text ("name", _("Name:"), name);
 
-  questions.emit (request);
+  questions (request);
 }
 
 struct rename_group_form_submitted_helper
@@ -461,7 +461,7 @@ Local::Heap::rename_group_form_submitted (std::string old_name,
   if ( !new_name.empty () && new_name != old_name) {
 
     rename_group_form_submitted_helper helper (old_name, new_name);
-    visit_presentities (sigc::mem_fun (helper, &rename_group_form_submitted_helper::rename_group));
+    visit_presentities (boost::bind (&rename_group_form_submitted_helper::rename_group, helper, _1));
   }
 }
 
diff --git a/lib/engine/components/local-roster/local-presentity.cpp b/lib/engine/components/local-roster/local-presentity.cpp
index ed3ae42..2c4807c 100644
--- a/lib/engine/components/local-roster/local-presentity.cpp
+++ b/lib/engine/components/local-roster/local-presentity.cpp
@@ -185,14 +185,14 @@ void
 Local::Presentity::set_presence (const std::string _presence)
 {
   presence = _presence;
-  updated.emit ();
+  updated ();
 }
 
 void
 Local::Presentity::set_status (const std::string _status)
 {
   status = _status;
-  updated.emit ();
+  updated ();
 }
 
 
@@ -210,9 +210,9 @@ Local::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
     builder.add_separator ();
 
   builder.add_action ("edit", _("_Edit"),
-		      sigc::mem_fun (this, &Local::Presentity::edit_presentity));
+		      boost::bind (&Local::Presentity::edit_presentity, this));
   builder.add_action ("remove", _("_Remove"),
-		      sigc::mem_fun (this, &Local::Presentity::remove));
+		      boost::bind (&Local::Presentity::remove, this));
 
   return true;
 }
@@ -229,7 +229,7 @@ void
 Local::Presentity::edit_presentity ()
 {
   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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Local::Presentity::edit_presentity_form_submitted, this, _1, _2)));
 
   std::string name = get_name ();
   std::string uri = get_uri ();
@@ -246,7 +246,7 @@ Local::Presentity::edit_presentity ()
   request->editable_set ("groups", _("Choose groups:"),
 			 groups, all_groups);
 
-  questions.emit (request);
+  questions (request);
 }
 
 
@@ -344,8 +344,8 @@ Local::Presentity::edit_presentity_form_submitted (bool submitted,
     xmlSetProp (node, BAD_CAST "preferred", BAD_CAST "false");
   }
 
-  updated.emit ();
-  trigger_saving.emit ();
+  updated ();
+  trigger_saving ();
 }
 
 
@@ -406,8 +406,8 @@ Local::Presentity::rename_group (const std::string old_name,
 
   }
 
-  updated.emit ();
-  trigger_saving.emit ();
+  updated ();
+  trigger_saving ();
 }
 
 
@@ -420,8 +420,8 @@ Local::Presentity::remove ()
   xmlUnlinkNode (node);
   xmlFreeNode (node);
 
-  trigger_saving.emit ();
-  removed.emit ();
+  trigger_saving ();
+  removed ();
 }
 
 bool
diff --git a/lib/engine/components/local-roster/local-presentity.h b/lib/engine/components/local-roster/local-presentity.h
index 0bee718..138ed26 100644
--- a/lib/engine/components/local-roster/local-presentity.h
+++ b/lib/engine/components/local-roster/local-presentity.h
@@ -159,7 +159,7 @@ namespace Local
      * This signal makes the Local::Heap know that the XML tree changed
      * and hence should be saved
      */
-    sigc::signal0<void> trigger_saving;
+    boost::signal0<void> trigger_saving;
 
 
   private:
diff --git a/lib/engine/components/local-roster/local-roster-bridge.cpp b/lib/engine/components/local-roster/local-roster-bridge.cpp
index 0add77e..ebd15eb 100644
--- a/lib/engine/components/local-roster/local-roster-bridge.cpp
+++ b/lib/engine/components/local-roster/local-roster-bridge.cpp
@@ -91,8 +91,8 @@ Local::ContactDecorator::populate_menu (Ekiga::ContactPtr contact,
     if (!heap->has_presentity_with_uri (uri)) {
 
       builder.add_action ("add", _("Add to local roster"),
-			  sigc::bind (sigc::mem_fun (heap.get (), &Local::Heap::new_presentity),
-				      contact->get_name (), uri));
+			  boost::bind (&Local::Heap::new_presentity, heap.get (),
+			  contact->get_name (), uri));
       populated = true;
     }
   }
diff --git a/lib/engine/components/loudmouth/Makefile.am b/lib/engine/components/loudmouth/Makefile.am
index 7939e6d..8895884 100644
--- a/lib/engine/components/loudmouth/Makefile.am
+++ b/lib/engine/components/loudmouth/Makefile.am
@@ -30,4 +30,4 @@ libgmloudmouth_la_SOURCES = \
 	$(loudmouth_dir)/loudmouth-dialect.cpp
 
 libgmloudmouth_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
-libgmloudmouth_la_LIBADD = $(BOOST_LDFLAGS) $(SIGC_LIBS) $(XML_LIBS) $(LOUDMOUTH_LIBS)
\ No newline at end of file
+libgmloudmouth_la_LIBADD = $(BOOST_LDFLAGS) $(BOOST_LIBS) $(XML_LIBS) $(LOUDMOUTH_LIBS)
\ No newline at end of file
diff --git a/lib/engine/components/loudmouth/loudmouth-account.cpp b/lib/engine/components/loudmouth/loudmouth-account.cpp
index 8cfec88..01f82fd 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-account.cpp
@@ -159,16 +159,16 @@ LM::Account::enable ()
   xmlFree (server);
 
   xmlSetProp (node, BAD_CAST "startup", BAD_CAST "true");
-  trigger_saving.emit ();
+  trigger_saving ();
 
-  updated.emit ();
+  updated ();
 }
 
 void
 LM::Account::disable ()
 {
   xmlSetProp (node, BAD_CAST "startup", BAD_CAST "false");
-  trigger_saving.emit ();
+  trigger_saving ();
 
   lm_connection_close (connection, NULL);
 }
@@ -203,12 +203,12 @@ LM::Account::on_connection_opened (bool result)
 				(LmResultFunction)on_authenticate_c, this, NULL, NULL);
     xmlFree (password);
     xmlFree (resource);
-    updated.emit ();
+    updated ();
   } else {
 
     /* FIXME: can't we report better? */
     status = _("error connecting");
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -220,7 +220,7 @@ LM::Account::on_disconnected (LmDisconnectReason /*reason*/)
     heap->disconnected ();
     heap.reset ();
     status = _("disconnected");
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -237,13 +237,13 @@ LM::Account::on_authenticate (bool result)
     }
     cluster->add_heap (heap);
     status = _("connected");
-    updated.emit ();
+    updated ();
   } else {
 
     lm_connection_close (connection, NULL);
     // FIXME: can't we report something better?
     status = _("error authenticating loudmouth account");
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -256,7 +256,7 @@ LM::Account::get_node () const
 void
 LM::Account::edit ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&LM::Account::on_edit_form_submitted, this)));
   xmlChar* xml_str = NULL;
 
   request->title (_("Edit account"));
@@ -296,7 +296,7 @@ LM::Account::edit ()
   xmlFree (xml_str);
   request->boolean ("enabled", _("Enable account"), enable_on_startup);
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
@@ -328,7 +328,7 @@ LM::Account::on_edit_form_submitted (bool submitted,
   } else {
 
     xmlSetProp (node, BAD_CAST "startup", BAD_CAST "false");
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -340,8 +340,8 @@ LM::Account::remove ()
   xmlUnlinkNode (node);
   xmlFreeNode (node);
 
-  trigger_saving.emit ();
-  removed.emit ();
+  trigger_saving ();
+  removed ();
 }
 
 bool
@@ -350,19 +350,19 @@ LM::Account::populate_menu (Ekiga::MenuBuilder& builder)
   if (lm_connection_is_open (connection)) {
 
     builder.add_action ("disable", _("_Disable"),
-			sigc::mem_fun (this, &LM::Account::disable));
+			boost::bind (&LM::Account::disable, this));
   } else {
 
     builder.add_action ("enable", _("_Enable"),
-			sigc::mem_fun (this, &LM::Account::enable));
+			boost::bind (&LM::Account::enable, this));
   }
 
   builder.add_separator ();
 
   builder.add_action ("edit", _("Edit"),
-		      sigc::mem_fun (this, &LM::Account::edit));
+		      boost::bind (&LM::Account::edit, this));
   builder.add_action ("remove", _("_Remove"),
-		      sigc::mem_fun (this, &LM::Account::remove));
+		      boost::bind (&LM::Account::remove, this));
 
   return true;
 }
diff --git a/lib/engine/components/loudmouth/loudmouth-account.h b/lib/engine/components/loudmouth/loudmouth-account.h
index 183c757..65af29d 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.h
+++ b/lib/engine/components/loudmouth/loudmouth-account.h
@@ -61,7 +61,7 @@ namespace LM
 
     xmlNodePtr get_node () const;
 
-    sigc::signal0<void> trigger_saving;
+    boost::signal0<void> trigger_saving;
 
     const std::string get_name () const;
 
diff --git a/lib/engine/components/loudmouth/loudmouth-bank.cpp b/lib/engine/components/loudmouth/loudmouth-bank.cpp
index bd2969e..368e116 100644
--- a/lib/engine/components/loudmouth/loudmouth-bank.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-bank.cpp
@@ -91,7 +91,7 @@ LM::Bank::add (xmlNodePtr node)
     save ();
   }
 
-  account->trigger_saving.connect (sigc::mem_fun (this, &LM::Bank::save));
+  account->trigger_saving.connect (boost::bind (&LM::Bank::save, this));
   add_account (account);
 }
 
@@ -116,6 +116,6 @@ bool
 LM::Bank::populate_menu (Ekiga::MenuBuilder& builder)
 {
   builder.add_action ("add", _("_Add a jabber/XMPP account"),
-		      sigc::bind (sigc::mem_fun (this, &LM::Bank::add), (xmlNodePtr)NULL));
+		      boost::bind (boost::bind (&LM::Bank::add, this), (xmlNodePtr)NULL));
   return true;
 }
diff --git a/lib/engine/components/loudmouth/loudmouth-dialect.cpp b/lib/engine/components/loudmouth/loudmouth-dialect.cpp
index 694ff0f..231c80d 100644
--- a/lib/engine/components/loudmouth/loudmouth-dialect.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-dialect.cpp
@@ -76,7 +76,7 @@ LM::Dialect::open_chat (PresentityPtr presentity)
 {
   SimpleChatPtr chat(new SimpleChat (core, presentity));
   add_simple_chat (chat);
-  chat->user_requested.emit ();
+  chat->user_requested ();
 }
 
 bool
diff --git a/lib/engine/components/loudmouth/loudmouth-heap.cpp b/lib/engine/components/loudmouth/loudmouth-heap.cpp
index b6242aa..9c2cc83 100644
--- a/lib/engine/components/loudmouth/loudmouth-heap.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-heap.cpp
@@ -72,7 +72,7 @@ LM::Heap::Heap (boost::shared_ptr<Ekiga::PersonalDetails> details_,
 		LmConnection* connection_):
   details(details_), dialect(dialect_), connection(connection_)
 {
-  details->updated.connect (sigc::mem_fun (this, &LM::Heap::on_personal_details_updated));
+  details->updated.connect (boost::bind (&LM::Heap::on_personal_details_updated, this));
 
   lm_connection_ref (connection);
 
@@ -129,13 +129,13 @@ void
 LM::Heap::set_name (const std::string name_)
 {
   name = name_;
-  updated.emit ();
+  updated ();
 }
 
 bool
 LM::Heap::populate_menu (Ekiga::MenuBuilder& builder)
 {
-  builder.add_action ("new", _("New _Contact"), sigc::mem_fun (this, &LM::Heap::add_item));
+  builder.add_action ("new", _("New _Contact"), boost::bind (&LM::Heap::add_item, this));
   return true;
 }
 
@@ -150,7 +150,7 @@ LM::Heap::populate_menu_for_group (const std::string /*group*/,
 void
 LM::Heap::disconnected ()
 {
-  removed.emit ();
+  removed ();
 }
 
 LmHandlerResult
@@ -194,7 +194,7 @@ LM::Heap::presence_handler (LmMessage* message)
 
   if (type_attr != NULL && strcmp (type_attr, "subscribe") == 0) {
 
-    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&LM::Heap::subscribe_from_form_submitted, this)));
     LmMessageNode* status = lm_message_node_find_child (lm_message_get_node (message), "status");
     gchar* instructions = NULL;
     std::string item_name;
@@ -229,7 +229,7 @@ LM::Heap::presence_handler (LmMessage* message)
 
     request->hidden ("jid", base_jid);
 
-    questions.emit (request);
+    questions (request);
   } else {
 
     if (item) {
@@ -291,7 +291,7 @@ LM::Heap::parse_roster (LmMessageNode* query)
 	const gchar* subscription = lm_message_node_get_attribute (node, "subscription");
 	if (subscription != NULL && strcmp (subscription, "remove") == 0) {
 
-	  (*iter)->removed.emit ();
+	  (*iter)->removed ();
 	} else {
 
 	  (*iter)->update (node);
@@ -301,7 +301,7 @@ LM::Heap::parse_roster (LmMessageNode* query)
     if ( !found) {
 
       PresentityPtr presentity(new Presentity (connection, node));
-      presentity->chat_requested.connect (sigc::bind (sigc::mem_fun (this, &LM::Heap::on_chat_requested), presentity));
+      presentity->chat_requested.connect (boost::bind (boost::bind (&LM::Heap::on_chat_requested, this), presentity));
       add_presentity (presentity);
     }
   }
@@ -310,14 +310,14 @@ LM::Heap::parse_roster (LmMessageNode* query)
 void
 LM::Heap::add_item ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&LM::Heap::add_item_form_submitted, this)));
 
   request->title (_("Add a roster element"));
   request->instructions (_("Please fill in this form to add a new"
 			   "element to the remote roster"));
   request->text ("jid", _("Identifier:"), _("identifier server"));
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
diff --git a/lib/engine/components/loudmouth/loudmouth-heap.h b/lib/engine/components/loudmouth/loudmouth-heap.h
index 2a5a913..5a7488e 100644
--- a/lib/engine/components/loudmouth/loudmouth-heap.h
+++ b/lib/engine/components/loudmouth/loudmouth-heap.h
@@ -44,7 +44,7 @@ namespace LM
 {
   class Heap:
     public Ekiga::HeapImpl<Presentity>,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
diff --git a/lib/engine/components/loudmouth/loudmouth-presentity.cpp b/lib/engine/components/loudmouth/loudmouth-presentity.cpp
index 87f18d0..7e85e45 100644
--- a/lib/engine/components/loudmouth/loudmouth-presentity.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-presentity.cpp
@@ -155,37 +155,37 @@ LM::Presentity::populate_menu (Ekiga::MenuBuilder& builder)
   const gchar* ask = lm_message_node_get_attribute (item, "ask");
 
   builder.add_action ("edit", _("_Edit"),
-		      sigc::mem_fun (this, &LM::Presentity::edit_presentity));
+		      boost::bind (&LM::Presentity::edit_presentity, this));
 
   if (strcmp (subscription, "none") == 0) {
 
-    builder.add_action ("ask", _("Ask him/her to see his/her status"), sigc::mem_fun (this, &LM::Presentity::ask_to));
+    builder.add_action ("ask", _("Ask him/her to see his/her status"), boost::bind (&LM::Presentity::ask_to, this));
   }
   if (strcmp (subscription, "from") == 0) {
 
-    builder.add_action ("revoke", _("Forbid him/her to see my status"), sigc::mem_fun (this, &LM::Presentity::revoke_from));
+    builder.add_action ("revoke", _("Forbid him/her to see my status"), boost::bind (&LM::Presentity::revoke_from, this));
     if (ask == NULL)
-      builder.add_action ("ask", _("Ask him/her to see his/her status"), sigc::mem_fun (this, &LM::Presentity::ask_to));
+      builder.add_action ("ask", _("Ask him/her to see his/her status"), boost::bind (&LM::Presentity::ask_to, this));
     else
       builder.add_ghost ("ask", _("Ask him/her to see his/her status (pending)"));
   }
   if (strcmp (subscription, "to") == 0) {
 
-    builder.add_action ("stop", _("Stop getting his/her status"), sigc::mem_fun (this, &LM::Presentity::stop_to));
+    builder.add_action ("stop", _("Stop getting his/her status"), boost::bind (&LM::Presentity::stop_to, this));
   }
   if (strcmp (subscription, "both") == 0) {
 
-    builder.add_action ("revoke", _("Forbid him/her to see my status"), sigc::mem_fun (this, &LM::Presentity::revoke_from));
-    builder.add_action ("stop", _("Stop getting his/her status"), sigc::mem_fun (this, &LM::Presentity::stop_to));
+    builder.add_action ("revoke", _("Forbid him/her to see my status"), boost::bind (&LM::Presentity::revoke_from, this));
+    builder.add_action ("stop", _("Stop getting his/her status"), boost::bind (&LM::Presentity::stop_to, this));
   }
 
   if ( !has_chat) {
 
-    builder.add_action ("chat", _("Start chat"), chat_requested.make_slot ());
+    builder.add_action ("chat", _("Start chat"), chat_requested);
   }
 
   builder.add_action ("remove", _("_Remove"),
-		      sigc::mem_fun (this, &LM::Presentity::remove_presentity));
+		      boost::bind (&LM::Presentity::remove_presentity, this));
   return true;
 }
 
@@ -207,7 +207,7 @@ LM::Presentity::update (LmMessageNode* item_)
   lm_message_node_unref (item);
   item = item_;
   lm_message_node_ref (item);
-  updated.emit ();
+  updated ();
 }
 
 void
@@ -251,13 +251,13 @@ LM::Presentity::push_presence (const std::string resource,
     infos.erase (resource);
   }
 
-  updated.emit ();
+  updated ();
 }
 
 void
 LM::Presentity::edit_presentity ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&LM::Presentity::edit_presentity_form_submitted, this)));
 
   request->title (_("Edit roster element"));
   request->instructions (_("Please fill in this form to change an existing "
@@ -267,7 +267,7 @@ LM::Presentity::edit_presentity ()
   request->editable_set ("groups", _("Choose groups:"),
 			 get_groups (), get_groups ());
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
diff --git a/lib/engine/components/loudmouth/loudmouth-presentity.h b/lib/engine/components/loudmouth/loudmouth-presentity.h
index d90a54b..e90e289 100644
--- a/lib/engine/components/loudmouth/loudmouth-presentity.h
+++ b/lib/engine/components/loudmouth/loudmouth-presentity.h
@@ -78,7 +78,7 @@ namespace LM
 
     bool has_chat;
 
-    sigc::signal<void> chat_requested;
+    boost::signal<void> chat_requested;
 
   private:
     LmConnection* connection;
diff --git a/lib/engine/components/mlogo-videoinput/Makefile.am b/lib/engine/components/mlogo-videoinput/Makefile.am
index 0a9cbe2..11cbad8 100644
--- a/lib/engine/components/mlogo-videoinput/Makefile.am
+++ b/lib/engine/components/mlogo-videoinput/Makefile.am
@@ -19,4 +19,4 @@ libgmvideoinput_mlogo_la_SOURCES = \
 	$(videoinput_dir)/videoinput-main-mlogo.h \
 	$(videoinput_dir)/videoinput-main-mlogo.cpp 
 
-libgmvideoinput_mlogo_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+libgmvideoinput_mlogo_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/mlogo-videoinput/videoinput-manager-mlogo.cpp b/lib/engine/components/mlogo-videoinput/videoinput-manager-mlogo.cpp
index beb0c69..7ddc0e7 100644
--- a/lib/engine/components/mlogo-videoinput/videoinput-manager-mlogo.cpp
+++ b/lib/engine/components/mlogo-videoinput/videoinput-manager-mlogo.cpp
@@ -106,7 +106,7 @@ bool GMVideoInputManager_mlogo::open (unsigned width, unsigned height, unsigned
   settings.colour = 127;
   settings.contrast = 127;
   settings.modifyable = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoInputManager_mlogo::device_opened_in_main), current_state.device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoInputManager_mlogo::device_opened_in_main, this, current_state.device, settings));
   
   return true;
 }
@@ -116,7 +116,7 @@ void GMVideoInputManager_mlogo::close()
   PTRACE(4, "GMVideoInputManager_mlogo\tClosing Moving Logo");
   free (background_frame);
   current_state.opened  = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoInputManager_mlogo::device_closed_in_main), current_state.device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoInputManager_mlogo::device_closed_in_main, this, current_state.device));
 }
 
 bool GMVideoInputManager_mlogo::get_frame_data (char *data)
@@ -202,11 +202,11 @@ void
 GMVideoInputManager_mlogo::device_opened_in_main (Ekiga::VideoInputDevice device,
 						  Ekiga::VideoInputSettings settings)
 {
-  device_opened.emit (device, settings);
+  device_opened (device, settings);
 }
 
 void
 GMVideoInputManager_mlogo::device_closed_in_main (Ekiga::VideoInputDevice device)
 {
-  device_closed.emit (device);
+  device_closed (device);
 }
diff --git a/lib/engine/components/null-audioinput/Makefile.am b/lib/engine/components/null-audioinput/Makefile.am
index 87c7f1e..d345a9f 100644
--- a/lib/engine/components/null-audioinput/Makefile.am
+++ b/lib/engine/components/null-audioinput/Makefile.am
@@ -18,4 +18,4 @@ libgmaudioinput_null_la_SOURCES = \
 	$(audioinput_dir)/audioinput-main-null.h \
 	$(audioinput_dir)/audioinput-main-null.cpp 
 
-libgmaudioinput_null_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+libgmaudioinput_null_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/null-audioinput/audioinput-manager-null.cpp b/lib/engine/components/null-audioinput/audioinput-manager-null.cpp
index c7e439d..d1709e0 100644
--- a/lib/engine/components/null-audioinput/audioinput-manager-null.cpp
+++ b/lib/engine/components/null-audioinput/audioinput-manager-null.cpp
@@ -86,7 +86,7 @@ bool GMAudioInputManager_null::open (unsigned channels, unsigned samplerate, uns
   Ekiga::AudioInputSettings settings;
   settings.volume = 0;
   settings.modifyable = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioInputManager_null::device_opened_in_main), current_state.device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioInputManager_null::device_opened_in_main, this, current_state.device, settings));
 
   return true;
 }
@@ -94,7 +94,7 @@ bool GMAudioInputManager_null::open (unsigned channels, unsigned samplerate, uns
 void GMAudioInputManager_null::close()
 {
   current_state.opened = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioInputManager_null::device_closed_in_main), current_state.device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioInputManager_null::device_closed_in_main, this, current_state.device));
 }
 
 
@@ -124,11 +124,11 @@ void
 GMAudioInputManager_null::device_opened_in_main (Ekiga::AudioInputDevice device,
 						 Ekiga::AudioInputSettings settings)
 {
-  device_opened.emit (device, settings);
+  device_opened (device, settings);
 }
 
 void
 GMAudioInputManager_null::device_closed_in_main (Ekiga::AudioInputDevice device)
 {
-  device_closed.emit (device);
+  device_closed (device);
 }
diff --git a/lib/engine/components/null-audiooutput/Makefile.am b/lib/engine/components/null-audiooutput/Makefile.am
index 5bd9486..27e46b5 100644
--- a/lib/engine/components/null-audiooutput/Makefile.am
+++ b/lib/engine/components/null-audiooutput/Makefile.am
@@ -17,4 +17,4 @@ libgmaudiooutput_null_la_SOURCES = \
 	$(audiooutput_dir)/audiooutput-main-null.h \
 	$(audiooutput_dir)/audiooutput-main-null.cpp 
 
-libgmaudiooutput_null_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+libgmaudiooutput_null_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/null-audiooutput/audiooutput-manager-null.cpp b/lib/engine/components/null-audiooutput/audiooutput-manager-null.cpp
index 5334fb9..01bcc5e 100644
--- a/lib/engine/components/null-audiooutput/audiooutput-manager-null.cpp
+++ b/lib/engine/components/null-audiooutput/audiooutput-manager-null.cpp
@@ -87,7 +87,7 @@ bool GMAudioOutputManager_null::open (Ekiga::AudioOutputPS ps, unsigned channels
   Ekiga::AudioOutputSettings settings;
   settings.volume = 0;
   settings.modifyable = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_null::device_opened_in_main), ps, current_state[ps].device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_null::device_opened_in_main, this, ps, current_state[ps].device, settings));
 
   return true;
 }
@@ -95,7 +95,7 @@ bool GMAudioOutputManager_null::open (Ekiga::AudioOutputPS ps, unsigned channels
 void GMAudioOutputManager_null::close(Ekiga::AudioOutputPS ps)
 {
   current_state[ps].opened = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_null::device_closed_in_main), ps, current_state[ps].device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_null::device_closed_in_main, this, ps, current_state[ps].device));
 }
 
 
@@ -125,12 +125,12 @@ GMAudioOutputManager_null::device_opened_in_main (Ekiga::AudioOutputPS ps,
 						  Ekiga::AudioOutputDevice device,
 						  Ekiga::AudioOutputSettings settings)
 {
-  device_opened.emit (ps, device, settings);
+  device_opened (ps, device, settings);
 }
 
 void
 GMAudioOutputManager_null::device_closed_in_main (Ekiga::AudioOutputPS ps,
 						  Ekiga::AudioOutputDevice device)
 {
-  device_closed.emit (ps, device);
+  device_closed (ps, device);
 }
diff --git a/lib/engine/components/opal/Makefile.am b/lib/engine/components/opal/Makefile.am
index 454faee..157ef92 100644
--- a/lib/engine/components/opal/Makefile.am
+++ b/lib/engine/components/opal/Makefile.am
@@ -62,4 +62,4 @@ libgmopal_la_SOURCES += \
 	$(opal_dir)/sip-endpoint.cpp
 endif
 
-libgmopal_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS)
+libgmopal_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/opal/h323-endpoint.cpp b/lib/engine/components/opal/h323-endpoint.cpp
index a256b5f..47d2fc2 100644
--- a/lib/engine/components/opal/h323-endpoint.cpp
+++ b/lib/engine/components/opal/h323-endpoint.cpp
@@ -129,10 +129,10 @@ Opal::H323::EndPoint::menu_builder_add_actions (const std::string & /*fullname*/
 
     if (0 == GetConnectionCount ())
       builder.add_action ("call", _("Call"),
-                          sigc::bind (sigc::mem_fun (this, &Opal::H323::EndPoint::on_dial), uri));
+                          boost::bind (&Opal::H323::EndPoint::on_dial, this, uri));
     else
       builder.add_action ("transfer", _("Transfer"),
-                          sigc::bind (sigc::mem_fun (this, &Opal::H323::EndPoint::on_transfer), uri));
+                          boost::bind (&Opal::H323::EndPoint::on_transfer, this, uri));
     populated = true;
   }
 
@@ -331,17 +331,11 @@ Opal::H323::EndPoint::Register (const Opal::Account& account)
         info = _("Failed");
 
       // Signal
-      Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::H323::EndPoint::registration_event_in_main),
-                                               account,
-                                               Account::RegistrationFailed,
-                                               info));
+      Ekiga::Runtime::run_in_main (boost::bind (&Opal::H323::EndPoint::registration_event_in_main, this, boost::cref (account), Account::RegistrationFailed, info));
     }
     else {
 
-      Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::H323::EndPoint::registration_event_in_main),
-                                               account,
-                                               Account::Registered,
-                                               std::string ()));
+      Ekiga::Runtime::run_in_main (boost::bind (&Opal::H323::EndPoint::registration_event_in_main, this, boost::cref (account), Account::Registered, std::string ()));
     }
   }
   else if (unregister && IsRegisteredWithGatekeeper (account.get_host ())) {
@@ -351,10 +345,7 @@ Opal::H323::EndPoint::Register (const Opal::Account& account)
        RemoveAliasName (account.get_username ());
 
     // Signal 
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::H323::EndPoint::registration_event_in_main),
-    account,
-    Ekiga::Account::Unregistered,
-    std::string ()));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::H323::EndPoint::registration_event_in_main, this, boost::cref (account), Ekiga::Account::Unregistered, std::string ()));
      */
   }
 }
@@ -452,7 +443,7 @@ Opal::H323::EndPoint::on_transfer (std::string uri)
 }
 
 void
-Opal::H323::EndPoint::registration_event_in_main (Opal::Account& account,
+Opal::H323::EndPoint::registration_event_in_main (const Opal::Account& account,
 						  Opal::Account::RegistrationState state,
 						  const std::string msg)
 {
diff --git a/lib/engine/components/opal/h323-endpoint.h b/lib/engine/components/opal/h323-endpoint.h
index ae3a660..e260def 100644
--- a/lib/engine/components/opal/h323-endpoint.h
+++ b/lib/engine/components/opal/h323-endpoint.h
@@ -131,7 +131,7 @@ namespace Opal {
 
       void on_transfer (std::string uri);
 
-      void registration_event_in_main (Opal::Account& account,
+      void registration_event_in_main (const Opal::Account& account,
 				       Account::RegistrationState state,
 				       const std::string msg);
 
diff --git a/lib/engine/components/opal/opal-account.cpp b/lib/engine/components/opal/opal-account.cpp
index 439b4fa..a9bc27e 100644
--- a/lib/engine/components/opal/opal-account.cpp
+++ b/lib/engine/components/opal/opal-account.cpp
@@ -283,8 +283,8 @@ void Opal::Account::enable ()
   boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->subscribe (*this);
 
-  updated.emit ();
-  trigger_saving.emit ();
+  updated ();
+  trigger_saving ();
 }
 
 
@@ -295,8 +295,8 @@ void Opal::Account::disable ()
   boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->unsubscribe (*this);
 
-  updated.emit ();
-  trigger_saving.emit ();
+  updated ();
+  trigger_saving ();
 }
 
 
@@ -326,9 +326,9 @@ void Opal::Account::remove ()
   boost::shared_ptr<Sip::EndPoint> endpoint = core.get<Sip::EndPoint> ("opal-sip-endpoint");
   endpoint->unsubscribe (*this);
 
-  trigger_saving.emit ();
+  trigger_saving ();
 
-  removed.emit ();
+  removed ();
 }
 
 
@@ -336,17 +336,17 @@ bool Opal::Account::populate_menu (Ekiga::MenuBuilder &builder)
 {
   if (enabled)
     builder.add_action ("disable", _("_Disable"),
-                        sigc::mem_fun (this, &Opal::Account::disable));
+                        boost::bind (&Opal::Account::disable, this));
   else
     builder.add_action ("enable", _("_Enable"),
-                        sigc::mem_fun (this, &Opal::Account::enable));
+                        boost::bind (&Opal::Account::enable, this));
 
   builder.add_separator ();
 
   builder.add_action ("edit", _("_Edit"),
-		      sigc::mem_fun (this, &Opal::Account::edit));
+		      boost::bind (&Opal::Account::edit, this));
   builder.add_action ("remove", _("_Remove"),
-		      sigc::mem_fun (this, &Opal::Account::remove));
+		      boost::bind (&Opal::Account::remove, this));
 
   if (type == DiamondCard) {
 
@@ -360,17 +360,17 @@ bool Opal::Account::populate_menu (Ekiga::MenuBuilder &builder)
     url << str.str () << "&act=rch";
     builder.add_action ("recharge",
 			_("Recharge the account"),
-                        sigc::bind (sigc::mem_fun (this, &Opal::Account::on_consult), url.str ()));
+                        boost::bind (&Opal::Account::on_consult, this, url.str ()));
     url.str ("");
     url << str.str () << "&act=bh";
     builder.add_action ("balance",
                         _("Consult the balance history"),
-                        sigc::bind (sigc::mem_fun (this, &Opal::Account::on_consult), url.str ()));
+                        boost::bind (&Opal::Account::on_consult, this, url.str ()));
     url.str ("");
     url << str.str () << "&act=ch";
     builder.add_action ("history",
                         _("Consult the call history"),
-                        sigc::bind (sigc::mem_fun (this, &Opal::Account::on_consult), url.str ()));
+                        boost::bind (&Opal::Account::on_consult, this, url.str ()));
   }
 
   return true;
@@ -379,7 +379,7 @@ bool Opal::Account::populate_menu (Ekiga::MenuBuilder &builder)
 
 void Opal::Account::edit ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&Opal::Account::on_edit_form_submitted, this, _1, _2)));
   std::stringstream str;
 
   str << get_timeout ();
@@ -403,7 +403,7 @@ void Opal::Account::edit ()
   request->text ("timeout", _("Timeout:"), str.str ());
   request->boolean ("enabled", _("Enable Account"), enabled);
 
-  questions.emit (request);
+  questions (request);
 }
 
 
@@ -437,11 +437,11 @@ void Opal::Account::on_edit_form_submitted (bool submitted,
 
   if (!error.empty ()) {
 
-    boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&Opal::Account::on_edit_form_submitted, this, _1, _2)));
     result.visit (*request);
     request->error (error);
 
-    questions.emit (request);
+    questions (request);
   }
   else {
 
@@ -455,8 +455,8 @@ void Opal::Account::on_edit_form_submitted (bool submitted,
     enabled = new_enabled;
     enable ();
 
-    updated.emit ();
-    trigger_saving.emit ();
+    updated ();
+    trigger_saving ();
   }
 }
 
@@ -469,7 +469,7 @@ Opal::Account::on_consult (const std::string url)
 
 void
 Opal::Account::handle_registration_event (RegistrationState state_,
-					  const std::string info)
+					  const std::string info) const
 {
   switch (state_) {
 
@@ -485,14 +485,14 @@ Opal::Account::handle_registration_event (RegistrationState state_,
 	presence_core->publish (personal_details);
       }
       state = state_;
-      updated.emit ();
+      updated ();
     } 
     break;
 
   case Unregistered:
 
     status = _("Unregistered");
-    updated.emit ();
+    updated ();
     break;
 
   case UnregistrationFailed:
@@ -500,7 +500,7 @@ Opal::Account::handle_registration_event (RegistrationState state_,
     status = _("Could not unregister");
     if (!info.empty ())
       status = status + " (" + info + ")";
-    updated.emit ();
+    updated ();
     break;
 
   case RegistrationFailed:
@@ -513,14 +513,14 @@ Opal::Account::handle_registration_event (RegistrationState state_,
       status = _("Could not register");
       if (!info.empty ())
         status = status + " (" + info + ")";
-      updated.emit ();
+      updated ();
     }
     break;
 
   case Processing:
 
     status = _("Processing...");
-    updated.emit ();
+    updated ();
   default:
     break;
   }
@@ -541,7 +541,7 @@ Opal::Account::handle_message_waiting_information (const std::string info)
     new_messages >> message_waiting_number;
     if (message_waiting_number > 0)
       audiooutput_core->play_event ("new_voicemail_sound");
-    updated.emit ();
+    updated ();
   }
 }
 
diff --git a/lib/engine/components/opal/opal-account.h b/lib/engine/components/opal/opal-account.h
index ba1d410..30175b7 100644
--- a/lib/engine/components/opal/opal-account.h
+++ b/lib/engine/components/opal/opal-account.h
@@ -140,13 +140,15 @@ public:
 
     const std::string as_string () const;
 
-    sigc::signal0<void> trigger_saving;
+    boost::signal0<void> trigger_saving;
 
     /* This method is public to be called by an opal endpoint, which will push
      * this Opal::Account's new registration state
+     * Notice : it's very wrong to make that a const method, but Opal seems to
+     * want its Register method to take a const account...
      */
     void handle_registration_event (RegistrationState state_,
-				    const std::string info);
+				    const std::string info) const;
 
     /* This method is public to be called by an opal endpoint, which will push
      * this Opal::Account's message waiting information
@@ -159,14 +161,14 @@ private:
 				 Ekiga::Form &result);
     void on_consult (const std::string url);
 
-    RegistrationState state;
+    mutable RegistrationState state;
     bool dead;
     bool enabled;
-    bool limited;
+    mutable bool limited;
     unsigned timeout;
     std::string aid;
     std::string name;
-    std::string status;
+    mutable std::string status;
     int message_waiting_number;
     std::string protocol_name;
     std::string host;
diff --git a/lib/engine/components/opal/opal-bank.cpp b/lib/engine/components/opal/opal-bank.cpp
index 0f53a2c..6d1d673 100644
--- a/lib/engine/components/opal/opal-bank.cpp
+++ b/lib/engine/components/opal/opal-bank.cpp
@@ -59,7 +59,7 @@ Opal::Bank::Bank (Ekiga::ServiceCore &_core): core(_core)
     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)));
+    Ekiga::BankImpl<Account>::add_connection (account, account->trigger_saving.connect (boost::bind (&Opal::Bank::save, this)));
     accounts_iter = g_slist_next (accounts_iter);
   }
 
@@ -72,13 +72,13 @@ bool
 Opal::Bank::populate_menu (Ekiga::MenuBuilder & builder)
 {
   builder.add_action ("add", _("_Add an Ekiga.net Account"),
-		      sigc::bind (sigc::mem_fun (this, &Opal::Bank::new_account), Opal::Account::Ekiga, "", ""));
+		      boost::bind (&Opal::Bank::new_account, this, Opal::Account::Ekiga, "", ""));
   builder.add_action ("add", _("_Add an Ekiga Call Out Account"),
-		      sigc::bind (sigc::mem_fun (this, &Opal::Bank::new_account), Opal::Account::DiamondCard, "", ""));
+		      boost::bind (&Opal::Bank::new_account, this, Opal::Account::DiamondCard, "", ""));
   builder.add_action ("add", _("_Add a SIP Account"),
-		      sigc::bind (sigc::mem_fun (this, &Opal::Bank::new_account), Opal::Account::SIP, "", ""));
+		      boost::bind (&Opal::Bank::new_account, this, Opal::Account::SIP, "", ""));
   builder.add_action ("add", _("_Add an H.323 Account"),
-		      sigc::bind (sigc::mem_fun (this, &Opal::Bank::new_account), Opal::Account::H323, "", ""));
+		      boost::bind (&Opal::Bank::new_account, this, Opal::Account::H323, "", ""));
 
   return true;
 }
@@ -89,7 +89,7 @@ Opal::Bank::new_account (Account::Type acc_type,
 			 std::string username,
 			 std::string password)
 {
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Opal::Bank::on_new_account_form_submitted, this, _1, _2, acc_type)));
 
   request->title (_("Edit account"));
   request->instructions (_("Please update the following fields."));
@@ -141,7 +141,7 @@ Opal::Bank::new_account (Account::Type acc_type,
   if (!username.empty () && !password.empty ())
     request->submit (*request);
   else
-    questions.emit (request);
+    questions (request);
 }
 
 
@@ -152,7 +152,7 @@ void Opal::Bank::on_new_account_form_submitted (bool submitted,
   if (!submitted)
     return;
 
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Opal::Bank::on_new_account_form_submitted, this, _1, _2, acc_type)));
 
   std::string error;
   std::string new_name = (acc_type == Opal::Account::SIP
@@ -181,7 +181,7 @@ void Opal::Bank::on_new_account_form_submitted (bool submitted,
   if (!error.empty ()) {
     request->error (error);
 
-    questions.emit (request);
+    questions (request);
   }
   else {
 
@@ -206,7 +206,7 @@ void Opal::Bank::add (Account::Type acc_type,
 						     password, enabled,
 						     timeout));
   add_account (account);
-  Ekiga::BankImpl<Account>::add_connection (account, account->trigger_saving.connect (sigc::mem_fun (this, &Opal::Bank::save)));
+  Ekiga::BankImpl<Account>::add_connection (account, account->trigger_saving.connect (boost::bind (&Opal::Bank::save, this)));
 }
 
 void
diff --git a/lib/engine/components/opal/opal-call-manager.cpp b/lib/engine/components/opal/opal-call-manager.cpp
index 8e41297..77da4ea 100644
--- a/lib/engine/components/opal/opal-call-manager.cpp
+++ b/lib/engine/components/opal/opal-call-manager.cpp
@@ -491,9 +491,9 @@ void CallManager::set_stun_enabled (bool enabled)
     // Ready
     new StunDetector (stun_server, *this, queue);
     patience = 20;
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &CallManager::HandleSTUNResult), 1);
+    Ekiga::Runtime::run_in_main (boost::bind (&CallManager::HandleSTUNResult, this), 1);
   } else
-    ready.emit ();
+    ready ();
 }
 
 
@@ -646,8 +646,7 @@ OpalCall *CallManager::CreateCall (void *uri)
   else
     call = new Opal::Call (*this, core, "");
 
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun(this, &CallManager::create_call_in_main),
-					   call));
+  Ekiga::Runtime::run_in_main (boost::bind (&CallManager::create_call_in_main, this, call));
 
   return call;
 }
@@ -655,7 +654,7 @@ OpalCall *CallManager::CreateCall (void *uri)
 void
 CallManager::emit_removed_in_main (Ekiga::Call* call)
 {
-  call->removed.emit ();
+  call->removed ();
 }
 
 void
@@ -663,7 +662,7 @@ CallManager::DestroyCall (OpalCall *_call)
 {
   Ekiga::Call *call = dynamic_cast<Ekiga::Call *> (_call);
 
-  Ekiga::Runtime::run_in_main(sigc::bind (sigc::mem_fun (this, &CallManager::emit_removed_in_main), call));
+  Ekiga::Runtime::run_in_main(boost::bind (&CallManager::emit_removed_in_main, this, call));
 }
 
 
@@ -745,7 +744,7 @@ CallManager::HandleSTUNResult ()
 	   iter != end ();
 	   ++iter)
 	(*iter)->set_listen_port ((*iter)->get_listen_interface ().port);
-      ready.emit ();
+      ready ();
     }
   } else if (patience == 0) {
 
@@ -758,12 +757,11 @@ CallManager::HandleSTUNResult ()
 		       " still use it, but you need to configure your network settings manually.\n\n"
 		       "Please see http://wiki.ekiga.org/index.php/Enable_port_forwarding_manually for"
 		       " instructions"));
-    ready.emit ();
+    ready ();
   } else if (!got_answer) {
 
     patience--;
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &CallManager::HandleSTUNResult),
-				 1);
+    Ekiga::Runtime::run_in_main (boost::bind (&CallManager::HandleSTUNResult, this), 1);
 
   }
 }
@@ -774,10 +772,9 @@ CallManager::ReportSTUNError (const std::string error)
   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)) {
+  if ( !call_core->errors (error)) {
 
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &CallManager::ReportSTUNError),
-					     error),
+    Ekiga::Runtime::run_in_main (boost::bind (&CallManager::ReportSTUNError, this, error),
 				 10);
   }
 }
diff --git a/lib/engine/components/opal/opal-call-manager.h b/lib/engine/components/opal/opal-call-manager.h
index fe2751e..97ad1a6 100644
--- a/lib/engine/components/opal/opal-call-manager.h
+++ b/lib/engine/components/opal/opal-call-manager.h
@@ -58,7 +58,8 @@
 #include "call.h"
 #include "opal-call.h"
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <string>
 
 
diff --git a/lib/engine/components/opal/opal-call.cpp b/lib/engine/components/opal/opal-call.cpp
index 7c5a55e..df4004e 100644
--- a/lib/engine/components/opal/opal-call.cpp
+++ b/lib/engine/components/opal/opal-call.cpp
@@ -187,9 +187,9 @@ Opal::Call::toggle_stream_pause (StreamType type)
       stream->SetPaused (!paused);
 
       if (paused)
-	Ekiga::Runtime::run_in_main (sigc::bind (stream_resumed, stream_name, type));
+	Ekiga::Runtime::run_in_main (boost::bind (boost::ref (stream_resumed), stream_name, type));
       else
-	Ekiga::Runtime::run_in_main (sigc::bind (stream_paused, stream_name, type));
+	Ekiga::Runtime::run_in_main (boost::bind (boost::ref (stream_paused), stream_name, type));
     }
   }
 }
@@ -337,7 +337,7 @@ Opal::Call::OnEstablished (OpalConnection & connection)
   if (!PIsDescendant(&connection, OpalPCSSConnection)) {
 
     parse_info (connection);
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_established_in_main));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_established_in_main, this));
   }
 
   if (PIsDescendant(&connection, OpalRTPConnection)) {
@@ -395,7 +395,7 @@ Opal::Call::OnCleared ()
       && !is_outgoing ()
       && GetCallEndReason () != OpalConnection::EndedByAnswerDenied) {
 
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_missed_in_main));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_missed_in_main, this));
   }
   else {
 
@@ -476,7 +476,7 @@ Opal::Call::OnCleared ()
       reason = _("Call completed");
     }
 
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Call::emit_cleared_in_main), reason));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_cleared_in_main, this, reason));
   }
 }
 
@@ -499,11 +499,11 @@ Opal::Call::OnSetUp (OpalConnection & connection)
   outgoing = !IsNetworkOriginated ();
   parse_info (connection);
 
-  Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_setup_in_main));
+  Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_setup_in_main, this));
   call_setup = true;
 
-  cleared.connect (sigc::mem_fun (this, &Opal::Call::on_cleared_call));
-  missed.connect (sigc::mem_fun (this, &Opal::Call::on_missed_call));
+  cleared.connect (boost::bind (&Opal::Call::on_cleared_call, this, _1));
+  missed.connect (boost::bind (&Opal::Call::on_missed_call, this));
 
   new CallSetup (*this, connection);
 
@@ -515,7 +515,7 @@ PBoolean
 Opal::Call::OnAlerting (OpalConnection & connection)
 {
   if (!PIsDescendant(&connection, OpalPCSSConnection))
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_ringing_in_main));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_ringing_in_main, this));
 
   return OpalCall::OnAlerting (connection);
 }
@@ -527,9 +527,9 @@ Opal::Call::OnHold (OpalConnection & /*connection*/,
                     bool on_hold)
 {
   if (on_hold)
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_held_in_main));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_held_in_main, this));
   else
-    Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &Opal::Call::emit_retrieved_in_main));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Call::emit_retrieved_in_main, this));
 }
 
 
@@ -544,7 +544,7 @@ Opal::Call::OnOpenMediaStream (OpalMediaStream & stream)
   std::transform (stream_name.begin (), stream_name.end (), stream_name.begin (), (int (*) (int)) toupper);
   is_transmitting = !stream.IsSource ();
 
-  Ekiga::Runtime::run_in_main (sigc::bind (stream_opened, stream_name, type, is_transmitting));
+  Ekiga::Runtime::run_in_main (boost::bind (boost::ref (stream_opened), stream_name, type, is_transmitting));
 }
 
 
@@ -559,7 +559,7 @@ Opal::Call::OnClosedMediaStream (OpalMediaStream & stream)
   std::transform (stream_name.begin (), stream_name.end (), stream_name.begin (), (int (*) (int)) toupper);
   is_transmitting = !stream.IsSource ();
 
-  Ekiga::Runtime::run_in_main (sigc::bind (stream_closed, stream_name, type, is_transmitting));
+  Ekiga::Runtime::run_in_main (boost::bind (boost::ref (stream_closed), stream_name, type, is_transmitting));
 }
 
 
@@ -663,41 +663,41 @@ Opal::Call::on_missed_call ()
 void
 Opal::Call::emit_established_in_main ()
 {
-  established.emit ();
+  established ();
 }
 
 void
 Opal::Call::emit_missed_in_main ()
 {
-  missed.emit ();
+  missed ();
 }
 
 void
 Opal::Call::emit_cleared_in_main (const std::string reason)
 {
-  cleared.emit (reason);
+  cleared (reason);
 }
 
 void
 Opal::Call::emit_setup_in_main ()
 {
-  setup.emit ();
+  setup ();
 }
 
 void
 Opal::Call::emit_ringing_in_main ()
 {
-  ringing.emit ();
+  ringing ();
 }
 
 void
 Opal::Call::emit_held_in_main ()
 {
-  held.emit ();
+  held ();
 }
 
 void
 Opal::Call::emit_retrieved_in_main ()
 {
-  retrieved.emit ();
+  retrieved ();
 }
diff --git a/lib/engine/components/opal/opal-call.h b/lib/engine/components/opal/opal-call.h
index 352ac60..5a19599 100644
--- a/lib/engine/components/opal/opal-call.h
+++ b/lib/engine/components/opal/opal-call.h
@@ -52,7 +52,7 @@ namespace Opal {
   class Call
     : public OpalCall,
       public Ekiga::Call,
-      public sigc::trackable
+      public boost::signals::trackable
   {
 
 public:
diff --git a/lib/engine/components/opal/opal-gmconf-bridge.cpp b/lib/engine/components/opal/opal-gmconf-bridge.cpp
index b241b0f..0d2dcc2 100644
--- a/lib/engine/components/opal/opal-gmconf-bridge.cpp
+++ b/lib/engine/components/opal/opal-gmconf-bridge.cpp
@@ -35,7 +35,8 @@
  */
 
 #include <iostream>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "config.h"
 
@@ -72,7 +73,7 @@ ConfBridge::ConfBridge (Ekiga::Service & _service)
  : Ekiga::ConfBridge (_service)
 {
   Ekiga::ConfKeys keys;
-  property_changed.connect (sigc::mem_fun (this, &ConfBridge::on_property_changed));
+  property_changed.connect (boost::bind (&ConfBridge::on_property_changed, this, _1, _2));
 
   keys.push_back (PORTS_KEY "udp_port_range");
   keys.push_back (PORTS_KEY "tcp_port_range");
diff --git a/lib/engine/components/opal/opal-main.cpp b/lib/engine/components/opal/opal-main.cpp
index 87be8c7..37ffe4d 100644
--- a/lib/engine/components/opal/opal-main.cpp
+++ b/lib/engine/components/opal/opal-main.cpp
@@ -127,7 +127,7 @@ struct OPALSpark: public Ekiga::Spark
 
       account_core->add_bank (bank);
       core.add (bank);
-      call_manager->ready.connect (sigc::mem_fun (&*bank, &Opal::Bank::call_manager_ready));
+      call_manager->ready.connect (boost::bind (&Opal::Bank::call_manager_ready, &*bank));
 
 #ifdef HAVE_SIP
       unsigned sip_port = gm_conf_get_int (SIP_KEY "listen_port");
@@ -155,7 +155,7 @@ struct OPALSpark: public Ekiga::Spark
 
       new ConfBridge (*call_manager); // FIXME: isn't that leaked!?
 
-      presence_core->add_supported_uri (sigc::ptr_fun (is_supported_address)); //FIXME
+      presence_core->add_supported_uri (&is_supported_address); //FIXME
 
       OpalLinkerHacks::loadOpalVideoInput = 1;
       OpalLinkerHacks::loadOpalVideoOutput = 1;
@@ -182,3 +182,13 @@ opal_init (Ekiga::KickStart& kickstart)
   boost::shared_ptr<Ekiga::Spark> spark(new OPALSpark);
   kickstart.add_spark (spark);
 }
+
+
+// FIXME: I have no clue why this is needed only for the opal code!
+#ifdef BOOST_NO_EXCEPTIONS
+
+void
+boost::throw_exception (const std::exception&)
+{
+}
+#endif
diff --git a/lib/engine/components/opal/sip-chat-simple.cpp b/lib/engine/components/opal/sip-chat-simple.cpp
index 695fb20..092b6a0 100644
--- a/lib/engine/components/opal/sip-chat-simple.cpp
+++ b/lib/engine/components/opal/sip-chat-simple.cpp
@@ -42,7 +42,7 @@
 SIP::SimpleChat::SimpleChat (Ekiga::ServiceCore& core_,
 			     std::string name,
 			     std::string uri_,
-			     sigc::slot1<bool, std::string> sender_)
+			     boost::function1<bool, std::string> sender_)
   : core(core_), sender(sender_), uri(uri_)
 {
   presentity = boost::shared_ptr<Ekiga::URIPresentity> (new Ekiga::URIPresentity (core, name, uri,
@@ -51,7 +51,7 @@ SIP::SimpleChat::SimpleChat (Ekiga::ServiceCore& core_,
 
 SIP::SimpleChat::~SimpleChat ()
 {
-  presentity->removed.emit ();
+  presentity->removed ();
 }
 
 const std::string
@@ -78,7 +78,7 @@ SIP::SimpleChat::disconnect (boost::shared_ptr<Ekiga::ChatObserver> observer)
   observers.remove (observer);
 
   if (observers.empty ())
-    removed.emit ();
+    removed ();
 }
 
 bool
diff --git a/lib/engine/components/opal/sip-chat-simple.h b/lib/engine/components/opal/sip-chat-simple.h
index 490869d..fd2f110 100644
--- a/lib/engine/components/opal/sip-chat-simple.h
+++ b/lib/engine/components/opal/sip-chat-simple.h
@@ -49,7 +49,7 @@ namespace SIP
     SimpleChat (Ekiga::ServiceCore& core,
 		std::string name,
 		std::string uri,
-		sigc::slot1<bool, std::string> sender_);
+		boost::function1<bool, std::string> sender_);
 
     ~SimpleChat ();
 
@@ -74,7 +74,7 @@ namespace SIP
   private:
 
     Ekiga::ServiceCore& core;
-    sigc::slot1<bool, std::string> sender;
+    boost::function1<bool, std::string> sender;
     std::list<boost::shared_ptr<Ekiga::ChatObserver> > observers;
     Ekiga::PresentityPtr presentity;
     std::string uri;
diff --git a/lib/engine/components/opal/sip-dialect.cpp b/lib/engine/components/opal/sip-dialect.cpp
index f54903d..bb81b42 100644
--- a/lib/engine/components/opal/sip-dialect.cpp
+++ b/lib/engine/components/opal/sip-dialect.cpp
@@ -40,7 +40,7 @@
 #include "sip-dialect.h"
 
 SIP::Dialect::Dialect (Ekiga::ServiceCore& core_,
-		       sigc::slot2<bool, std::string, std::string> sender_)
+		       boost::function2<bool, std::string, std::string> sender_)
   : core(core_), sender(sender_)
 {
 }
@@ -101,12 +101,12 @@ SIP::Dialect::open_chat_with (std::string uri,
 
   if ( !result) {
 
-    result = SimpleChatPtr (new SimpleChat (core, name, uri, sigc::bind<0>(sender, uri)));
+    result = SimpleChatPtr (new SimpleChat (core, name, uri, boost::bind(sender, uri, _1)));
     add_simple_chat (result);
   }
 
   if (user_request)
-    result->user_requested.emit ();
+    result->user_requested ();
 
   return result;
 }
diff --git a/lib/engine/components/opal/sip-dialect.h b/lib/engine/components/opal/sip-dialect.h
index 60637a3..d42c42a 100644
--- a/lib/engine/components/opal/sip-dialect.h
+++ b/lib/engine/components/opal/sip-dialect.h
@@ -48,7 +48,7 @@ namespace SIP
   public:
     Dialect (Ekiga::ServiceCore& core_,
 	     /* the strings are : uri then msg */
-	     sigc::slot2<bool, std::string, std::string> sender_);
+	     boost::function2<bool, std::string, std::string> sender_);
 
     ~Dialect ();
 
@@ -68,7 +68,7 @@ namespace SIP
   private:
     Ekiga::ServiceCore& core;
     /* the strings are : uri then msg */
-    sigc::slot2<bool, std::string, std::string> sender;
+    boost::function2<bool, std::string, std::string> sender;
 
     SimpleChatPtr open_chat_with (std::string uri,
 					  std::string name,
diff --git a/lib/engine/components/opal/sip-endpoint.cpp b/lib/engine/components/opal/sip-endpoint.cpp
index d86066b..4f8f917 100644
--- a/lib/engine/components/opal/sip-endpoint.cpp
+++ b/lib/engine/components/opal/sip-endpoint.cpp
@@ -116,12 +116,12 @@ Opal::Sip::EndPoint::EndPoint (Opal::CallManager & _manager,
   uri_prefix = "sip:";
   listen_port = (_listen_port > 0 ? _listen_port : 5060);
 
-  dialect = boost::shared_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, boost::bind (&Opal::Sip::EndPoint::send_message, this, _1, _2)));
   chat_core->add_dialect (dialect);
 
-  bank->account_added.connect (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_bank_updated));
-  bank->account_removed.connect (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_bank_updated));
-  bank->account_updated.connect (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_bank_updated));
+  bank->account_added.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
+  bank->account_removed.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
+  bank->account_updated.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
 
   /* Timeouts */
   SetAckTimeout (PTimeInterval (0, 32));
@@ -237,10 +237,10 @@ Opal::Sip::EndPoint::menu_builder_add_actions (const std::string& fullname,
 
     if (0 == GetConnectionCount ())
       builder.add_action ("call", call_action.str (),
-                          sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_dial), (*it)));
+                          boost::bind (&Opal::Sip::EndPoint::on_dial, this, (*it)));
     else
       builder.add_action ("transfer", transfer_action.str (),
-                          sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_transfer), (*it)));
+                          boost::bind (&Opal::Sip::EndPoint::on_transfer, this, (*it)));
 
     ita++;
   }
@@ -257,7 +257,7 @@ Opal::Sip::EndPoint::menu_builder_add_actions (const std::string& fullname,
       msg_action << _("Message");
 
     builder.add_action ("message", msg_action.str (),
-                        sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::on_message), (*it), fullname));
+                        boost::bind (&Opal::Sip::EndPoint::on_message, this, (*it), fullname));
 
     ita++;
   }
@@ -701,11 +701,7 @@ Opal::Sip::EndPoint::OnRegistered (const PString & _aor,
     Subscribe (SIPSubscribe::MessageSummary, 3600, aor);
 
   /* Signal */
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this,
-							  &Opal::Sip::EndPoint::registration_event_in_main),
-					   strm.str (),
-					   was_registering ? Account::Registered : Account::Unregistered,
-					   std::string ()));
+  Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::registration_event_in_main, this, strm.str (), was_registering ? Account::Registered : Account::Unregistered, std::string ()));
 }
 
 
@@ -946,11 +942,7 @@ Opal::Sip::EndPoint::OnRegistrationFailed (const PString & _aor,
    */
   if (r != SIP_PDU::Failure_RequestTerminated) {
     /* Signal */
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this,
-							    &Opal::Sip::EndPoint::registration_event_in_main),
-					     strm.str (),
-					     wasRegistering ?Account::RegistrationFailed : Account::UnregistrationFailed,
-					     info));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::registration_event_in_main, this, strm.str (), wasRegistering ?Account::RegistrationFailed : Account::UnregistrationFailed, info));
   }
 }
 
@@ -966,7 +958,7 @@ Opal::Sip::EndPoint::OnMWIReceived (const PString & party,
     mwi = "0/0";
 
   /* Signal */
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::mwi_received_in_main), party, info));
+  Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::mwi_received_in_main, this, party, info));
 }
 
 
@@ -1062,7 +1054,7 @@ Opal::Sip::EndPoint::OnReceivedMESSAGE (OpalTransport & transport,
     std::string message_uri = (const char *) uri.AsString ();
     std::string _message = (const char *) pdu.GetEntityBody ();
 
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::push_message_in_main), message_uri, display_name, _message));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::push_message_in_main, this, message_uri, display_name, _message));
   }
 
   return SIPEndPoint::OnReceivedMESSAGE (transport, pdu);
@@ -1078,9 +1070,7 @@ Opal::Sip::EndPoint::OnMessageFailed (const SIPURL & messageUrl,
   std::string uri = (const char *) to.AsString ();
   std::string display_name = (const char *) to.GetDisplayName ();
 
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::push_notice_in_main),
-					   uri, display_name,
-					   _("Could not send message")));
+  Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::push_notice_in_main, this, uri, display_name, _("Could not send message")));
 }
 
 
@@ -1179,7 +1169,7 @@ Opal::Sip::EndPoint::OnPresenceInfoReceived (const PString & user,
   if (presence != "unknown" && (old_presence != presence || old_status != status)) {
     presence_infos[_uri].presence = presence;
     presence_infos[_uri].status = status;
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::presence_status_in_main), _uri, presence_infos[_uri].presence, presence_infos[_uri].status));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::presence_status_in_main, this, _uri, presence_infos[_uri].presence, presence_infos[_uri].status));
   }
 }
 
@@ -1222,9 +1212,9 @@ Opal::Sip::EndPoint::OnDialogInfoReceived (const SIPDialogNotification & info)
   dialog_infos[uri].status = status;
 
   if (_status)
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::presence_status_in_main), uri, dialog_infos[uri].presence, dialog_infos[uri].status));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::presence_status_in_main, this, uri, dialog_infos[uri].presence, dialog_infos[uri].status));
   else
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &Opal::Sip::EndPoint::presence_status_in_main), uri, presence_infos[uri].presence, presence_infos[uri].status));
+    Ekiga::Runtime::run_in_main (boost::bind (&Opal::Sip::EndPoint::presence_status_in_main, this, uri, presence_infos[uri].presence, presence_infos[uri].status));
 }
 
 
@@ -1269,8 +1259,8 @@ Opal::Sip::EndPoint::presence_status_in_main (std::string uri,
 					      std::string presence,
 					      std::string status)
 {
-  presence_received.emit (uri, presence);
-  status_received.emit (uri, status);
+  presence_received (uri, presence);
+  status_received (uri, status);
 }
 
 void
@@ -1312,7 +1302,7 @@ Opal::Sip::EndPoint::on_bank_updated (Ekiga::AccountPtr /*account*/)
 
   { // and now we compute it again
     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));
+    bank->visit_accounts (boost::bind (&Opal::Sip::EndPoint::search_for_default_account, this, _1));
   }
 }
 
diff --git a/lib/engine/components/ptlib/Makefile.am b/lib/engine/components/ptlib/Makefile.am
index 3b06edd..d48ad55 100644
--- a/lib/engine/components/ptlib/Makefile.am
+++ b/lib/engine/components/ptlib/Makefile.am
@@ -30,4 +30,4 @@ libgmptlib_la_SOURCES = \
 	$(ptlib_dir)/audiooutput-main-ptlib.h           \
 	$(ptlib_dir)/audiooutput-main-ptlib.cpp 
 
-libgmptlib_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+libgmptlib_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/components/ptlib/audioinput-manager-ptlib.cpp b/lib/engine/components/ptlib/audioinput-manager-ptlib.cpp
index 061c537..67bb14d 100644
--- a/lib/engine/components/ptlib/audioinput-manager-ptlib.cpp
+++ b/lib/engine/components/ptlib/audioinput-manager-ptlib.cpp
@@ -122,7 +122,7 @@ bool GMAudioInputManager_ptlib::open (unsigned channels, unsigned samplerate, un
 
   if (error_code != Ekiga::AI_ERROR_NONE) {
     PTRACE(1, "GMAudioInputManager_ptlib\tEncountered error " << error_code << " while opening device ");
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioInputManager_ptlib::device_error_in_main), current_state.device, error_code));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMAudioInputManager_ptlib::device_error_in_main, this, current_state.device, error_code));
     return false;
   }
 
@@ -133,7 +133,7 @@ bool GMAudioInputManager_ptlib::open (unsigned channels, unsigned samplerate, un
   Ekiga::AudioInputSettings settings;
   settings.volume = volume;
   settings.modifyable = true;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioInputManager_ptlib::device_opened_in_main), current_state.device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioInputManager_ptlib::device_opened_in_main, this, current_state.device, settings));
 
   return true;
 }
@@ -146,7 +146,7 @@ void GMAudioInputManager_ptlib::close()
      input_device = NULL;
   }
   current_state.opened = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioInputManager_ptlib::device_closed_in_main), current_state.device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioInputManager_ptlib::device_closed_in_main, this, current_state.device));
 }
 
 void GMAudioInputManager_ptlib::set_buffer_size (unsigned buffer_size, unsigned num_buffers)
@@ -211,18 +211,18 @@ void
 GMAudioInputManager_ptlib::device_error_in_main (Ekiga::AudioInputDevice device,
 						 Ekiga::AudioInputErrorCodes code)
 {
-  device_error.emit (device, code);
+  device_error (device, code);
 }
 
 void
 GMAudioInputManager_ptlib::device_opened_in_main (Ekiga::AudioInputDevice device,
 						  Ekiga::AudioInputSettings settings)
 {
-  device_opened.emit (device, settings);
+  device_opened (device, settings);
 }
 
 void
 GMAudioInputManager_ptlib::device_closed_in_main (Ekiga::AudioInputDevice device)
 {
-  device_closed.emit (device);
+  device_closed (device);
 }
diff --git a/lib/engine/components/ptlib/audiooutput-manager-ptlib.cpp b/lib/engine/components/ptlib/audiooutput-manager-ptlib.cpp
index 04c1310..f94d00a 100644
--- a/lib/engine/components/ptlib/audiooutput-manager-ptlib.cpp
+++ b/lib/engine/components/ptlib/audiooutput-manager-ptlib.cpp
@@ -122,7 +122,7 @@ bool GMAudioOutputManager_ptlib::open (Ekiga::AudioOutputPS ps, unsigned channel
 
   if (error_code != Ekiga::AO_ERROR_NONE) {
     PTRACE(1, "GMAudioOutputManager_ptlib\tEncountered error " << error_code << " while opening device[" << ps << "]");
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_ptlib::device_error_in_main), ps, current_state[ps].device, error_code));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_ptlib::device_error_in_main, this, ps, current_state[ps].device, error_code));
     return false;
   }
 
@@ -133,7 +133,7 @@ bool GMAudioOutputManager_ptlib::open (Ekiga::AudioOutputPS ps, unsigned channel
   Ekiga::AudioOutputSettings settings;
   settings.volume = volume;
   settings.modifyable = true;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_ptlib::device_opened_in_main), ps, current_state[ps].device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_ptlib::device_opened_in_main, this, ps, current_state[ps].device, settings));
 
   return true;
 }
@@ -146,7 +146,7 @@ void GMAudioOutputManager_ptlib::close(Ekiga::AudioOutputPS ps)
      output_device[ps] = NULL;
   }
   current_state[ps].opened = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_ptlib::device_closed_in_main), ps, current_state[ps].device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_ptlib::device_closed_in_main, this, ps, current_state[ps].device));
 }
 
 void GMAudioOutputManager_ptlib::set_buffer_size (Ekiga::AudioOutputPS ps, unsigned buffer_size, unsigned num_buffers)
@@ -179,7 +179,7 @@ bool GMAudioOutputManager_ptlib::set_frame_data (Ekiga::AudioOutputPS ps,
     }
     if (bytes_written != size) {
       PTRACE(1, "GMAudioOutputManager_ptlib\tEncountered error while trying to write data");
-      Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMAudioOutputManager_ptlib::device_error_in_main), ps, current_state[ps].device, Ekiga::AO_ERROR_WRITE));
+      Ekiga::Runtime::run_in_main (boost::bind (&GMAudioOutputManager_ptlib::device_error_in_main, this, ps, current_state[ps].device, Ekiga::AO_ERROR_WRITE));
     }
   }
 
@@ -215,14 +215,14 @@ GMAudioOutputManager_ptlib::device_opened_in_main (Ekiga::AudioOutputPS ps,
 						   Ekiga::AudioOutputDevice device,
 						   Ekiga::AudioOutputSettings settings)
 {
-  device_opened.emit (ps, device, settings);
+  device_opened (ps, device, settings);
 }
 
 void
 GMAudioOutputManager_ptlib::device_closed_in_main (Ekiga::AudioOutputPS ps,
 						   Ekiga::AudioOutputDevice device)
 {
-  device_closed.emit (ps, device);
+  device_closed (ps, device);
 }
 
 void
@@ -230,5 +230,5 @@ GMAudioOutputManager_ptlib::device_error_in_main (Ekiga::AudioOutputPS ps,
 						  Ekiga::AudioOutputDevice device,
 						  Ekiga::AudioOutputErrorCodes code)
 {
-  device_error.emit (ps, device, code);
+  device_error (ps, device, code);
 }
diff --git a/lib/engine/components/ptlib/videoinput-manager-ptlib.cpp b/lib/engine/components/ptlib/videoinput-manager-ptlib.cpp
index ba8553a..580a1c2 100644
--- a/lib/engine/components/ptlib/videoinput-manager-ptlib.cpp
+++ b/lib/engine/components/ptlib/videoinput-manager-ptlib.cpp
@@ -136,7 +136,7 @@ bool GMVideoInputManager_ptlib::open (unsigned width, unsigned height, unsigned
 
   if (error_code != Ekiga::VI_ERROR_NONE) {
     PTRACE(1, "GMVideoInputManager_ptlib\tEncountered error " << error_code << " while opening device ");
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoInputManager_ptlib::device_error_in_main), current_state.device, error_code));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoInputManager_ptlib::device_error_in_main, this, current_state.device, error_code));
     return false;
   }
 
@@ -151,7 +151,7 @@ bool GMVideoInputManager_ptlib::open (unsigned width, unsigned height, unsigned
   settings.contrast = contrast >> 8;
   settings.modifyable = true;
 
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoInputManager_ptlib::device_opened_in_main), current_state.device, settings));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoInputManager_ptlib::device_opened_in_main, this, current_state.device, settings));
 
   return true;
 }
@@ -164,7 +164,7 @@ void GMVideoInputManager_ptlib::close()
     input_device = NULL;
   }
   current_state.opened = false;
-  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoInputManager_ptlib::device_closed_in_main), current_state.device));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoInputManager_ptlib::device_closed_in_main, this, current_state.device));
 }
 
 bool GMVideoInputManager_ptlib::get_frame_data (char *data)
@@ -232,18 +232,18 @@ void
 GMVideoInputManager_ptlib::device_opened_in_main (Ekiga::VideoInputDevice device,
 						  Ekiga::VideoInputSettings settings)
 {
-  device_opened.emit (device, settings);
+  device_opened (device, settings);
 }
 
 void
 GMVideoInputManager_ptlib::device_closed_in_main (Ekiga::VideoInputDevice device)
 {
-  device_closed.emit (device);
+  device_closed (device);
 }
 
 void
 GMVideoInputManager_ptlib::device_error_in_main (Ekiga::VideoInputDevice device,
 						 Ekiga::VideoInputErrorCodes code)
 {
-  device_error.emit (device, code);
+  device_error (device, code);
 }
diff --git a/lib/engine/components/resource-list/Makefile.am b/lib/engine/components/resource-list/Makefile.am
index 88bfe0e..68867be 100644
--- a/lib/engine/components/resource-list/Makefile.am
+++ b/lib/engine/components/resource-list/Makefile.am
@@ -32,4 +32,4 @@ libgmresource_list_la_LDFLAGS = \
 	$(PLUGINS_LIBTOOL_FLAGS)
 libgmresource_list_la_LIBADD = \
 	$(top_builddir)/lib/engine/components/xcap/libgmxcap.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(XML_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(XML_LIBS)
diff --git a/lib/engine/components/resource-list/rl-cluster.cpp b/lib/engine/components/resource-list/rl-cluster.cpp
index 66bc0ce..3662ca0 100644
--- a/lib/engine/components/resource-list/rl-cluster.cpp
+++ b/lib/engine/components/resource-list/rl-cluster.cpp
@@ -54,8 +54,8 @@ RL::Cluster::Cluster (Ekiga::ServiceCore& core_): core(core_), doc()
 
   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));
+  presence_core->presence_received.connect (boost::bind (&RL::Cluster::on_presence_received, this));
+  presence_core->status_received.connect (boost::bind (&RL::Cluster::on_status_received, this));
 
   c_raw = gm_conf_get_string (KEY);
 
@@ -100,7 +100,7 @@ bool
 RL::Cluster::populate_menu (Ekiga::MenuBuilder& builder)
 {
   builder.add_action ("new", _("New resource list"),
-		      sigc::bind (sigc::mem_fun (this, &RL::Cluster::new_heap),
+		      boost::bind (boost::bind (&RL::Cluster::new_heap, this),
 				  "", "", "", "", "", false));
   return true;
 }
@@ -137,7 +137,7 @@ RL::Cluster::common_add (HeapPtr heap)
 
   // FIXME: here we should ask for presence for the heap...
 
-  heap->trigger_saving.connect (sigc::mem_fun (this, &RL::Cluster::save));
+  heap->trigger_saving.connect (boost::bind (&RL::Cluster::save, this));
 }
 
 void
@@ -161,7 +161,7 @@ RL::Cluster::new_heap (const std::string name,
 		       const std::string user,
 		       bool writable)
 {
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&RL::Cluster::on_new_heap_form_submitted, this)));
 
   request->title (_("Add new resource-list"));
   request->instructions (_("Please fill in this form to add a new "
@@ -173,7 +173,7 @@ RL::Cluster::new_heap (const std::string name,
   request->private_text ("password", _("Password:"), password);
   request->text ("user", _("User:"), user);
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
diff --git a/lib/engine/components/resource-list/rl-entry-ref.cpp b/lib/engine/components/resource-list/rl-entry-ref.cpp
index a6a96a4..7cd7f47 100644
--- a/lib/engine/components/resource-list/rl-entry-ref.cpp
+++ b/lib/engine/components/resource-list/rl-entry-ref.cpp
@@ -92,14 +92,14 @@ void
 RL::EntryRef::set_presence (const std::string presence_)
 {
   presence = presence_;
-  updated.emit ();
+  updated ();
 }
 
 void
 RL::EntryRef::set_status (const std::string status_)
 {
   status = status_;
-  updated.emit ();
+  updated ();
 }
 
 const std::string
@@ -130,7 +130,7 @@ RL::EntryRef::populate_menu (Ekiga::MenuBuilder& builder)
   std::string uri(get_uri ());
 
   builder.add_action ("refresh", _("_Refresh"),
-		      sigc::mem_fun (this, &RL::EntryRef::refresh));
+		      boost::bind (&RL::EntryRef::refresh, this));
 
   if ( !uri.empty ())
     populated = presence_core->populate_presentity_menu (Ekiga::PresentityPtr (this), uri, builder)
diff --git a/lib/engine/components/resource-list/rl-entry.cpp b/lib/engine/components/resource-list/rl-entry.cpp
index bcdfcfe..21f71e1 100644
--- a/lib/engine/components/resource-list/rl-entry.cpp
+++ b/lib/engine/components/resource-list/rl-entry.cpp
@@ -103,14 +103,14 @@ void
 RL::Entry::set_presence (const std::string presence_)
 {
   presence = presence_;
-  updated.emit ();
+  updated ();
 }
 
 void
 RL::Entry::set_status (const std::string status_)
 {
   status = status_;
-  updated.emit ();
+  updated ();
 }
 
 const std::string
@@ -142,7 +142,7 @@ RL::Entry::populate_menu (Ekiga::MenuBuilder& builder)
   std::string uri(get_uri ());
 
   builder.add_action ("refresh", _("_Refresh"),
-		      sigc::mem_fun (this, &RL::Entry::refresh));
+		      boost::bind (&RL::Entry::refresh, this));
 
   if ( !uri.empty ())
     populated = presence_core->populate_presentity_menu (Ekiga::PresentityPtr (this), uri, builder)
@@ -159,10 +159,10 @@ RL::Entry::refresh ()
   name_node = NULL;
   presence = "unknown";
   status = ("");
-  updated.emit ();
+  updated ();
 
   boost::shared_ptr<XCAP::Core> xcap = core.get<XCAP::Core> ("xcap-core");
-  xcap->read (path, sigc::mem_fun (this, &RL::Entry::on_xcap_answer));
+  xcap->read (path, boost::bind (&RL::Entry::on_xcap_answer, this));
 }
 
 void
@@ -189,7 +189,7 @@ RL::Entry::on_xcap_answer (bool error,
 
       set_status ("");
       parse ();
-      updated.emit ();
+      updated ();
     }
   }
 }
diff --git a/lib/engine/components/resource-list/rl-heap.cpp b/lib/engine/components/resource-list/rl-heap.cpp
index 2cf6b7e..1d50072 100644
--- a/lib/engine/components/resource-list/rl-heap.cpp
+++ b/lib/engine/components/resource-list/rl-heap.cpp
@@ -181,11 +181,11 @@ RL::Heap::get_name () const
 }
 
 void
-RL::Heap::visit_presentities (sigc::slot1<bool, Ekiga::PresentityPtr > visitor)
+RL::Heap::visit_presentities (boost::function1<bool, Ekiga::PresentityPtr > visitor)
 {
   bool go_on = true;
 
-  for (std::map<PresentityPtr,std::list<sigc::connection> >::iterator
+  for (std::map<PresentityPtr,std::list<boost::signals::connection> >::iterator
 	 iter = presentities.begin ();
        go_on && iter != presentities.end ();
        ++iter)
@@ -196,11 +196,11 @@ bool
 RL::Heap::populate_menu (Ekiga::MenuBuilder& builder)
 {
   builder.add_action ("add", _("_Add a new contact"),
-		      sigc::mem_fun (this, &RL::Heap::new_entry));
+		      boost::bind (&RL::Heap::new_entry, this));
   builder.add_action ("refresh", _("_Refresh contact list"),
-		      sigc::mem_fun (this, &RL::Heap::refresh));
+		      boost::bind (&RL::Heap::refresh, this));
   builder.add_action ("properties", _("Contact list _properties"),
-		      sigc::mem_fun (this, &RL::Heap::edit));
+		      boost::bind (&RL::Heap::edit, this));
   return true;
 }
 
@@ -253,8 +253,8 @@ RL::Heap::refresh ()
 
   while ( !presentities.empty ()) {
 
-    presentities.begin()->first->removed.emit ();
-    for (std::list<sigc::connection>::iterator iter2
+    presentities.begin()->first->removed ();
+    for (std::list<boost::signals::connection>::iterator iter2
 	   = presentities.begin()->second.begin ();
 	 iter2 != presentities.begin()->second.end ();
 	 ++iter2)
@@ -264,7 +264,7 @@ RL::Heap::refresh ()
 
   doc.reset ();
 
-  xcap->read (path, sigc::mem_fun (this, &RL::Heap::on_document_received));
+  xcap->read (path, boost::bind (&RL::Heap::on_document_received, this));
 }
 
 void
@@ -366,13 +366,13 @@ RL::Heap::parse_list (xmlNodePtr list)
 	&& xmlStrEqual (BAD_CAST ("entry"), child->name)) {
 
       PresentityPtr presentity(new Presentity (services, path, doc, child, writable));
-      std::list<sigc::connection> conns;
-      conns.push_back (presentity->updated.connect (sigc::bind (presentity_updated.make_slot (),presentity)));
-      conns.push_back (presentity->removed.connect (sigc::bind(presentity_removed.make_slot (),presentity)));
-      conns.push_back (presentity->trigger_reload.connect (sigc::mem_fun (this, &RL::Heap::refresh)));
+      std::list<boost::signals::connection> conns;
+      conns.push_back (presentity->updated.connect (boost::bind (presentity_updated,presentity)));
+      conns.push_back (presentity->removed.connect (boost::bind(presentity_removed,presentity)));
+      conns.push_back (presentity->trigger_reload.connect (boost::bind (&RL::Heap::refresh, this)));
       conns.push_back (presentity->questions.connect (questions.make_slot()));
       presentities[presentity]=conns;
-      presentity_added.emit (presentity);
+      presentity_added (presentity);
       continue;
     }
 }
@@ -381,7 +381,7 @@ void
 RL::Heap::push_presence (const std::string uri_,
 			 const std::string presence)
 {
-  for (std::map<PresentityPtr,std::list<sigc::connection> >::iterator
+  for (std::map<PresentityPtr,std::list<boost::signals::connection> >::iterator
 	 iter = presentities.begin ();
        iter != presentities.end ();
        ++iter) {
@@ -395,7 +395,7 @@ void
 RL::Heap::push_status (const std::string uri_,
 		       const std::string status)
 {
-  for (std::map<PresentityPtr,std::list<sigc::connection> >::iterator
+  for (std::map<PresentityPtr,std::list<boost::signals::connection> >::iterator
 	 iter = presentities.begin ();
        iter != presentities.end ();
        ++iter) {
@@ -408,7 +408,7 @@ RL::Heap::push_status (const std::string uri_,
 void
 RL::Heap::edit ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&RL::Heap::on_edit_form_submitted, this)));
 
   std::string name_str;
   std::string root_str;
@@ -472,7 +472,7 @@ RL::Heap::edit ()
   request->text ("username", _("Server username"), username_str);
   request->private_text ("password", _("Server password"), password_str);
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
@@ -499,22 +499,22 @@ RL::Heap::on_edit_form_submitted (bool submitted,
   robust_xmlNodeSetContent (node, &username, "username", username_str);
   robust_xmlNodeSetContent (node, &password, "password", password_str);
 
-  trigger_saving.emit ();
-  updated.emit ();
+  trigger_saving ();
+  updated ();
   refresh ();
 }
 
 void
 RL::Heap::new_entry ()
 {
-  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)));
+  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&RL::Heap::on_new_entry_form_submitted, this)));
 
   request->title (_("Add a remote contact"));
   request->instructions (_("Please fill in this form to create a new "
 			   "contact on a remote server"));
 
   std::set<std::string> all_groups;
-  for (std::map<PresentityPtr,std::list<sigc::connection> >::iterator
+  for (std::map<PresentityPtr,std::list<boost::signals::connection> >::iterator
 	 iter = presentities.begin ();
        iter != presentities.end ();
        ++iter) {
@@ -528,7 +528,7 @@ RL::Heap::new_entry ()
   request->editable_set ("groups", _("Choose groups:"),
 			 std::set<std::string>(), all_groups);
 
-  questions.emit (request);
+  questions (request);
 }
 
 void
@@ -602,7 +602,7 @@ RL::Heap::on_new_entry_form_submitted (bool submitted,
     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));
+		 boost::bind (&RL::Heap::new_entry_result, this));
   }
   xmlBufferFree (buffer);
 }
diff --git a/lib/engine/components/resource-list/rl-heap.h b/lib/engine/components/resource-list/rl-heap.h
index 76f7ff1..7832578 100644
--- a/lib/engine/components/resource-list/rl-heap.h
+++ b/lib/engine/components/resource-list/rl-heap.h
@@ -75,7 +75,7 @@ namespace RL {
 
     const std::string get_name () const;
 
-    void visit_presentities (sigc::slot1<bool, Ekiga::PresentityPtr > visitor);
+    void visit_presentities (boost::function1<bool, Ekiga::PresentityPtr > visitor);
 
     bool populate_menu (Ekiga::MenuBuilder& builder);
 
@@ -90,7 +90,7 @@ namespace RL {
     void push_status (const std::string uri,
 		      const std::string status);
 
-    sigc::signal0<void> trigger_saving;
+    boost::signal0<void> trigger_saving;
 
   private:
 
@@ -106,7 +106,7 @@ namespace RL {
     boost::shared_ptr<xmlDoc> doc;
     xmlNodePtr list_node;
 
-    std::map<PresentityPtr, std::list<sigc::connection> > presentities;
+    std::map<PresentityPtr, std::list<boost::signals::connection> > presentities;
 
     void refresh ();
 
diff --git a/lib/engine/components/resource-list/rl-list.cpp b/lib/engine/components/resource-list/rl-list.cpp
index 9f14ed4..ce165ce 100644
--- a/lib/engine/components/resource-list/rl-list.cpp
+++ b/lib/engine/components/resource-list/rl-list.cpp
@@ -90,13 +90,13 @@ public: // no need to make anything private
   std::string display_name;
 
   /* make the world know what we have */
-  bool visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor);
+  bool visit_presentities (boost::function1<bool, Ekiga::Presentity&> visitor);
 
   void publish () const;
 
-  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;
+  boost::signal1<void, boost::shared_ptr<Entry> > entry_added;
+  boost::signal1<void, boost::shared_ptr<Entry> > entry_updated;
+  boost::signal1<void, boost::shared_ptr<Entry> > entry_removed;
 
 
   /* data for its children */
@@ -104,7 +104,7 @@ public: // no need to make anything private
 
   std::list<ChildType> ordering;
   std::list<boost::shared_ptr<List> > lists;
-  std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > > entries;
+  std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > > entries;
 };
 
 
@@ -117,9 +117,9 @@ RL::List::List (Ekiga::ServiceCore& core_,
 		xmlNodePtr node_)
 {
   impl = new ListImpl (core_, path_, pos, group_, node_);
-  impl->entry_added.connect (entry_added.make_slot ());
-  impl->entry_updated.connect (entry_updated.make_slot ());
-  impl->entry_removed.connect (entry_removed.make_slot ());
+  impl->entry_added.connect (entry_added);
+  impl->entry_updated.connect (entry_updated);
+  impl->entry_removed.connect (entry_removed);
 }
 
 RL::List::~List ()
@@ -154,7 +154,7 @@ RL::List::push_status (const std::string uri_,
 }
 
 bool
-RL::List::visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor)
+RL::List::visit_presentities (boost::function1<bool, Ekiga::Presentity&> visitor)
 {
   return impl->visit_presentities (visitor);
 }
@@ -233,12 +233,12 @@ RL::ListImpl::flush ()
     (*iter)->flush ();
   lists.clear ();
 
-  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > >::iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
-    iter->first->removed.emit ();
-    for (std::list<sigc::connection>::iterator conn_iter
+    iter->first->removed ();
+    for (std::list<boost::signals::connection>::iterator conn_iter
 	   = iter->second.begin ();
 	 conn_iter != iter->second.end ();
 	 ++conn_iter)
@@ -257,7 +257,7 @@ RL::ListImpl::refresh ()
   flush ();
 
   boost::shared_ptr<XCAP::Core> xcap = core.get<XCAP::Core> ("xcap-core");
-  xcap->read (path, sigc::mem_fun (this, &RL::ListImpl::on_xcap_answer));
+  xcap->read (path, boost::bind (&RL::ListImpl::on_xcap_answer, this));
 }
 
 void
@@ -322,9 +322,9 @@ RL::ListImpl::parse ()
       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 ());
-      list->entry_updated.connect (entry_updated.make_slot ());
-      list->entry_removed.connect (entry_removed.make_slot ());
+      list->entry_added.connect (entry_added);
+      list->entry_updated.connect (entry_updated);
+      list->entry_removed.connect (entry_removed);
       lists.push_back (list);
       ordering.push_back (LIST);
       list_pos++;
@@ -340,13 +340,13 @@ RL::ListImpl::parse ()
 							    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<boost::shared_ptr<Entry>, std::list<sigc::connection> > (entry, conns));
+      std::list<boost::signals::connection> conns;
+      conns.push_back (entry->updated.connect (boost::bind (entry_updated, entry)));
+      conns.push_back (entry->removed.connect (boost::bind (entry_removed, entry)));
+      entries.push_back (std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > (entry, conns));
       ordering.push_back (ENTRY);
       entry_pos++;
-      entry_added.emit (entry);
+      entry_added (entry);
       continue;
     }
   }
@@ -361,7 +361,7 @@ RL::ListImpl::push_presence (const std::string uri_,
        ++iter)
     (*iter)->push_presence (uri_, presence);
 
-  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
@@ -379,7 +379,7 @@ RL::ListImpl::push_status (const std::string uri_,
        ++iter)
     (*iter)->push_status (uri_, status);
 
-  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
@@ -389,7 +389,7 @@ RL::ListImpl::push_status (const std::string uri_,
 }
 
 bool
-RL::ListImpl::visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor)
+RL::ListImpl::visit_presentities (boost::function1<bool, Ekiga::Presentity&> visitor)
 {
   bool go_on = true;
 
@@ -398,7 +398,7 @@ RL::ListImpl::visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor)
        ++iter)
     go_on = (*iter)->visit_presentities (visitor);
 
-  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > >::const_iterator iter = entries.begin ();
        go_on && iter != entries.end ();
        ++iter) {
 
@@ -416,10 +416,10 @@ RL::ListImpl::publish () const
        ++iter)
     (*iter)->publish ();
 
-  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<sigc::connection> > >::const_iterator iter = entries.begin ();
+  for (std::list<std::pair<boost::shared_ptr<Entry>, std::list<boost::signals::connection> > >::const_iterator iter = entries.begin ();
        iter != entries.end ();
        ++iter) {
 
-    entry_added.emit (iter->first);
+    entry_added (iter->first);
   }
 }
diff --git a/lib/engine/components/resource-list/rl-list.h b/lib/engine/components/resource-list/rl-list.h
index 65d5e4b..b3d55ac 100644
--- a/lib/engine/components/resource-list/rl-list.h
+++ b/lib/engine/components/resource-list/rl-list.h
@@ -70,13 +70,13 @@ namespace RL
 		      const std::string status);
 
     /* make the world know what we have */
-    bool visit_presentities (sigc::slot1<bool, Ekiga::Presentity&> visitor);
+    bool visit_presentities (boost::function1<bool, Ekiga::Presentity&> visitor);
 
     void publish () const;
 
-    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;
+    boost::signal1<void, boost::shared_ptr<Entry> > entry_added;
+    boost::signal1<void, boost::shared_ptr<Entry> > entry_updated;
+    boost::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 7560626..fd68e60 100644
--- a/lib/engine/components/resource-list/rl-presentity.cpp
+++ b/lib/engine/components/resource-list/rl-presentity.cpp
@@ -176,14 +176,14 @@ void
 RL::Presentity::set_presence (const std::string _presence)
 {
   presence = _presence;
-  updated.emit ();
+  updated ();
 }
 
 void
 RL::Presentity::set_status (const std::string _status)
 {
   status = _status;
-  updated.emit ();
+  updated ();
 }
 
 
@@ -201,9 +201,9 @@ RL::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
       builder.add_separator ();
 
     builder.add_action ("edit", _("_Edit"),
-			sigc::mem_fun (this, &RL::Presentity::edit_presentity));
+			boost::bind (&RL::Presentity::edit_presentity, this));
     builder.add_action ("remove", _("_Remove"),
-			sigc::mem_fun (this, &RL::Presentity::remove));
+			boost::bind (&RL::Presentity::remove, this));
   }
 
   return true;
@@ -213,7 +213,7 @@ RL::Presentity::populate_menu (Ekiga::MenuBuilder &builder)
 void
 RL::Presentity::edit_presentity ()
 {
-  boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_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 (boost::bind (&RL::Presentity::edit_presentity_form_submitted, this)));
 
   // FIXME: we should be able to know all groups in the heap
   std::set<std::string> all_groups = groups;
@@ -227,7 +227,7 @@ RL::Presentity::edit_presentity ()
   request->editable_set ("groups", _("Choose groups:"),
 			groups, all_groups);
 
-  questions.emit (request);
+  questions (request);
 }
 
 
@@ -298,7 +298,7 @@ RL::Presentity::save (bool reload)
     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),
+		 boost::bind (boost::bind (&RL::Presentity::save_result, this),
 			     reload));
   }
 
@@ -317,7 +317,7 @@ RL::Presentity::remove ()
 
   boost::shared_ptr<XCAP::Core> xcap = services.get<XCAP::Core> ("xcap-core");
   xcap->erase (path,
-	       sigc::mem_fun (this, &RL::Presentity::erase_result));
+	       boost::bind (&RL::Presentity::erase_result, this));
 }
 
 void
@@ -328,13 +328,13 @@ RL::Presentity::save_result (std::string error,
 
     // FIXME: do better
     std::cout << "XCAP error: " << error << std::endl;
-    trigger_reload.emit ();
+    trigger_reload ();
   } else {
 
     if (reload)
-      trigger_reload.emit ();
+      trigger_reload ();
     else
-      updated.emit ();
+      updated ();
   }
 }
 
@@ -347,5 +347,5 @@ RL::Presentity::erase_result (std::string error)
     std::cout << "XCAP error: " << error << std::endl;
   }
 
-  trigger_reload.emit ();
+  trigger_reload ();
 }
diff --git a/lib/engine/components/resource-list/rl-presentity.h b/lib/engine/components/resource-list/rl-presentity.h
index bab874d..43e37e9 100644
--- a/lib/engine/components/resource-list/rl-presentity.h
+++ b/lib/engine/components/resource-list/rl-presentity.h
@@ -79,7 +79,7 @@ namespace RL
 
     bool populate_menu (Ekiga::MenuBuilder &);
 
-    sigc::signal0<void> trigger_reload;
+    boost::signal0<void> trigger_reload;
 
   private:
 
diff --git a/lib/engine/components/x-videooutput/Makefile.am b/lib/engine/components/x-videooutput/Makefile.am
index a3e834e..cf40868 100644
--- a/lib/engine/components/x-videooutput/Makefile.am
+++ b/lib/engine/components/x-videooutput/Makefile.am
@@ -20,4 +20,4 @@ libgmvideooutput_x_la_SOURCES = \
 	$(videooutput_dir)/videooutput-main-x.cpp    \
 	$(videooutput_dir)/videooutput-main-x.h
 
-libgmvideooutput_x_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(SIGC_LIBS) $(PTLIB_LIBS) $(GLIB_LIBS) $(XV_LIBS)
+libgmvideooutput_x_la_LDFLAGS = -export-dynamic -no-undefined $(BOOST_LDFLAGS) $(BOOST_LIBS) $(PTLIB_LIBS) $(GLIB_LIBS) $(XV_LIBS)
diff --git a/lib/engine/components/x-videooutput/videooutput-manager-x.cpp b/lib/engine/components/x-videooutput/videooutput-manager-x.cpp
index 8a9053e..209c210 100644
--- a/lib/engine/components/x-videooutput/videooutput-manager-x.cpp
+++ b/lib/engine/components/x-videooutput/videooutput-manager-x.cpp
@@ -114,17 +114,17 @@ GMVideoOutputManager_x::setup_frame_display ()
 
   switch (current_frame.mode) {
   case Ekiga::VO_MODE_LOCAL:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::size_changed_in_main), (unsigned) (current_frame.local_width * current_frame.zoom / 100), (unsigned) (current_frame.local_height * current_frame.zoom / 100)));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::size_changed_in_main, this, (unsigned) (current_frame.local_width * current_frame.zoom / 100), (unsigned) (current_frame.local_height * current_frame.zoom / 100)));
     break;
   case Ekiga::VO_MODE_REMOTE:
   case Ekiga::VO_MODE_PIP:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::size_changed_in_main), (unsigned) (current_frame.remote_width * current_frame.zoom / 100), (unsigned) (current_frame.remote_height * current_frame.zoom / 100)));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::size_changed_in_main, this, (unsigned) (current_frame.remote_width * current_frame.zoom / 100), (unsigned) (current_frame.remote_height * current_frame.zoom / 100)));
     break;
   case Ekiga::VO_MODE_FULLSCREEN:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::size_changed_in_main), 176, 144));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::size_changed_in_main, this, 176, 144));
     break;
   case Ekiga::VO_MODE_PIP_WINDOW:
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::size_changed_in_main), 176, 144));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::size_changed_in_main, this, 176, 144));
     break;
   case Ekiga::VO_MODE_UNSET:
   default:
@@ -421,17 +421,17 @@ GMVideoOutputManager_x::setup_frame_display ()
   last_frame.both_streams_active = current_frame.both_streams_active;
 
   if (video_disabled) {
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::device_error_in_main), Ekiga::VO_ERROR));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::device_error_in_main, this, Ekiga::VO_ERROR));
   }
   else {
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::device_opened_in_main), current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::device_opened_in_main, this, current_frame.accel, current_frame.mode, current_frame.zoom, current_frame.both_streams_active));
   }
 }
 
 void
 GMVideoOutputManager_x::close_frame_display ()
 {
-  Ekiga::Runtime::run_in_main (sigc::mem_fun (this, &GMVideoOutputManager_x::device_closed_in_main));
+  Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::device_closed_in_main, this));
 
   if (rxWindow) 
     rxWindow->RegisterSlave (NULL);
@@ -482,7 +482,7 @@ GMVideoOutputManager_x::display_pip_frames (const char *local_frame,
     lxWindow->ProcessEvents();
 
   if (current_frame.mode == Ekiga::VO_MODE_FULLSCREEN && rxWindow && !rxWindow->IsFullScreen ())
-    Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun (this, &GMVideoOutputManager_x::fullscreen_mode_changed_in_main), Ekiga::VO_FS_OFF));
+    Ekiga::Runtime::run_in_main (boost::bind (&GMVideoOutputManager_x::fullscreen_mode_changed_in_main, this, Ekiga::VO_FS_OFF));
 
   if (rxWindow && (update_required.remote || (!update_required.remote && !update_required.local)))
     rxWindow->PutFrame ((uint8_t *) remote_frame, rf_width, rf_height);
@@ -507,7 +507,7 @@ void
 GMVideoOutputManager_x::size_changed_in_main (unsigned width,
 					      unsigned height)
 {
-  size_changed.emit (width, height);
+  size_changed (width, height);
 }
 
 void
@@ -516,23 +516,23 @@ GMVideoOutputManager_x::device_opened_in_main (Ekiga::VideoOutputAccel accel,
 					       unsigned zoom,
 					       bool both)
 {
-  device_opened.emit (accel, mode, zoom, both);
+  device_opened (accel, mode, zoom, both);
 }
 
 void
 GMVideoOutputManager_x::device_closed_in_main ()
 {
-  device_closed.emit ();
+  device_closed ();
 }
 
 void
 GMVideoOutputManager_x::device_error_in_main (Ekiga::VideoOutputErrorCodes code)
 {
-  device_error.emit (code);
+  device_error (code);
 }
 
 void
 GMVideoOutputManager_x::fullscreen_mode_changed_in_main (Ekiga::VideoOutputFSToggle val)
 {
-  fullscreen_mode_changed.emit (val);
+  fullscreen_mode_changed (val);
 }
diff --git a/lib/engine/components/xcap/Makefile.am b/lib/engine/components/xcap/Makefile.am
index 85965f8..7c72025 100644
--- a/lib/engine/components/xcap/Makefile.am
+++ b/lib/engine/components/xcap/Makefile.am
@@ -16,4 +16,4 @@ libgmxcap_la_SOURCES = \
 	$(xcap_dir)/xcap-main.cpp
 
 libgmxcap_la_LDFLAGS = $(PLUGINS_LIBTOOL_FLAGS)
-libgmxcap_la_LIBADD = $(BOOST_LDFLAGS) $(SIGC_LIBS) $(SOUP_LIBS)
\ No newline at end of file
+libgmxcap_la_LIBADD = $(BOOST_LDFLAGS) $(BOOST_LIBS) $(SOUP_LIBS)
\ No newline at end of file
diff --git a/lib/engine/components/xcap/xcap-core.cpp b/lib/engine/components/xcap/xcap-core.cpp
index 0a53db2..33c8bd8 100644
--- a/lib/engine/components/xcap/xcap-core.cpp
+++ b/lib/engine/components/xcap/xcap-core.cpp
@@ -53,13 +53,13 @@ public:
   ~CoreImpl ();
 
   void read (boost::shared_ptr<XCAP::Path> path,
-	     sigc::slot2<void,bool,std::string> callback);
+	     boost::function2<void,bool,std::string> callback);
   void write (boost::shared_ptr<Path>,
 	      const std::string content_type,
 	      const std::string content,
-	      sigc::slot1<void,std::string> callback);
+	      boost::function1<void,std::string> callback);
   void erase (boost::shared_ptr<Path>,
-	      sigc::slot1<void,std::string> callback);
+	      boost::function1<void,std::string> callback);
 
   /* public to be used by C callbacks */
 
@@ -103,14 +103,14 @@ struct cb_read_data
 {
   XCAP::CoreImpl* core;
   boost::shared_ptr<XCAP::Path> path;
-  sigc::slot2<void, bool, std::string> callback;
+  boost::function2<void, bool, std::string> callback;
 };
 
 struct cb_other_data
 {
   XCAP::CoreImpl* core;
   boost::shared_ptr<XCAP::Path> path;
-  sigc::slot1<void, std::string> callback;
+  boost::function1<void, std::string> callback;
 };
 
 static void
@@ -223,7 +223,7 @@ XCAP::CoreImpl::clear_old_sessions ()
 
 void
 XCAP::CoreImpl::read (boost::shared_ptr<Path> path,
-		      sigc::slot2<void, bool, std::string> callback)
+		      boost::function2<void, bool, std::string> callback)
 {
   SoupSession* session = NULL;
   SoupMessage* message = NULL;
@@ -252,7 +252,7 @@ void
 XCAP::CoreImpl::write (boost::shared_ptr<Path> path,
 		       const std::string content_type,
 		       const std::string content,
-		       sigc::slot1<void,std::string> callback)
+		       boost::function1<void,std::string> callback)
 {
   SoupSession* session = NULL;
   SoupMessage* message = NULL;
@@ -283,7 +283,7 @@ XCAP::CoreImpl::write (boost::shared_ptr<Path> path,
 
 void
 XCAP::CoreImpl::erase (boost::shared_ptr<Path> path,
-		       sigc::slot1<void,std::string> callback)
+		       boost::function1<void,std::string> callback)
 {
   SoupSession* session = NULL;
   SoupMessage* message = NULL;
@@ -322,7 +322,7 @@ XCAP::Core::~Core ()
 
 void
 XCAP::Core::read (boost::shared_ptr<XCAP::Path> path,
-		  sigc::slot2<void, bool,std::string> callback)
+		  boost::function2<void, bool,std::string> callback)
 {
   impl->read (path, callback);
 }
@@ -331,14 +331,14 @@ void
 XCAP::Core::write (boost::shared_ptr<Path> path,
 		   const std::string content_type,
 		   const std::string content,
-		   sigc::slot1<void,std::string> callback)
+		   boost::function1<void,std::string> callback)
 {
   impl->write (path, content_type, content, callback);
 }
 
 void
 XCAP::Core::erase (boost::shared_ptr<Path> path,
-		   sigc::slot1<void,std::string> callback)
+		   boost::function1<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 356e6a7..d5548aa 100644
--- a/lib/engine/components/xcap/xcap-core.h
+++ b/lib/engine/components/xcap/xcap-core.h
@@ -62,7 +62,7 @@ namespace XCAP
      * error message.
      */
     void read (boost::shared_ptr<Path>,
-	       sigc::slot2<void,bool,std::string> callback);
+	       boost::function2<void,bool,std::string> callback);
 
     /* the callback gets only a string :
      * - if the string is empty, all went well ;
@@ -71,14 +71,14 @@ namespace XCAP
     void write (boost::shared_ptr<Path>,
 		const std::string content_type,
 		const std::string content,
-		sigc::slot1<void,std::string> callback);
+		boost::function1<void,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 erase (boost::shared_ptr<Path>,
-		sigc::slot1<void,std::string> callback);
+		boost::function1<void,std::string> callback);
 
     /* implementation of the Ekiga::Service api */
 
diff --git a/lib/engine/engine.cpp b/lib/engine/engine.cpp
index 47219be..46a4e4e 100644
--- a/lib/engine/engine.cpp
+++ b/lib/engine/engine.cpp
@@ -237,14 +237,14 @@ engine_init (int argc,
   audiooutput_core->setup_conf_bridge();
   audioinput_core->setup_conf_bridge();
 
-  sigc::connection conn;
-  conn = hal_core->videoinput_device_added.connect (sigc::mem_fun (*videoinput_core, &Ekiga::VideoInputCore::add_device));
-  conn = hal_core->videoinput_device_removed.connect (sigc::mem_fun (*videoinput_core, &Ekiga::VideoInputCore::remove_device));
-  conn = hal_core->audiooutput_device_added.connect (sigc::mem_fun (*audiooutput_core, &Ekiga::AudioOutputCore::add_device));
-  conn = hal_core->audiooutput_device_removed.connect (sigc::mem_fun (*audiooutput_core, &Ekiga::AudioOutputCore::remove_device));
-  conn = hal_core->audioinput_device_added.connect (sigc::mem_fun (*audioinput_core, &Ekiga::AudioInputCore::add_device));
-  conn = hal_core->audioinput_device_removed.connect (sigc::mem_fun (*audioinput_core, &Ekiga::AudioInputCore::remove_device));
-  // std::vector<sigc::connection> connections;
+  boost::signals::connection conn;
+  conn = hal_core->videoinput_device_added.connect (boost::bind (&Ekiga::VideoInputCore::add_device, boost::ref (*videoinput_core), _1, _2, _3, _4));
+  conn = hal_core->videoinput_device_removed.connect (boost::bind (&Ekiga::VideoInputCore::remove_device, boost::ref (*videoinput_core), _1, _2, _3, _4));
+  conn = hal_core->audiooutput_device_added.connect (boost::bind (&Ekiga::AudioOutputCore::add_device, boost::ref (*audiooutput_core), _1, _2, _3));
+  conn = hal_core->audiooutput_device_removed.connect (boost::bind (&Ekiga::AudioOutputCore::remove_device, boost::ref (*audiooutput_core), _1, _2, _3));
+  conn = hal_core->audioinput_device_added.connect (boost::bind (&Ekiga::AudioInputCore::add_device, boost::ref (*audioinput_core), _1, _2, _3));
+  conn = hal_core->audioinput_device_removed.connect (boost::bind (&Ekiga::AudioInputCore::remove_device, boost::ref (*audioinput_core), _1, _2, _3));
+  // std::vector<boost::signals::connection> connections;
   //connections.push_back (conn);
 
 #if DEBUG_STARTUP
diff --git a/lib/engine/framework/Makefile.am b/lib/engine/framework/Makefile.am
index 2dc1b5f..a6fe21e 100644
--- a/lib/engine/framework/Makefile.am
+++ b/lib/engine/framework/Makefile.am
@@ -52,4 +52,4 @@ libgmframework_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmframework_la_LIBADD = \
 	$(top_builddir)/lib/gmconf/libgmconf.la \
 	$(top_builddir)/lib/platform/libgmplatform.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(XML_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(XML_LIBS)
diff --git a/lib/engine/framework/chain-of-responsibility.h b/lib/engine/framework/chain-of-responsibility.h
index 1abf5b3..399992b 100644
--- a/lib/engine/framework/chain-of-responsibility.h
+++ b/lib/engine/framework/chain-of-responsibility.h
@@ -36,9 +36,10 @@
 #ifndef __CHAIN_OF_RESPONSIBILITY_H__
 #define __CHAIN_OF_RESPONSIBILITY_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
-/* This code uses sigc++ signals to implement the "chain of responsibility"
+/* This code uses boost signals to implement the "chain of responsibility"
  * design pattern -- big words, but simple concept!
  *
  * BASIC IDEA
@@ -67,7 +68,7 @@
  * Ekiga::ChainOfResponsibility<T_request> chain;
  *
  * The handlers will register like this :
- * chain.connect (sigc::mem_fun (this, &Foo::request_handler));
+ * chain.connect (boost::bind (&Foo::request_handler, this));
  *
  * A request handler looks like :
  * bool
@@ -82,10 +83,10 @@
  * }
  *
  * Trying to get a request handled looks like :
- * chain.emit (request);
+ * chain (request);
  *
  * or for better error reporting :
- * if (!chain.emit (request)) {
+ * if (!chain (request)) {
  *
  *   <report that you couldn't deal with a request>
  * }
@@ -116,7 +117,7 @@ namespace Ekiga
 
   template<typename T_request>
   struct ChainOfResponsibility:
-    public sigc::signal1<bool,
+    public boost::signal1<bool,
 			 T_request,
 			 responsibility_accumulator>
   {
diff --git a/lib/engine/framework/form-request-simple.cpp b/lib/engine/framework/form-request-simple.cpp
index 77690ae..1784310 100644
--- a/lib/engine/framework/form-request-simple.cpp
+++ b/lib/engine/framework/form-request-simple.cpp
@@ -37,7 +37,7 @@
 
 #include "form-request-simple.h"
 
-Ekiga::FormRequestSimple::FormRequestSimple (sigc::slot2<void, bool, Form&> callback_): callback(callback_)
+Ekiga::FormRequestSimple::FormRequestSimple (boost::function2<void, bool, Form&> callback_): callback(callback_)
 {
   // nothing
 }
diff --git a/lib/engine/framework/form-request-simple.h b/lib/engine/framework/form-request-simple.h
index 8bf9faf..85211ab 100644
--- a/lib/engine/framework/form-request-simple.h
+++ b/lib/engine/framework/form-request-simple.h
@@ -36,7 +36,8 @@
 #ifndef __FORM_REQUEST_SIMPLE_H__
 #define __FORM_REQUEST_SIMPLE_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "form-builder.h"
 #include "form-request.h"
@@ -59,7 +60,7 @@ namespace Ekiga
      * the request was cancelled ;
      * - a form, which contains the submitted answer (or is empty otherwise)
      */
-    FormRequestSimple (sigc::slot2<void, bool, Form&> callback_);
+    FormRequestSimple (boost::function2<void, bool, Form&> callback_);
 
     ~FormRequestSimple ();
 
@@ -70,7 +71,7 @@ namespace Ekiga
   private:
 
     bool answered;
-    sigc::slot2<void,bool,Form&> callback;
+    boost::function2<void,bool,Form&> callback;
 
   };
 
diff --git a/lib/engine/framework/gmconf-bridge.cpp b/lib/engine/framework/gmconf-bridge.cpp
index 4a0ddb9..dae1435 100644
--- a/lib/engine/framework/gmconf-bridge.cpp
+++ b/lib/engine/framework/gmconf-bridge.cpp
@@ -56,7 +56,7 @@ entry_changed_nt (gpointer /*id*/,
   Ekiga::ConfBridge *bridge = (Ekiga::ConfBridge *) data;
   std::string key = gm_conf_entry_get_key (entry);
 
-  bridge->property_changed.emit (key, entry);
+  bridge->property_changed (key, entry);
 }
 
 
diff --git a/lib/engine/framework/gmconf-bridge.h b/lib/engine/framework/gmconf-bridge.h
index debc538..8c9ee68 100644
--- a/lib/engine/framework/gmconf-bridge.h
+++ b/lib/engine/framework/gmconf-bridge.h
@@ -38,7 +38,8 @@
 #define __GMCONF_BRIDGE_H__
 
 #include <vector>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "gmconf.h"
 #include "services.h"
@@ -93,7 +94,7 @@ namespace Ekiga
        * @param key is the GmConf key whose value changed
        * @param entry is the new GmConf entry
        */
-      sigc::signal2<void, std::string /*key*/, GmConfEntry * /*entry*/> property_changed;
+      boost::signal2<void, std::string /*key*/, GmConfEntry * /*entry*/> property_changed;
 
   protected :
       Ekiga::Service & service;
diff --git a/lib/engine/framework/lister.h b/lib/engine/framework/lister.h
index 1a2875a..75b6522 100644
--- a/lib/engine/framework/lister.h
+++ b/lib/engine/framework/lister.h
@@ -36,7 +36,8 @@
 #ifndef __LISTER_H__
 #define __LISTER_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "ptr_array.h"
 #include "ptr_array_iterator.h"
@@ -89,7 +90,7 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_objects (sigc::slot1<bool, ObjectType &> visitor);
+    void visit_objects (boost::function1<bool, ObjectType &> visitor);
 
     /** Returns a const iterator to the first object of the collection.
      */
@@ -133,9 +134,9 @@ namespace Ekiga
     /** Signals emitted by this object
      *
      */
-    sigc::signal1<void, ObjectType &> object_added;
-    sigc::signal1<void, ObjectType &> object_removed;
-    sigc::signal1<void, ObjectType &> object_updated;
+    boost::signal1<void, ObjectType &> object_added;
+    boost::signal1<void, ObjectType &> object_removed;
+    boost::signal1<void, ObjectType &> object_updated;
 
   private:
 
@@ -192,14 +193,14 @@ Ekiga::Lister<ObjectType>::~Lister ()
        ii++) {
 
     ObjectType *obj = objects[ii];
-    obj->removed.emit ();
+    obj->removed ();
   }
 }
 
 
 template<typename ObjectType>
 void
-Ekiga::Lister<ObjectType>::visit_objects (sigc::slot1<bool, ObjectType &> visitor)
+Ekiga::Lister<ObjectType>::visit_objects (boost::function1<bool, ObjectType &> visitor)
 {
   bool go_on = true;
   for (unsigned int ii = 0;
@@ -244,10 +245,10 @@ template<typename ObjectType>
 void
 Ekiga::Lister<ObjectType>::add_object (ObjectType &object)
 {
-  object.removed.connect (sigc::bind (sigc::mem_fun (this, &Lister::on_object_removed), &object));
-  object.updated.connect (sigc::bind (sigc::mem_fun (this, &Lister::on_object_updated), &object));
+  object.removed.connect (boost::bind (boost::bind (&Lister::on_object_removed, this), &object));
+  object.updated.connect (boost::bind (boost::bind (&Lister::on_object_updated, this), &object));
   objects.add (&object);
-  object_added.emit (object);
+  object_added (object);
 }
 
 
@@ -262,7 +263,7 @@ template<typename ObjectType>
 void
 Ekiga::Lister<ObjectType>::common_removal_steps (ObjectType &object)
 {
-  object_removed.emit (object);
+  object_removed (object);
   objects.remove (&object);
 }
 
@@ -271,7 +272,7 @@ template<typename ObjectType>
 void
 Ekiga::Lister<ObjectType>::on_object_updated (ObjectType *object)
 {
-  object_updated.emit (*object);
+  object_updated (*object);
 }
 
 
diff --git a/lib/engine/framework/menu-builder-tools.cpp b/lib/engine/framework/menu-builder-tools.cpp
index 1569f62..aee2898 100644
--- a/lib/engine/framework/menu-builder-tools.cpp
+++ b/lib/engine/framework/menu-builder-tools.cpp
@@ -47,7 +47,7 @@ Ekiga::ShortMenuBuilder::ShortMenuBuilder (MenuBuilder &builder_)
 void
 Ekiga::ShortMenuBuilder::add_action (const std::string icon,
 				     const std::string label,
-				     sigc::slot0<void> callback)
+				     boost::function0<void> callback)
 {
   if (active)
     builder.add_action (icon, label, callback);
@@ -78,7 +78,7 @@ Ekiga::TriggerMenuBuilder::TriggerMenuBuilder ()
 void
 Ekiga::TriggerMenuBuilder::add_action (const std::string /*icon*/,
 				       const std::string /*label*/,
-				       sigc::slot0<void> callback)
+				       boost::function0<void> callback)
 {
   if (active) {
 
@@ -108,7 +108,7 @@ public:
 
   TemporaryMenuBuilderHelperAction (const std::string icon_,
 				    const std::string label_,
-				    sigc::slot0<void> callback_):
+				    boost::function0<void> callback_):
     icon(icon_), label(label_), callback(callback_)
   {}
 
@@ -125,7 +125,7 @@ private:
 
   std::string icon;
   std::string label;
-  sigc::slot0<void> callback;
+  boost::function0<void> callback;
 };
 
 class TemporaryMenuBuilderHelperSeparator:
@@ -185,7 +185,7 @@ Ekiga::TemporaryMenuBuilder::~TemporaryMenuBuilder ()
 void
 Ekiga::TemporaryMenuBuilder::add_action (const std::string icon,
 					 const std::string label,
-					 sigc::slot0<void> callback)
+					 boost::function0<void> callback)
 {
   TemporaryMenuBuilderHelperAction* helper = NULL;
 
@@ -265,7 +265,7 @@ Ekiga::Activator::~Activator ()
 void
 Ekiga::Activator::add_action (const std::string /*icon*/,
 			      const std::string label_,
-			      sigc::slot0<void> callback)
+			      boost::function0<void> callback)
 {
   if (label == label_) {
 
diff --git a/lib/engine/framework/menu-builder-tools.h b/lib/engine/framework/menu-builder-tools.h
index dee1e19..74a7af7 100644
--- a/lib/engine/framework/menu-builder-tools.h
+++ b/lib/engine/framework/menu-builder-tools.h
@@ -83,7 +83,7 @@ namespace Ekiga
 
     void add_action (const std::string icon,
 		     const std::string label,
-		     sigc::slot0<void> callback);
+		     boost::function0<void> callback);
 
     void add_separator ();
 
@@ -117,7 +117,7 @@ namespace Ekiga
 
     void add_action (const std::string icon,
 		     const std::string label,
-		     sigc::slot0<void> callback);
+		     boost::function0<void> callback);
 
     int size () const;
 
@@ -173,7 +173,7 @@ namespace Ekiga
 
     void add_action (const std::string icon,
 		     const std::string label,
-		     sigc::slot0<void> callback);
+		     boost::function0<void> callback);
 
     void add_separator ();
 
@@ -226,7 +226,7 @@ namespace Ekiga
 
     void add_action (const std::string icon,
 		     const std::string label,
-		     sigc::slot0<void> callback);
+		     boost::function0<void> callback);
 
     void add_separator ();
 
diff --git a/lib/engine/framework/menu-builder.cpp b/lib/engine/framework/menu-builder.cpp
index 0de4dda..a9ffb7a 100644
--- a/lib/engine/framework/menu-builder.cpp
+++ b/lib/engine/framework/menu-builder.cpp
@@ -44,7 +44,7 @@ Ekiga::MenuBuilder::~MenuBuilder ()
 void
 Ekiga::MenuBuilder::add_action (const std::string /*icon*/,
 				const std::string /*label*/,
-				sigc::slot0<void> /*callback*/)
+				boost::function0<void> /*callback*/)
 {
   // nothing
 }
diff --git a/lib/engine/framework/menu-builder.h b/lib/engine/framework/menu-builder.h
index 54b18db..c67d712 100644
--- a/lib/engine/framework/menu-builder.h
+++ b/lib/engine/framework/menu-builder.h
@@ -37,7 +37,8 @@
 #define __MENU_BUILDER_H__
 
 #include <string>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 
 namespace Ekiga
@@ -79,7 +80,7 @@ namespace Ekiga
 
     virtual void add_action (const std::string icon,
 			     const std::string label,
-			     sigc::slot0<void> callback);
+			     boost::function0<void> callback);
 
     virtual void add_separator ();
 
diff --git a/lib/engine/framework/menu-xml.cpp b/lib/engine/framework/menu-xml.cpp
index 6f01140..57f72fd 100644
--- a/lib/engine/framework/menu-xml.cpp
+++ b/lib/engine/framework/menu-xml.cpp
@@ -171,14 +171,14 @@ populate_item (Ekiga::ServiceCore &core,
 	if (is_external) {
 
 	  builder.add_action (icon, label,
-			      sigc::bind (sigc::ptr_fun (run_command),
+			      boost::bind (&run_command,
 					  command));
 	} else {
 
 	  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),
+				boost::bind (&pull_trigger,
 					    trigger));
 	}
 	break;
diff --git a/lib/engine/framework/personal-details.h b/lib/engine/framework/personal-details.h
index d28415a..04ddf97 100644
--- a/lib/engine/framework/personal-details.h
+++ b/lib/engine/framework/personal-details.h
@@ -37,7 +37,8 @@
 #define __PERSONAL_DETAILS_H__
 
 #include <string>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "services.h"
 
@@ -65,7 +66,7 @@ namespace Ekiga
     virtual void set_presence_info (const std::string presence,
                                     const std::string status) = 0;
 
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
   };
 };
 
diff --git a/lib/engine/framework/reflister.h b/lib/engine/framework/reflister.h
index 98cacf3..5b2ff25 100644
--- a/lib/engine/framework/reflister.h
+++ b/lib/engine/framework/reflister.h
@@ -37,7 +37,8 @@
 #ifndef __REFLISTER_H__
 #define __REFLISTER_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <list>
 
 #include <boost/smart_ptr.hpp>
@@ -51,18 +52,18 @@ namespace Ekiga
   {
   protected:
 
-    typedef std::map<boost::shared_ptr<ObjectType>,std::list<sigc::connection> > container_type;
+    typedef std::map<boost::shared_ptr<ObjectType>,std::list<boost::signals::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, boost::shared_ptr<ObjectType> > visitor);
+    void visit_objects (boost::function1<bool, boost::shared_ptr<ObjectType> > visitor);
 
     void add_object (boost::shared_ptr<ObjectType> obj);
 
     void add_connection (boost::shared_ptr<ObjectType> obj,
-			 sigc::connection connection);
+			 boost::signals::connection connection);
 
     void remove_object (boost::shared_ptr<ObjectType> obj);
 
@@ -74,9 +75,9 @@ namespace Ekiga
     const_iterator begin () const;
     const_iterator end () const;
 
-    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;
+    boost::signal1<void, boost::shared_ptr<ObjectType> > object_added;
+    boost::signal1<void, boost::shared_ptr<ObjectType> > object_removed;
+    boost::signal1<void, boost::shared_ptr<ObjectType> > object_updated;
 
   private:
     container_type objects;
@@ -91,7 +92,7 @@ Ekiga::RefLister<ObjectType>::~RefLister ()
        iter != objects.end ();
        ++iter) {
 
-    for (std::list<sigc::connection>::iterator conn_iter = iter->second.begin ();
+    for (std::list<boost::signals::connection>::iterator conn_iter = iter->second.begin ();
 	 conn_iter != iter->second.end ();
 	 ++conn_iter) {
 
@@ -102,7 +103,7 @@ Ekiga::RefLister<ObjectType>::~RefLister ()
 
 template<typename ObjectType>
 void
-Ekiga::RefLister<ObjectType>::visit_objects (sigc::slot1<bool, boost::shared_ptr<ObjectType> > visitor)
+Ekiga::RefLister<ObjectType>::visit_objects (boost::function1<bool, boost::shared_ptr<ObjectType> > visitor)
 {
   bool go_on = true;
   for (typename container_type::iterator iter = objects.begin ();
@@ -115,16 +116,16 @@ template<typename ObjectType>
 void
 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)));
+  objects[obj].push_back (obj->updated.connect (boost::bind (boost::ref (object_updated), obj)));
+  objects[obj].push_back (obj->removed.connect (boost::bind (&Ekiga::RefLister<ObjectType>::remove_object, this, obj)));
 
-  object_added.emit (obj);
+  object_added (obj);
 }
 
 template<typename ObjectType>
 void
 Ekiga::RefLister<ObjectType>::add_connection (boost::shared_ptr<ObjectType> obj,
-					      sigc::connection connection)
+					      boost::signals::connection connection)
 {
   objects[obj].push_back (connection);
 }
@@ -133,13 +134,13 @@ template<typename ObjectType>
 void
 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 ();
+  std::list<boost::signals::connection> connections = objects[obj];
+  for (std::list<boost::signals::connection>::iterator iter = connections.begin ();
        iter != connections.end ();
        ++iter)
     iter->disconnect ();
   objects.erase (objects.find (obj));
-  object_removed.emit (obj);
+  object_removed (obj);
 }
 
 template<typename ObjectType>
diff --git a/lib/engine/framework/runtime-glib.cpp b/lib/engine/framework/runtime-glib.cpp
index c74c2a2..0d5fd15 100644
--- a/lib/engine/framework/runtime-glib.cpp
+++ b/lib/engine/framework/runtime-glib.cpp
@@ -45,12 +45,12 @@ static GAsyncQueue* queue;
 
 struct message
 {
-  message (sigc::slot0<void> _action,
+  message (boost::function0<void> _action,
 	   unsigned int _seconds): action(_action),
 				   seconds(_seconds)
   {}
 
-  sigc::slot0<void> action;
+  boost::function0<void> action;
   unsigned int seconds;
 };
 
@@ -162,7 +162,7 @@ Ekiga::Runtime::quit ()
 }
 
 void
-Ekiga::Runtime::run_in_main (sigc::slot0<void> action,
+Ekiga::Runtime::run_in_main (boost::function0<void> action,
 			     unsigned int seconds)
 {
   g_async_queue_push (queue, (gpointer)(new struct message (action, seconds)));
diff --git a/lib/engine/framework/runtime.h b/lib/engine/framework/runtime.h
index df6d4ab..1bb29a8 100644
--- a/lib/engine/framework/runtime.h
+++ b/lib/engine/framework/runtime.h
@@ -34,7 +34,8 @@
  *
  */
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #ifndef __RUNTIME_H__
 #define __RUNTIME_H__
@@ -57,7 +58,7 @@ namespace Ekiga
 
     void quit (); // depends on the implementation
 
-    void run_in_main (sigc::slot0<void> action,
+    void run_in_main (boost::function0<void> action,
 		      unsigned int seconds = 0); // depends on the implementation
   };
 
diff --git a/lib/engine/framework/services.h b/lib/engine/framework/services.h
index bc122e9..f646c61 100644
--- a/lib/engine/framework/services.h
+++ b/lib/engine/framework/services.h
@@ -44,7 +44,8 @@
 
 #include <list>
 #include <string>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 namespace Ekiga
 {
@@ -83,7 +84,7 @@ namespace Ekiga
 
     void dump (std::ostream &stream) const;
 
-    sigc::signal1<void, ServicePtr> service_added;
+    boost::signal1<void, ServicePtr> service_added;
 
   private:
 
diff --git a/lib/engine/gui/gtk-core/menu-builder-gtk.cpp b/lib/engine/gui/gtk-core/menu-builder-gtk.cpp
index 5655c5d..934a3fa 100644
--- a/lib/engine/gui/gtk-core/menu-builder-gtk.cpp
+++ b/lib/engine/gui/gtk-core/menu-builder-gtk.cpp
@@ -41,10 +41,10 @@
 
 struct Action
 {
-  Action (sigc::slot0<void> _callback): callback (_callback)
+  Action (boost::function0<void> _callback): callback (_callback)
   {}
 
-  sigc::slot0<void> callback;
+  boost::function0<void> callback;
 };
 
 static void
@@ -73,7 +73,7 @@ on_item_activate (GtkMenuItem *item,
 void
 MenuBuilderGtk::add_action (const std::string icon,
 			    const std::string label,
-			    const sigc::slot0<void> callback)
+			    const boost::function0<void> callback)
 {
   GtkWidget *item = NULL;
   GtkWidget *image = NULL;
diff --git a/lib/engine/gui/gtk-core/menu-builder-gtk.h b/lib/engine/gui/gtk-core/menu-builder-gtk.h
index e69bb8b..3852a02 100644
--- a/lib/engine/gui/gtk-core/menu-builder-gtk.h
+++ b/lib/engine/gui/gtk-core/menu-builder-gtk.h
@@ -55,7 +55,7 @@ public:
 
   void add_action (const std::string icon,
 		   const std::string label,
-		   const sigc::slot0<void> callback);
+		   const boost::function0<void> callback);
 
   void add_separator ();
 
diff --git a/lib/engine/gui/gtk-core/optional-buttons-gtk.cpp b/lib/engine/gui/gtk-core/optional-buttons-gtk.cpp
index 8b8be3d..266c906 100644
--- a/lib/engine/gui/gtk-core/optional-buttons-gtk.cpp
+++ b/lib/engine/gui/gtk-core/optional-buttons-gtk.cpp
@@ -43,7 +43,7 @@
 
 struct OptionalButtonsGtkHelper
 {
-  sigc::slot0<void> callback;
+  boost::function0<void> callback;
 };
 
 static void
@@ -106,7 +106,7 @@ OptionalButtonsGtk::reset ()
     struct OptionalButtonsGtkHelper* helper =
       (struct OptionalButtonsGtkHelper*)g_object_get_data (G_OBJECT (iter->second),
 							   "ekiga-optional-buttons-gtk-helper");
-    helper->callback = sigc::slot0<void> ();
+    helper->callback = boost::function0<void> ();
   }
   nbr_elements = 0;
 }
@@ -114,7 +114,7 @@ OptionalButtonsGtk::reset ()
 void
 OptionalButtonsGtk::add_action (const std::string icon,
 				G_GNUC_UNUSED const std::string label,
-				const sigc::slot0<void> callback)
+				const boost::function0<void> callback)
 {
   buttons_type::iterator iter = buttons.find (icon);
 
diff --git a/lib/engine/gui/gtk-core/optional-buttons-gtk.h b/lib/engine/gui/gtk-core/optional-buttons-gtk.h
index 834b6a7..88ad47b 100644
--- a/lib/engine/gui/gtk-core/optional-buttons-gtk.h
+++ b/lib/engine/gui/gtk-core/optional-buttons-gtk.h
@@ -100,7 +100,7 @@ public:
 
   void add_action (const std::string icon,
 		   const std::string label,
-		   const sigc::slot0<void> callback);
+		   const boost::function0<void> callback);
 
   void add_separator ()
   {}
diff --git a/lib/engine/gui/gtk-frontend/addressbook-window.cpp b/lib/engine/gui/gtk-frontend/addressbook-window.cpp
index 757974f..685bb29 100644
--- a/lib/engine/gui/gtk-frontend/addressbook-window.cpp
+++ b/lib/engine/gui/gtk-frontend/addressbook-window.cpp
@@ -52,7 +52,7 @@ struct _AddressBookWindowPrivate
   _AddressBookWindowPrivate (Ekiga::ContactCore & _core):core (_core) { }
 
   Ekiga::ContactCore & core;
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
   GtkWidget *tree_view;
   GtkWidget *notebook;
   GtkTreeSelection *selection;
@@ -93,6 +93,13 @@ static void on_core_updated (gpointer data);
 
 
 /* DESCRIPTION  : Called at startup to populate the window
+ * BEHAVIOR     :
+ * PRE          : The given GtkWidget pointer must be an addressbook window.
+ */
+static bool on_visit_sources (Ekiga::SourcePtr source,
+			      gpointer data);
+
+/* DESCRIPTION  : Called at startup to populate the window
  * BEHAVIOR     : 
  * PRE          : The given GtkWidget pointer must be an SearchBook GObject.
  */
@@ -249,13 +256,19 @@ on_core_updated (gpointer data)
   gtk_widget_show_all (menu_builder.menu);
 }
 
+static bool
+on_visit_sources (Ekiga::SourcePtr source,
+		  gpointer data)
+{
+  on_source_added (source, data);
+  return true;
+}
 
 static void
 on_source_added (Ekiga::SourcePtr source,
 		 gpointer data)
 {
-  source->visit_books (sigc::bind (sigc::ptr_fun (visit_books),
-				   source, data));
+  source->visit_books (boost::bind (&visit_books, _1, source, data));
 }
 
 
@@ -580,7 +593,7 @@ addressbook_window_finalize (GObject *obj)
 
   self = ADDRESSBOOK_WINDOW (obj);
 
-  for (std::vector<sigc::connection>::iterator iter
+  for (std::vector<boost::signals::connection>::iterator iter
 	 = self->priv->connections.begin ();
        iter != self->priv->connections.end ();
        iter++)
@@ -642,7 +655,7 @@ addressbook_window_new (Ekiga::ContactCore &core)
 {
   AddressBookWindow *self = NULL;
 
-  sigc::connection conn;
+  boost::signals::connection conn;
 
   GtkWidget *menu_bar = NULL;
   GtkWidget *frame = NULL;
@@ -676,7 +689,7 @@ addressbook_window_new (Ekiga::ContactCore &core)
   gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar),
                          self->priv->menu_item_core);
   g_object_ref (self->priv->menu_item_core);
-  conn = core.updated.connect (sigc::bind (sigc::ptr_fun (on_core_updated),
+  conn = core.updated.connect (boost::bind (&on_core_updated,
                                            (gpointer) self));
   self->priv->connections.push_back (conn);
   on_core_updated (self); // This will add static and dynamic actions
@@ -750,25 +763,24 @@ addressbook_window_new (Ekiga::ContactCore &core)
                     G_CALLBACK (on_notebook_realize), self);
   gtk_paned_add2 (GTK_PANED (hpaned), self->priv->notebook);
 
-  conn = core.source_added.connect (sigc::bind (sigc::ptr_fun (on_source_added), (gpointer) self));
+  conn = core.source_added.connect (boost::bind (&on_source_added, _1, (gpointer) self));
   self->priv->connections.push_back (conn);
 
-  conn = core.book_updated.connect (sigc::bind (sigc::ptr_fun (on_book_updated),
+  conn = core.book_updated.connect (boost::bind (&on_book_updated, _1, _2,
                                                 (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.book_added.connect (sigc::bind (sigc::ptr_fun (on_book_added), 
+  conn = core.book_added.connect (boost::bind (&on_book_added, _1, _2,
                                               (gpointer) self));
   self->priv->connections.push_back (conn);
   conn =
-    core.book_removed.connect (sigc::bind (sigc::ptr_fun (on_book_removed), 
+    core.book_removed.connect (boost::bind (&on_book_removed, _1, _2,
                                            (gpointer) self));
   self->priv->connections.push_back (conn);
 
-  conn = core.questions.connect (sigc::bind (sigc::ptr_fun (on_handle_questions), (gpointer) self));
+  conn = core.questions.connect (boost::bind (&on_handle_questions, _1, (gpointer) self));
   self->priv->connections.push_back (conn);
 
-  core.visit_sources (sigc::bind_return (sigc::bind (sigc::ptr_fun (on_source_added),
-						     (gpointer) self), true));
+  core.visit_sources (boost::bind (on_visit_sources, _1, (gpointer) self));
 
   return GTK_WIDGET (self);
 }
diff --git a/lib/engine/gui/gtk-frontend/book-view-gtk.cpp b/lib/engine/gui/gtk-frontend/book-view-gtk.cpp
index e0cb92e..b053341 100644
--- a/lib/engine/gui/gtk-frontend/book-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/book-view-gtk.cpp
@@ -60,7 +60,7 @@ struct _BookViewGtkPrivate
   GtkWidget *scrolled_window;
 
   Ekiga::BookPtr book;
-  std::list<sigc::connection> connections;
+  std::list<boost::signals::connection> connections;
 };
 
 
@@ -79,6 +79,12 @@ static GObjectClass *parent_class = NULL;
  * Callbacks
  */
 
+/* DESCRIPTION  : Called when the a contact has been added in a Book.
+ * BEHAVIOR     : Update the BookView.
+ * PRE          : The gpointer must point to the BookViewGtk GObject.
+ */
+static bool on_visit_contacts (Ekiga::ContactPtr contact,
+			       gpointer data);
 
 /* DESCRIPTION  : Called when the a contact has been added in a Book.
  * BEHAVIOR     : Update the BookView.
@@ -190,6 +196,15 @@ book_view_gtk_find_iter_for_contact (BookViewGtk *view,
 
 
 /* Implementation of the callbacks */
+static bool
+on_visit_contacts (Ekiga::ContactPtr contact,
+		   gpointer data)
+{
+  on_contact_added (contact, data);
+  return true;
+}
+
+
 static void
 on_contact_added (Ekiga::ContactPtr contact,
 		  gpointer data)
@@ -435,7 +450,7 @@ book_view_gtk_dispose (GObject *obj)
 
   view = BOOK_VIEW_GTK (obj);
 
-  for (std::list<sigc::connection>::iterator iter
+  for (std::list<boost::signals::connection>::iterator iter
 	 = view->priv->connections.begin ();
        iter != view->priv->connections.end ();
        ++iter)
@@ -614,14 +629,14 @@ book_view_gtk_new (Ekiga::BookPtr book)
   gtk_box_pack_start (GTK_BOX (result->priv->vbox), result->priv->statusbar, FALSE, TRUE, 0);
 
   /* connect to the signals */
-  result->priv->connections.push_back (book->contact_added.connect (sigc::bind (sigc::ptr_fun (on_contact_added), (gpointer)result)));
-  result->priv->connections.push_back (book->contact_updated.connect (sigc::bind (sigc::ptr_fun (on_contact_updated), (gpointer)result)));
-  result->priv->connections.push_back (book->contact_removed.connect (sigc::bind (sigc::ptr_fun (on_contact_removed), (gpointer)result)));
-  result->priv->connections.push_back (book->updated.connect (sigc::bind (sigc::ptr_fun (on_updated), (gpointer)result)));
+  result->priv->connections.push_back (book->contact_added.connect (boost::bind (&on_contact_added, _1, (gpointer)result)));
+  result->priv->connections.push_back (book->contact_updated.connect (boost::bind (&on_contact_updated, _1, (gpointer)result)));
+  result->priv->connections.push_back (book->contact_removed.connect (boost::bind (&on_contact_removed, _1, (gpointer)result)));
+  result->priv->connections.push_back (book->updated.connect (boost::bind (&on_updated, (gpointer)result)));
 
 
   /* populate */
-  book->visit_contacts (sigc::bind_return (sigc::bind (sigc::ptr_fun (on_contact_added), (gpointer)result),true));
+  book->visit_contacts (boost::bind (&on_visit_contacts, _1, (gpointer)result));
 
   return (GtkWidget *) result;
 }
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 9c5d631..d795180 100644
--- a/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
@@ -61,8 +61,8 @@ static void
 destroy_connections (gpointer data,
 		     GObject */*unused*/)
 {
-  std::list<sigc::connection> *conns
-    = (std::list<sigc::connection> *)data;
+  std::list<boost::signals::connection> *conns
+    = (std::list<boost::signals::connection> *)data;
 
   delete conns;
 }
@@ -125,6 +125,14 @@ on_contact_added (Ekiga::ContactPtr contact,
 		      -1);
 }
 
+static bool
+on_visit_contacts (Ekiga::ContactPtr contact,
+		   GtkListStore *store)
+{
+  on_contact_added (contact, store);
+  return true;
+}
+
 /* react to user clicks */
 static gint
 on_clicked (GtkWidget *tree,
@@ -160,7 +168,7 @@ on_clicked (GtkWidget *tree,
 	if (!builder.empty())
 	  builder.add_separator ();
 	builder.add_action ("clear", _("Clear List"),
-			    sigc::mem_fun (book, &History::Book::clear));
+			    boost::bind (&History::Book::clear, book));
 	gtk_widget_show_all (builder.menu);
 	gtk_menu_popup (GTK_MENU (builder.menu), NULL, NULL,
 			NULL, NULL, event->button, event->time);
@@ -192,13 +200,13 @@ GtkWidget *
 call_history_view_gtk_new (boost::shared_ptr<History::Book> book)
 {
   GtkWidget *result = NULL;
-  std::list<sigc::connection> *conns = NULL;
+  std::list<boost::signals::connection> *conns = NULL;
   GtkListStore *store = NULL;
   GtkWidget *tree = NULL;
   GtkTreeViewColumn *column = NULL;
   GtkCellRenderer *renderer = NULL;
   GtkTreeSelection *selection = NULL;
-  sigc::connection connection;
+  boost::signals::connection connection;
 
   result = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (result),
@@ -207,7 +215,7 @@ call_history_view_gtk_new (boost::shared_ptr<History::Book> book)
   /* we don't leak conns : it will be freed when we die... and it will
    * prevent the signals to come to a now-dead GObject
    */
-  conns = new std::list<sigc::connection>;
+  conns = new std::list<boost::signals::connection>;
   g_object_weak_ref (G_OBJECT (result), destroy_connections, (gpointer)conns);
 
   /* build the store then the tree */
@@ -247,13 +255,13 @@ call_history_view_gtk_new (boost::shared_ptr<History::Book> book)
 		    G_CALLBACK (on_clicked), &(*book));
 
   /* connect to the signals */
-  connection = book->cleared.connect (sigc::bind (sigc::ptr_fun (gtk_list_store_clear), store));
+  connection = book->cleared.connect (boost::bind (&gtk_list_store_clear, store));
   conns->push_front (connection);
-  connection = book->contact_added.connect (sigc::bind (sigc::ptr_fun (on_contact_added), store));
+  connection = book->contact_added.connect (boost::bind (&on_contact_added, _1, store));
   conns->push_front (connection);
 
   /* populate */
-  book->visit_contacts (sigc::bind_return(sigc::bind (sigc::ptr_fun (on_contact_added), store), true));
+  book->visit_contacts (boost::bind (&on_visit_contacts, _1, store));
 
   return result;
 }
diff --git a/lib/engine/gui/gtk-frontend/chat-area.cpp b/lib/engine/gui/gtk-frontend/chat-area.cpp
index dfe4a11..2bacaac 100644
--- a/lib/engine/gui/gtk-frontend/chat-area.cpp
+++ b/lib/engine/gui/gtk-frontend/chat-area.cpp
@@ -58,7 +58,7 @@ class ChatAreaHelper;
 struct _ChatAreaPrivate
 {
   Ekiga::Chat* chat;
-  sigc::connection connection;
+  boost::signals::connection connection;
   boost::shared_ptr<ChatAreaHelper> helper;
   GmTextBufferEnhancer* enhancer;
   GtkWidget* smiley_menu;
@@ -688,7 +688,7 @@ chat_area_set_property (GObject* obj,
   case CHAT_AREA_PROP_CHAT:
     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->connection = self->priv->chat->removed.connect (boost::bind (&on_chat_removed, self));
     self->priv->helper = boost::shared_ptr<ChatAreaHelper>(new ChatAreaHelper (self));
     self->priv->chat->connect (self->priv->helper);
     break;
diff --git a/lib/engine/gui/gtk-frontend/chat-window.cpp b/lib/engine/gui/gtk-frontend/chat-window.cpp
index 4529f3f..ac54ff4 100644
--- a/lib/engine/gui/gtk-frontend/chat-window.cpp
+++ b/lib/engine/gui/gtk-frontend/chat-window.cpp
@@ -48,7 +48,7 @@ struct _ChatWindowPrivate
   {}
 
   Ekiga::ChatCore& core;
-  std::list<sigc::connection> connections;
+  std::list<boost::signals::connection> connections;
 
   GtkWidget* notebook;
 };
@@ -267,11 +267,11 @@ static bool
 on_dialect_added (ChatWindow* self,
 		  Ekiga::DialectPtr dialect)
 {
-  self->priv->connections.push_front (dialect->simple_chat_added.connect (sigc::hide_return (sigc::bind<0> (sigc::ptr_fun (on_simple_chat_added), self))));
-  self->priv->connections.push_front (dialect->multiple_chat_added.connect (sigc::hide_return (sigc::bind<0> (sigc::ptr_fun (on_multiple_chat_added), self))));
+  self->priv->connections.push_front (dialect->simple_chat_added.connect (boost::bind (&on_simple_chat_added, self, _1)));
+  self->priv->connections.push_front (dialect->multiple_chat_added.connect (boost::bind (&on_multiple_chat_added, self, _1)));
 
-  dialect->visit_simple_chats (sigc::bind<0> (sigc::ptr_fun (on_simple_chat_added), self));
-  dialect->visit_multiple_chats (sigc::bind<0> (sigc::ptr_fun (on_multiple_chat_added), self));
+  dialect->visit_simple_chats (boost::bind (&on_simple_chat_added, self, _1));
+  dialect->visit_multiple_chats (boost::bind (&on_multiple_chat_added, self, _1));
 
   return true;
 }
@@ -319,7 +319,7 @@ on_simple_chat_added (ChatWindow* self,
   g_signal_connect (page, "message-notice-event",
 		    G_CALLBACK (on_message_notice_event), self);
 
-  self->priv->connections.push_front (chat->user_requested.connect (sigc::bind (sigc::ptr_fun (on_some_chat_user_requested), self, page)));
+  self->priv->connections.push_front (chat->user_requested.connect (boost::bind (&on_some_chat_user_requested, self, page)));
 
   return true;
 }
@@ -339,7 +339,7 @@ on_multiple_chat_added (ChatWindow* self,
 				  page, label);
   gtk_widget_show_all (page);
 
-  self->priv->connections.push_front (chat->user_requested.connect (sigc::bind (sigc::ptr_fun (on_some_chat_user_requested), self, page)));
+  self->priv->connections.push_front (chat->user_requested.connect (boost::bind (&on_some_chat_user_requested, self, page)));
 
   return true;
 }
@@ -375,7 +375,7 @@ chat_window_finalize (GObject* obj)
 
   self = CHAT_WINDOW (obj);
 
-  for (std::list<sigc::connection>::iterator iter
+  for (std::list<boost::signals::connection>::iterator iter
 	 = self->priv->connections.begin ();
        iter != self->priv->connections.end ();
        ++iter)
@@ -491,8 +491,8 @@ chat_window_new (Ekiga::ChatCore& core,
   g_signal_connect (result->priv->notebook, "switch-page",
 		    G_CALLBACK (on_switch_page), result);
 
-  result->priv->connections.push_front (core.dialect_added.connect (sigc::hide_return(sigc::bind<0>(sigc::ptr_fun (on_dialect_added), result))));
-  core.visit_dialects (sigc::bind<0>(sigc::ptr_fun (on_dialect_added), result));
+  result->priv->connections.push_front (core.dialect_added.connect (boost::bind (&on_dialect_added, result, _1)));
+  core.visit_dialects (boost::bind (&on_dialect_added, result, _1));
 
   return (GtkWidget*)result;
 }
diff --git a/lib/engine/gui/gtk-frontend/presentity-view.cpp b/lib/engine/gui/gtk-frontend/presentity-view.cpp
index ab9229c..db2cc07 100644
--- a/lib/engine/gui/gtk-frontend/presentity-view.cpp
+++ b/lib/engine/gui/gtk-frontend/presentity-view.cpp
@@ -40,8 +40,8 @@
 struct _PresentityViewPrivate
 {
   Ekiga::PresentityPtr presentity;
-  sigc::connection updated_conn;
-  sigc::connection removed_conn;
+  boost::signals::connection updated_conn;
+  boost::signals::connection removed_conn;
 
   /* we contain those, so no need to unref them */
   GtkWidget* presence_image;
@@ -108,8 +108,8 @@ presentity_view_set_presentity (PresentityView* self,
   g_return_if_fail ( !self->priv->presentity);
 
   self->priv->presentity = presentity;
-  self->priv->updated_conn = self->priv->presentity->updated.connect (sigc::bind (sigc::ptr_fun (on_presentity_updated), self));
-  self->priv->removed_conn = self->priv->presentity->removed.connect (sigc::bind (sigc::ptr_fun (on_presentity_removed), self));
+  self->priv->updated_conn = self->priv->presentity->updated.connect (boost::bind (&on_presentity_updated, self));
+  self->priv->removed_conn = self->priv->presentity->removed.connect (boost::bind (&on_presentity_removed, self));
 
   on_presentity_updated (self);
 }
diff --git a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
index e193ee2..8769330 100644
--- a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
@@ -58,7 +58,7 @@ struct _RosterViewGtkPrivate
 {
   _RosterViewGtkPrivate (Ekiga::PresenceCore &_core) : core (_core) { }
 
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
   GtkTreeStore *store;
   GtkTreeView *tree_view;
   GtkWidget *vbox;
@@ -228,6 +228,14 @@ static void expand_cell_data_func (GtkTreeViewColumn *column,
  * BEHAVIOR     : Visits the cluster's heaps, and add them to the view
  * PRE          : /
  */
+static bool on_visit_clusters (Ekiga::ClusterPtr cluster,
+			       gpointer data);
+
+
+/* DESCRIPTION  : Called when a new cluster has been added
+ * BEHAVIOR     : Visits the cluster's heaps, and add them to the view
+ * PRE          : /
+ */
 static void on_cluster_added (Ekiga::ClusterPtr cluster,
 			      gpointer data);
 
@@ -849,12 +857,19 @@ expand_cell_data_func (GtkTreeViewColumn *column,
                 NULL);
 }
 
+static bool
+on_visit_clusters (Ekiga::ClusterPtr cluster,
+		   gpointer data)
+{
+  on_cluster_added (cluster, data);
+  return true;
+}
+
 static void
 on_cluster_added (Ekiga::ClusterPtr cluster,
 		  gpointer data)
 {
-  cluster->visit_heaps (sigc::bind (sigc::ptr_fun (visit_heaps),
-				    cluster, data));
+  cluster->visit_heaps (boost::bind (&visit_heaps, _1, cluster, data));
 }
 
 static bool
@@ -863,7 +878,7 @@ visit_heaps (Ekiga::HeapPtr heap,
 	     gpointer data)
 {
   on_heap_updated (cluster, heap, data);
-  heap->visit_presentities (sigc::bind (sigc::ptr_fun (visit_presentities), cluster, heap, data));
+  heap->visit_presentities (boost::bind (&visit_presentities, _1, cluster, heap, data));
 
   return true;
 }
@@ -874,7 +889,7 @@ on_heap_added (Ekiga::ClusterPtr cluster,
 	       gpointer data)
 {
   on_heap_updated (cluster, heap, data);
-  heap->visit_presentities (sigc::bind (sigc::ptr_fun (visit_presentities), cluster, heap, data));
+  heap->visit_presentities (boost::bind (&visit_presentities, _1, cluster, heap, data));
 }
 
 static void
@@ -1237,7 +1252,7 @@ roster_view_gtk_dispose (GObject *obj)
 
   view = ROSTER_VIEW_GTK (obj);
 
-  for (std::vector<sigc::connection>::iterator iter
+  for (std::vector<boost::signals::connection>::iterator iter
 	 = view->priv->connections.begin ();
        iter != view->priv->connections.end ();
        iter++)
@@ -1368,7 +1383,7 @@ roster_view_gtk_new (Ekiga::PresenceCore &core)
 {
   RosterViewGtk *self = NULL;
 
-  sigc::connection conn;
+  boost::signals::connection conn;
 
   GtkTreeModel *filtered = NULL;
   GtkTreeSelection *selection = NULL;
@@ -1501,32 +1516,25 @@ roster_view_gtk_new (Ekiga::PresenceCore &core)
 
 
   /* Relay signals */
-  conn = core.cluster_added.connect (sigc::bind (sigc::ptr_fun (on_cluster_added),
- 						 (gpointer) self));
+  conn = core.cluster_added.connect (boost::bind (&on_cluster_added, _1, (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.heap_added.connect (sigc::bind (sigc::ptr_fun (on_heap_added),
- 					      (gpointer) self));
+  conn = core.heap_added.connect (boost::bind (&on_heap_added, _1, _2, (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.heap_updated.connect (sigc::bind (sigc::ptr_fun (on_heap_updated),
- 						(gpointer) self));
+  conn = core.heap_updated.connect (boost::bind (&on_heap_updated, _1, _2, (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.heap_removed.connect (sigc::bind (sigc::ptr_fun (on_heap_removed),
- 						(gpointer) self));
+  conn = core.heap_removed.connect (boost::bind (&on_heap_removed, _1, _2, (gpointer) self));
 
   self->priv->connections.push_back (conn);
-  conn = core.presentity_added.connect (sigc::bind (sigc::ptr_fun (on_presentity_added),
- 						    (gpointer) self));
+  conn = core.presentity_added.connect (boost::bind (&on_presentity_added, _1, _2, _3, (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.presentity_updated.connect (sigc::bind (sigc::ptr_fun (on_presentity_updated),
- 						      self));
+  conn = core.presentity_updated.connect (boost::bind (&on_presentity_updated, _1, _2, _3, self));
   self->priv->connections.push_back (conn);
-  conn = core.presentity_removed.connect (sigc::bind (sigc::ptr_fun (on_presentity_removed),
- 						      (gpointer) self));
+  conn = core.presentity_removed.connect (boost::bind (&on_presentity_removed, _1, _2, _3, (gpointer) self));
   self->priv->connections.push_back (conn);
-  conn = core.questions.connect (sigc::bind (sigc::ptr_fun (on_handle_questions), (gpointer) self));
+  conn = core.questions.connect (boost::bind (&on_handle_questions, _1, (gpointer) self));
   self->priv->connections.push_back (conn);
 
-  core.visit_clusters (sigc::bind_return (sigc::bind (sigc::ptr_fun (on_cluster_added), (gpointer) self), true));
+  core.visit_clusters (boost::bind (&on_visit_clusters, _1, (gpointer) self));
 
   /* Notifiers */
   gm_conf_notifier_add ("/apps/" PACKAGE_NAME "/contacts/show_offline_contacts",
diff --git a/lib/engine/hal/Makefile.am b/lib/engine/hal/Makefile.am
index dad228c..e456d45 100644
--- a/lib/engine/hal/Makefile.am
+++ b/lib/engine/hal/Makefile.am
@@ -13,4 +13,4 @@ libgmhal_la_SOURCES = \
 	$(hal_dir)/hal-core.h		\
 	$(hal_dir)/hal-core.cpp
 
-libgmhal_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(SIGC_LIBS)
+libgmhal_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(BOOST_LIBS)
diff --git a/lib/engine/hal/hal-core.cpp b/lib/engine/hal/hal-core.cpp
index 1cdc661..96823c6 100644
--- a/lib/engine/hal/hal-core.cpp
+++ b/lib/engine/hal/hal-core.cpp
@@ -57,23 +57,23 @@ HalCore::~HalCore ()
 void HalCore::add_manager (HalManager &manager)
 {
   managers.insert (&manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager.videoinput_device_added.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_videoinput_device_added), &manager));
-  manager.videoinput_device_removed.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_videoinput_device_removed), &manager));
+  manager.videoinput_device_added.connect (boost::bind (&HalCore::on_videoinput_device_added, this, _1, _2, _3, &manager));
+  manager.videoinput_device_removed.connect (boost::bind (&HalCore::on_videoinput_device_removed, this, _1, _2, _3, &manager));
 
-  manager.audioinput_device_added.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_audioinput_device_added), &manager));
-  manager.audioinput_device_removed.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_audioinput_device_removed), &manager));
+  manager.audioinput_device_added.connect (boost::bind (&HalCore::on_audioinput_device_added, this, _1, _2, &manager));
+  manager.audioinput_device_removed.connect (boost::bind (&HalCore::on_audioinput_device_removed, this, _1, _2, &manager));
 
-  manager.audiooutput_device_added.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_audiooutput_device_added), &manager));
-  manager.audiooutput_device_removed.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_audiooutput_device_removed), &manager));
+  manager.audiooutput_device_added.connect (boost::bind (&HalCore::on_audiooutput_device_added, this, _1, _2, &manager));
+  manager.audiooutput_device_removed.connect (boost::bind (&HalCore::on_audiooutput_device_removed, this, _1, _2, &manager));
 
-  manager.network_interface_up.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_network_interface_up), &manager));
-  manager.network_interface_down.connect (sigc::bind (sigc::mem_fun (this, &HalCore::on_network_interface_down), &manager));
+  manager.network_interface_up.connect (boost::bind (&HalCore::on_network_interface_up, this, _1, _2, &manager));
+  manager.network_interface_down.connect (boost::bind (&HalCore::on_network_interface_down, this, _1, _2, &manager));
 }
 
 
-void HalCore::visit_managers (sigc::slot1<bool, HalManager &> visitor)
+void HalCore::visit_managers (boost::function1<bool, HalManager &> visitor)
 {
   bool go_on = true;
 
@@ -84,33 +84,33 @@ void HalCore::visit_managers (sigc::slot1<bool, HalManager &> visitor)
 }
 
 void HalCore::on_videoinput_device_added (std::string source, std::string device, unsigned capabilities, HalManager* manager) {
-  videoinput_device_added.emit (source, device, capabilities, manager);
+  videoinput_device_added (source, device, capabilities, manager);
 }
 
 void HalCore::on_videoinput_device_removed (std::string source, std::string device, unsigned capabilities, HalManager* manager) {
-  videoinput_device_removed.emit (source, device, capabilities, manager);
+  videoinput_device_removed (source, device, capabilities, manager);
 }
 
 void HalCore::on_audioinput_device_added (std::string source, std::string device, HalManager* manager) {
-  audioinput_device_added.emit (source, device, manager);
+  audioinput_device_added (source, device, manager);
 }
 
 void HalCore::on_audioinput_device_removed (std::string source, std::string device, HalManager* manager) {
-  audioinput_device_removed.emit (source, device, manager);
+  audioinput_device_removed (source, device, manager);
 }
 
 void HalCore::on_audiooutput_device_added (std::string sink, std::string device, HalManager* manager) {
-  audiooutput_device_added.emit (sink, device, manager);
+  audiooutput_device_added (sink, device, manager);
 }
 
 void HalCore::on_audiooutput_device_removed (std::string sink, std::string device, HalManager* manager) {
-  audiooutput_device_removed.emit (sink, device, manager);
+  audiooutput_device_removed (sink, device, manager);
 }
 
 void HalCore::on_network_interface_up (std::string interface_name, std::string ip4_address, HalManager* manager) {
-  network_interface_up.emit (interface_name, ip4_address, manager);
+  network_interface_up (interface_name, ip4_address, manager);
 }
 
 void HalCore::on_network_interface_down (std::string interface_name, std::string ip4_address, HalManager* manager) {
-  network_interface_down.emit (interface_name,ip4_address, manager);
+  network_interface_down (interface_name,ip4_address, manager);
 }
diff --git a/lib/engine/hal/hal-core.h b/lib/engine/hal/hal-core.h
index 68b936c..6fd0f8c 100644
--- a/lib/engine/hal/hal-core.h
+++ b/lib/engine/hal/hal-core.h
@@ -40,7 +40,8 @@
 
 #include "services.h"
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include <set>
 #include <map>
@@ -108,29 +109,29 @@ namespace Ekiga
        * @param The callback (the return value means "go on" and allows
        *  stopping the visit)
        */
-       void visit_managers (sigc::slot1<bool, HalManager &> visitor);
+       void visit_managers (boost::function1<bool, HalManager &> visitor);
 
       /** This signal is emitted when an Ekiga::HalManager has been
        * added to the HalCore Service.
        */
-       sigc::signal1<void, HalManager &> manager_added;
+       boost::signal1<void, HalManager &> manager_added;
 
 
       /*** API to act on HAL events ***/
 
       /** See hal-manager.h for the API
        */
-      sigc::signal4<void, const std::string &, const std::string &, unsigned, HalManager*> videoinput_device_added;
-      sigc::signal4<void, const std::string &, const std::string &, unsigned, HalManager*> videoinput_device_removed;
+      boost::signal4<void, const std::string &, const std::string &, unsigned, HalManager*> videoinput_device_added;
+      boost::signal4<void, const std::string &, const std::string &, unsigned, HalManager*> videoinput_device_removed;
 
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> audioinput_device_added;
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> audioinput_device_removed;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> audioinput_device_added;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> audioinput_device_removed;
 
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> audiooutput_device_added;
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> audiooutput_device_removed;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> audiooutput_device_added;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> audiooutput_device_removed;
 
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> network_interface_up;
-      sigc::signal3<void, const std::string &, const std::string &, HalManager*> network_interface_down;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> network_interface_up;
+      boost::signal3<void, const std::string &, const std::string &, HalManager*> network_interface_down;
 
   private:
 
diff --git a/lib/engine/hal/hal-manager.h b/lib/engine/hal/hal-manager.h
index 81fb34e..e0b2e75 100644
--- a/lib/engine/hal/hal-manager.h
+++ b/lib/engine/hal/hal-manager.h
@@ -75,50 +75,50 @@ namespace Ekiga
        * @param device the device name.
        * @param capabilities source-dependent device capabilites (e.g. V4L1 or V4L2 for video4linux).
        */
-      sigc::signal3<void, std::string, std::string, unsigned> videoinput_device_added;
+      boost::signal3<void, std::string, std::string, unsigned> videoinput_device_added;
 
       /** This signal is emitted when a video input device is removed from the system.
        * @param source the video input framework (e.g. video4linux, etc.).
        * @param device the device name.
        * @param capabilities source-dependent device capabilites (e.g. V4L1 or V4L2 for video4linux).
        */
-      sigc::signal3<void, std::string, std::string, unsigned> videoinput_device_removed;
+      boost::signal3<void, std::string, std::string, unsigned> videoinput_device_removed;
 
       /** This signal is emitted when an audio input device is added to the system.
        * @param source the audio input framework (e.g. alsa, oss, etc.).
        * @param device the device name.
        */
-      sigc::signal2<void, std::string, std::string> audioinput_device_added;
+      boost::signal2<void, std::string, std::string> audioinput_device_added;
 
       /** This signal is emitted when an audio input device is removed from the system.
        * @param source the audio input framework (e.g. alsa, oss, etc.).
        * @param device the device name.
        */
-      sigc::signal2<void, std::string, std::string> audioinput_device_removed;
+      boost::signal2<void, std::string, std::string> audioinput_device_removed;
 
       /** This signal is emitted when an audio output device is added to the system.
        * @param source the audio output framework (e.g. alsa, oss, etc.).
        * @param device the device name.
        */
-      sigc::signal2<void, std::string, std::string> audiooutput_device_added;
+      boost::signal2<void, std::string, std::string> audiooutput_device_added;
 
       /** This signal is emitted when an audio output device is removed from the system.
        * @param source the audio output framework (e.g. alsa, oss, etc.).
        * @param device the device name.
        */
-      sigc::signal2<void, std::string, std::string> audiooutput_device_removed;
+      boost::signal2<void, std::string, std::string> audiooutput_device_removed;
 
       /** This signal is emitted when a network device comes up.
        * @param interface_name the interface name (e.g. eth0, etc.).
        * @param ip4_address the IPv4 address (e.g. "192.168.0.1").
        */
-      sigc::signal2<void, std::string, std::string> network_interface_up;
+      boost::signal2<void, std::string, std::string> network_interface_up;
 
       /** This signal is emitted when a network device goes down.
        * @param interface_name the interface name (e.g. eth0, etc.).
        * @param ip4_address the IPv4 address (e.g. "192.168.0.1").
        */
-      sigc::signal2<void, std::string, std::string> network_interface_down;
+      boost::signal2<void, std::string, std::string> network_interface_down;
   };
 
 /**
diff --git a/lib/engine/notification/Makefile.am b/lib/engine/notification/Makefile.am
index b79a8f7..c0c8c11 100644
--- a/lib/engine/notification/Makefile.am
+++ b/lib/engine/notification/Makefile.am
@@ -12,4 +12,4 @@ libnotification_la_SOURCES = \
 	$(notification_dir)/notification-core.h \
 	$(notification_dir)/notification-dummy.cpp
 
-libnotification_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+libnotification_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/notification/notification-core.h b/lib/engine/notification/notification-core.h
index f1252eb..2b09b87 100644
--- a/lib/engine/notification/notification-core.h
+++ b/lib/engine/notification/notification-core.h
@@ -67,7 +67,7 @@ namespace Ekiga
     const std::string get_body () const
     { return body; }
 
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
   private:
 
@@ -95,9 +95,9 @@ namespace Ekiga
     /*** Public API ***/
 
     void push_notification (boost::shared_ptr<Notification> notification)
-    { notification_added.emit (notification); }
+    { notification_added (notification); }
 
-    sigc::signal1<void, boost::shared_ptr<Notification> > notification_added;
+    boost::signal1<void, boost::shared_ptr<Notification> > notification_added;
   };
 };
 
diff --git a/lib/engine/plugin/Makefile.am b/lib/engine/plugin/Makefile.am
index 298c716..f4af21a 100644
--- a/lib/engine/plugin/Makefile.am
+++ b/lib/engine/plugin/Makefile.am
@@ -15,4 +15,4 @@ libplugin_la_SOURCES = \
 	$(plugin_dir)/plugin-core.cpp
 
 libplugin_la_LDFLAGS = $(STACKLIB_LDFLAGS)
-libplugin_la_LIBADD = $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
\ No newline at end of file
+libplugin_la_LIBADD = $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
\ No newline at end of file
diff --git a/lib/engine/plugin/plugin-core.cpp b/lib/engine/plugin/plugin-core.cpp
index b822ff1..e6fd614 100644
--- a/lib/engine/plugin/plugin-core.cpp
+++ b/lib/engine/plugin/plugin-core.cpp
@@ -57,7 +57,7 @@
 // }
 //
 // which can be compiled with :
-// gcc -o hello.so hello.cpp -shared -export-dynamic -I$(PATH_TO_EKIGA_SOURCES)/lib/engine/framework `pkg-config --cflags sigc++-2.0`
+// gcc -o hello.so hello.cpp -shared -export-dynamic -I$(PATH_TO_EKIGA_SOURCES)/lib/engine/framework -lboost_signals-mt
 //
 // additionally, if you want to debug a plugin you're writing, then you should
 // set DEBUG to 1 at the start of that file, and put your plugin (and its
diff --git a/lib/engine/presence/Makefile.am b/lib/engine/presence/Makefile.am
index 8f1d736..adad5ae 100644
--- a/lib/engine/presence/Makefile.am
+++ b/lib/engine/presence/Makefile.am
@@ -25,4 +25,4 @@ libgmpresence_la_SOURCES = \
 libgmpresence_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmpresence_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS)
diff --git a/lib/engine/presence/cluster-impl.h b/lib/engine/presence/cluster-impl.h
index 77c17d3..9c6c1d7 100644
--- a/lib/engine/presence/cluster-impl.h
+++ b/lib/engine/presence/cluster-impl.h
@@ -80,7 +80,7 @@ namespace Ekiga
 
     virtual ~ClusterImpl ();
 
-    void visit_heaps (sigc::slot1<bool, HeapPtr > visitor);
+    void visit_heaps (boost::function1<bool, HeapPtr > visitor);
 
   protected:
 
@@ -118,9 +118,9 @@ template<typename HeapType>
 Ekiga::ClusterImpl<HeapType>::ClusterImpl ()
 {
   /* signal forwarding */
-  RefLister<HeapType>::object_added.connect (heap_added.make_slot ());
-  RefLister<HeapType>::object_removed.connect (heap_removed.make_slot ());
-  RefLister<HeapType>::object_updated.connect (heap_updated.make_slot ());
+  RefLister<HeapType>::object_added.connect (boost::ref (heap_added));
+  RefLister<HeapType>::object_removed.connect (boost::ref (heap_removed));
+  RefLister<HeapType>::object_updated.connect (boost::ref (heap_updated));
 }
 
 template<typename HeapType>
@@ -130,7 +130,7 @@ Ekiga::ClusterImpl<HeapType>::~ClusterImpl ()
 
 template<typename HeapType>
 void
-Ekiga::ClusterImpl<HeapType>::visit_heaps (sigc::slot1<bool, HeapPtr > visitor)
+Ekiga::ClusterImpl<HeapType>::visit_heaps (boost::function1<bool, HeapPtr > visitor)
 {
   RefLister<HeapType>::visit_objects (visitor);
 }
@@ -139,13 +139,13 @@ template<typename HeapType>
 void
 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)));
+  add_connection (heap, heap->presentity_added.connect (boost::bind (&ClusterImpl::on_presentity_added, this, _1, heap)));
 
-  add_connection (heap, heap->presentity_updated.connect (sigc::bind (sigc::mem_fun (this, &ClusterImpl::on_presentity_updated), heap)));
+  add_connection (heap, heap->presentity_updated.connect (boost::bind (&ClusterImpl::on_presentity_updated, this, _1, heap)));
 
-  add_connection (heap, heap->presentity_removed.connect (sigc::bind (sigc::mem_fun (this, &ClusterImpl::on_presentity_removed), heap)));
+  add_connection (heap, heap->presentity_removed.connect (boost::bind (&ClusterImpl::on_presentity_removed, this, _1, heap)));
 
-  add_connection (heap, heap->questions.connect (questions.make_slot ()));
+  add_connection (heap, heap->questions.connect (boost::ref (questions)));
 
   add_object (heap);
 }
@@ -161,21 +161,21 @@ template<typename HeapType>
 void
 Ekiga::ClusterImpl<HeapType>::on_presentity_added (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
-  presentity_added.emit (heap, presentity);
+  presentity_added (heap, presentity);
 }
 
 template<typename HeapType>
 void
 Ekiga::ClusterImpl<HeapType>::on_presentity_updated (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
-  presentity_updated.emit (heap, presentity);
+  presentity_updated (heap, presentity);
 }
 
 template<typename HeapType>
 void
 Ekiga::ClusterImpl<HeapType>::on_presentity_removed (PresentityPtr presentity, boost::shared_ptr<HeapType> heap)
 {
-  presentity_removed.emit (heap, presentity);
+  presentity_removed (heap, presentity);
 }
 
 template<typename HeapType>
diff --git a/lib/engine/presence/cluster.h b/lib/engine/presence/cluster.h
index 0b07551..6995ede 100644
--- a/lib/engine/presence/cluster.h
+++ b/lib/engine/presence/cluster.h
@@ -59,7 +59,7 @@ namespace Ekiga
     /** Get the list of Heaps by visiting them with a callback.
      * @param The callback used to know about heaps.
      */
-    virtual void visit_heaps (sigc::slot1<bool, HeapPtr >) = 0;
+    virtual void visit_heaps (boost::function1<bool, HeapPtr >) = 0;
 
     /** Populates a menu with the actions possible on the Cluster.
      * @param The builder to populate.
@@ -70,16 +70,16 @@ namespace Ekiga
      * from the Cluster.
      * @param The Heap in question.
      */
-    sigc::signal1<void, HeapPtr > heap_added;
-    sigc::signal1<void, HeapPtr > heap_removed;
+    boost::signal1<void, HeapPtr > heap_added;
+    boost::signal1<void, HeapPtr > heap_removed;
 
     /** Those signals are forwarded from the given Heap
      * @param The Heap in question.
      */
-    sigc::signal1<void, HeapPtr > heap_updated;
-    sigc::signal2<void, HeapPtr , PresentityPtr > presentity_added;
-    sigc::signal2<void, HeapPtr , PresentityPtr > presentity_updated;
-    sigc::signal2<void, HeapPtr , PresentityPtr > presentity_removed;
+    boost::signal1<void, HeapPtr > heap_updated;
+    boost::signal2<void, HeapPtr , PresentityPtr > presentity_added;
+    boost::signal2<void, HeapPtr , PresentityPtr > presentity_updated;
+    boost::signal2<void, HeapPtr , PresentityPtr > presentity_removed;
 
     /** This chain allows the Cluster to present forms to the user.
      */
diff --git a/lib/engine/presence/heap-impl.h b/lib/engine/presence/heap-impl.h
index 901b9f5..09266be 100644
--- a/lib/engine/presence/heap-impl.h
+++ b/lib/engine/presence/heap-impl.h
@@ -78,7 +78,7 @@ namespace Ekiga
 
     ~HeapImpl ();
 
-    void visit_presentities (sigc::slot1<bool, PresentityPtr > visitor);
+    void visit_presentities (boost::function1<bool, PresentityPtr > visitor);
 
     const_iterator begin () const;
 
@@ -108,9 +108,9 @@ template<typename PresentityType>
 Ekiga::HeapImpl<PresentityType>::HeapImpl ()
 {
   /* this is signal forwarding */
-  RefLister<PresentityType>::object_added.connect (presentity_added.make_slot ());
-  RefLister<PresentityType>::object_removed.connect (presentity_removed.make_slot ());
-  RefLister<PresentityType>::object_updated.connect (presentity_updated.make_slot ());
+  RefLister<PresentityType>::object_added.connect (boost::ref (presentity_added));
+  RefLister<PresentityType>::object_removed.connect (boost::ref (presentity_removed));
+  RefLister<PresentityType>::object_updated.connect (boost::ref (presentity_updated));
 }
 
 
@@ -121,7 +121,7 @@ Ekiga::HeapImpl<PresentityType>::~HeapImpl ()
 
 template<typename PresentityType>
 void
-Ekiga::HeapImpl<PresentityType>::visit_presentities (sigc::slot1<bool, PresentityPtr > visitor)
+Ekiga::HeapImpl<PresentityType>::visit_presentities (boost::function1<bool, PresentityPtr > visitor)
 {
   RefLister<PresentityType>::visit_objects (visitor);
 }
@@ -158,7 +158,7 @@ template<typename PresentityType>
 void
 Ekiga::HeapImpl<PresentityType>::add_presentity (boost::shared_ptr<PresentityType> presentity)
 {
-  presentity->questions.connect (questions.make_slot ());
+  presentity->questions.connect (boost::ref (questions));
 
   add_object (presentity);
 }
diff --git a/lib/engine/presence/heap.h b/lib/engine/presence/heap.h
index 775569c..b52abb3 100644
--- a/lib/engine/presence/heap.h
+++ b/lib/engine/presence/heap.h
@@ -68,7 +68,7 @@ namespace Ekiga
      * @param The callback user to know about presentities (the return value
      * means "go on" and allows stopping the visit)
      */
-    virtual void visit_presentities (sigc::slot1<bool, PresentityPtr >) = 0;
+    virtual void visit_presentities (boost::function1<bool, PresentityPtr >) = 0;
 
     /** Populates a menu with the actions possible on the Heap.
      * @param The builder to populate.
@@ -89,23 +89,23 @@ namespace Ekiga
 
     /** This signal is emitted when the Heap has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
     /** This signal is emitted when the Heap has been removed.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
     /** This signal is emitted  when a Presentity has been added to the Heap.
      */
-    sigc::signal1<void, PresentityPtr > presentity_added;
+    boost::signal1<void, PresentityPtr > presentity_added;
 
     /** This signal is emitted when a Presentity has been updated in the Heap.
      */
-    sigc::signal1<void, PresentityPtr > presentity_updated;
+    boost::signal1<void, PresentityPtr > presentity_updated;
 
     /** This signal is emitted when a Presentity has been removed from the Heap.
      */
-    sigc::signal1<void, PresentityPtr > presentity_removed;
+    boost::signal1<void, PresentityPtr > presentity_removed;
 
     /** This chain allows the Heap to present forms to the user
      */
diff --git a/lib/engine/presence/presence-core.cpp b/lib/engine/presence/presence-core.cpp
index 8a598a9..27756b7 100644
--- a/lib/engine/presence/presence-core.cpp
+++ b/lib/engine/presence/presence-core.cpp
@@ -44,12 +44,12 @@ Ekiga::PresenceCore::PresenceCore (Ekiga::ServiceCore& core)
   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)));
+    conns.push_back (details->updated.connect (boost::bind (boost::bind (&Ekiga::PresenceCore::publish, this, _1), details)));
 }
 
 Ekiga::PresenceCore::~PresenceCore ()
 {
-  for (std::list<sigc::connection>::iterator iter = conns.begin (); iter != conns.end (); ++iter)
+  for (std::list<boost::signals::connection>::iterator iter = conns.begin (); iter != conns.end (); ++iter)
     iter->disconnect ();
 }
 
@@ -57,18 +57,18 @@ void
 Ekiga::PresenceCore::add_cluster (ClusterPtr cluster)
 {
   clusters.insert (cluster);
-  cluster_added.emit (cluster);
-  conns.push_back (cluster->heap_added.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_heap_added), cluster)));
-  conns.push_back (cluster->heap_updated.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_heap_updated), cluster)));
-  conns.push_back (cluster->heap_removed.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_heap_removed), cluster)));
-  conns.push_back (cluster->presentity_added.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_presentity_added), cluster)));
-  conns.push_back (cluster->presentity_updated.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_presentity_updated), cluster)));
-  conns.push_back (cluster->presentity_removed.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresenceCore::on_presentity_removed), cluster)));
-  cluster->questions.connect (questions.make_slot ());
+  cluster_added (cluster);
+  conns.push_back (cluster->heap_added.connect (boost::bind (&Ekiga::PresenceCore::on_heap_added, this, _1, cluster)));
+  conns.push_back (cluster->heap_updated.connect (boost::bind (&Ekiga::PresenceCore::on_heap_updated, this, _1, cluster)));
+  conns.push_back (cluster->heap_removed.connect (boost::bind (&Ekiga::PresenceCore::on_heap_removed, this, _1, cluster)));
+  conns.push_back (cluster->presentity_added.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_added, this, _1, _2, cluster)));
+  conns.push_back (cluster->presentity_updated.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_updated, this, _1, _2, cluster)));
+  conns.push_back (cluster->presentity_removed.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_removed, this, _1, _2, cluster)));
+  cluster->questions.connect (boost::ref (questions));
 }
 
 void
-Ekiga::PresenceCore::visit_clusters (sigc::slot1<bool, ClusterPtr > visitor)
+Ekiga::PresenceCore::visit_clusters (boost::function1<bool, ClusterPtr > visitor)
 {
   bool go_on = true;
   for (std::set<ClusterPtr >::iterator iter = clusters.begin ();
@@ -94,20 +94,20 @@ Ekiga::PresenceCore::populate_menu (MenuBuilder &builder)
 void Ekiga::PresenceCore::on_heap_added (HeapPtr heap,
 					 ClusterPtr cluster)
 {
-  heap_added.emit (cluster, heap);
+  heap_added (cluster, heap);
 }
 
 void
 Ekiga::PresenceCore::on_heap_updated (HeapPtr heap,
 				      ClusterPtr cluster)
 {
-  heap_updated.emit (cluster, heap);
+  heap_updated (cluster, heap);
 }
 
 void
 Ekiga::PresenceCore::on_heap_removed (HeapPtr heap, ClusterPtr cluster)
 {
-  heap_removed.emit (cluster, heap);
+  heap_removed (cluster, heap);
 }
 
 void
@@ -115,7 +115,7 @@ Ekiga::PresenceCore::on_presentity_added (HeapPtr heap,
 					  PresentityPtr presentity,
 					  ClusterPtr cluster)
 {
-  presentity_added.emit (cluster, heap, presentity);
+  presentity_added (cluster, heap, presentity);
 }
 
 void
@@ -131,7 +131,7 @@ Ekiga::PresenceCore::on_presentity_removed (HeapPtr heap,
 					    PresentityPtr presentity,
 					    ClusterPtr cluster)
 {
-  presentity_removed.emit (cluster, heap, presentity);
+  presentity_removed (cluster, heap, presentity);
 }
 
 void
@@ -162,8 +162,8 @@ void
 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)));
-  conns.push_back (fetcher->status_received.connect (sigc::mem_fun (this, &Ekiga::PresenceCore::on_status_received)));
+  conns.push_back (fetcher->presence_received.connect (boost::bind (&Ekiga::PresenceCore::on_presence_received, this, _1, _2)));
+  conns.push_back (fetcher->status_received.connect (boost::bind (&Ekiga::PresenceCore::on_status_received, this, _1, _2)));
   for (std::map<std::string, uri_info>::const_iterator iter
 	 = uri_infos.begin ();
        iter != uri_infos.end ();
@@ -185,8 +185,8 @@ Ekiga::PresenceCore::fetch_presence (const std::string uri)
       (*iter)->fetch (uri);
   }
 
-  presence_received.emit (uri, uri_infos[uri].presence);
-  status_received.emit (uri, uri_infos[uri].status);
+  presence_received (uri, uri_infos[uri].presence);
+  status_received (uri, uri_infos[uri].status);
 }
 
 void Ekiga::PresenceCore::unfetch_presence (const std::string uri)
@@ -210,7 +210,7 @@ Ekiga::PresenceCore::on_presence_received (const std::string uri,
 					   const std::string presence)
 {
   uri_infos[uri].presence = presence;
-  presence_received.emit (uri, presence);
+  presence_received (uri, presence);
 }
 
 void
@@ -218,7 +218,7 @@ Ekiga::PresenceCore::on_status_received (const std::string uri,
 					 const std::string status)
 {
   uri_infos[uri].status = status;
-  status_received.emit (uri, status);
+  status_received (uri, status);
 }
 
 void
@@ -241,7 +241,7 @@ Ekiga::PresenceCore::is_supported_uri (const std::string uri) const
 {
   bool result = false;
 
-  for (std::set<sigc::slot1<bool, std::string> >::const_iterator iter
+  for (std::list<boost::function1<bool, std::string> >::const_iterator iter
 	 = uri_testers.begin ();
        iter != uri_testers.end () && result == false;
        iter++)
@@ -251,7 +251,7 @@ Ekiga::PresenceCore::is_supported_uri (const std::string uri) const
 }
 
 void
-Ekiga::PresenceCore::add_supported_uri (sigc::slot1<bool,std::string> tester)
+Ekiga::PresenceCore::add_supported_uri (boost::function1<bool,std::string> tester)
 {
-  uri_testers.insert (tester);
+  uri_testers.push_back (tester);
 }
diff --git a/lib/engine/presence/presence-core.h b/lib/engine/presence/presence-core.h
index f7099da..c39f64d 100644
--- a/lib/engine/presence/presence-core.h
+++ b/lib/engine/presence/presence-core.h
@@ -97,8 +97,8 @@ namespace Ekiga
      * presence information about an uri it was required to handle.
      * The information is given as a pair of strings (uri, data).
      */
-    sigc::signal2<void, std::string, std::string> presence_received;
-    sigc::signal2<void, std::string, std::string> status_received;
+    boost::signal2<void, std::string, std::string> presence_received;
+    boost::signal2<void, std::string, std::string> status_received;
   };
 
   class PresencePublisher
@@ -174,27 +174,27 @@ namespace Ekiga
      * @param The callback (the return value means "go on" and allows
      *  stopping the visit)
      */
-    void visit_clusters (sigc::slot1<bool, ClusterPtr > visitor);
+    void visit_clusters (boost::function1<bool, ClusterPtr > visitor);
 
     /** This signal is emitted when an Ekiga::Cluster has been added
      * to the PresenceCore Service.
      */
-    sigc::signal1<void, ClusterPtr > cluster_added;
+    boost::signal1<void, ClusterPtr > cluster_added;
 
     /** Those signals are forwarding the heap_added, heap_updated
      * and heap_removed from the given Cluster.
      *
      */
-    sigc::signal2<void, ClusterPtr , HeapPtr > heap_added;
-    sigc::signal2<void, ClusterPtr , HeapPtr > heap_updated;
-    sigc::signal2<void, ClusterPtr , HeapPtr > heap_removed;
+    boost::signal2<void, ClusterPtr , HeapPtr > heap_added;
+    boost::signal2<void, ClusterPtr , HeapPtr > heap_updated;
+    boost::signal2<void, ClusterPtr , HeapPtr > heap_removed;
 
     /** Those signals are forwarding the presentity_added, presentity_updated
      * and presentity_removed from the given Heap of the given Cluster.
      */
-    sigc::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_added;
-    sigc::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_updated;
-    sigc::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_removed;
+    boost::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_added;
+    boost::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_updated;
+    boost::signal3<void, ClusterPtr , HeapPtr , PresentityPtr > presentity_removed;
 
   private:
 
@@ -255,8 +255,8 @@ namespace Ekiga
     /** Those signals are emitted whenever information has been received
      * about an uri ; the information is a pair of strings (uri, information).
      */
-    sigc::signal2<void, std::string, std::string> presence_received;
-    sigc::signal2<void, std::string, std::string> status_received;
+    boost::signal2<void, std::string, std::string> presence_received;
+    boost::signal2<void, std::string, std::string> status_received;
 
   private:
 
@@ -301,11 +301,11 @@ namespace Ekiga
     /** Adds an uri tester to the PresenceCore
      * @param The tester
      */
-    void add_supported_uri (sigc::slot1<bool,std::string> tester);
+    void add_supported_uri (boost::function1<bool,std::string> tester);
 
   private:
 
-    std::set<sigc::slot1<bool, std::string> > uri_testers;
+    std::list<boost::function1<bool, std::string> > uri_testers;
 
     /*** Misc ***/
   public:
@@ -319,7 +319,7 @@ namespace Ekiga
      */
     ChainOfResponsibility<FormRequestPtr> questions;
 
-    std::list<sigc::connection> conns;
+    std::list<boost::signals::connection> conns;
   };
 
 /**
diff --git a/lib/engine/presence/presentity.h b/lib/engine/presence/presentity.h
index 4e31985..8b54255 100644
--- a/lib/engine/presence/presentity.h
+++ b/lib/engine/presence/presentity.h
@@ -94,11 +94,11 @@ namespace Ekiga
 
     /** This signal is emitted when the Presentity has been updated.
      */
-    sigc::signal0<void> updated;
+    boost::signal0<void> updated;
 
     /** This signal is emitted when the Presentity has been removed.
      */
-    sigc::signal0<void> removed;
+    boost::signal0<void> removed;
 
     /** This chain allows the Presentity to present forms to the user
      */
diff --git a/lib/engine/presence/proxy-presentity.cpp b/lib/engine/presence/proxy-presentity.cpp
index acc99b2..4626c3c 100644
--- a/lib/engine/presence/proxy-presentity.cpp
+++ b/lib/engine/presence/proxy-presentity.cpp
@@ -38,8 +38,8 @@
 Ekiga::ProxyPresentity::ProxyPresentity (Ekiga::Presentity& presentity_)
   : presentity(presentity_)
 {
-  presentity.updated.connect (updated.make_slot ());
-  presentity.removed.connect (removed.make_slot ());
+  presentity.updated.connect (updated);
+  presentity.removed.connect (removed);
 }
 
 Ekiga::ProxyPresentity::~ProxyPresentity ()
diff --git a/lib/engine/presence/uri-presentity.cpp b/lib/engine/presence/uri-presentity.cpp
index db931ac..fbbcd2b 100644
--- a/lib/engine/presence/uri-presentity.cpp
+++ b/lib/engine/presence/uri-presentity.cpp
@@ -42,8 +42,8 @@ Ekiga::URIPresentity::URIPresentity (Ekiga::ServiceCore &_core,
   : core(_core), name(name_), uri(uri_), presence("unknown"), groups(groups_)
 {
   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->presence_received.connect (boost::bind (&Ekiga::URIPresentity::on_presence_received, this, _1, _2));
+  presence_core->status_received.connect (boost::bind (&Ekiga::URIPresentity::on_status_received, this, _1, _2));
   presence_core->fetch_presence (uri);
 }
 
@@ -105,7 +105,7 @@ Ekiga::URIPresentity::on_presence_received (std::string uri_,
   if (uri == uri_) {
 
     presence = presence_;
-    updated.emit ();
+    updated ();
   }
 }
 
@@ -116,6 +116,6 @@ Ekiga::URIPresentity::on_status_received (std::string uri_,
   if (uri == uri_) {
 
     status = status_;
-    updated.emit ();
+    updated ();
   }
 }
diff --git a/lib/engine/presence/uri-presentity.h b/lib/engine/presence/uri-presentity.h
index 9f21265..ebeb791 100644
--- a/lib/engine/presence/uri-presentity.h
+++ b/lib/engine/presence/uri-presentity.h
@@ -60,7 +60,7 @@ namespace Ekiga
    */
   class URIPresentity:
     public Ekiga::Presentity,
-    public sigc::trackable
+    public boost::signals::trackable
   {
   public:
 
diff --git a/lib/engine/protocol/Makefile.am b/lib/engine/protocol/Makefile.am
index 4f14c79..270f8f3 100644
--- a/lib/engine/protocol/Makefile.am
+++ b/lib/engine/protocol/Makefile.am
@@ -17,4 +17,4 @@ libgmprotocol_la_SOURCES = \
 	$(protocol_dir)/codec-description.h		\
 	$(protocol_dir)/codec-description.cpp
 
-libgmprotocol_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS)
+libgmprotocol_la_LDFLAGS = $(STACKLIB_LDFLAGS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS)
diff --git a/lib/engine/protocol/call-core.cpp b/lib/engine/protocol/call-core.cpp
index 40f7839..38c6fe9 100644
--- a/lib/engine/protocol/call-core.cpp
+++ b/lib/engine/protocol/call-core.cpp
@@ -55,9 +55,9 @@ CallCore::~CallCore ()
 void CallCore::add_manager (boost::shared_ptr<CallManager> manager)
 {
   managers.insert (manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager_connections.push_back (manager->ready.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_manager_ready), manager)));
+  manager_connections.push_back (manager->ready.connect (boost::bind (&CallCore::on_manager_ready, this, manager)));
 }
 
 
@@ -100,20 +100,20 @@ bool CallCore::dial (const std::string uri)
 
 void CallCore::add_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  std::list<sigc::connection> conns;
-
-  conns.push_back (call->ringing.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_ringing_call), call, manager)));
-  conns.push_back (call->setup.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_setup_call), call, manager)));
-  conns.push_back (call->missed.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_missed_call), call, manager)));
-  conns.push_back (call->cleared.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_cleared_call), call, manager)));
-  conns.push_back (call->established.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_established_call), call, manager)));
-  conns.push_back (call->held.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_held_call), call, manager)));
-  conns.push_back (call->retrieved.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_retrieved_call), call, manager)));
-  conns.push_back (call->stream_opened.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_stream_opened), call, manager)));
-  conns.push_back (call->stream_closed.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_stream_closed), call, manager)));
-  conns.push_back (call->stream_paused.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_stream_paused), call, manager)));
-  conns.push_back (call->stream_resumed.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_stream_resumed), call, manager)));
-  conns.push_back (call->removed.connect (sigc::bind (sigc::mem_fun (this, &CallCore::on_call_removed), call)));
+  std::list<boost::signals::connection> conns;
+
+  conns.push_back (call->ringing.connect (boost::bind (&CallCore::on_ringing_call, this, call, manager)));
+  conns.push_back (call->setup.connect (boost::bind (&CallCore::on_setup_call, this, call, manager)));
+  conns.push_back (call->missed.connect (boost::bind (&CallCore::on_missed_call, this, call, manager)));
+  conns.push_back (call->cleared.connect (boost::bind (&CallCore::on_cleared_call, this, _1, call, manager)));
+  conns.push_back (call->established.connect (boost::bind (&CallCore::on_established_call, this, call, manager)));
+  conns.push_back (call->held.connect (boost::bind (&CallCore::on_held_call, this, call, manager)));
+  conns.push_back (call->retrieved.connect (boost::bind (&CallCore::on_retrieved_call, this, call, manager)));
+  conns.push_back (call->stream_opened.connect (boost::bind (&CallCore::on_stream_opened, this, _1, _2, _3, call, manager)));
+  conns.push_back (call->stream_closed.connect (boost::bind (&CallCore::on_stream_closed, this, _1, _2, _3, call, manager)));
+  conns.push_back (call->stream_paused.connect (boost::bind (&CallCore::on_stream_paused, this, _1, _2, call, manager)));
+  conns.push_back (call->stream_resumed.connect (boost::bind (&CallCore::on_stream_resumed, this, _1, _2, call, manager)));
+  conns.push_back (call->removed.connect (boost::bind (&CallCore::on_call_removed, this, call)));
 
   call_connections [call->get_id ()] = conns;
 }
@@ -121,7 +121,7 @@ void CallCore::add_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallMan
 
 void CallCore::remove_call (boost::shared_ptr<Call> call)
 {
-  for (std::list<sigc::connection>::iterator iter2 = call_connections [call->get_id ()].begin ();
+  for (std::list<boost::signals::connection>::iterator iter2 = call_connections [call->get_id ()].begin ();
        iter2 != call_connections [call->get_id ()].end ();
        ++iter2)
     iter2->disconnect ();
@@ -132,77 +132,77 @@ void CallCore::remove_call (boost::shared_ptr<Call> call)
 
 void CallCore::on_ringing_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  ringing_call.emit (manager, call);
+  ringing_call (manager, call);
 }
 
 
 void CallCore::on_setup_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  setup_call.emit (manager, call);
+  setup_call (manager, call);
 }
 
 
 void CallCore::on_missed_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  missed_call.emit (manager, call);
+  missed_call (manager, call);
 }
 
 
 void CallCore::on_cleared_call (std::string reason, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  cleared_call.emit (manager, call, reason); 
+  cleared_call (manager, call, reason); 
 }
 
 
 void CallCore::on_established_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  established_call.emit (manager, call);
+  established_call (manager, call);
 }
 
 
 void CallCore::on_held_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  held_call.emit (manager, call);
+  held_call (manager, call);
 }
 
 
 void CallCore::on_retrieved_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
 {
-  retrieved_call.emit (manager, call);
+  retrieved_call (manager, call);
 }
 
 
 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);
+  stream_opened (manager, call, name, type, is_transmitting);
 }
 
 
 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);
+  stream_closed (manager, call, name, type, is_transmitting);
 }
 
 
 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);
+  stream_paused (manager, call, name, type);
 }
 
 
 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);
+  stream_resumed (manager, call, name, type);
 }
 
 
 void CallCore::on_manager_ready (boost::shared_ptr<CallManager> manager)
 {
-  manager_ready.emit (manager);
+  manager_ready (manager);
   nr_ready++;
 
   if (nr_ready >= managers.size ())
-    ready.emit ();
+    ready ();
 }
 
 
diff --git a/lib/engine/protocol/call-core.h b/lib/engine/protocol/call-core.h
index 8ccae9f..bbd7f6b 100644
--- a/lib/engine/protocol/call-core.h
+++ b/lib/engine/protocol/call-core.h
@@ -45,7 +45,8 @@
 #include "call-protocol-manager.h"
 #include <boost/smart_ptr.hpp>
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <set>
 #include <map>
 #include <iostream>
@@ -125,7 +126,7 @@ namespace Ekiga
       /** This signal is emitted when a Ekiga::CallManager has been
        * added to the CallCore Service.
        */
-      sigc::signal1<void, boost::shared_ptr<CallManager> > manager_added;
+      boost::signal1<void, boost::shared_ptr<CallManager> > manager_added;
 
 
       /*** Call Management ***/                 
@@ -140,21 +141,21 @@ namespace Ekiga
       
       /** See call.h for the API
        */
-      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;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > ringing_call;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > setup_call;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > missed_call;
+      boost::signal3<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string> cleared_call;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > established_call;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > held_call;
+      boost::signal2<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call> > retrieved_call;
+      boost::signal5<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType, bool> stream_opened;
+      boost::signal5<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType, bool> stream_closed;
+      boost::signal4<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType> stream_paused;
+      boost::signal4<void, boost::shared_ptr<CallManager> , boost::shared_ptr<Call>, std::string, Call::StreamType> stream_resumed;
 
       /*** Misc ***/
-      sigc::signal1<void, boost::shared_ptr<CallManager> > manager_ready;
-      sigc::signal0<void> ready;
+      boost::signal1<void, boost::shared_ptr<CallManager> > manager_ready;
+      boost::signal0<void> ready;
 
       /** This chain allows the CallCore to report errors to the user
        */
@@ -185,8 +186,8 @@ namespace Ekiga
 
       
       std::set<boost::shared_ptr<CallManager> > managers;
-      std::list<sigc::connection> manager_connections;
-      std::map<std::string, std::list<sigc::connection> > call_connections;
+      std::list<boost::signals::connection> manager_connections;
+      std::map<std::string, std::list<boost::signals::connection> > call_connections;
       unsigned nr_ready;
     };
 
diff --git a/lib/engine/protocol/call-manager.cpp b/lib/engine/protocol/call-manager.cpp
index b7121d5..e655fdf 100644
--- a/lib/engine/protocol/call-manager.cpp
+++ b/lib/engine/protocol/call-manager.cpp
@@ -46,7 +46,7 @@ using namespace Ekiga;
 void CallManager::add_protocol_manager (boost::shared_ptr<CallProtocolManager> manager)
 {
   managers.insert (manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 }
 
 
diff --git a/lib/engine/protocol/call-manager.h b/lib/engine/protocol/call-manager.h
index 92867e3..ec10091 100644
--- a/lib/engine/protocol/call-manager.h
+++ b/lib/engine/protocol/call-manager.h
@@ -40,7 +40,8 @@
 #define __CALL_MANAGER_H__
 
 #include <set>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include <boost/smart_ptr.hpp>
 
@@ -98,7 +99,7 @@ namespace Ekiga
     /** This signal is emitted when a Ekiga::CallProtocolManager has been
      * added to the CallManager.
      */
-    sigc::signal1<void, boost::shared_ptr<CallProtocolManager> > manager_added;
+    boost::signal1<void, boost::shared_ptr<CallProtocolManager> > manager_added;
 
 
     /*                 
@@ -212,7 +213,7 @@ namespace Ekiga
     /*
      * MISC
      */
-    sigc::signal0<void> ready;
+    boost::signal0<void> ready;
 
     private:
     std::set<boost::shared_ptr<CallProtocolManager> > managers;
diff --git a/lib/engine/protocol/call.h b/lib/engine/protocol/call.h
index 098002b..f0eaa81 100644
--- a/lib/engine/protocol/call.h
+++ b/lib/engine/protocol/call.h
@@ -38,7 +38,8 @@
 #ifndef __CALL_H__
 #define __CALL_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <string>
 
 #include <boost/smart_ptr.hpp>
@@ -197,69 +198,69 @@ namespace Ekiga
 
       /* Signal emitted when the call is established
        */
-      sigc::signal0<void> established;
+      boost::signal0<void> established;
 
       /* Signal emitted when an established call is cleared
        * @param: a string describing why the call was cleared
        */
-      sigc::signal1<void, std::string> cleared;
+      boost::signal1<void, std::string> cleared;
 
       /* Signal emitted when the call is missed, ie cleared
        * without having been established
        */
-      sigc::signal0<void> missed;
+      boost::signal0<void> missed;
 
       /* Signal emitted when the call is forwarded
        */
-      sigc::signal0<void> forwarded;
+      boost::signal0<void> forwarded;
 
       /* Signal emitted when the call is held
        */
-      sigc::signal0<void> held;
+      boost::signal0<void> held;
 
       /* Signal emitted when the call is retrieved
        */
-      sigc::signal0<void> retrieved;
+      boost::signal0<void> retrieved;
 
       /* Signal emitted when the call is being setup
        */
-      sigc::signal0<void> setup;
+      boost::signal0<void> setup;
 
       /* Signal emitted when the remote party is ringing
        */
-      sigc::signal0<void> ringing;
+      boost::signal0<void> ringing;
 
       /* Signal emitted when a stream is opened
        * @param the stream name
        * @param the stream type
        * @param transmission or reception
        */
-      sigc::signal3<void, std::string, StreamType, bool> stream_opened;
+      boost::signal3<void, std::string, StreamType, bool> stream_opened;
 
       /* Signal emitted when a stream is closed
        * @param the stream name
        * @param the stream type
        * @param transmission or reception
        */
-      sigc::signal3<void, std::string, StreamType, bool> stream_closed;
+      boost::signal3<void, std::string, StreamType, bool> stream_closed;
 
       /* Signal emitted when a transmitted stream is paused
        * @param the stream name
        * @param the stream type
        * @param transmission or reception
        */
-      sigc::signal2<void, std::string, StreamType> stream_paused;
+      boost::signal2<void, std::string, StreamType> stream_paused;
 
       /* Signal emitted when a transmitted stream is resumed
        * @param the stream name
        * @param the stream type
        * @param transmission or reception
        */
-      sigc::signal2<void, std::string, StreamType> stream_resumed;
+      boost::signal2<void, std::string, StreamType> stream_resumed;
 
       /** This signal is emitted when the Call is removed.
        */
-      sigc::signal0<void> removed;
+      boost::signal0<void> removed;
      
     };
 
diff --git a/lib/engine/videoinput/Makefile.am b/lib/engine/videoinput/Makefile.am
index bd40bb3..2fa5b5e 100644
--- a/lib/engine/videoinput/Makefile.am
+++ b/lib/engine/videoinput/Makefile.am
@@ -23,4 +23,4 @@ libgmvideoinput_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmvideoinput_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
 	$(top_builddir)/lib/engine/videooutput/libgmvideooutput.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/videoinput/videoinput-core.cpp b/lib/engine/videoinput/videoinput-core.cpp
index 4b64f6f..ca24b24 100644
--- a/lib/engine/videoinput/videoinput-core.cpp
+++ b/lib/engine/videoinput/videoinput-core.cpp
@@ -174,15 +174,15 @@ void VideoInputCore::setup_conf_bridge ()
 void VideoInputCore::add_manager (VideoInputManager &manager)
 {
   managers.insert (&manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager.device_opened.connect (sigc::bind (sigc::mem_fun (this, &VideoInputCore::on_device_opened), &manager));
-  manager.device_closed.connect (sigc::bind (sigc::mem_fun (this, &VideoInputCore::on_device_closed), &manager));
-  manager.device_error.connect (sigc::bind (sigc::mem_fun (this, &VideoInputCore::on_device_error), &manager));
+  manager.device_opened.connect (boost::bind (&VideoInputCore::on_device_opened, this, _1, _2, &manager));
+  manager.device_closed.connect (boost::bind (&VideoInputCore::on_device_closed, this, _1, &manager));
+  manager.device_error.connect (boost::bind (&VideoInputCore::on_device_error, this, _1, _2, &manager));
 }
 
 
-void VideoInputCore::visit_managers (sigc::slot1<bool, VideoInputManager &> visitor)
+void VideoInputCore::visit_managers (boost::function1<bool, VideoInputManager &> visitor)
 {
   PWaitAndSignal m(core_mutex);
   bool go_on = true;
@@ -234,7 +234,7 @@ void VideoInputCore::add_device (const std::string & source, const std::string &
       if ( desired_device == device )
         internal_set_device(device, current_channel, current_format);
 
-      device_added.emit(device, desired_device == device);
+      device_added(device, desired_device == device);
     }
   }
 }
@@ -258,7 +258,7 @@ void VideoInputCore::remove_device (const std::string & source, const std::strin
             internal_set_device(new_device, current_channel, current_format);
        }
 
-       device_removed.emit(device, current_device == device);
+       device_removed(device, current_device == device);
      }
   }
 }
@@ -425,17 +425,17 @@ void VideoInputCore::on_device_opened (VideoInputDevice device,
                                      VideoInputSettings settings, 
                                      VideoInputManager *manager)
 {
-  device_opened.emit (*manager, device, settings);
+  device_opened (*manager, device, settings);
 }
 
 void VideoInputCore::on_device_closed (VideoInputDevice device, VideoInputManager *manager)
 {
-  device_closed.emit (*manager, device);
+  device_closed (*manager, device);
 }
 
 void VideoInputCore::on_device_error (VideoInputDevice device, VideoInputErrorCodes error_code, VideoInputManager *manager)
 {
-  device_error.emit (*manager, device, error_code);
+  device_error (*manager, device, error_code);
 }
 
 void VideoInputCore::internal_set_device(const VideoInputDevice & device, int channel, VideoInputFormat format)
diff --git a/lib/engine/videoinput/videoinput-core.h b/lib/engine/videoinput/videoinput-core.h
index ab15e54..6e52c46 100644
--- a/lib/engine/videoinput/videoinput-core.h
+++ b/lib/engine/videoinput/videoinput-core.h
@@ -44,7 +44,8 @@
 #include "videoinput-manager.h"
 #include "videoinput-gmconf-bridge.h"
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <glib.h>
 #include <set>
 
@@ -138,12 +139,12 @@ namespace Ekiga
       /** Triggers a callback for all Ekiga::VideoInputManager sources of the
        * VideoInputCore service.
        */
-       void visit_managers (sigc::slot1<bool, VideoInputManager &> visitor);
+       void visit_managers (boost::function1<bool, VideoInputManager &> visitor);
 
       /** This signal is emitted when a Ekiga::VideoInputManager has been
        * added to the VideoInputCore Service.
        */
-       sigc::signal1<void, VideoInputManager &> manager_added;
+       boost::signal1<void, VideoInputManager &> manager_added;
 
 
       /*** VideoInput Device Management ***/
@@ -274,23 +275,23 @@ namespace Ekiga
 
       /** See videoinput-manager.h for the API
        */
-      sigc::signal3<void, VideoInputManager &, VideoInputDevice &, VideoInputSettings&> device_opened;
-      sigc::signal2<void, VideoInputManager &, VideoInputDevice &> device_closed;
-      sigc::signal3<void, VideoInputManager &, VideoInputDevice &, VideoInputErrorCodes> device_error;
+      boost::signal3<void, VideoInputManager &, VideoInputDevice &, VideoInputSettings&> device_opened;
+      boost::signal2<void, VideoInputManager &, VideoInputDevice &> device_closed;
+      boost::signal3<void, VideoInputManager &, VideoInputDevice &, VideoInputErrorCodes> device_error;
 
       /** This signal is emitted when a video input has been added to the system.
        * This signal will be emitted if add_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the video input device that was added.
        */
-      sigc::signal2<void, VideoInputDevice, bool> device_added;
+      boost::signal2<void, VideoInputDevice, bool> device_added;
 
       /** This signal is emitted when a video input has been removed from the system.
        * This signal will be emitted if remove_device was called with a device name and
        * a manager claimed support for this device.
        * @param device the video input device that was removed.
        */
-      sigc::signal2<void, VideoInputDevice, bool> device_removed;
+      boost::signal2<void, VideoInputDevice, bool> device_removed;
 
   private:
       void on_device_opened (VideoInputDevice device,  
diff --git a/lib/engine/videoinput/videoinput-gmconf-bridge.cpp b/lib/engine/videoinput/videoinput-gmconf-bridge.cpp
index c46ffac..1d4cbe3 100644
--- a/lib/engine/videoinput/videoinput-gmconf-bridge.cpp
+++ b/lib/engine/videoinput/videoinput-gmconf-bridge.cpp
@@ -48,7 +48,7 @@ VideoInputCoreConfBridge::VideoInputCoreConfBridge (Ekiga::Service & _service)
  : Ekiga::ConfBridge (_service)
 {
   Ekiga::ConfKeys keys;
-  property_changed.connect (sigc::mem_fun (this, &VideoInputCoreConfBridge::on_property_changed));
+  property_changed.connect (boost::bind (&VideoInputCoreConfBridge::on_property_changed, this, _1, _2));
 
   keys.push_back (VIDEO_DEVICES_KEY "size"); 
   keys.push_back (VIDEO_DEVICES_KEY "max_frame_rate"); 
diff --git a/lib/engine/videoinput/videoinput-manager.h b/lib/engine/videoinput/videoinput-manager.h
index 0e21ae6..7235c54 100644
--- a/lib/engine/videoinput/videoinput-manager.h
+++ b/lib/engine/videoinput/videoinput-manager.h
@@ -39,7 +39,8 @@
 #define __VIDEOINPUT_MANAGER_H__
 
 #include <vector>
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "videoinput-info.h"
 
@@ -158,18 +159,18 @@ namespace Ekiga
        * @param device the video input device that was opened.
        * @param config the current video input device configuration (current brightness, colour, etc.).
        */
-      sigc::signal2<void, VideoInputDevice, VideoInputSettings> device_opened;
+      boost::signal2<void, VideoInputDevice, VideoInputSettings> device_opened;
 
       /** This signal is emitted when a video input device is closed.
        * @param device the video input device that was closed.
        */
-      sigc::signal1<void, VideoInputDevice> device_closed;
+      boost::signal1<void, VideoInputDevice> device_closed;
 
       /** This signal is emitted when an error occurs when opening a video input device.
        * @param device the video input device that caused the error.
        * @param error_code the video input device error code.
        */
-      sigc::signal2<void, VideoInputDevice, VideoInputErrorCodes> device_error;
+      boost::signal2<void, VideoInputDevice, VideoInputErrorCodes> device_error;
 
   protected:  
       typedef struct ManagerState {
diff --git a/lib/engine/videooutput/Makefile.am b/lib/engine/videooutput/Makefile.am
index 54d48fa..a40acfa 100644
--- a/lib/engine/videooutput/Makefile.am
+++ b/lib/engine/videooutput/Makefile.am
@@ -20,4 +20,4 @@ libgmvideooutput_la_SOURCES = \
 libgmvideooutput_la_LDFLAGS = $(STACKLIB_LDFLAGS)
 libgmvideooutput_la_LIBADD = \
 	$(top_builddir)/lib/engine/framework/libgmframework.la \
-	$(BOOST_LDFLAGS) $(SIGC_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
+	$(BOOST_LDFLAGS) $(BOOST_LIBS) $(GLIB_LIBS) $(PTLIB_LIBS)
diff --git a/lib/engine/videooutput/videooutput-core.cpp b/lib/engine/videooutput/videooutput-core.cpp
index 33fcfcc..1ef3cc9 100644
--- a/lib/engine/videooutput/videooutput-core.cpp
+++ b/lib/engine/videooutput/videooutput-core.cpp
@@ -85,17 +85,17 @@ void VideoOutputCore::add_manager (VideoOutputManager &manager)
   PWaitAndSignal m(core_mutex);
 
   managers.insert (&manager);
-  manager_added.emit (manager);
+  manager_added (manager);
 
-  manager.device_opened.connect (sigc::bind (sigc::mem_fun (this, &VideoOutputCore::on_device_opened), &manager));
-  manager.device_closed.connect (sigc::bind (sigc::mem_fun (this, &VideoOutputCore::on_device_closed), &manager));
-  manager.device_error.connect (sigc::bind (sigc::mem_fun (this, &VideoOutputCore::on_device_error), &manager));
-  manager.fullscreen_mode_changed.connect (sigc::bind (sigc::mem_fun (this, &VideoOutputCore::on_fullscreen_mode_changed), &manager));
-  manager.size_changed.connect (sigc::bind (sigc::mem_fun (this, &VideoOutputCore::on_size_changed), &manager));
+  manager.device_opened.connect (boost::bind (&VideoOutputCore::on_device_opened, this, _1, _2, _3, _4, &manager));
+  manager.device_closed.connect (boost::bind (&VideoOutputCore::on_device_closed, this, &manager));
+  manager.device_error.connect (boost::bind (&VideoOutputCore::on_device_error, this, _1, &manager));
+  manager.fullscreen_mode_changed.connect (boost::bind (&VideoOutputCore::on_fullscreen_mode_changed, this, _1, &manager));
+  manager.size_changed.connect (boost::bind (&VideoOutputCore::on_size_changed, this, _1, _2, &manager));
 }
 
 
-void VideoOutputCore::visit_managers (sigc::slot1<bool, VideoOutputManager &> visitor)
+void VideoOutputCore::visit_managers (boost::function1<bool, VideoOutputManager &> visitor)
 {
   bool go_on = true;
 
@@ -204,26 +204,26 @@ void VideoOutputCore::set_display_info (const DisplayInfo & _display_info)
 
 void VideoOutputCore::on_device_opened (VideoOutputAccel videooutput_accel, VideoOutputMode mode, unsigned zoom, bool both_streams, VideoOutputManager *manager)
 {
-  device_opened.emit (*manager, videooutput_accel, mode, zoom, both_streams);
+  device_opened (*manager, videooutput_accel, mode, zoom, both_streams);
 }
 
 void VideoOutputCore::on_device_closed ( VideoOutputManager *manager)
 {
-  device_closed.emit (*manager);
+  device_closed (*manager);
 }
 
 void VideoOutputCore::on_device_error (VideoOutputErrorCodes error_code, VideoOutputManager *manager)
 {
-  device_error.emit (*manager, error_code);
+  device_error (*manager, error_code);
 }
 
 void VideoOutputCore::on_fullscreen_mode_changed ( VideoOutputFSToggle toggle, VideoOutputManager *manager)
 {
-  fullscreen_mode_changed.emit (*manager, toggle);
+  fullscreen_mode_changed (*manager, toggle);
 }
 
 void VideoOutputCore::on_size_changed ( unsigned width, unsigned height, VideoOutputManager *manager)
 {
-  size_changed.emit (*manager, width, height);
+  size_changed (*manager, width, height);
 }
 
diff --git a/lib/engine/videooutput/videooutput-core.h b/lib/engine/videooutput/videooutput-core.h
index b4c9e6e..0700b37 100644
--- a/lib/engine/videooutput/videooutput-core.h
+++ b/lib/engine/videooutput/videooutput-core.h
@@ -42,7 +42,8 @@
 #include "videooutput-gmconf-bridge.h"
 #include "videooutput-manager.h"
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <set>
 #include <map>
 
@@ -110,12 +111,12 @@ namespace Ekiga
       /** Triggers a callback for all Ekiga::VideoOutputManager sources of the
        * VideoOutputCore service.
        */
-      void visit_managers (sigc::slot1<bool, VideoOutputManager &> visitor);
+      void visit_managers (boost::function1<bool, VideoOutputManager &> visitor);
 
       /** This signal is emitted when a Ekiga::VideoOutputManager has been
        * added to the VideoOutputCore Service.
        */
-      sigc::signal1<void, VideoOutputManager &> manager_added;
+      boost::signal1<void, VideoOutputManager &> manager_added;
 
 
       /*** Videooutput Management ***/
@@ -164,11 +165,11 @@ namespace Ekiga
 
       /** See videooutput-manager.h for the API
        */
-      sigc::signal5<void, VideoOutputManager &, VideoOutputAccel, VideoOutputMode, unsigned, bool> device_opened;
-      sigc::signal1<void, VideoOutputManager &> device_closed;
-      sigc::signal2<void, VideoOutputManager &, VideoOutputErrorCodes> device_error;
-      sigc::signal2<void, VideoOutputManager &, VideoOutputFSToggle> fullscreen_mode_changed;
-      sigc::signal3<void, VideoOutputManager &, unsigned, unsigned> size_changed;
+      boost::signal5<void, VideoOutputManager &, VideoOutputAccel, VideoOutputMode, unsigned, bool> device_opened;
+      boost::signal1<void, VideoOutputManager &> device_closed;
+      boost::signal2<void, VideoOutputManager &, VideoOutputErrorCodes> device_error;
+      boost::signal2<void, VideoOutputManager &, VideoOutputFSToggle> fullscreen_mode_changed;
+      boost::signal3<void, VideoOutputManager &, unsigned, unsigned> size_changed;
 
 
   private:
diff --git a/lib/engine/videooutput/videooutput-gmconf-bridge.cpp b/lib/engine/videooutput/videooutput-gmconf-bridge.cpp
index 449e366..f71931b 100644
--- a/lib/engine/videooutput/videooutput-gmconf-bridge.cpp
+++ b/lib/engine/videooutput/videooutput-gmconf-bridge.cpp
@@ -48,7 +48,7 @@ VideoOutputCoreConfBridge::VideoOutputCoreConfBridge (Ekiga::Service & _service)
  : Ekiga::ConfBridge (_service)
 {
   Ekiga::ConfKeys keys;
-  property_changed.connect (sigc::mem_fun (this, &VideoOutputCoreConfBridge::on_property_changed));
+  property_changed.connect (boost::bind (&VideoOutputCoreConfBridge::on_property_changed, this, _1, _2));
 
   keys.push_back (VIDEO_DISPLAY_KEY "video_view"); 
   keys.push_back (VIDEO_DISPLAY_KEY "zoom"); 
diff --git a/lib/engine/videooutput/videooutput-manager.h b/lib/engine/videooutput/videooutput-manager.h
index b6ccc0f..9938199 100644
--- a/lib/engine/videooutput/videooutput-manager.h
+++ b/lib/engine/videooutput/videooutput-manager.h
@@ -38,7 +38,8 @@
 #ifndef __VIDEOOUTPUT_MANAGER_H__
 #define __VIDEOOUTPUT_MANAGER_H__
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 
 #include "videooutput-info.h"
 
@@ -105,16 +106,16 @@ namespace Ekiga
        * @param zoom the initial zoom level when de device was opened.
        * @param both_streams if a frame from both local and remote stream has been received.
        */
-      sigc::signal4<void, VideoOutputAccel, VideoOutputMode, unsigned, bool> device_opened;
+      boost::signal4<void, VideoOutputAccel, VideoOutputMode, unsigned, bool> device_opened;
 
       /** This signal is emitted when a video output device is closed.
        */
-      sigc::signal0<void> device_closed;
+      boost::signal0<void> device_closed;
 
       /** This signal is emitted when an error occurs when opening a video output device.
        * @param error_code the video output device error code.
        */
-      sigc::signal1<void, VideoOutputErrorCodes> device_error;
+      boost::signal1<void, VideoOutputErrorCodes> device_error;
 
       /** This signal is emitted when a manager switches autonomously into or out of fullscreen mode.
        * Some managers like DX and XV  allow the user to switch between FS
@@ -124,7 +125,7 @@ namespace Ekiga
        * or when it is being zoomed in or out.
        * @param toggle VO_FS_ON or VO_FS_OFF depending on whether FS was activated or deactivated.
        */
-      sigc::signal1<void, VideoOutputFSToggle> fullscreen_mode_changed;
+      boost::signal1<void, VideoOutputFSToggle> fullscreen_mode_changed;
 
       /** This signal is emitted the video output size has changed.
        * This signal is called whenever the size of the widget carrying the video signal
@@ -133,7 +134,7 @@ namespace Ekiga
        * @param width the new width of the widget.
        * @param height the new height of the widget.
        */
-      sigc::signal2<void, unsigned, unsigned> size_changed;
+      boost::signal2<void, unsigned, unsigned> size_changed;
 
   protected:  
       virtual void get_display_info (DisplayInfo &) { };
diff --git a/lib/gui/Makefile.am b/lib/gui/Makefile.am
index a503a95..ca5990c 100644
--- a/lib/gui/Makefile.am
+++ b/lib/gui/Makefile.am
@@ -81,7 +81,7 @@ endif
 
 AM_CFLAGS = $(GTK_CFLAGS) $(GLIB_CFLAGS) $(GNOME_CFLAGS) -std=c99
 AM_CXXFLAGS = $(GTK_CFLAGS) $(GLIB_CFLAGS) $(OPAL_CFLAGS) $(PTLIB_CFLAGS) $(XV_CFLAGS) $(DX_CFLAGS) $(BOOST_CPPFLAGS) $(SIGC_CFLAGS)
-AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(XV_LIBS) $(DX_LIBS) $(GNOME_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS)
+AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(XV_LIBS) $(DX_LIBS) $(GNOME_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS)
 
 libgmwidgets_la_LDFLAGS = -export-dynamic
 libgmwidgets_la_LIBADD = $(AM_LIBS)
diff --git a/m4/ax_boost_signals.m4 b/m4/ax_boost_signals.m4
new file mode 100644
index 0000000..11e9c63
--- /dev/null
+++ b/m4/ax_boost_signals.m4
@@ -0,0 +1,108 @@
+# ===========================================================================
+#        http://www.nongnu.org/autoconf-archive/ax_boost_signals.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_BOOST_SIGNALS
+#
+# DESCRIPTION
+#
+#   Test for Signals library from the Boost C++ libraries. The macro
+#   requires a preceding call to AX_BOOST_BASE. Further documentation is
+#   available at <http://randspringer.de/boost/index.html>.
+#
+#   This macro calls:
+#
+#     AC_SUBST(BOOST_SIGNALS_LIB)
+#
+#   And sets:
+#
+#     HAVE_BOOST_SIGNALS
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Thomas Porschberg <thomas randspringer de>
+#   Copyright (c) 2008 Michael Tindal
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+
+AC_DEFUN([AX_BOOST_SIGNALS],
+[
+	AC_ARG_WITH([boost-signals],
+	AS_HELP_STRING([--with-boost-signals@<:@=special-lib@:>@],
+                   [use the Signals library from boost - it is possible to specify a certain library for the linker
+                        e.g. --with-boost-signals=boost_signals-gcc-mt-d ]),
+        [
+        if test "$withval" = "no"; then
+			want_boost="no"
+        elif test "$withval" = "yes"; then
+            want_boost="yes"
+            ax_boost_user_signals_lib=""
+        else
+		    want_boost="yes"
+        	ax_boost_user_signals_lib="$withval"
+		fi
+        ],
+        [want_boost="yes"]
+	)
+
+	if test "x$want_boost" = "xyes"; then
+        AC_REQUIRE([AC_PROG_CC])
+		CPPFLAGS_SAVED="$CPPFLAGS"
+		CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+		export CPPFLAGS
+
+		LDFLAGS_SAVED="$LDFLAGS"
+		LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+		export LDFLAGS
+
+        AC_CACHE_CHECK(whether the Boost::Signals library is available,
+					   ax_cv_boost_signals,
+        [AC_LANG_PUSH([C++])
+		 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ %:@include <boost/signal.hpp>
+											]],
+                                  [[boost::signal<void ()> sig;
+                                    return 0;
+                                  ]]),
+                           ax_cv_boost_signals=yes, ax_cv_boost_signals=no)
+         AC_LANG_POP([C++])
+		])
+		if test "x$ax_cv_boost_signals" = "xyes"; then
+			AC_DEFINE(HAVE_BOOST_SIGNALS,,[define if the Boost::Signals library is available])
+            BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
+            if test "x$ax_boost_user_signals_lib" = "x"; then
+                for libextension in `ls $BOOSTLIBDIR/libboost_signals*.{so,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_signals.*\)\.so.*$;\1;' -e 's;^lib\(boost_signals.*\)\.a*$;\1;'` ; do
+                     ax_lib=${libextension}
+				    AC_CHECK_LIB($ax_lib, exit,
+                                 [BOOST_SIGNALS_LIB="-l$ax_lib"; AC_SUBST(BOOST_SIGNALS_LIB) link_signals="yes"; break],
+                                 [link_signals="no"])
+  				done
+                if test "x$link_signals" != "xyes"; then
+                for libextension in `ls $BOOSTLIBDIR/boost_signals*.{dll,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_signals.*\)\.dll.*$;\1;' -e 's;^\(boost_signals.*\)\.a*$;\1;'` ; do
+                     ax_lib=${libextension}
+				    AC_CHECK_LIB($ax_lib, exit,
+                                 [BOOST_SIGNALS_LIB="-l$ax_lib"; AC_SUBST(BOOST_SIGNALS_LIB) link_signals="yes"; break],
+                                 [link_signals="no"])
+  				done
+                fi
+
+            else
+               for ax_lib in $ax_boost_user_signals_lib boost_signals-$ax_boost_user_signals_lib; do
+				      AC_CHECK_LIB($ax_lib, main,
+                                   [BOOST_SIGNALS_LIB="-l$ax_lib"; AC_SUBST(BOOST_SIGNALS_LIB) link_signals="yes"; break],
+                                   [link_signals="no"])
+                  done
+
+            fi
+			if test "x$link_signals" != "xyes"; then
+				AC_MSG_ERROR(Could not link against $ax_lib !)
+			fi
+		fi
+
+		CPPFLAGS="$CPPFLAGS_SAVED"
+    	LDFLAGS="$LDFLAGS_SAVED"
+	fi
+])
diff --git a/src/Makefile.am b/src/Makefile.am
index d974478..bb63e6e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -153,7 +153,7 @@ src/revision.h:
         fi
 
 AM_CXXFLAGS = $(GTK_CFLAGS) $(GLIB_CFLAGS) $(GNOME_CFLAGS) $(DBUS_CFLAGS) $(BONOBO_CFLAGS) $(OPAL_CFLAGS) $(PTLIB_CFLAGS) $(BOOST_CPPFLAGS) $(SIGC_CFLAGS) $(XML_CFLAGS) $(NOTIFY_CFLAGS)
-AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(GNOME_LIBS) $(DBUS_LIBS) $(BONOBO_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(BOOST_LDFLAGS) $(SIGC_LIBS) $(XML_LIBS) $(NOTIFY_LIBS)
+AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(GNOME_LIBS) $(DBUS_LIBS) $(BONOBO_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(BOOST_LDFLAGS) $(BOOST_LIBS) $(XML_LIBS) $(NOTIFY_LIBS)
 
 ekiga_LDADD = \
 	$(top_builddir)/lib/libekiga.la $(top_builddir)/lib/engine/libekiga_engine.la $(AM_LIBS)
diff --git a/src/gui/accounts.cpp b/src/gui/accounts.cpp
index ff8d7a9..23eb176 100644
--- a/src/gui/accounts.cpp
+++ b/src/gui/accounts.cpp
@@ -509,10 +509,17 @@ static void
 on_bank_added (Ekiga::BankPtr bank,
                gpointer data)
 {
-  bank->visit_accounts (sigc::bind (sigc::ptr_fun (visit_accounts), data));
+  bank->visit_accounts (boost::bind (&visit_accounts, _1, data));
   populate_menu (GTK_WIDGET (data));
 }
 
+static bool
+on_visit_banks (Ekiga::BankPtr bank,
+		gpointer data)
+{
+  on_bank_added (bank, data);
+  return true;
+}
 
 static bool
 on_handle_questions (Ekiga::FormRequestPtr request,
@@ -706,16 +713,16 @@ gm_accounts_window_new (Ekiga::ServiceCore &core)
 
 
   /* Engine Signals callbacks */
-  // FIXME sigc::connection conn;
+  // FIXME boost::signals::connection conn;
 
   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));
-  account_core->account_removed.connect (sigc::bind (sigc::ptr_fun (on_account_removed), window));
-  account_core->questions.connect (sigc::bind (sigc::ptr_fun (on_handle_questions), (gpointer) window));
+  account_core->bank_added.connect (boost::bind (&on_bank_added, _1, window));
+  account_core->account_added.connect (boost::bind (&on_account_added, _1, _2, window));
+  account_core->account_updated.connect (boost::bind (&on_account_updated, _1, _2, window));
+  account_core->account_removed.connect (boost::bind (&on_account_removed, _1, _2, window));
+  account_core->questions.connect (boost::bind (&on_handle_questions, _1, (gpointer) window));
 
-  account_core->visit_banks (sigc::bind_return (sigc::bind (sigc::ptr_fun (on_bank_added), window), true));
+  account_core->visit_banks (boost::bind (&on_visit_banks, _1, window));
 
   return window;
 }
diff --git a/src/gui/assistant.cpp b/src/gui/assistant.cpp
index b5b75a9..bef6c6d 100644
--- a/src/gui/assistant.cpp
+++ b/src/gui/assistant.cpp
@@ -91,7 +91,7 @@ struct _EkigaAssistantPrivate
   gint last_active_page;
 
   GtkListStore *summary_model;
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
 };
 
 /* presenting the network connectoin type to the user */
@@ -1622,24 +1622,24 @@ ekiga_assistant_new (Ekiga::ServiceCore *core)
   g_signal_connect (assistant, "key-press-event",
                     G_CALLBACK (ekiga_assistant_key_press_cb), NULL);
 
-  sigc::connection conn;
+  boost::signals::connection conn;
   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));
+  conn = videoinput_core->device_added.connect (boost::bind (&on_videoinput_device_added_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
-  conn = videoinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_removed_cb), assistant));
+  conn = videoinput_core->device_removed.connect (boost::bind (&on_videoinput_device_removed_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
 
-  conn = audioinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_added_cb), assistant));
+  conn = audioinput_core->device_added.connect (boost::bind (&on_audioinput_device_added_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
-  conn = audioinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_removed_cb), assistant));
+  conn = audioinput_core->device_removed.connect (boost::bind (&on_audioinput_device_removed_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
 
-  conn = audiooutput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_added_cb), assistant));
+  conn = audiooutput_core->device_added.connect (boost::bind (&on_audiooutput_device_added_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
-  conn = audiooutput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_removed_cb), assistant));
+  conn = audiooutput_core->device_removed.connect (boost::bind (&on_audiooutput_device_removed_cb, _1, _2, assistant));
   assistant->priv->connections.push_back (conn);
 
   /* Notifiers for the VIDEO_CODECS_KEY keys */
diff --git a/src/gui/main.cpp b/src/gui/main.cpp
index f363e45..f1b7892 100644
--- a/src/gui/main.cpp
+++ b/src/gui/main.cpp
@@ -195,7 +195,7 @@ struct _EkigaMainWindowPrivate
 
   Ekiga::Presentity* presentity;
 
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
 };
 
 /* properties */
@@ -2236,7 +2236,7 @@ url_changed_cb (GtkEditable *e,
 
       gtk_list_store_clear (mw->priv->completion);
 
-      bank->visit_accounts (sigc::bind (sigc::ptr_fun (account_completion_helper), tip_text, mw));
+      bank->visit_accounts (boost::bind (&account_completion_helper, _1, tip_text, mw));
     }
   }
 
@@ -2730,11 +2730,11 @@ ekiga_main_window_incoming_call_dialog_show (EkigaMainWindow *mw,
   g_signal_connect (G_OBJECT (incoming_call_popup), "response",
                     G_CALLBACK (incoming_call_response_cb), mw);
 
-  call->established.connect (sigc::bind (sigc::ptr_fun (on_incoming_call_gone_cb),
+  call->established.connect (boost::bind (&on_incoming_call_gone_cb,
                                          (gpointer) incoming_call_popup));
-  call->cleared.connect (sigc::bind (sigc::ptr_fun (on_cleared_incoming_call_cb),
+  call->cleared.connect (boost::bind (&on_cleared_incoming_call_cb, _1,
                                     (gpointer) incoming_call_popup));
-  call->missed.connect (sigc::bind (sigc::ptr_fun (on_incoming_call_gone_cb), 
+  call->missed.connect (boost::bind (&on_incoming_call_gone_cb, 
                                    (gpointer) incoming_call_popup));
 }
 
@@ -2816,11 +2816,11 @@ ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
     ekiga_main_window_incoming_call_dialog_show (mw, call);
   }
   else {
-    call->established.connect (sigc::bind (sigc::ptr_fun (on_incoming_call_gone_cb),
+    call->established.connect (boost::bind (&on_incoming_call_gone_cb,
                                            (gpointer) notify));
-    call->cleared.connect (sigc::bind (sigc::ptr_fun (on_cleared_incoming_call_cb),
+    call->cleared.connect (boost::bind (&on_cleared_incoming_call_cb, _1,
                                       (gpointer) notify));
-    call->missed.connect (sigc::bind (sigc::ptr_fun (on_incoming_call_gone_cb), 
+    call->missed.connect (boost::bind (&on_incoming_call_gone_cb, 
                                      (gpointer) notify));
   }
 
@@ -3936,80 +3936,80 @@ ekiga_main_window_class_init (EkigaMainWindowClass *klass)
 static void
 ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
 {
-  sigc::connection conn;
+  boost::signals::connection conn;
 
   g_return_if_fail (EKIGA_IS_MAIN_WINDOW (mw));
 
   /* New Display Engine signals */
   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));
+  conn = videooutput_core->device_opened.connect (boost::bind (&on_videooutput_device_opened_cb, _1, _2, _3, _4, _5, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videooutput_core->device_closed.connect (sigc::bind (sigc::ptr_fun (on_videooutput_device_closed_cb), (gpointer) mw));
+  conn = videooutput_core->device_closed.connect (boost::bind (&on_videooutput_device_closed_cb, _1, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videooutput_core->device_error.connect (sigc::bind (sigc::ptr_fun (on_videooutput_device_error_cb), (gpointer) mw));
+  conn = videooutput_core->device_error.connect (boost::bind (&on_videooutput_device_error_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videooutput_core->size_changed.connect (sigc::bind (sigc::ptr_fun (on_size_changed_cb), (gpointer) mw));
+  conn = videooutput_core->size_changed.connect (boost::bind (&on_size_changed_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videooutput_core->fullscreen_mode_changed.connect (sigc::bind (sigc::ptr_fun (on_fullscreen_mode_changed_cb), (gpointer) mw));
+  conn = videooutput_core->fullscreen_mode_changed.connect (boost::bind (&on_fullscreen_mode_changed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
   /* New VideoInput Engine signals */
   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));
+  conn = videoinput_core->device_opened.connect (boost::bind (&on_videoinput_device_opened_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videoinput_core->device_closed.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_closed_cb), (gpointer) mw));
+  conn = videoinput_core->device_closed.connect (boost::bind (&on_videoinput_device_closed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videoinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_added_cb), (gpointer) mw));
+  conn = videoinput_core->device_added.connect (boost::bind (&on_videoinput_device_added_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videoinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_removed_cb), (gpointer) mw));
+  conn = videoinput_core->device_removed.connect (boost::bind (&on_videoinput_device_removed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = videoinput_core->device_error.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_error_cb), (gpointer) mw));
+  conn = videoinput_core->device_error.connect (boost::bind (&on_videoinput_device_error_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
   /* New AudioInput Engine signals */
   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));
+  conn = audioinput_core->device_opened.connect (boost::bind (&on_audioinput_device_opened_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audioinput_core->device_closed.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_closed_cb), (gpointer) mw));
+  conn = audioinput_core->device_closed.connect (boost::bind (&on_audioinput_device_closed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audioinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_added_cb), (gpointer) mw));
+  conn = audioinput_core->device_added.connect (boost::bind (&on_audioinput_device_added_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audioinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_removed_cb), (gpointer) mw));
+  conn = audioinput_core->device_removed.connect (boost::bind (&on_audioinput_device_removed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audioinput_core->device_error.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_error_cb), (gpointer) mw));
+  conn = audioinput_core->device_error.connect (boost::bind (&on_audioinput_device_error_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
   /* New AudioOutput Engine signals */
   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));
+  conn = audiooutput_core->device_opened.connect (boost::bind (&on_audiooutput_device_opened_cb, _1, _2, _3, _4, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audiooutput_core->device_closed.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_closed_cb), (gpointer) mw));
+  conn = audiooutput_core->device_closed.connect (boost::bind (&on_audiooutput_device_closed_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audiooutput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_added_cb), (gpointer) mw));
+  conn = audiooutput_core->device_added.connect (boost::bind (&on_audiooutput_device_added_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audiooutput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_removed_cb), (gpointer) mw));
+  conn = audiooutput_core->device_removed.connect (boost::bind (&on_audiooutput_device_removed_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = audiooutput_core->device_error.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_error_cb), (gpointer) mw));
+  conn = audiooutput_core->device_error.connect (boost::bind (&on_audiooutput_device_error_cb, _1, _2, _3, _4, (gpointer) mw));
   mw->priv->connections.push_back (conn);
     
   /* New Call Engine signals */
@@ -4017,43 +4017,43 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   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));
+  conn = account_core->account_updated.connect (boost::bind (&on_account_updated, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->setup_call.connect (sigc::bind (sigc::ptr_fun (on_setup_call_cb), (gpointer) mw));
+  conn = call_core->setup_call.connect (boost::bind (&on_setup_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->ringing_call.connect (sigc::bind (sigc::ptr_fun (on_ringing_call_cb), (gpointer) mw));
+  conn = call_core->ringing_call.connect (boost::bind (&on_ringing_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->established_call.connect (sigc::bind (sigc::ptr_fun (on_established_call_cb), (gpointer) mw));
+  conn = call_core->established_call.connect (boost::bind (&on_established_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->cleared_call.connect (sigc::bind (sigc::ptr_fun (on_cleared_call_cb), (gpointer) mw));
+  conn = call_core->cleared_call.connect (boost::bind (&on_cleared_call_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->held_call.connect (sigc::bind (sigc::ptr_fun (on_held_call_cb), (gpointer) mw));
+  conn = call_core->held_call.connect (boost::bind (&on_held_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->retrieved_call.connect (sigc::bind (sigc::ptr_fun (on_retrieved_call_cb), (gpointer) mw));
+  conn = call_core->retrieved_call.connect (boost::bind (&on_retrieved_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->missed_call.connect (sigc::bind (sigc::ptr_fun (on_missed_call_cb), (gpointer) mw));
+  conn = call_core->missed_call.connect (boost::bind (&on_missed_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->stream_opened.connect (sigc::bind (sigc::ptr_fun (on_stream_opened_cb), (gpointer) mw));
+  conn = call_core->stream_opened.connect (boost::bind (&on_stream_opened_cb, _1, _2, _3, _4, _5, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->stream_closed.connect (sigc::bind (sigc::ptr_fun (on_stream_closed_cb), (gpointer) mw));
+  conn = call_core->stream_closed.connect (boost::bind (&on_stream_closed_cb, _1, _2, _3, _4, _5, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->stream_paused.connect (sigc::bind (sigc::ptr_fun (on_stream_paused_cb), (gpointer) mw));
+  conn = call_core->stream_paused.connect (boost::bind (&on_stream_paused_cb, _1, _2, _3, _4, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->stream_resumed.connect (sigc::bind (sigc::ptr_fun (on_stream_resumed_cb), (gpointer) mw));
+  conn = call_core->stream_resumed.connect (boost::bind (&on_stream_resumed_cb, _1, _2, _3, _4, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->errors.connect (sigc::bind (sigc::ptr_fun (on_handle_errors), (gpointer) mw));
+  conn = call_core->errors.connect (boost::bind (&on_handle_errors, _1, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 }
 
diff --git a/src/gui/preferences.cpp b/src/gui/preferences.cpp
index 551f3dc..e59daad 100644
--- a/src/gui/preferences.cpp
+++ b/src/gui/preferences.cpp
@@ -70,7 +70,7 @@ typedef struct _GmPreferencesWindow
   GtkWidget *video_device;
   GtkWidget *iface;
   Ekiga::ServiceCore *core;
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
 } GmPreferencesWindow;
 
 #define GM_PREFERENCES_WINDOW(x) (GmPreferencesWindow *) (x)
@@ -1405,24 +1405,24 @@ gm_prefs_window_new (Ekiga::ServiceCore *core)
 		    "delete-event", 
 		    G_CALLBACK (delete_window_cb), NULL);
 
-  sigc::connection conn;
+  boost::signals::connection conn;
   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));
+  conn = videoinput_core->device_added.connect (boost::bind (&on_videoinput_device_added_cb, _1, _2, window));
   pw->connections.push_back (conn);
-  conn = videoinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_videoinput_device_removed_cb), window));
+  conn = videoinput_core->device_removed.connect (boost::bind (&on_videoinput_device_removed_cb, _1, _2, window));
   pw->connections.push_back (conn);
 
-  conn = audioinput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_added_cb), window));
+  conn = audioinput_core->device_added.connect (boost::bind (&on_audioinput_device_added_cb, _1, _2, window));
   pw->connections.push_back (conn);
-  conn = audioinput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audioinput_device_removed_cb), window));
+  conn = audioinput_core->device_removed.connect (boost::bind (&on_audioinput_device_removed_cb, _1, _2, window));
   pw->connections.push_back (conn);
 
-  conn = audiooutput_core->device_added.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_added_cb), window));
+  conn = audiooutput_core->device_added.connect (boost::bind (&on_audiooutput_device_added_cb, _1, _2, window));
   pw->connections.push_back(conn);
-  conn = audiooutput_core->device_removed.connect (sigc::bind (sigc::ptr_fun (on_audiooutput_device_removed_cb), window));
+  conn = audiooutput_core->device_removed.connect (boost::bind (&on_audiooutput_device_removed_cb, _1, _2, window));
   pw->connections.push_back (conn);
 
 
diff --git a/src/gui/statusicon.cpp b/src/gui/statusicon.cpp
index f0586ba..5a7c722 100644
--- a/src/gui/statusicon.cpp
+++ b/src/gui/statusicon.cpp
@@ -50,7 +50,8 @@
 #include "gtk-frontend.h"
 #include "call-core.h"
 
-#include <sigc++/sigc++.h>
+#include <boost/signals.hpp>
+#include <boost/bind.hpp>
 #include <vector>
 
 #include "services.h"
@@ -68,7 +69,7 @@ struct _StatusIconPrivate
   GtkWidget *popup_menu;
   gboolean has_message;
 
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
 
   int blink_id;
   std::string status;
@@ -173,7 +174,7 @@ statusicon_finalize (GObject *obj)
   if (self->priv->blink_image)
     g_free (self->priv->blink_image);
 
-  for (std::vector<sigc::connection>::iterator iter = self->priv->connections.begin () ;
+  for (std::vector<boost::signals::connection>::iterator iter = self->priv->connections.begin () ;
        iter != self->priv->connections.end ();
        iter++)
     iter->disconnect ();
@@ -530,7 +531,7 @@ statusicon_new (Ekiga::ServiceCore & core)
 {
   StatusIcon *self = NULL;
 
-  sigc::connection conn;
+  boost::signals::connection conn;
 
   self = STATUSICON (g_object_new (STATUSICON_TYPE, NULL));
   self->priv = new StatusIconPrivate (core);
@@ -549,14 +550,14 @@ statusicon_new (Ekiga::ServiceCore & core)
   GtkWidget *chat_window = GTK_WIDGET (frontend->get_chat_window ());
 
   statusicon_set_status (self, details->get_presence ());
-  conn = details->updated.connect (sigc::bind (sigc::ptr_fun (personal_details_updated_cb), self, details));
+  conn = details->updated.connect (boost::bind (&personal_details_updated_cb, self, details));
   self->priv->connections.push_back (conn);
 
-  conn = call_core->established_call.connect (sigc::bind (sigc::ptr_fun (established_call_cb), 
+  conn = call_core->established_call.connect (boost::bind (&established_call_cb, _1, _2, 
                                                           (gpointer) self));
   self->priv->connections.push_back (conn);
 
-  conn = call_core->cleared_call.connect (sigc::bind (sigc::ptr_fun (cleared_call_cb), 
+  conn = call_core->cleared_call.connect (boost::bind (&cleared_call_cb, _1, _2, _3,
                                                       (gpointer) self));
   self->priv->connections.push_back (conn);
 
diff --git a/src/gui/statusmenu.cpp b/src/gui/statusmenu.cpp
index 845c300..5221d58 100644
--- a/src/gui/statusmenu.cpp
+++ b/src/gui/statusmenu.cpp
@@ -51,7 +51,7 @@
 struct _StatusMenuPrivate
 {
   boost::shared_ptr<Ekiga::PersonalDetails> personal_details;
-  std::vector<sigc::connection> connections;
+  std::vector<boost::signals::connection> connections;
 
   GtkListStore *list_store; // List store storing the menu
   GtkWindow    *parent;     // Parent window
@@ -803,7 +803,7 @@ status_menu_new (Ekiga::ServiceCore & core)
 {
   StatusMenu *self = NULL;
 
-  sigc::connection conn;
+  boost::signals::connection conn;
   GtkCellRenderer *renderer = NULL;
   GSList *custom_status_array [NUM_STATUS_TYPES];
 
@@ -862,7 +862,7 @@ status_menu_new (Ekiga::ServiceCore & core)
   gm_conf_notifier_add (PERSONAL_DATA_KEY "dnd_custom_status", 
                         status_menu_custom_messages_changed, self);
 
-  conn = self->priv->personal_details->updated.connect (sigc::bind (sigc::ptr_fun (on_details_updated), self)); 
+  conn = self->priv->personal_details->updated.connect (boost::bind (&on_details_updated, self)); 
   self->priv->connections.push_back (conn);
 
   return GTK_WIDGET (self);



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