diff --git a/src/gui/official/PhoneLine.cpp b/src/gui/official/PhoneLine.cpp
index 3fc795d22af7c3827176c4bc47e695326ff14f40..37cfac2f1b3e7283f7f8c016ad30722df454d640 100644
--- a/src/gui/official/PhoneLine.cpp
+++ b/src/gui/official/PhoneLine.cpp
@@ -103,7 +103,6 @@ PhoneLine::unselect(bool hardselect)
       emit backgrounded();
     }
     else {
-      clear();
       emit unselected();
     }
   }
@@ -126,6 +125,7 @@ void
 PhoneLine::clear()
 { 
   mBuffer.clear();
+  emit bufferStatusChanged(mBuffer);
 }
 
 void 
@@ -147,6 +147,7 @@ PhoneLine::sendKey(Qt::Key c)
       if(!mCall) {
 	mSession.playDtmf(c);
 	mBuffer += QString(c);
+	emit bufferStatusChanged(mBuffer);
       }
       else {
 	mCall->sendDtmf(c);
@@ -171,6 +172,7 @@ PhoneLine::call(const QString &to)
     setLineStatus("Calling " + to + "...");
     mCall = new Call(mSession.createCall());
     mCall->call(to);
+    clear();
   }
 }
 
@@ -216,6 +218,9 @@ PhoneLine::hangup()
     delete mCall;
     mCall = NULL;
   }
+  else {
+    clear();
+  }
 
   //This is a hack for unselect;
   mSelected = true;
diff --git a/src/gui/official/PhoneLine.hpp b/src/gui/official/PhoneLine.hpp
index 0229ac2e4a0bdf135cbb26d5f1034f964ae7c70c..6b83495538173b92322785999f5b413d314b85de 100644
--- a/src/gui/official/PhoneLine.hpp
+++ b/src/gui/official/PhoneLine.hpp
@@ -56,6 +56,8 @@ public:
   void sendKey(Qt::Key c);
 
   QString getLineStatus();
+  QString getBuffer()
+  {return mBuffer;}
   void setLineStatus(const QString &);
   
 public slots:
@@ -91,6 +93,7 @@ signals:
   void unselected();
   void backgrounded();
   void lineStatusChanged(const QString &);
+  void bufferStatusChanged(const QString &);
 
 private:
   Session mSession;
diff --git a/src/gui/official/PhoneLineManagerImpl.cpp b/src/gui/official/PhoneLineManagerImpl.cpp
index 225ad05c3282e2208992c09ddf356a361f2c0bad..70d4bca2a4c1da080c551cbcec1fb50cd8a0161b 100644
--- a/src/gui/official/PhoneLineManagerImpl.cpp
+++ b/src/gui/official/PhoneLineManagerImpl.cpp
@@ -143,6 +143,8 @@ PhoneLineManagerImpl::setNbLines(unsigned int nb)
     PhoneLine *p = new PhoneLine(*mSession, i + 1);
     QObject::connect(p, SIGNAL(lineStatusChanged(const QString &)),
 		     this, SIGNAL(lineStatusSet(const QString &)));
+    QObject::connect(p, SIGNAL(bufferStatusChanged(const QString &)),
+		     this, SIGNAL(bufferStatusSet(const QString &)));
     mPhoneLines.push_back(p);
   }
 }
@@ -198,6 +200,7 @@ PhoneLineManagerImpl::selectNextAvailableLine()
     // done at the top.
     selectedLine->select();
     emit lineStatusSet(selectedLine->getLineStatus());
+    emit bufferStatusSet(selectedLine->getBuffer());
   }
 
   return selectedLine;
@@ -322,6 +325,7 @@ PhoneLineManagerImpl::selectLine(unsigned int line, bool hardselect)
       PhoneLineLocker guard(selectedLine);
       selectedLine->select(hardselect);
       emit lineStatusSet(selectedLine->getLineStatus());
+      emit bufferStatusSet(selectedLine->getBuffer());
       if(selectedLine->isAvailable()) {
 	mSession->playTone();
       }
diff --git a/src/gui/official/PhoneLineManagerImpl.hpp b/src/gui/official/PhoneLineManagerImpl.hpp
index f96b2c240f76385a5a74fed52987c5b6cf17ee96..78e0ffba23e6f48bee8238d19701ce05791cdf42 100644
--- a/src/gui/official/PhoneLineManagerImpl.hpp
+++ b/src/gui/official/PhoneLineManagerImpl.hpp
@@ -51,6 +51,7 @@ signals:
   void readyToHandleEvents();
   void gotErrorOnCallStatus();
   void globalStatusSet(const QString &);
+  void bufferStatusSet(const QString &);
   void lineStatusSet(const QString &);
 
 public slots:
