diff --git a/sflphone-client-kde/src/Call.cpp b/sflphone-client-kde/src/Call.cpp
index 1b8a5c566096fa2b25dc18d27e7209b79fd7953c..a88ffa8bb16f175374d8e0221a56f5627aa42952 100644
--- a/sflphone-client-kde/src/Call.cpp
+++ b/sflphone-client-kde/src/Call.cpp
@@ -98,7 +98,7 @@ const function Call::stateChangedFunctionMap[11][6] =
 
 const char * Call::historyIcons[3] = {ICON_HISTORY_INCOMING, ICON_HISTORY_OUTGOING, ICON_HISTORY_MISSED};
 
-void Call::initCallItemWidget()
+/*void Call::initCallItemWidget()
 {
 	itemWidget = new QWidget();
 	labelIcon = new QLabel();
@@ -130,12 +130,12 @@ void Call::initCallItemWidget()
 	mainLayout->addItem(horizontalSpacer);
 
 	itemWidget->setLayout(mainLayout);
-}
+}*/
 
-void Call::setItemIcon(const QString pixmap)
+ /*void Call::setItemIcon(const QString pixmap)
 {
 	labelIcon->setPixmap(QPixmap(pixmap));
-}
+	}*/
 
 
 Call::Call(call_state startState, QString callId, QString peerName, QString peerNumber, QString account)
@@ -146,10 +146,10 @@ Call::Call(call_state startState, QString callId, QString peerName, QString peer
 	changeCurrentState(startState);
 	this->account = account;
 	this->recording = false;
-	this->historyItemWidget = NULL;
+	//	this->historyItemWidget = NULL;
 	this->startTime = NULL;
 	this->stopTime = NULL;
-	this->initCallItemWidget();
+	//	this->initCallItemWidget();
 }
 
 Call * Call::buildExistingCall(QString callId)
@@ -172,8 +172,6 @@ Call::~Call()
 {
 	delete startTime;
 	delete stopTime;
-	delete itemWidget;
-	//delete historyItemWidget;
 }
 	
 Call * Call::buildDialingCall(QString callId, const QString & peerName, QString account)
@@ -376,10 +374,10 @@ Contact * Call::findContactForNumberInKAddressBook(QString number)
 	return NULL;
 }
 
-QWidget * Call::getItemWidget()
+/*QWidget * Call::getItemWidget()
 {
 	return itemWidget;
-}
+	}*/
 
 QString Call::getStopTimeStamp() const
 {
@@ -395,7 +393,28 @@ QString Call::getStartTimeStamp() const
 	return QString::number(startTime->toTime_t());
 }
 
-QWidget * Call::getHistoryItemWidget()
+QString Call::getTransferNumber() const
+{
+	return transferNumber;
+}
+
+void Call::setTransferNumber(QString number)
+{
+	transferNumber = number;
+}
+
+QString Call::getCallNumber() const
+{
+	return callNumber;
+}
+
+void Call::setCallNumber(QString number)
+{
+	callNumber = number;
+}
+	
+
+/*QWidget * Call::getHistoryItemWidget()
 {
 	historyItemWidget = new QWidget();
 	labelHistoryIcon = new QLabel();
@@ -427,7 +446,7 @@ QWidget * Call::getHistoryItemWidget()
 	mainLayout->addItem(horizontalSpacer);
 	historyItemWidget->setLayout(mainLayout);
 	return historyItemWidget;
-}
+	}*/
 
 call_state Call::getState() const
 {
@@ -540,11 +559,10 @@ void Call::refuse()
 void Call::acceptTransf()
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
-	QString number = labelTransferNumber->text();
-	qDebug() << "Accepting call and transfering it to number : " << number << ". callId : " << callId;
+	qDebug() << "Accepting call and transfering it to number : " << transferNumber << ". callId : " << callId;
 	callManager.accept(callId);
-	callManager.transfert(callId, number);
-	//this->historyState = TRANSFERED;
+	callManager.transfert(callId, transferNumber);
+//	historyState = TRANSFERED;
 }
 
 void Call::acceptHold()
