diff --git a/src/gui/qt/PhoneLine.cpp b/src/gui/qt/PhoneLine.cpp
index 2ddd72d3ad9212dd33cfc687ebbb1e6a8642b6f7..4fd05f29a296ec86f9f3959a9410d0cf313f4a9e 100644
--- a/src/gui/qt/PhoneLine.cpp
+++ b/src/gui/qt/PhoneLine.cpp
@@ -417,6 +417,7 @@ PhoneLine::hangup(bool sendrequest)
     }
     clearCall();
   }
+  emit hanguped();
 
   clear();
   clearPeer();
diff --git a/src/gui/qt/PhoneLine.hpp b/src/gui/qt/PhoneLine.hpp
index 2a390585e23bd3602ca61e25be620de722a7df28..97acd883ac4b64865134634188f0e6ae4a3c7831 100644
--- a/src/gui/qt/PhoneLine.hpp
+++ b/src/gui/qt/PhoneLine.hpp
@@ -1,5 +1,6 @@
 /*
- *  Copyright (C) 2004-2005 Savoir-Faire Linux inc.
+ *  Copyright (C) 2004-2006 Savoir-Faire Linux inc.
+ *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *  Author: Jean-Philippe Barrette-LaPierre
  *             <jean-philippe.barrette-lapierre@savoirfairelinux.com>
  *                                                                              
@@ -155,6 +156,8 @@ signals:
   void talkingStarted(QTime);
   void talkingStopped();
   void transfered();
+  /** when the call is hangup */
+  void hanguped();
 
 private:
   void setCall(Call *call);
diff --git a/src/gui/qt/PhoneLineButton.cpp b/src/gui/qt/PhoneLineButton.cpp
index 95cfedc132c35b018a8c867cb270ab4914aa896d..d1dfad00b82c387c41cba0d08bd55c7d92718635 100644
--- a/src/gui/qt/PhoneLineButton.cpp
+++ b/src/gui/qt/PhoneLineButton.cpp
@@ -75,14 +75,12 @@ void
 PhoneLineButton::sendClicked()
 {
   if(isOn()) {
-    mIsFlashing = false;
-    mTimer->stop();
+    stopFlashing();
     emit selected(mLine);
   }
   else {
     if (mIsFlashing) {
-      mIsFlashing = false;
-      mTimer->stop();
+      stopFlashing();
       emit selected(mLine);
     } else {
       emit unselected(mLine);
@@ -90,3 +88,8 @@ PhoneLineButton::sendClicked()
   }
 }
 
+void
+PhoneLineButton::stopFlashing() {
+	mIsFlashing = false;
+	mTimer->stop();
+}
diff --git a/src/gui/qt/PhoneLineButton.hpp b/src/gui/qt/PhoneLineButton.hpp
index 19bf532f2804a395969213b0a00d1f6d0c9e20e5..c7e74189708bcb1e2a4439c659f748f7edaeca0d 100644
--- a/src/gui/qt/PhoneLineButton.hpp
+++ b/src/gui/qt/PhoneLineButton.hpp
@@ -55,6 +55,10 @@ public slots:
   virtual void clearToolTip();
   virtual void swap();
   virtual void sendClicked();
+  /**
+   * Stop the timer and the flashing
+   */
+  void stopFlashing();
   
 private:
   unsigned int mLine;
diff --git a/src/gui/qt/SFLPhoneApp.cpp b/src/gui/qt/SFLPhoneApp.cpp
index e26a4e3f31a76d19963d24e088fc8554d4fb4da6..6bdc8899fd4bafc413d36d2304d4584b9391c3ef 100644
--- a/src/gui/qt/SFLPhoneApp.cpp
+++ b/src/gui/qt/SFLPhoneApp.cpp
@@ -117,6 +117,8 @@ SFLPhoneApp::initConnections(SFLPhoneWindow *w)
 		     *pos, SLOT(setOn(bool)));
     QObject::connect(line, SIGNAL(backgrounded()),
 		     *pos, SLOT(suspend()));
+    QObject::connect(line, SIGNAL(hanguped()),
+		     *pos, SLOT(stopFlashing()));
     QObject::connect(line, SIGNAL(peerUpdated(QString)),
 		     *pos, SLOT(setToolTip(QString)));
     QObject::connect(line, SIGNAL(peerCleared()),
diff --git a/src/sipaccount.cpp b/src/sipaccount.cpp
index 1ace8dbedbef5acb4d2aaacbcd737f0ff1b4d66f..ba027b7f2b41c67da69ec8a6ed45060222586a2b 100644
--- a/src/sipaccount.cpp
+++ b/src/sipaccount.cpp
@@ -54,7 +54,8 @@ SIPAccount::createVoIPLink()
 bool
 SIPAccount::registerAccount()
 {
-  if (_link && !_registered) {
+  if (_link) {
+    unregisterAccount();
     SIPVoIPLink* tmplink = dynamic_cast<SIPVoIPLink*> (_link);
     if (tmplink) {
       tmplink->setProxy(Manager::instance().getConfigString(_accountID,SIP_PROXY));
diff --git a/src/sipcall.cpp b/src/sipcall.cpp
index 7ce17a9daa229c25323aad53a610ccefb235de75..cb3fde09268c8412badd7fc963780d5f0d4f10c9 100644
--- a/src/sipcall.cpp
+++ b/src/sipcall.cpp
@@ -430,7 +430,7 @@ SIPCall::sdp_complete_message(sdp_message_t * remote_sdp, osip_message_t * msg)
         iPayload++;
       }
       if (listCodec.str().empty()) {
-        media << "m=" << remote_med->m_media << " 0 << " << remote_med->m_proto << " \r\n";
+        media << "m=" << remote_med->m_media << " 0 " << remote_med->m_proto << " \r\n";
       } else {
         // we add the media line + a=rtpmap list
         media << "m=" << remote_med->m_media << " " << getLocalExternAudioPort() << " RTP/AVP " << listCodec.str() << "\r\n";