diff --git a/sflphone_kde/Call.cpp b/sflphone_kde/Call.cpp
index 5ef9f7fe046bf9d6a2dc6c9d8cc32ff49468de0c..a726e006549169bf2b47597336d78ddc5b3c81eb 100644
--- a/sflphone_kde/Call.cpp
+++ b/sflphone_kde/Call.cpp
@@ -3,22 +3,38 @@
 #include "callmanager_interface_p.h"
 #include "callmanager_interface_singleton.h"
 #include "SFLPhone.h"
+#include "sflphone_const.h"
 
-
-const call_state Call::stateMap [11][5] = 
+const call_state Call::stateActionMap [11][5] = 
 {
 //                      ACCEPT                  REFUSE             TRANSFER                   HOLD                           RECORD
-/*INCOMING       */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER           , CALL_STATE_HOLD           ,  CALL_STATE_INCOMING       },
-/*RINGING        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_RINGING        },
-/*CURRENT        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER       , CALL_STATE_HOLD           ,  CALL_STATE_CURRENT        },
-/*DIALING        */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_DIALING        },
-/*HOLD           */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER_HOLD  , CALL_STATE_CURRENT        ,  CALL_STATE_HOLD           },
-/*FAILURE        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*BUSY           */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*TRANSFER       */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT        , CALL_STATE_TRANSFER_HOLD  ,  CALL_STATE_TRANSFER       },
-/*TRANSFER_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD           , CALL_STATE_TRANSFER       ,  CALL_STATE_TRANSFER_HOLD  },
-/*OVER           */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*ERROR          */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          }
+/*INCOMING     */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER         , CALL_STATE_HOLD         ,  CALL_STATE_INCOMING     },
+/*RINGING      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_RINGING      },
+/*CURRENT      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER     , CALL_STATE_HOLD         ,  CALL_STATE_CURRENT      },
+/*DIALING      */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_DIALING      },
+/*HOLD         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSF_HOLD  , CALL_STATE_CURRENT      ,  CALL_STATE_HOLD         },
+/*FAILURE      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*BUSY         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*TRANSFER     */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT      , CALL_STATE_TRANSF_HOLD  ,  CALL_STATE_TRANSFER     },
+/*TRANSF_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD         , CALL_STATE_TRANSFER     ,  CALL_STATE_TRANSF_HOLD  },
+/*OVER         */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*ERROR        */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        }
+};
+
+const call_state Call::stateChangedMap [11][6] = 
+{
+//                      RINGING                  CURRENT             BUSY                   HOLD                           HUNGUP           FAILURE
+/*INCOMING     */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER         , CALL_STATE_HOLD         ,  CALL_STATE_INCOMING     },
+/*RINGING      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_RINGING      },
+/*CURRENT      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER     , CALL_STATE_HOLD         ,  CALL_STATE_CURRENT      },
+/*DIALING      */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_DIALING      },
+/*HOLD         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSF_HOLD  , CALL_STATE_CURRENT      ,  CALL_STATE_HOLD         },
+/*FAILURE      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*BUSY         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*TRANSFER     */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT      , CALL_STATE_TRANSF_HOLD  ,  CALL_STATE_TRANSFER     },
+/*TRANSF_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD         , CALL_STATE_TRANSFER     ,  CALL_STATE_TRANSF_HOLD  },
+/*OVER         */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*ERROR        */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        }
 };
 
 const function Call::functionMap[11][5] = 
@@ -46,11 +62,11 @@ Call::Call(call_state startState, QString callId)
 	this->currentState = startState;
 }
 
-Call::Call(call_state startState, QString callId, QString from, Account & account)
+Call::Call(call_state startState, QString callId, QString from, QString account)
 {
 	this->callId = callId;
 	this->item = new QListWidgetItem(from);
-	this->account = & account;
+	this->account = account;
 	this->recording = false;
 	this->currentState = startState;
 }
@@ -66,7 +82,7 @@ Call * Call::buildDialingCall(QString callId)
 	return call;
 }
 
-Call * Call::buildIncomingCall(QString callId, QString from, Account & account)
+Call * Call::buildIncomingCall(const QString & callId, const QString & from, const QString & account)
 {
 	Call * call = new Call(CALL_STATE_INCOMING, callId, from, account);
 	return call;
@@ -82,8 +98,42 @@ call_state Call::getState() const
 	return currentState;
 }
 
