diff --git a/sflphone-gtk/configure.ac b/sflphone-gtk/configure.ac
index efff738a4ddeb2ff024bc3f67856c856d290a2e4..0686cbd4093cde64c1f7589017df952f34592414 100644
--- a/sflphone-gtk/configure.ac
+++ b/sflphone-gtk/configure.ac
@@ -26,6 +26,7 @@ fi
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_STDC_HEADERS
+AC_PROG_LIBTOOL
 
 PKG_CHECK_MODULES(DEPS, \
     dbus-glib-1 >= 0.35 \
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 01a8cbbacacb5f76f16604ea5bbb3a40bb315519..e1344e2d5e3134a3f6eab4bfa764b2a467902fc0 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -375,9 +375,12 @@ ManagerImpl::onHoldCall(const CallID& id)
 {
     AccountID accountid;
     bool returnValue;
+    CallID call_id;
 
     stopTone(true);
 
+    call_id = id;
+
     /* Direct IP to IP call */
     if (getConfigFromCall (id) == Call::IPtoIP) {
         returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (id);        
@@ -396,7 +399,7 @@ ManagerImpl::onHoldCall(const CallID& id)
     removeWaitingCall(id);
     switchCall("");
   
-    if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HOLD");
+    if (_dbus) _dbus->getCallManager()->callStateChanged(call_id, "HOLD");
 
     return returnValue;
 }
@@ -409,12 +412,15 @@ ManagerImpl::offHoldCall(const CallID& id)
     AccountID accountid;
     bool returnValue, rec;
     std::string codecName;
+    CallID call_id;
 
     stopTone(false);
 
+    call_id = id;
     //Place current call on hold if it isn't
     if (hasCurrentCall()) 
     { 
+        _debug ("Put the current call (ID=%s) on hold\n", getCurrentCallId().c_str());
         onHoldCall(getCurrentCallId());
     }
 
@@ -438,9 +444,9 @@ ManagerImpl::offHoldCall(const CallID& id)
 
     if (_dbus){ 
         if (rec)
-            _dbus->getCallManager()->callStateChanged(id, "UNHOLD_RECORD");
+            _dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_RECORD");
         else 
-            _dbus->getCallManager()->callStateChanged(id, "UNHOLD_CURRENT");
+            _dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_CURRENT");
     }
   
     switchCall(id);
diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index 037686ab0fabd2fc87780dd9d2cfff8a80c10078..f4c5a838ba311e5d33d1d578111707b2d02425c3 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -717,6 +717,7 @@ SIPVoIPLink::offhold(const CallID& id)
     bool 
 SIPVoIPLink::transfer(const CallID& id, const std::string& to)
 {
+
     SIPCall *call;
     std::string tmp_to;
     pjsip_evsub *sub;
@@ -727,7 +728,6 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to)
     AccountID account_id;
     Account* account;
 
-
     call = getSIPCall(id);
     call->stopRecording();
     account_id = Manager::instance().getAccountFromCall(id);
@@ -739,8 +739,14 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to)
     }  
 
     tmp_to = SIPToHeader(to);
-    if (tmp_to.find("@") == std::string::npos) {
-        tmp_to = tmp_to + "@" + account->getHostname();
+    if (account) {
+        if (tmp_to.find("@") == std::string::npos) {
+            tmp_to = tmp_to + "@" + account->getHostname();
+        }
+    }
+
+    else {
+        
     }
 
     _debug("In transfer, tmp_to is %s\n", tmp_to.data());
@@ -762,7 +768,6 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to)
      * because after this function, we can not find the cooresponding
      * voiplink from the call any more. But the voiplink is useful!
      */
-    AccountID accId = Manager::instance().getAccountFromCall(call->getCallId());
     pjsip_evsub_set_mod_data(sub, getModId(), this);
 
     /*