diff --git a/sflphone-client-kde/src/CMakeLists.txt b/sflphone-client-kde/src/CMakeLists.txt
index a3faeb6fb3f5a1d28919c5228053423b4a937a23..cb06b3bd53e8c09726f134a53334cc5374666542 100644
--- a/sflphone-client-kde/src/CMakeLists.txt
+++ b/sflphone-client-kde/src/CMakeLists.txt
@@ -32,6 +32,7 @@ SET(	sflphone_client_kde_SRCS
 	CallTreeItem.cpp
 	configurationmanager_interface_singleton.cpp
 	callmanager_interface_singleton.cpp
+        calllist_interface_singleton.cpp
 	instance_interface_singleton.cpp
 	AccountWizard.cpp
 	AccountItemWidget.cpp
diff --git a/sflphone-client-kde/src/Call.cpp b/sflphone-client-kde/src/Call.cpp
index a88ffa8bb16f175374d8e0221a56f5627aa42952..a93eb912f52a70225b74a0e09da928ad324174c2 100644
--- a/sflphone-client-kde/src/Call.cpp
+++ b/sflphone-client-kde/src/Call.cpp
@@ -150,8 +150,9 @@ Call::Call(call_state startState, QString callId, QString peerName, QString peer
 	this->startTime = NULL;
 	this->stopTime = NULL;
 	//	this->initCallItemWidget();
+        emit changed();
 }
-
+#include <unistd.h>
 Call * Call::buildExistingCall(QString callId)
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
@@ -745,5 +746,4 @@ void Call::changeCurrentState(call_state newState)
 	currentState = newState;
 
 	emit changed();
-}
-
+}
\ No newline at end of file
diff --git a/sflphone-client-kde/src/Call.h b/sflphone-client-kde/src/Call.h
index c6ad60e6e725fbb35387d3238dfe7de006985bf5..b67f3a1dfb0f71efc64f47ca9439abe0add8cf8c 100644
--- a/sflphone-client-kde/src/Call.h
+++ b/sflphone-client-kde/src/Call.h
@@ -244,8 +244,6 @@ public:
 	static history_state getHistoryStateFromDaemonCallState(QString daemonCallState, QString daemonCallType);
 	
 	//Getters
-//	QWidget * getItemWidget();
-//	QWidget * getHistoryItemWidget();
 	call_state getState() const;
 	QString getCallId() const;
 	QString getPeerPhoneNumber() const;
diff --git a/sflphone-client-kde/src/CallList.cpp b/sflphone-client-kde/src/CallList.cpp
index 72a7d2fd4e64ae64726278c57a55c9944ced713f..c8cbda195f6f52e195a42b936b56f665591d9116 100644
--- a/sflphone-client-kde/src/CallList.cpp
+++ b/sflphone-client-kde/src/CallList.cpp
@@ -37,7 +37,7 @@ CallList::CallList(QObject * parent)
 	{
 		calls->append(Call::buildExistingCall(callList[i]));
 	}
-    MapStringString historyMap = configurationManager.getHistory().value();
+        MapStringString historyMap = configurationManager.getHistory().value();
 	qDebug() << "Call History = " << historyMap;
 	QMapIterator<QString, QString> i(historyMap);
 	while (i.hasNext()) {
@@ -195,3 +195,10 @@ void CallList::clearHistory()
 		{	i.remove();	}
 	}
 }
+
+Call * CallList::createConversationFromCall(Call* call1, Call* call2) {
+  qDebug() << "Need to join calls";
+  CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
+  //callManager.joinConference(call1->getCallId(),call2->getCallId());
+  callManager.joinParticipant(call1->getCallId(),call2->getCallId());
+}
\ No newline at end of file
diff --git a/sflphone-client-kde/src/CallList.h b/sflphone-client-kde/src/CallList.h
index b411267bb8fb73864f690e091d8d76680b935e2d..1226060b65f9c449f82e5ca6c779638265e8f7ef 100644
--- a/sflphone-client-kde/src/CallList.h
+++ b/sflphone-client-kde/src/CallList.h
@@ -56,6 +56,7 @@ public:
 	Call * addDialingCall(const QString & peerName = "", QString account = "");
 	Call * addIncomingCall(const QString & callId/*, const QString & from, const QString & account*/);
 	Call * addRingingCall(const QString & callId);
+        Call * createConversationFromCall(Call* call1, Call* call2);
 
 	//GSetter
 	QString generateCallId();