+call_state Call::stateChanged(const QString & newState)
+{
+	if(newState == QString(CALL_STATE_CHANGE_HUNG_UP))
+	{
+		this->currentState = CALL_STATE_OVER;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_HOLD))
+	{
+		this->currentState = CALL_STATE_HOLD;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_UNHOLD_CURRENT))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_CURRENT))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_RINGING))
+	{
+		this->currentState = CALL_STATE_RINGING;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_UNHOLD_RECORD))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+		this->recording = true;
+	}
+	return this->currentState;
+}
+
 call_state Call::action(call_action action, QString number)
 {
+	if(action == CALL_ACTION_STATE_CHANGED)
+	{
+		return stateChanged(number);
+	}
 	call_state previousState = currentState;
 	//execute the action associated with this transition
 	(this->*(functionMap[currentState][action]))(number);
@@ -125,6 +175,8 @@ void Call::accept(QString number)
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Accepting call. callId : " << callId;
 	callManager.accept(callId);
+	this->startTime = & QDateTime::currentDateTime();
+	this->historyState = INCOMING;
 }
 
 void Call::refuse(QString number)
@@ -132,6 +184,8 @@ void Call::refuse(QString number)
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Refusing call. callId : " << callId;
 	callManager.refuse(callId);
+	this->startTime = & QDateTime::currentDateTime();
+	this->historyState = MISSED;
 }
 
 void Call::acceptTransf(QString number)
@@ -140,6 +194,7 @@ void Call::acceptTransf(QString number)
 	qDebug() << "Accepting call and transfering it to number : " << number << ". callId : " << callId;
 	callManager.accept(callId);
 	callManager.transfert(callId, number);
+	//this->historyState = TRANSFERED;
 }
 
 void Call::acceptHold(QString number)
@@ -148,6 +203,7 @@ void Call::acceptHold(QString number)
 	qDebug() << "Accepting call and holding it. callId : " << callId;
 	callManager.accept(callId);
 	callManager.hold(callId);
+	this->historyState = INCOMING;
 }
 
 void Call::hangUp(QString number)
@@ -167,9 +223,10 @@ void Call::hold(QString number)
 void Call::call(QString number)
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
-	QString account = SFLPhone::firstAccount();
-	qDebug() << "Calling " << number << " with account " << account << ". callId : " << callId;
+	this->account = SFLPhone::firstAccount();
+	qDebug() << "Calling " << number << " with account " << this->account << ". callId : " << callId;
 	callManager.placeCall(account, callId, number);
+	this->historyState = OUTGOING;
 }
 
 void Call::transfer(QString number)
@@ -178,6 +235,7 @@ void Call::transfer(QString number)
 	QString account = SFLPhone::firstAccount();
 	qDebug() << "Transfering call to number : " << number << ". callId : " << callId;
 	callManager.transfert(callId, number);
+	this->stopTime = & QDateTime::currentDateTime();
 }
 
 void Call::unhold(QString number)
@@ -197,6 +255,7 @@ void Call::setRecord(QString number)
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Setting record for call. callId : " << callId;
-	callManager.unhold(callId);
+	callManager.setRecording(callId);
+	recording = !recording;
 }
 
diff --git a/sflphone_kde/Call.h b/sflphone_kde/Call.h
index cdbb3d066710882a9336dc7740abbc11c24cb8d2..0525371b5bad55d8f870a505675e68b8aba7b6d9 100644
--- a/sflphone_kde/Call.h
+++ b/sflphone_kde/Call.h
@@ -25,7 +25,7 @@ typedef enum
    /** Call is being transfered.  During this state, the user can enter the new number. */
    CALL_STATE_TRANSFER,
    /** Call is on hold for transfer */
-   CALL_STATE_TRANSFER_HOLD,
+   CALL_STATE_TRANSF_HOLD,
    /** Call is over and should not be used */
    CALL_STATE_OVER,
    /** This state should never be reached */
@@ -46,9 +46,23 @@ typedef enum
    /** Blue-green button, hold or unhold the call */
    CALL_ACTION_HOLD,
    /** Record button, enable or disable recording */
-   CALL_ACTION_RECORD
+   CALL_ACTION_RECORD,
+   /** Other user state changes */
+   CALL_ACTION_STATE_CHANGED
 } call_action;
 
+/**
+ * @enum history_state
+ * This enum have all the state a call can take in the history
+ */
+typedef enum
+{
+  NONE,
+  INCOMING,
+  OUTGOING,
+  MISSED
+} history_state;
+
 
 class Call;
 