diff --git a/src/gui/official/SFLLcd.cpp b/src/gui/official/SFLLcd.cpp
index cb8b29c38cc79bae9218844739a01d5dabd95d6a..3f5d4f30cb61e2045a1c95efc3135383cd3b82ce 100644
--- a/src/gui/official/SFLLcd.cpp
+++ b/src/gui/official/SFLLcd.cpp
@@ -16,6 +16,7 @@ SFLLcd::SFLLcd(QWidget *parent, Qt::WFlags flags)
   , mOverscreen(JPushButton::transparize(":/sflphone/images/overscreen.png"))
   , mGlobalStatusPos(-1)
   , mLineStatusPos(-1)
+  , mBufferStatusPos(-1)
   , mIsTimed(false)
   , mFont(FONT_FAMILY, FONT_SIZE)
 {
@@ -41,6 +42,10 @@ SFLLcd::updateText()
   if(mLineStatusPos >= 0) {
     mLineStatusPos++;
   }
+
+  if(mBufferStatusPos >= 0) {
+    mBufferStatusPos++;
+  }
 }
 
 void
@@ -68,11 +73,23 @@ SFLLcd::setGlobalStatus(const QString &global)
   mGlobalStatus = global;
 }
 
+void
+SFLLcd::setBufferStatus(const QString &buffer)
+{
+  if(textIsTooBig(buffer)) {
+    mBufferStatusPos = 0;
+  }
+  else {
+    mBufferStatusPos = -1;
+  }
+  mBufferStatus = buffer;
+}
+
 void
 SFLLcd::setLineStatus(const QString &line)
 {
   if(textIsTooBig(line)) {
-    mGlobalStatusPos = 0;
+    mLineStatusPos = 0;
   }
   else {
     mLineStatusPos = -1;
@@ -116,6 +133,8 @@ SFLLcd::paintEvent(QPaintEvent *)
 	     extractVisibleText(mGlobalStatus, mGlobalStatusPos));
   p.drawText(QPoint(margin, 2*fm.height()), 
 	     extractVisibleText(mLineStatus, mLineStatusPos));
+  p.drawText(QPoint(margin, 3*fm.height()), 
+	     extractVisibleText(mBufferStatus, mBufferStatusPos));
 
   p.drawText(QPoint(margin, mScreen.size().height() - margin), getTimeStatus());
   //p.drawPixmap(0,0, mScreen);
diff --git a/src/gui/official/SFLLcd.hpp b/src/gui/official/SFLLcd.hpp
index db6d8c3b5330f76027166b64dec9a25b5305ed6c..fe36443358832a867ab1c27f035bd0b2fbd3e667 100644
--- a/src/gui/official/SFLLcd.hpp
+++ b/src/gui/official/SFLLcd.hpp
@@ -42,6 +42,7 @@ public slots:
 
   void setGlobalStatus(const QString &global);
   void setLineStatus(const QString &line);
+  void setBufferStatus(const QString &line);
 
   void startTiming();
   void stopTiming();
@@ -54,8 +55,10 @@ private:
   
   QString mGlobalStatus;
   QString mLineStatus;
+  QString mBufferStatus;
   int mGlobalStatusPos;
   int mLineStatusPos;
+  int mBufferStatusPos;
 
   bool mIsTimed;
   QTime mTime;
diff --git a/src/gui/official/SFLPhoneApp.cpp b/src/gui/official/SFLPhoneApp.cpp
index 9800159814735db779bc4b20de3bf39509c775dd..8d22a2c9a895d97627e3291ef002a5850d5e3cd7 100644
--- a/src/gui/official/SFLPhoneApp.cpp
+++ b/src/gui/official/SFLPhoneApp.cpp
@@ -70,6 +70,8 @@ SFLPhoneApp::initConnections(SFLPhoneWindow *w)
 		   w->mLcd, SLOT(setLineStatus(const QString &)));
   QObject::connect(&PhoneLineManager::instance(), SIGNAL(globalStatusSet(const QString &)),
 		   w->mLcd, SLOT(setGlobalStatus(const QString &)));
+  QObject::connect(&PhoneLineManager::instance(), SIGNAL(bufferStatusSet(const QString &)),
+		   w->mLcd, SLOT(setBufferStatus(const QString &)));
 
 
 
diff --git a/src/gui/official/TCPSessionIO.cpp b/src/gui/official/TCPSessionIO.cpp
index 841c82cb67c9512f95736ce0703b336ed674726b..01e5e9a12152db532ea79d55fd9f22ece82ea8ed 100644
--- a/src/gui/official/TCPSessionIO.cpp
+++ b/src/gui/official/TCPSessionIO.cpp
@@ -86,7 +86,7 @@ TCPSessionIO::send(const QString &request)
 {
   QTextStream stream(mSocket);
   if(mSocket->state() == QAbstractSocket::ConnectedState) {
-    _debug("Sending request to sflphone: %s", 
+    _debug("TCPSessioIO: Sending request to sflphone: %s", 
 	   request.toStdString().c_str());
     stream << request;
   }
@@ -103,6 +103,8 @@ TCPSessionIO::receive(QString &answer)
   if(mSocket->isReadable()) {
     QTextStream stream(mSocket);
     answer = stream.readLine();
+    _debug("TCPSessionIO: Received answer from sflphone: %s", 
+	   answer.toStdString().c_str());
   }
 }