diff --git a/sflphone-client-kde/src/CallTreeItem.cpp b/sflphone-client-kde/src/CallTreeItem.cpp
index cafb6bb6e6c9f47f55b5537e66b5bb8ae13c6e12..07370977c50645e5967909043bf75e24af246c47 100644
--- a/sflphone-client-kde/src/CallTreeItem.cpp
+++ b/sflphone-client-kde/src/CallTreeItem.cpp
@@ -37,6 +37,15 @@ CallTreeItem::CallTreeItem(const QVector<QVariant> &data, CallTreeItem *parent)
  {
 	 
  }
+ 
+CallTreeItem::CallTreeItem(const CallTreeItem *toCopy, CallTreeItem *parent)
+    : parentItem(parent),
+      itemCall(toCopy->itemCall),
+      itemWidget(toCopy->itemWidget),
+      itemData(toCopy->itemData)
+{
+  
+}
 
  CallTreeItem::~CallTreeItem()
  {
@@ -161,8 +170,10 @@ QWidget* CallTreeItem::widget() const
 
  bool CallTreeItem::setData(int column, const QVariant &value)
  {
+   itemData.resize(10);
      if (column < 0 || column >= itemData.size())
      {
+        qDebug() << "Je suis ici!!!! " << itemData;
          return false;
      }
 
@@ -178,10 +189,12 @@ void CallTreeItem::setCall(Call *call)
 	itemWidget = new QWidget();
 
 	labelIcon = new QLabel();
-	labelCallNumber = new QLabel(itemCall->getPeerPhoneNumber());
+	//labelCallNumber = new QLabel("123"/*itemCall->getPeerPhoneNumber()*/);
+        labelCallNumber2 = new QLabel(itemCall->getPeerPhoneNumber());
 	labelTransferPrefix = new QLabel(i18n("Transfer to : "));
 	labelTransferNumber = new QLabel();
 	QSpacerItem * horizontalSpacer = new QSpacerItem(16777215, 20, QSizePolicy::Preferred, QSizePolicy::Minimum);
+        QSpacerItem * verticalSpacer = new QSpacerItem(16777215, 20, QSizePolicy::Expanding, QSizePolicy::Expanding);
 	
 	QHBoxLayout * mainLayout = new QHBoxLayout();
 	mainLayout->setContentsMargins ( 3, 1, 2, 1);
@@ -194,17 +207,20 @@ void CallTreeItem::setCall(Call *call)
 	transfer->setMargin(0);
 	transfer->setSpacing(0);
 	mainLayout->addWidget(labelIcon);
+        
 	if(! itemCall->getPeerName().isEmpty())
 	{
 		labelPeerName = new QLabel(itemCall->getPeerName());
 		descr->addWidget(labelPeerName);
 	}
-	descr->addWidget(labelCallNumber);
+
+	descr->addWidget(labelCallNumber2);
 	transfer->addWidget(labelTransferPrefix);
 	transfer->addWidget(labelTransferNumber);
 	descr->addLayout(transfer);
+        descr->addItem(verticalSpacer);
 	mainLayout->addLayout(descr);
-	mainLayout->addItem(horizontalSpacer);
+	//mainLayout->addItem(horizontalSpacer);
 	
 	itemWidget->setLayout(mainLayout);
 	itemWidget->setMinimumSize(QSize(50, 30));
@@ -239,11 +255,18 @@ void CallTreeItem::updated()
 		{
 			labelTransferNumber->setText("");
 		}
-		labelTransferNumber->setText(itemCall->getTransferNumber());
-		labelCallNumber->setText(itemCall->getCallNumber());
+		//labelTransferNumber->setText(itemCall->getTransferNumber());
+		labelCallNumber2->setText(itemCall->getPeerPhoneNumber());
+                
+                if(state == CALL_STATE_DIALING)
+                {
+                  labelCallNumber2->setText(itemCall->getCallNumber());
+                }
 	}
 	else
 	{
+                emit over(itemCall);
+                itemWidget->setVisible(false);
  		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 bc8fb65e9cc784673cbb9176b3445442cfc0e655..7d9fed0b2a773661178cd995bac4109674c95d72 100644
--- a/sflphone-client-kde/src/CallTreeItem.h
+++ b/sflphone-client-kde/src/CallTreeItem.h
@@ -43,6 +43,7 @@ class CallTreeItem : public QObject
 	Q_OBJECT
  public:
 	 CallTreeItem(const QVector<QVariant> &data, CallTreeItem *parent);
+         CallTreeItem(const CallTreeItem *toCopy, CallTreeItem *parent);
 	 ~CallTreeItem();
      
 	 CallTreeItem *child(int number);
@@ -70,7 +71,7 @@ class CallTreeItem : public QObject
 
 	 QLabel * labelIcon;
 	 QLabel * labelPeerName;
-	 QLabel * labelCallNumber;
+	 QLabel * labelCallNumber2;
 	 QLabel * labelTransferPrefix;
 	 QLabel * labelTransferNumber;
 	 
@@ -79,9 +80,12 @@ class CallTreeItem : public QObject
 	 QLabel * labelHistoryPeerName;
 	 QLabel * labelHistoryCallNumber;
 	 QLabel * labelHistoryTime;
+         friend class CallTreeItem;
 
-private slots:
+public slots:
 	 void updated();
+signals:
+   void over(Call*);  
  };
 
 #endif // CALLTREE_ITEM_H
diff --git a/sflphone-client-kde/src/CallTreeModel.cpp b/sflphone-client-kde/src/CallTreeModel.cpp
index 28d539ea3feff1286665887fd4f3ea1c0a31006f..28a840dcc72517fcf51ac7e0374fefe29718cc10 100644
--- a/sflphone-client-kde/src/CallTreeModel.cpp
+++ b/sflphone-client-kde/src/CallTreeModel.cpp
@@ -24,6 +24,7 @@
 
 #include "CallTreeModel.h"
 #include "CallTreeItem.h"
+#include "calllist_interface_singleton.h"
 
 CallTreeModel::CallTreeModel(QObject *parent)
 	: QAbstractItemModel(parent),
@@ -91,7 +92,7 @@ Qt::ItemFlags CallTreeModel::flags(const QModelIndex &index) const
 	{
 		return 0;
 	}
-	Qt::ItemFlags val = Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+	Qt::ItemFlags val = Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
 
 	return val;
 }