@@ -59,15 +73,14 @@ class Call
 private:
 
 	//Call attributes
-	Account * account;
+	QString account;
 	QString callId;
 	QString from;
 	QString to;
-//	HistoryState * historyState;
-	QTime start;
-	QTime stop;
+	history_state historyState;
+	QDateTime * startTime;
+	QDateTime * stopTime;
 	QListWidgetItem * item;
-	//Automate * automate;
 	
 	//Automate attributes
 	static const call_state stateMap [11][5];
@@ -76,7 +89,7 @@ private:
 	bool recording;
 
 	Call(call_state startState, QString callId);
-	Call(call_state startState, QString callId, QString from, Account & account);
+	Call(call_state startState, QString callId, QString from, QString account);
 	
 	//Automate functions
 	void nothing(QString number);
@@ -96,10 +109,11 @@ public:
 	
 	~Call();
 	static Call * buildDialingCall(QString callId);
-	static Call * buildIncomingCall(QString callId, QString from, Account & account);
+	static Call * buildIncomingCall(const QString & callId, const QString & from, const QString & account);
 	QListWidgetItem * getItem();
 	call_state getState() const;
 	QString getCallId();
+	call_state stateChanged(const QString & newState);
 	call_state action(call_action action, QString number = NULL);
 	call_state getCurrentState() const;
 
diff --git a/sflphone_kde/CallList.cpp b/sflphone_kde/CallList.cpp
index d4461fdb4cdf8aecdfeb178a408872aa0070f835..ac1023e509df7c4bd1f501dd4e9799c147acf4c7 100644
--- a/sflphone_kde/CallList.cpp
+++ b/sflphone_kde/CallList.cpp
@@ -7,7 +7,7 @@ CallList::CallList()
 }
 
 
-Call * CallList::operator[](QListWidgetItem * item)
+Call * CallList::operator[](const QListWidgetItem * item)
 {
 	for(int i = 0 ; i < size() ; i++)
 	{
@@ -19,9 +19,21 @@ Call * CallList::operator[](QListWidgetItem * item)
 	return NULL;
 }
 
+Call * CallList::operator[](const QString & callId)
+{
+	for(int i = 0 ; i < size() ; i++)
+	{
+		if ((*calls)[i]->getCallId() == callId)
+		{
+			return (*calls)[i];
+		}
+	}
+	return NULL;
+}
+
 QString CallList::getAndIncCallId()
 {
-	QString res = QString::number(callIdCpt);
+	QString res = QString::number(callIdCpt++);
 	
 	return res;
 }
@@ -38,7 +50,7 @@ QListWidgetItem * CallList::addDialingCall()
 	return call->getItem();
 }
 
-QListWidgetItem * CallList::addIncomingCall(QString callId, QString from, Account & account)
+QListWidgetItem * CallList::addIncomingCall(const QString & callId, const QString & from, const QString & account)
 {
 	Call * call = Call::buildIncomingCall(callId, from, account);
 	calls->append(call);
diff --git a/sflphone_kde/CallList.h b/sflphone_kde/CallList.h
index 7f43e6dc6deb1d23ffcd53a4fdac1cc9ef1a4441..07b646ae1b6b3fc839643ade4104ee5606d9e934 100644
--- a/sflphone_kde/CallList.h
+++ b/sflphone_kde/CallList.h
@@ -14,10 +14,12 @@ public:
 	CallList();
 	~CallList();
 
-	Call * operator[](QListWidgetItem * item);
+	Call * operator[](const QListWidgetItem * item);
+	Call * operator[](const QString & callId);
+	void remove(Call * call);
 
 	QListWidgetItem * addDialingCall();
-	QListWidgetItem * addIncomingCall(QString callId, QString from, Account & account);
+	QListWidgetItem * addIncomingCall(const QString & callId, const QString & from, const QString & account);
 
 	QString getAndIncCallId();
 	int size();
diff --git a/sflphone_kde/ConfigDialog.ui b/sflphone_kde/ConfigDialog.ui
index 1cb26c092d584a3bc1de9f1270b19f2ebc936a79..520fe9a465a4281fd14543b935ea0ffb00706d8b 100644
--- a/sflphone_kde/ConfigDialog.ui
+++ b/sflphone_kde/ConfigDialog.ui
@@ -124,37 +124,21 @@
         <property name="text" >
          <string>Général</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/sflphone.png</normaloff>:/Images/sflphone.png</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Affichage</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/sflphone.png</normaloff>:/Images/sflphone.png</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Comptes</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/stock_person.svg</normaloff>:/Images/stock_person.svg</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Audio</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/icon_volume_off.svg</normaloff>:/Images/icon_volume_off.svg</iconset>
-        </property>
        </item>
       </widget>
      </item>
diff --git a/sflphone_kde/SFLPhone.cpp b/sflphone_kde/SFLPhone.cpp
index 95cab2bbc4985804f044eb9ba871f396a086d542..8d8d23d3200b87277d50033d755d88e6369e729d 100644
--- a/sflphone_kde/SFLPhone.cpp
+++ b/sflphone_kde/SFLPhone.cpp
@@ -87,6 +87,7 @@ void SFLPhone::action(QListWidgetItem * item, call_action action)
 	updateWindowCallState();
 }
 