@@ -581,7 +599,6 @@ void Call::hold()
 void Call::call()
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
-	QString number = labelCallNumber->text();
 	qDebug() << "account = " << account;
 	if(account.isEmpty())
 	{
@@ -590,10 +607,10 @@ void Call::call()
 	}
 	if(!account.isEmpty())
 	{
-		qDebug() << "Calling " << number << " with account " << account << ". callId : " << callId;
-		callManager.placeCall(account, callId, number);
+		qDebug() << "Calling " << callNumber << " with account " << account << ". callId : " << callId;
+		callManager.placeCall(account, callId, callNumber);
 		this->account = account;
-		this->peerPhoneNumber = number;
+		this->peerPhoneNumber = callNumber;
 // 		Contact * contact = findContactForNumberInKAddressBook(peerPhoneNumber);
 // 		if(contact) this->peerName = contact->getNickName();
 		this->startTime = new QDateTime(QDateTime::currentDateTime());
@@ -601,7 +618,7 @@ void Call::call()
 	}
 	else
 	{
-		qDebug() << "Trying to call " << number << " with no account registered . callId : " << callId;
+		qDebug() << "Trying to call " << transferNumber << " with no account registered . callId : " << callId;
 		this->historyState = NONE;
 		throw "No account registered!";
 	}
@@ -610,9 +627,8 @@ void Call::call()
 void Call::transfer()
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
-	QString number = labelTransferNumber->text();
-	qDebug() << "Transfering call to number : " << number << ". callId : " << callId;
-	callManager.transfert(callId, number);
+	qDebug() << "Transfering call to number : " << transferNumber << ". callId : " << callId;
+	callManager.transfert(callId, transferNumber);
 	this->stopTime = new QDateTime(QDateTime::currentDateTime());
 }
 
@@ -670,50 +686,53 @@ void Call::warning()
 	qDebug() << "Warning : call " << callId << " had an unexpected transition of state.";
 }
 