@@ -223,6 +224,9 @@ bool CallTreeModel::setData(const QModelIndex &index, const QVariant &value, int
 
 	CallTreeItem *item = getItem(index);
 	bool result = item->setData(index.column(), value);
+        
+        //item->setData(1, QString("test"));
+        //item->setData(2, QString("test2"));
 
 	if (result)
 	{
@@ -315,3 +319,84 @@ void CallTreeModel::setupModelData(const QStringList &lines, CallTreeItem *paren
 		number++;
 	}
 }
+
+Qt::DropActions CallTreeModel::supportedDropActions() 
+{
+  return Qt::MoveAction;// | Qt::CopyAction ;
+}
+
+bool CallTreeModel::dropMimeData( const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent ) {  
+  
+  if (action == Qt::IgnoreAction)
+      return true;
+
+  if (!data->hasFormat("application/vnd.text.list"))
+      return false;
+
+  if (column > 0)
+      return false;
+  
+  int beginRow;
+
+  if (row != -1)
+      beginRow = row;
+  else if (parent.isValid())
+      beginRow = parent.row();
+  else
+      beginRow = rowCount(QModelIndex());
+  
+  CallTreeItem *item = getItem(parent);
+  QByteArray encodedData = data->data("application/vnd.text.list");
+  QDataStream stream(&encodedData, QIODevice::ReadOnly);
+  QStringList newItems;
+  int rows = 0;
+
+  while (!stream.atEnd()) {
+      QString text;
+      stream >> text;
+      newItems << text;
+      ++rows;
+  }
+  
+  if (rows) {
+    Call* secondCall = CallListInterfaceSingleton::getInstance().findCallByCallId(newItems[0]);
+    Call* conVersation = CallListInterfaceSingleton::getInstance().createConversationFromCall(item->call(), secondCall);
+    emit joinCall(newItems[0], item->call()->getCallId());
+    
+     insertRows(beginRow, rows, parent);
+     foreach (QString text, newItems) {
+         QModelIndex idx = index(beginRow, 0, parent);
+         setData(idx, "test");
+         beginRow++;
+     }
+  }
+  else
+    qDebug() << "Unknow drop";
+
+  return true;
+}
+
+//This can be modified later to implement an universal drag and drop
+QStringList CallTreeModel::mimeTypes() const
+{
+    QStringList types;
+    types << "application/vnd.text.list";
+    return types;
+}
+
+QMimeData* CallTreeModel::mimeData(const QModelIndexList &indexes) const
+{
+     QMimeData *mimeData = new QMimeData();
+     QByteArray encodedData;
+     QDataStream stream(&encodedData, QIODevice::WriteOnly);
+
+     foreach (QModelIndex index, indexes) {
+         if (index.isValid()) {
+             CallTreeItem *item = getItem(index);
+             stream << item->call()->getCallId();
+         }
+     }
+
+     mimeData->setData("application/vnd.text.list", encodedData);
+     return mimeData;
+}
\ No newline at end of file
diff --git a/sflphone-client-kde/src/CallTreeModel.h b/sflphone-client-kde/src/CallTreeModel.h
index 1103958383de40ada106b5beccf426933ab89c74..6de8b7c1b34198cf0f9c76ef90e4b40960e5f877 100644
--- a/sflphone-client-kde/src/CallTreeModel.h
+++ b/sflphone-client-kde/src/CallTreeModel.h
@@ -61,12 +61,21 @@ public:
 	bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex());
 	bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex());
 	bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex());