+
 /*******************************************
 ******** Update Display Functions **********
 *******************************************/
@@ -100,6 +101,7 @@ void SFLPhone::updateWindowCallState()
 	char * iconFile;
 	char * buttonIconFiles[3] = {ICON_CALL, ICON_HANGUP, ICON_HOLD};
 	bool transfer = false;
+	bool record = false;
 	
 	if (!item)
 	{
@@ -173,7 +175,8 @@ void SFLPhone::updateWindowCallState()
 				break;
 			case CALL_STATE_OVER:
 				qDebug() << "Reached CALL_STATE_OVER. Deleting call " << (*callList)[item]->getCallId();
-				delete (*callList)[item];
+				//delete (*callList)[item];
+				callList->remove((*callList)[item]);
 				return;
 				break;
 			case CALL_STATE_ERROR:
@@ -500,17 +503,22 @@ void SFLPhone::on_actionBoite_vocale_triggered()
 
 void SFLPhone::on_callStateChanged(const QString &callID, const QString &state)
 {
-	qDebug() << "on_callStateChanged !";
+	qDebug() << "on_callStateChanged " << callID << " . New state : " << state;
+	(*callList)[callID]->action(CALL_ACTION_STATE_CHANGED, state);
+	updateWindowCallState();
 }
 
 void SFLPhone::on_error(MapStringString details)
 {
-	qDebug() << "on_error !";
+	qDebug() << "Daemon error : " << details;
 }
 
-void SFLPhone::on_incomingCall(const QString &accountID, const QString &callID, const QString &from)
+void SFLPhone::on_incomingCall(const QString &accountID, const QString & callID, const QString &from)
 {
 	qDebug() << "Incoming Call !";
+	QListWidgetItem * item = callList->addIncomingCall(callID, from, accountID);
+	listWidget_callList->addItem(item);
+	listWidget_callList->setCurrentRow(listWidget_callList->count() - 1);
 }
 
 void SFLPhone::on_incomingMessage(const QString &accountID, const QString &message)
diff --git a/sflphone_kde/SFLPhone.h b/sflphone_kde/SFLPhone.h
index 2502d7bb91d6d3ecb7cb57d01bcf12d651b414c1..7691fd3e10a9e7008bb8eab7a7e7cddfbe259276 100644
--- a/sflphone_kde/SFLPhone.h
+++ b/sflphone_kde/SFLPhone.h
@@ -49,8 +49,6 @@ private slots:
 	void on_actionBoite_vocale_triggered();
 	//void on_actionAbout();
 	
-
-
 	void on_pushButton_1_clicked();
 	void on_pushButton_2_clicked();
 	void on_pushButton_3_clicked();
diff --git a/sflphone_kde/callmanager-introspec.xml b/sflphone_kde/callmanager-introspec.xml
index 82e1a36b4e44888267096d1a97e2572bed734969..99069d5a2833a8dfa7cb609007a7a6738ebdf796 100644
--- a/sflphone_kde/callmanager-introspec.xml
+++ b/sflphone_kde/callmanager-introspec.xml
@@ -56,6 +56,10 @@
       <arg type="d" name="value" direction="out"/>
     </method>
     
+	 <method name="setRecording">
+		 <arg type="s" name="callID" direction="in"/>
+    </method>
+	 
     <method name="getCallDetails">
       <arg type="s" name="callID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
diff --git a/sflphone_kde/callmanager_interface.cpp b/sflphone_kde/callmanager_interface.cpp
index 22eb57bcbdeab4d6e7d17976acdba94188155332..6b0c1178863927e615364c2f3c3b8309f198bf87 100644
--- a/sflphone_kde/callmanager_interface.cpp
+++ b/sflphone_kde/callmanager_interface.cpp
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c CallManagerInterface -p call_manager_interface_p.h:call_manager_interface.cpp -i metatypes.h callmanager-introspec.xml
+ * Command line was: dbusxml2cpp -c CallManagerInterface -p callmanager_interface_p.h:callmanager_interface.cpp -i metatypes.h callmanager-introspec.xml
  *
  * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  *
diff --git a/sflphone_kde/callmanager_interface_p.h b/sflphone_kde/callmanager_interface_p.h
index 890b62968b9ac3da45a2e2f9be03b5d99e7d0561..9b46b659ac33022e9da92e21c5373f0045dd3576 100644
--- a/sflphone_kde/callmanager_interface_p.h
+++ b/sflphone_kde/callmanager_interface_p.h
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c CallManagerInterface -p call_manager_interface_p.h:call_manager_interface.cpp -i metatypes.h callmanager-introspec.xml
+ * Command line was: dbusxml2cpp -c CallManagerInterface -p callmanager_interface_p.h:callmanager_interface.cpp -i metatypes.h callmanager-introspec.xml
  *
  * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  *
@@ -8,8 +8,8 @@
  * Do not edit! All changes made to it will be lost.
  */
 
-#ifndef CALL_MANAGER_INTERFACE_P_H_1236370787
-#define CALL_MANAGER_INTERFACE_P_H_1236370787
+#ifndef CALLMANAGER_INTERFACE_P_H_1237229754
+#define CALLMANAGER_INTERFACE_P_H_1237229754
 
 #include <QtCore/QObject>
 #include <QtCore/QByteArray>
@@ -99,6 +99,13 @@ public Q_SLOTS: // METHODS
         return callWithArgumentList(QDBus::Block, QLatin1String("refuse"), argumentList);
     }
 