-void Call::appendItemText(QString text)
+void Call::appendText(QString str)
 {
-	QLabel * editNumber;
-	switch(currentState)
+	QString * editNumber;
+	
+	switch (currentState)
 	{
-		case CALL_STATE_TRANSFER:
-		case CALL_STATE_TRANSF_HOLD:
-			editNumber = labelTransferNumber;
-			break;
-		case CALL_STATE_DIALING:
-			editNumber = labelCallNumber;
-			break;
-		case CALL_STATE_CURRENT:
-			text = QString();
-			editNumber = labelCallNumber;
-			break;		
-		default:
-			qDebug() << "Type key on call not editable. Doing nothing.";
-			return;
+	case CALL_STATE_TRANSFER:
+	case CALL_STATE_TRANSF_HOLD:
+		editNumber = &transferNumber;
+		break;
+	case CALL_STATE_DIALING:
+		editNumber = &callNumber;
+		break;
+	default:
+		qDebug() << "Backspace on call not editable. Doing nothing.";
+		return;
 	}
-	editNumber->setText(editNumber->text() + text);
+
+	editNumber->append(str);
+
+	emit changed();
 }
 
 void Call::backspaceItemText()
 {
-	QLabel * editNumber;
+	QString * editNumber;
+
 	switch (currentState)
 	{
 		case CALL_STATE_TRANSFER:
 		case CALL_STATE_TRANSF_HOLD:
-			editNumber = labelTransferNumber;
+			editNumber = &transferNumber;
 			break;
 		case CALL_STATE_DIALING:
-			editNumber = labelCallNumber;
+			editNumber = &callNumber;
 			break;
 		default:
 			qDebug() << "Backspace on call not editable. Doing nothing.";
 			return;
 	}
-	QString text = editNumber->text();
+	QString text = *editNumber;
 	int textSize = text.size();
 	if(textSize > 0)
 	{
-		editNumber->setText(text.remove(textSize-1, 1));
+		*editNumber = text.remove(textSize-1, 1);
+
+		emit changed();
 	}
 	else
 	{
@@ -724,5 +743,7 @@ void Call::backspaceItemText()
 void Call::changeCurrentState(call_state newState)
 {
 	currentState = newState;
+
+	emit changed();
 }
 
diff --git a/sflphone-client-kde/src/Call.h b/sflphone-client-kde/src/Call.h
index b1dcad67bfce22e26222fad9be1b6a9220170670..c6ad60e6e725fbb35387d3238dfe7de006985bf5 100644
--- a/sflphone-client-kde/src/Call.h
+++ b/sflphone-client-kde/src/Call.h
@@ -137,8 +137,9 @@ typedef  void (Call::*function)();
  *  keeping the information gathered by the call and needed by the history
  *  call (history state, start time...).
 **/
-class Call
+class Call : public QObject
 {
+	Q_OBJECT
 private:
 
 	//Call attributes
@@ -149,21 +150,18 @@ private:
 	QString peerName;
 	history_state historyState;
 	QDateTime * startTime;
-	QDateTime * stopTime;
-	
-	QWidget * itemWidget;
-	QLabel * labelIcon;
-	QLabel * labelPeerName;
-	QLabel * labelCallNumber;
-	QLabel * labelTransferPrefix;
-	QLabel * labelTransferNumber;
+	QDateTime * stopTime;       
 	
+	/*
 	QWidget * historyItemWidget;
 	QLabel * labelHistoryIcon;
 	QLabel * labelHistoryPeerName;
 	QLabel * labelHistoryCallNumber;
 	QLabel * labelHistoryTime;
-	
+	*/
+
+	QString transferNumber;
+	QString callNumber;
 	
 	//Automate attributes
 	/**
@@ -233,7 +231,7 @@ public:
 	
 	//Constructors & Destructors
 	~Call();
-	void initCallItemWidget();
+//	void initCallItemWidget();
 	static Call * buildDialingCall(QString callId, const QString & peerName, QString account = "");
 	static Call * buildIncomingCall(const QString & callId);
 	static Call * buildRingingCall(const QString & callId);
@@ -246,8 +244,8 @@ public:
 	static history_state getHistoryStateFromDaemonCallState(QString daemonCallState, QString daemonCallType);
 	
 	//Getters
-	QWidget * getItemWidget();
-	QWidget * getHistoryItemWidget();
+//	QWidget * getItemWidget();
+//	QWidget * getHistoryItemWidget();
 	call_state getState() const;
 	QString getCallId() const;
 	QString getPeerPhoneNumber() const;
@@ -259,21 +257,30 @@ public:
 	bool isHistory() const;
 	QString getStopTimeStamp() const;
 	QString getStartTimeStamp() const;
-	
+
+	QString getTransferNumber() const;
+	void setTransferNumber(QString number);
+
+	QString getCallNumber() const;
+	void setCallNumber(QString number);
+
 	//Automate calls
 	call_state stateChanged(const QString & newState);
 	call_state actionPerformed(call_action action);
 	
 	//Setters
-	void appendItemText(QString text);
+//	void appendItemText(QString text);
+	void appendText(QString str);
 	void backspaceItemText();
-	void setItemIcon(const QString pixmap);
+//	void setItemIcon(const QString pixmap);
 // 	void setPeerName(const QString peerName);
 	void changeCurrentState(call_state newState);
 	
 	//Utils
 	Contact * findContactForNumberInKAddressBook(QString number);
 
+signals:
+	void changed();
 };
 
 #endif
diff --git a/sflphone-client-kde/src/CallTreeItem.cpp b/sflphone-client-kde/src/CallTreeItem.cpp
index 9f2186bedc56a3e52eb4edde29ed3191eeb2993b..0fe333b13ee65b6fe06795b1308388944e292f31 100644
--- a/sflphone-client-kde/src/CallTreeItem.cpp
+++ b/sflphone-client-kde/src/CallTreeItem.cpp
@@ -206,10 +206,14 @@ void CallTreeItem::setCall(Call *call)
 	mainLayout->addItem(horizontalSpacer);
 	
 	itemWidget->setLayout(mainLayout);
-	updateItem();
+	
+	connect(itemCall, SIGNAL(changed()),
+		this,     SLOT(updated()));
+
+	updated();	
 }
 
-void CallTreeItem::updateItem()
+void CallTreeItem::updated()
 {
 	call_state state = itemCall->getState();
 	bool recording = itemCall->getRecording();
@@ -233,9 +237,14 @@ void CallTreeItem::updateItem()
 		{
 			labelTransferNumber->setText("");
 		}
+		labelTransferNumber->setText(itemCall->getTransferNumber());
+		labelCallNumber->setText(itemCall->getCallNumber());
 	}
 	else
 	{
  		qDebug() << "Updating item of call of state OVER. Doing nothing.";
 	}
+
+	
 }
+
diff --git a/sflphone-client-kde/src/CallTreeItem.h b/sflphone-client-kde/src/CallTreeItem.h
index b11a6881476fb7103c886e3a4f973cc44d1fc99e..f20aea6fe688227e7b8b16335cd627f676990108 100644
--- a/sflphone-client-kde/src/CallTreeItem.h
+++ b/sflphone-client-kde/src/CallTreeItem.h
@@ -38,8 +38,9 @@
 
 #include "Call.h"
 
-class CallTreeItem : QObject
+class CallTreeItem : public QObject
  {
+	Q_OBJECT
  public:
 	 CallTreeItem(const QVector<QVariant> &data, CallTreeItem *parent);
 	 ~CallTreeItem();
@@ -58,7 +59,6 @@ class CallTreeItem : QObject
 	 int childNumber() const;
 	 bool setData(int column, const QVariant &value);
 	 void setCall(Call *call);
-	 void updateItem();
 
 	static const char * callStateIcons[11];
  private:
@@ -80,6 +80,9 @@ class CallTreeItem : QObject
 	 QLabel * labelHistoryPeerName;
 	 QLabel * labelHistoryCallNumber;
 	 QLabel * labelHistoryTime;
+
+private slots:
+	 void updated();
  };
 
 #endif // CALLTREE_ITEM_H
diff --git a/sflphone-client-kde/src/CallTreeView.cpp b/sflphone-client-kde/src/CallTreeView.cpp
index 42fc4bc888124361d8a2601c8569cd172f6e1f0b..ebfd3a2e21196fd9bfe3c48bee80c331fd2cdf7a 100644
--- a/sflphone-client-kde/src/CallTreeView.cpp
+++ b/sflphone-client-kde/src/CallTreeView.cpp
@@ -34,6 +34,7 @@ CallTreeView::CallTreeView(QWidget * parent)
 	setSelectionMode(QAbstractItemView::SingleSelection);
 	setDragEnabled(true);
 	setAcceptDrops(true);
+	setUniformRowHeights(true);
 	setDropIndicatorShown(true);
 }
 
@@ -94,8 +95,8 @@ CallTreeItem* CallTreeView::insert(CallTreeItem *parent, Call *call)
 
 void CallTreeView::remove(CallTreeItem *item)
 {
-	return;
-	// to implement
+	QModelIndex index = selectionModel()->currentIndex();
+	treeModel->removeRow(index.row(), index.parent());
 }
 
 CallTreeItem* CallTreeView::getItem(Call *call)
diff --git a/sflphone-client-kde/src/SFLPhoneView.cpp b/sflphone-client-kde/src/SFLPhoneView.cpp
index 2ddc94bb717feab6e2c5e448bf7b0766b6c3c989..d6f935325b18b742dd2fec81415a33c5dca65dbf 100644
--- a/sflphone-client-kde/src/SFLPhoneView.cpp
+++ b/sflphone-client-kde/src/SFLPhoneView.cpp
@@ -279,7 +279,7 @@ void SFLPhoneView::typeString(QString str)
 
 		if(!currentCall && candidate)
 		{
-			candidate->appendItemText(str);
+			candidate->appendText(str);
 		}
 	}
 	if(stackedWidget_screen->currentWidget() == page_callHistory)
@@ -418,7 +418,7 @@ void SFLPhoneView::enter()
 				qDebug() << "pastCall null";
 			}
 			Call * call = callList->addDialingCall(pastCall->getPeerName(), pastCall->getAccountId());
-			call->appendItemText(pastCall->getPeerPhoneNumber());
+			call->appendText(pastCall->getPeerPhoneNumber());
 			addCallToCallList(call);
 			callTree->setCurrentRow(callTree->count() - 1);
 			action(call, CALL_ACTION_ACCEPT);
@@ -437,7 +437,7 @@ void SFLPhoneView::enter()
 			changeScreen(SCREEN_MAIN);
 			ContactItemWidget * w = (ContactItemWidget *) (listWidget_addressBook->itemWidget(item));
 			Call * call = callList->addDialingCall(w->getContactName());
-			call->appendItemText(w->getContactNumber());
+			call->appendText(w->getContactNumber());
 			addCallToCallList(call);
 			callTree->setCurrentRow(callTree->count() - 1);
 			action(call, CALL_ACTION_ACCEPT);
@@ -1052,7 +1052,7 @@ void SFLPhoneView::on_listWidget_callHistory_itemDoubleClicked(CallTreeItem * it
 	changeScreen(SCREEN_MAIN);
 	Call * pastCall = item->call();
 	Call * call = callList->addDialingCall(pastCall->getPeerName(), pastCall->getAccountId());
-	call->appendItemText(pastCall->getPeerPhoneNumber());
+	call->appendText(pastCall->getPeerPhoneNumber());
 	addCallToCallList(call);
 	callTree->setCurrentRow(callTree->count() - 1);
 	action(call, CALL_ACTION_ACCEPT);
@@ -1178,7 +1178,7 @@ void SFLPhoneView::editBeforeCall()
 	{
 		changeScreen(SCREEN_MAIN);
 		Call * call = callList->addDialingCall(name);
-		call->appendItemText(newNumber);
+		call->appendText(newNumber);
 		addCallToCallList(call);
 		callTree->setCurrentRow(callTree->count() - 1);
 		action(call, CALL_ACTION_ACCEPT);
@@ -1265,7 +1265,7 @@ void SFLPhoneView::accept()
 		changeScreen(SCREEN_MAIN);
 		Call * pastCall = historyTree->currentItem()->call();
 		Call * call = callList->addDialingCall(pastCall->getPeerName());
-		call->appendItemText(pastCall->getPeerPhoneNumber());
+		call->appendText(pastCall->getPeerPhoneNumber());
 		addCallToCallList(call);
 		callTree->setCurrentRow(callTree->count() - 1);
 		action(call, CALL_ACTION_ACCEPT);
@@ -1275,7 +1275,7 @@ void SFLPhoneView::accept()
 		changeScreen(SCREEN_MAIN);
 		ContactItemWidget * w = (ContactItemWidget *) (listWidget_addressBook->itemWidget(listWidget_addressBook->currentItem()));
 		Call * call = callList->addDialingCall(w->getContactName());
-		call->appendItemText(w->getContactNumber());
+		call->appendText(w->getContactNumber());
 		addCallToCallList(call);
 		callTree->setCurrentRow(callTree->count() - 1);
 		action(call, CALL_ACTION_ACCEPT);
@@ -1350,7 +1350,7 @@ void SFLPhoneView::mailBox()
 	Account * account = accountInUse();
 	QString mailBoxNumber = account->getAccountDetail(ACCOUNT_MAILBOX);
 	Call * call = callList->addDialingCall();
-	call->appendItemText(mailBoxNumber);
+	call->appendText(mailBoxNumber);
 	addCallToCallList(call);
 	callTree->setCurrentRow(callTree->count() - 1);
 	action(call, CALL_ACTION_ACCEPT);