+        
+        Qt::DropActions supportedDropActions();
+        virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+        QStringList mimeTypes() const;
+        QMimeData* mimeData(const QModelIndexList &indexes) const;
 
 	CallTreeItem *getItem(const QModelIndex &index) const;
 
 private:
 	void setupModelData(const QStringList &lines, CallTreeItem *parent);
 	CallTreeItem *rootItem;
+        
+signals:
+        void joinCall(QString callId1, QString callId2);
+        void over(Call*);
 };
 
 #endif // CALLTREE_MODEL_H
diff --git a/sflphone-client-kde/src/CallTreeView.cpp b/sflphone-client-kde/src/CallTreeView.cpp
index ebab89c543a3abdc157df4f38e768009d085f96e..3ab1967107ee15a46e587ea4a3bf62d73845f7df 100644
--- a/sflphone-client-kde/src/CallTreeView.cpp
+++ b/sflphone-client-kde/src/CallTreeView.cpp
@@ -25,12 +25,15 @@
 #include "CallTreeModel.h"
 #include "CallTreeItem.h"
 #include "Call.h"
+#include <QDebug>
 
 CallTreeView::CallTreeView(QWidget * parent)
 	: QTreeView(parent)
 {	 
 	treeModel = new CallTreeModel(this);
 	setModel(treeModel);
+        CallTreeItemDelegate *delegate = new CallTreeItemDelegate();
+        setItemDelegate(delegate); 
 	setHeaderHidden(true);
 	setRootIsDecorated(false);
 	setSelectionMode(QAbstractItemView::SingleSelection);
@@ -38,6 +41,17 @@ CallTreeView::CallTreeView(QWidget * parent)
 	setAcceptDrops(true);
 	setUniformRowHeights(true);
 	setDropIndicatorShown(true);
+        //setDragDropMode(QAbstractItemView::DragDrop);
+        setSelectionMode(QAbstractItemView::ExtendedSelection);
+        
+        setDragEnabled(TRUE);
+        setAcceptDrops(TRUE);
+        setDropIndicatorShown(TRUE);
+        
+        connect(this , SIGNAL(clicked(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+        connect(treeModel, SIGNAL(joinCall(QString,QString)), this, SLOT(joinCall(QString, QString)));
+        connect(treeModel, SIGNAL(joinCall(QString,QString)), this, SLOT(expandAll()));
+        connect(treeModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex& ) ), this, SLOT(adaptColumns(const QModelIndex &, const QModelIndex&) ) );
 }
 
 CallTreeView::~CallTreeView()
@@ -56,12 +70,27 @@ CallTreeItem* CallTreeView::insert(Call *call)
 	{
 		return 0;
 	}
-
-	QModelIndex child = model()->index(index.row()+1, 0, index.parent());
-	treeModel->setData(child, QVariant(""), Qt::EditRole);
-
+        
+        QModelIndex child = model()->index(index.row()+1, 0, index.parent());
+        treeModel->setData(child, QVariant(""), Qt::EditRole);
+        
+        for (int column = 1; column < treeModel->columnCount(index); ++column) 
+        {
+                QModelIndex child2 = treeModel->index(index.row()+1, column, index.parent());
+                treeModel->setData(child2, QString("test"), Qt::EditRole);
+        }
+        
 	item = treeModel->getItem(child);
-	item->setCall(call);
+ 	item->setCall(call);
+//         qDebug() << "Will connect, id " << call << ", " << call->getPeerPhoneNumber();
+//         connect(call, SIGNAL(changed()), item, SLOT(updated()));
+//         item->setCall(call);
+//         item->setData(1,call->getPeerPhoneNumber());
+//         item->setData(2,call->getPeerName());
+//         resizeColumnToContents(0);
+//         resizeColumnToContents(1);
+//         resizeColumnToContents(2);
+//         //item->updated();
 	setIndexWidget(child, item->widget());
 }
 