+    inline QDBusReply<void> setRecording(const QString &callID)
+    {
+        QList<QVariant> argumentList;
+        argumentList << qVariantFromValue(callID);
+        return callWithArgumentList(QDBus::Block, QLatin1String("setRecording"), argumentList);
+    }
+
     inline QDBusReply<void> setVolume(const QString &device, double value)
     {
         QList<QVariant> argumentList;
diff --git a/sflphone_kde/sflphone_const.h b/sflphone_kde/sflphone_const.h
index 6712987d46da39236b2864a0c5eb9f6d085ba394..8dd14f4f96b844f5f9f700f57f305cde3eb4d58a 100644
--- a/sflphone_kde/sflphone_const.h
+++ b/sflphone_kde/sflphone_const.h
@@ -48,7 +48,7 @@
 #define ICON_FAILURE ":/images/icons/fail.svg"
 #define ICON_BUSY ":/images/icons/busy.svg"
 #define ICON_TRANSFER ":/images/icons/transfert.svg"
-#define ICON_TRANSFER_HOLD ":/images/icons/transfert.svg"
+#define ICON_TRANSF_HOLD ":/images/icons/transfert.svg"
 
 #define ICON_CALL ":/images/icons/call.svg"
 #define ICON_HANGUP ":/images/icons/hang_up.svg"
@@ -94,6 +94,13 @@
 #define ACCOUNT_STATE_ERROR_CONF_STUN    "ERROR_CONF_STUN"
 #define ACCOUNT_STATE_ERROR_EXIST_STUN   "ERROR_EXIST_STUN"
 
+#define CALL_STATE_CHANGE_HUNG_UP         "HUNGUP"
+#define CALL_STATE_CHANGE_RINGING         "RINGING"
+#define CALL_STATE_CHANGE_CURRENT         "CURRENT"
+#define CALL_STATE_CHANGE_HOLD            "HOLD"
+#define CALL_STATE_CHANGE_BUSY            "BUSY"
+#define CALL_STATE_CHANGE_FAILURE         "FAILURE"
+
 #define MAX_HISTORY_CAPACITY      60
 
 #define CODEC_NAME              0
diff --git a/sflphone_kde/sflphone_kde.kdevelop.pcs b/sflphone_kde/sflphone_kde.kdevelop.pcs
index 138d43272375023ed724ff6185edf28f20cf4bae..5cf3843acd6e956ea3ec16566a78099c89fdfe76 100644
Binary files a/sflphone_kde/sflphone_kde.kdevelop.pcs and b/sflphone_kde/sflphone_kde.kdevelop.pcs differ
diff --git a/sflphone_kde/sflphone_kde.kdevses b/sflphone_kde/sflphone_kde.kdevses
index 4e3fa3cbed4e3bd42862f85cb218fe3d2a328dcd..113d271ce966d580551efafb1c513a19dd60789f 100644
--- a/sflphone_kde/sflphone_kde.kdevses
+++ b/sflphone_kde/sflphone_kde.kdevses
@@ -1,31 +1,49 @@
 <?xml version = '1.0' encoding = 'UTF-8'?>
 <!DOCTYPE KDevPrjSession>
 <KDevPrjSession>
- <DocsAndViews NumberOfDocuments="8" >
-  <Doc0 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.cpp" >
-   <View0 Encoding="" line="526" Type="Source" />
-  </Doc0>
-  <Doc1 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_singleton.cpp" >
+ <DocsAndViews NumberOfDocuments="14" >
+  <Doc0 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_singleton.cpp" >
    <View0 Encoding="" line="0" Type="Source" />
+  </Doc0>
+  <Doc1 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_p.h" >
+   <View0 Encoding="" line="140" Type="Source" />
   </Doc1>
-  <Doc2 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_p.h" >
-   <View0 Encoding="" line="135" Type="Source" />
+  <Doc2 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.h" >
+   <View0 Encoding="" line="27" Type="Source" />
   </Doc2>
-  <Doc3 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface.cpp" >
-   <View0 Encoding="" line="17" Type="Source" />
+  <Doc3 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.cpp" >
+   <View0 Encoding="" line="503" Type="Source" />
   </Doc3>
-  <Doc4 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/main.cpp" >
-   <View0 Encoding="" line="19" Type="Source" />
+  <Doc4 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/sflphone_const.h" >
+   <View0 Encoding="" line="50" Type="Source" />
   </Doc4>
-  <Doc5 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.h" >
-   <View0 Encoding="" line="74" Type="Source" />
+  <Doc5 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager-introspec.xml" >
+   <View0 Encoding="" line="80" Type="Source" />
   </Doc5>
-  <Doc6 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager-introspec.xml" >
-   <View0 Encoding="" line="78" Type="Source" />
+  <Doc6 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.h" >
+   <View0 Encoding="" line="23" Type="Source" />
   </Doc6>
-  <Doc7 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/build/moc_SFLPhone.cpp" >
-   <View0 Encoding="" line="191" Type="Source" />
+  <Doc7 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/CallList.h" >
+   <View0 Encoding="" line="18" Type="Source" />
   </Doc7>
+  <Doc8 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/CallList.cpp" >
+   <View0 Encoding="" line="42" Type="Source" />
+  </Doc8>
+  <Doc9 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.cpp" >
+   <View0 Encoding="" line="26" Type="Source" />
+  </Doc9>
+  <Doc10 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Automate.h" >
+   <View0 Encoding="" line="0" Type="Source" />
+  </Doc10>
+  <Doc11 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Automate.cpp" >
+   <View0 Encoding="" line="0" Type="Source" />
+  </Doc11>
+  <Doc12 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/templates/cpp" >
+   <View0 Encoding="" line="17" Type="Source" />
+  </Doc12>
+  <Doc13 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/templates/h" >
+   <View0 Encoding="" line="7" Type="Source" />
+  </Doc13>
  </DocsAndViews>
  <pluginList>
   <kdevdebugger>
diff --git a/sflphone_kde/templates/cpp b/sflphone_kde/templates/cpp
index 43862e93cc02320192c7f1f761384dbfb72f689b..7f440b5afe2b30492b051f33946e008d5826de0f 100644
--- a/sflphone_kde/templates/cpp
+++ b/sflphone_kde/templates/cpp
@@ -1,10 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Jérémy Quentin   *
- *   jeremy.quentin@gmail.com   *
+ *   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 2 of the License, or     *
+ *   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,       *
diff --git a/sflphone_kde/templates/h b/sflphone_kde/templates/h
index 43862e93cc02320192c7f1f761384dbfb72f689b..7f440b5afe2b30492b051f33946e008d5826de0f 100644
--- a/sflphone_kde/templates/h
+++ b/sflphone_kde/templates/h
@@ -1,10 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Jérémy Quentin   *
- *   jeremy.quentin@gmail.com   *
+ *   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 2 of the License, or     *
+ *   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,       *