@@ -88,7 +117,8 @@ CallTreeItem* CallTreeView::insert(CallTreeItem *parent, Call *call)
 	for (int column = 0; column < treeModel->columnCount(index); ++column) 
 	{
 		QModelIndex child = treeModel->index(0, column, index);
-		treeModel->setData(child, QVariant(""), Qt::EditRole);	       
+                qDebug() << "I just added data: 0, " << column << " \n\n\n\n";
+		treeModel->setData(child, QVariant(""), Qt::EditRole);      
 	}
 
 	item->setCall(call);
@@ -103,6 +133,16 @@ void CallTreeView::remove(QModelIndex & index) const
 {
 	treeModel->removeRow(index.row(), index.parent());
 }
+#include <unistd.h>
+void CallTreeView::remove(Call* call) const //BUG not used
+{
+  for(int i=0; i < 15/* model.rowCount()*/;i++) { //TODO anything better
+    QModelIndex anIndex = this->indexAt(QPoint(0,i));
+    if (anIndex.isValid()) {
+      qDebug() << "This index is valid";
+    }
+  }
+}
 
 void CallTreeView::removeCurrent() const
 {
@@ -137,43 +177,35 @@ void CallTreeView::setCurrentRow(int row)
 	selectionModel()->setCurrentIndex(index,  QItemSelectionModel::Current);
 }
 
-
 int CallTreeView::count()
 {
 	return model()->rowCount();
 }
 
-bool CallTreeView::dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action)
-{/*
-	 = data->data("items/index");
- 
-	foreach(QModelIndex index, callList) // iterate over list
-	{
-		CallTreeItem *item = static_cast<CallTreeItem*>(index.internalPointer());
-
-		if (parent == NULL)
-		{
-			// make new QTreeWidgetItem and set its text
-			// if parent is null - add top level item (this parent)
-			insert(item->call());
-		}
-		else 
-		{    
-			// else add QTreeWidgetItem with parent and expand parent
-			insert(parent, item->call());
-			parent->setExpanded( true );
-		}
-	}	*/
-	return true;    
-}
-
 QStringList CallTreeView::mimeTypes() const
 {
-
+  
 }
 
-
 Qt::DropActions CallTreeView::supportedDropActions () const
 {
+  return Qt::CopyAction | Qt::MoveAction;
+}
 
+void CallTreeView::itemClicked(const QModelIndex& anIndex) 
+{
+  if (currentModel != anIndex)
+    emit itemChanged();
+  currentModel = anIndex;
 }
+
+void CallTreeView::adaptColumns (const QModelIndex & topleft, const QModelIndex& bottomRight)
+{
+  int firstColumn= topleft.column();
+  int lastColumn = bottomRight.column();
+  do {
+    //if (firstColumn) //TODO remove this and fix the resulting bug
+      resizeColumnToContents(firstColumn);
+    firstColumn++;
+  } while (firstColumn < lastColumn);
+}
\ No newline at end of file
diff --git a/sflphone-client-kde/src/CallTreeView.h b/sflphone-client-kde/src/CallTreeView.h
index 01db724feff177548b9678ad313a3ac068bb797f..f025cc520a5a34dfcf8435ec3875f22da9fad3dc 100644
--- a/sflphone-client-kde/src/CallTreeView.h
+++ b/sflphone-client-kde/src/CallTreeView.h
@@ -27,6 +27,7 @@
 #define CALLTREE_VIEW_H
 
 #include <QTreeView>
+#include <QItemDelegate>
 
 class CallTreeModel;
 class CallTreeItem;
@@ -35,27 +36,43 @@ class QModelIndex;
 class QTreeWidgetItem;
 class QMimeData;
 
+class CallTreeItemDelegate : public QItemDelegate
+{
+public:
+        CallTreeItemDelegate() { }
+        QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const { return QSize(0,50); }
+};
+
 class CallTreeView : public QTreeView
 {
 	Q_OBJECT
 public:
 	CallTreeView(QWidget *parent);
 	~CallTreeView();
-
-	CallTreeItem* insert(CallTreeItem *item, Call* call);
-	CallTreeItem* insert(Call* call);
 	void remove(QModelIndex & index) const;
 	void removeCurrent() const;
 	CallTreeItem* currentItem();
 	CallTreeItem* getItem(const QModelIndex &index);
 	void setCurrentRow(int row);
 	int count();
-
-	bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action);    
 	QStringList mimeTypes() const;
 	Qt::DropActions supportedDropActions () const;
+        CallTreeItem* insert(Call* call);
+        CallTreeItem* insert(CallTreeItem *item, Call* call);
+        
+// protected:
+//         void dropEvent(QDropEvent* event);
+//         
 private:
 	CallTreeModel *treeModel;
+        QModelIndex currentModel;
+public slots:
+        void remove(Call* call) const;
+    
+private slots:
+        void itemClicked(const QModelIndex& anIndex);
+        void adaptColumns(const QModelIndex & topleft, const QModelIndex& bottomRight);
+        
 signals:
 	void currentItemChanged();
 	void itemChanged();
diff --git a/sflphone-client-kde/src/SFLPhone.cpp b/sflphone-client-kde/src/SFLPhone.cpp
index 20aaa87a8e21ad75699c5fbf59e237216913bb0f..9e4332e80617216c070306f94e00397d65d198ce 100644
--- a/sflphone-client-kde/src/SFLPhone.cpp
+++ b/sflphone-client-kde/src/SFLPhone.cpp
@@ -230,19 +230,21 @@ void SFLPhone::quitButton()
 }
 
 void SFLPhone::sendNotif(QString caller)
-{/*
-    notification = new KNotification ( QString("test_notification"), this );
-    notification->setText("messageText")    ;
-    notification->setPixmap( QPixmap( this->windowIcon().pixmap(32, 32) ));
-    notification->setActions( QStringList( i18n( "Open chat" ) ) );
-    notification->addContext(  QString::fromLatin1("call") , "caller" )  ;
-    notification->sendEvent();*/
-   /* KNotification::event(QString("test_notification"),
-                         QString("Allo"),
-                         this->windowIcon().pixmap(32, 32),
-                         parentWidget(),
-                         KNotification::CloseOnTimeout,
-                         KGlobal::mainComponent());*/
+{
+//     notification = new KNotification ( QString("test_notification"), this );
+//     notification->setText("messageText")    ;
+//     notification->setPixmap( QPixmap( this->windowIcon().pixmap(32, 32) ));
+//     notification->setActions( QStringList( i18n( "Open chat" ) ) );
+//     notification->addContext(  QString::fromLatin1("call") , "caller" )  ;
+//     notification->sendEvent();
+//     KNotification::event(QString("test_notification"),
+//                          QString("Allo"),
+//                          this->windowIcon().pixmap(32, 32),
+//                          parentWidget(),
+//                          KNotification::CloseOnTimeout,
+//                          KGlobal::mainComponent());
+
+KNotification::event(KNotification::Notification, "New incomming call", "New call from: \n" + caller);       
 }
 
 void SFLPhone::changeEvent(QEvent * event)
diff --git a/sflphone-client-kde/src/SFLPhoneView.cpp b/sflphone-client-kde/src/SFLPhoneView.cpp
index 71f3de328c2893797e2b8b2ba76024506174c493..b46a0947d16ae38193b61f109333471e27ed8447 100644
--- a/sflphone-client-kde/src/SFLPhoneView.cpp
+++ b/sflphone-client-kde/src/SFLPhoneView.cpp
@@ -41,6 +41,7 @@
 #include "sflphone_const.h"
 #include "conf/ConfigurationSkeleton.h"
 #include "configurationmanager_interface_singleton.h"
+#include "calllist_interface_singleton.h"
 #include "callmanager_interface_singleton.h"
 #include "instance_interface_singleton.h"
 #include "ActionSetAccountFirst.h"
@@ -68,7 +69,7 @@ SFLPhoneView::SFLPhoneView(QWidget *parent)
 	
 	errorWindow = new QErrorMessage(this);
 
-	callList = new CallList(this);
+	callList = & CallListInterfaceSingleton::getInstance(); //CallList(this);
 
 	callTree = new CallTreeView(page_callList);
 	historyTree = new CallTreeView(page_callHistory);
@@ -135,12 +136,13 @@ SFLPhoneView::SFLPhoneView(QWidget *parent)
 	connect(accountList, SIGNAL(accountListUpdated()),
 	        this,        SLOT(updateWindowCallState()));
 
-	connect(callTree,    SIGNAL(currentItemChanged()),
+	connect(callTree,    SIGNAL(itemChanged()), //currentItemChanged
 		this,        SLOT(on_callTree_currentItemChanged()));
-	connect(callTree,    SIGNAL(itemChanged()),
+	connect(callTree,    SIGNAL(itemChanged()), //ITem changed
 		this,        SLOT(on_callTree_itemChanged()));
-	connect(callTree,    SIGNAL(itemDoubleClicked(const QModelIndex &)),
+	connect(callTree,    SIGNAL(doubleClicked(const QModelIndex &)),
 		this,        SLOT(on_callTree_itemDoubleClicked(const QModelIndex&)));
+                
 	        
 } 
 
@@ -1011,7 +1013,7 @@ void SFLPhoneView::on_toolButton_sndVol_clicked(bool checked)
 	updateVolumeButton();
 }
 
-
+#include <unistd.h>
 void SFLPhoneView::on_callTree_currentItemChanged()
 {
 	qDebug() << "on_callTree_currentItemChanged";
@@ -1492,4 +1494,6 @@ void SFLPhoneView::changeScreen(int screen)
 	emit screenChanged(screen);
 }
 
+
+
 #include "SFLPhoneView.moc"
diff --git a/sflphone-client-kde/src/calllist_interface_singleton.cpp b/sflphone-client-kde/src/calllist_interface_singleton.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..630ff994e49feb756a23d6c4aae35f7ccf26c223
--- /dev/null
+++ b/sflphone-client-kde/src/calllist_interface_singleton.cpp
@@ -0,0 +1,30 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by Savoir-Faire Linux                              *
+ *   Author : Jérémy Quentin                                               *
+ *   jeremy.quentin@savoirfairelinux.com                                   *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 3 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+#include "calllist_interface_singleton.h"
+CallList* CallListInterfaceSingleton::callListInstance = 0;
+
+CallList& CallListInterfaceSingleton::getInstance() 
+{
+  if (!CallListInterfaceSingleton::callListInstance)
+    CallListInterfaceSingleton::callListInstance = new CallList(0);
+  
+  return *CallListInterfaceSingleton::callListInstance;
+}
\ No newline at end of file
diff --git a/sflphone-client-kde/src/calllist_interface_singleton.h b/sflphone-client-kde/src/calllist_interface_singleton.h
new file mode 100644
index 0000000000000000000000000000000000000000..7f42a69e6f2f5f5bab9219d27b8694955fc066d7
--- /dev/null
+++ b/sflphone-client-kde/src/calllist_interface_singleton.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by Savoir-Faire Linux                              *
+ *   Author : Jérémy Quentin                                               *
+ *   emmanuel.lepage@savoirfairelinux.com                                   *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 3 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+#ifndef CALLLIST_S_H
+#define CALLLIST_S_H
+
+#include "CallList.h"
+
+/**
+        @author Emmanuel Lepage <emmanuel.lepage@savoirfairelinux.com>
+*/
+class CallListInterfaceSingleton
+{
+public:
+  static CallList& getInstance();
+//private:
+  static CallList* callListInstance;
+};
+
+#endif
diff --git a/sflphone-client-kde/src/sflphone_const.h b/sflphone-client-kde/src/sflphone_const.h
index 42c919cf988d527d2d664b1d0f15e8e4f89531da..90026ff145a27744ccce65e50376766911008f5d 100644
--- a/sflphone-client-kde/src/sflphone_const.h
+++ b/sflphone-client-kde/src/sflphone_const.h
@@ -186,7 +186,8 @@
 #define ACCOUNT_STATE_ERROR_EXIST_STUN    "ERROR_EXIST_STUN"
 
 /** Calls details */
-#define CALL_PEER_NAME                    "PEER_NAME"
+#define CALL_PEER_NAME                    "DISPLAY_NAME"
+//#define CALL_PEER_NAME                    "PEER_NAME"
 #define CALL_PEER_NUMBER                  "PEER_NUMBER"
 #define CALL_ACCOUNTID                    "ACCOUNTID"
 #define CALL_STATE                        "CALL_STATE"