From 00d8956cd3cf106b5762858103886b09045e6ddb Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@msavard.(none)>
Date: Fri, 20 Jan 2012 09:06:58 -0500
Subject: [PATCH] Revert "Merge branch 'master' of
 git+ssh://git.sflphone.org/var/repos/sflphone/git/sflphone"

This reverts commit a4256fcbdcd7a75d8a34c114412bec6b08e28b82, reversing
changes made to aa2dd717db7df6928ec3998bef4f4d1059b66005.
---
 daemon/src/audio/audiolayer.h                 |    4 -
 daemon/src/audio/audiorecord.cpp              |   56 +-
 daemon/src/audio/audiorecord.h                |   12 +-
 daemon/src/audio/pulseaudio/pulselayer.cpp    |    6 +-
 daemon/src/audio/recordable.cpp               |   20 +-
 daemon/src/audio/recordable.h                 |   21 +-
 daemon/src/call.cpp                           |   86 +-
 daemon/src/call.h                             |   62 +-
 daemon/src/conference.cpp                     |   10 +-
 daemon/src/config/config.cpp                  |   33 +-
 daemon/src/config/config.h                    |    7 +-
 daemon/src/dbus/callmanager-introspec.xml     | 1594 ++++++++---------
 daemon/src/dbus/callmanager.cpp               |   11 +-
 daemon/src/dbus/callmanager.h                 |    1 -
 .../dbus/configurationmanager-introspec.xml   | 1341 +++++++-------
 daemon/src/dbus/configurationmanager.cpp      |   16 +-
 daemon/src/dbus/configurationmanager.h        |    4 +-
 daemon/src/history/Makefile.am                |   12 +-
 daemon/src/history/history.cpp                |  151 ++
 daemon/src/history/history.h                  |   90 +
 daemon/src/history/historyitem.cpp            |   81 +-
 daemon/src/history/historyitem.h              |   19 +-
 daemon/src/history/historymanager.cpp         |  183 --
 daemon/src/history/historymanager.h           |  134 --
 daemon/src/iax/iaxvoiplink.cpp                |   42 +-
 daemon/src/main.cpp                           |    1 +
 daemon/src/managerimpl.cpp                    |   13 +-
 daemon/src/managerimpl.h                      |   33 +-
 daemon/src/sip/sipvoiplink.cpp                |   41 +-
 daemon/test/constants.h                       |    4 +-
 daemon/test/history-sample.tpl                |   21 +-
 daemon/test/historytest.cpp                   |   82 +-
 daemon/test/historytest.h                     |   36 +-
 gnome/src/actions.c                           |   64 +-
 gnome/src/actions.h                           |    2 -
 gnome/src/callable_obj.c                      |   43 +-
 gnome/src/callable_obj.h                      |    6 +-
 gnome/src/config/accountconfigdialog.c        |    2 +-
 gnome/src/config/audioconf.c                  |  267 +--
 gnome/src/config/audioconf.h                  |   27 +-
 gnome/src/config/preferencesdialog.c          |    2 +-
 gnome/src/config/preferencesdialog.h          |   36 +
 gnome/src/contacts/calltree.c                 |   24 +-
 gnome/src/dbus/callmanager-introspec.xml      | 1594 ++++++++---------
 .../dbus/configurationmanager-introspec.xml   | 1341 +++++++-------
 gnome/src/dbus/dbus.c                         |   34 +-
 gnome/src/dbus/dbus.h                         |    7 +-
 gnome/src/imwindow.c                          |    2 +-
 gnome/src/sflphone_const.h                    |    2 +-
 gnome/src/uimanager.c                         |   18 +-
 gnome/src/widget/imwidget.c                   |    2 +-
 kde/src/dbus/callmanager-introspec.xml        | 1594 ++++++++---------
 .../dbus/configurationmanager-introspec.xml   | 1341 +++++++-------
 53 files changed, 5078 insertions(+), 5557 deletions(-)
 create mode 100644 daemon/src/history/history.cpp
 create mode 100644 daemon/src/history/history.h
 delete mode 100644 daemon/src/history/historymanager.cpp
 delete mode 100644 daemon/src/history/historymanager.h

diff --git a/daemon/src/audio/audiolayer.h b/daemon/src/audio/audiolayer.h
index fbe02af0bd..87d76caf25 100644
--- a/daemon/src/audio/audiolayer.h
+++ b/daemon/src/audio/audiolayer.h
@@ -64,10 +64,6 @@ class AudioLayer {
         AudioLayer();
         virtual ~AudioLayer();
 
-        /**
-         * Function that returns the list of available audio device provided the stream
-         * type: AUDIO_STREAM_CAPTURE, AUDIO_STREAM_PLAYBACK.
-         */
         virtual std::vector<std::string> getAudioDeviceList(AudioStreamDirection dir) const = 0;
 
         /**
diff --git a/daemon/src/audio/audiorecord.cpp b/daemon/src/audio/audiorecord.cpp
index 24226265a5..4b85829cc0 100644
--- a/daemon/src/audio/audiorecord.cpp
+++ b/daemon/src/audio/audiorecord.cpp
@@ -29,7 +29,7 @@
  */
 
 #include "audiorecord.h"
-#include <cstring> // for strstr
+#include <unistd.h>
 #include <sstream> // for stringstream
 
 // structure for the wave header
@@ -50,7 +50,6 @@ struct wavhdr {
     SINT32 data_length;     // in bytes
 };
 
-
 AudioRecord::AudioRecord() : fileHandle_(NULL)
     , fileType_(FILE_INVALID)
     , channels_(1)
@@ -63,6 +62,7 @@ AudioRecord::AudioRecord() : fileHandle_(NULL)
     , mixBuffer_(new SFLDataFormat[nbSamplesMax_])
     , micBuffer_(new SFLDataFormat[nbSamplesMax_])
     , spkBuffer_(new SFLDataFormat[nbSamplesMax_])
+    , filename_()
     , savePath_()
 {
     createFilename();
@@ -93,21 +93,19 @@ void AudioRecord::setRecordingOption(FILE_TYPE type, int sndSmplRate, const std:
     savePath_ = path + "/";
 }
 
-
-
-void AudioRecord::initFileName(std::string peerNumber)
+void AudioRecord::initFilename(const std::string &peerNumber)
 {
-    std::string fName = fileName_;
+    std::string fName(filename_);
     fName.append("-" + peerNumber);
 
     if (fileType_ == FILE_RAW) {
-        if (strstr(fileName_, ".raw") == NULL) {
-            DEBUG("AudioRecord: concatenate .raw file extension: name : %s", fileName_);
+        if (filename_.find(".raw") == std::string::npos) {
+            DEBUG("AudioRecord: concatenate .raw file extension: name : %s", filename_.c_str());
             fName.append(".raw");
         }
     } else if (fileType_ == FILE_WAV) {
-        if (strstr(fileName_, ".wav") == NULL) {
-            DEBUG("AudioRecord: concatenate .wav file extension: name : %s", fileName_);
+        if (filename_.find(".wav") == std::string::npos) {
+            DEBUG("AudioRecord: concatenate .wav file extension: name : %s", filename_.c_str());
             fName.append(".wav");
         }
     }
@@ -115,7 +113,7 @@ void AudioRecord::initFileName(std::string peerNumber)
     savePath_.append(fName);
 }
 
-std::string AudioRecord::getFileName()
+std::string AudioRecord::getFilename() const
 {
     return savePath_;
 }
@@ -145,7 +143,6 @@ bool AudioRecord::openFile()
     return result;
 }
 
-
 void AudioRecord::closeFile()
 {
     if (fileHandle_ == 0) return;
@@ -153,20 +150,17 @@ void AudioRecord::closeFile()
     if (fileType_ == FILE_RAW)
         fclose(fileHandle_);
     else if (fileType_ == FILE_WAV)
-        this->closeWavFile();
+        closeWavFile();
 }
 
-
-bool AudioRecord::isOpenFile()
+bool AudioRecord::isOpenFile() const
 {
     return fileHandle_ != 0;
 }
 
-
-bool AudioRecord::fileExists()
+bool AudioRecord::fileExists() const
 {
-    DEBUG("AudioRecord: Trying to open %s ", fileName_);
-    return fopen(fileName_,"rb") != 0;
+    return access(savePath_.c_str(), F_OK) != -1;
 }
 
 bool AudioRecord::isRecording() const
@@ -174,7 +168,6 @@ bool AudioRecord::isRecording() const
     return recordingEnabled_;
 }
 
-
 bool AudioRecord::setRecording()
 {
     if (isOpenFile()) {
@@ -201,7 +194,6 @@ void AudioRecord::stopRecording()
     recordingEnabled_ = false;
 }
 
-
 void AudioRecord::createFilename()
 {
     time_t rawtime;
@@ -214,7 +206,7 @@ void AudioRecord::createFilename()
     std::stringstream out;
 
     // DATE
-    out << timeinfo->tm_year+1900;
+    out << timeinfo->tm_year + 1900;
 
     if (timeinfo->tm_mon < 9) // january is 01, not 1
         out << 0;
@@ -247,11 +239,9 @@ void AudioRecord::createFilename()
         out << 0;
 
     out << timeinfo->tm_sec;
+    filename_ = out.str();
 
-    // fileName_ = out.str();
-    strncpy(fileName_, out.str().c_str(), 8192);
-
-    DEBUG("AudioRecord: create filename for this call %s ", fileName_);
+    DEBUG("AudioRecord: create filename for this call %s ", filename_.c_str());
 }
 
 bool AudioRecord::setRawFile()
@@ -268,7 +258,6 @@ bool AudioRecord::setRawFile()
     return true;
 }
 
-
 bool AudioRecord::setWavFile()
 {
     DEBUG("AudioRecord: Create new wave file %s, sampling rate: %d", savePath_.c_str(), sndSmplRate_);
@@ -311,10 +300,9 @@ bool AudioRecord::setWavFile()
     return true;
 }
 
-
 bool AudioRecord::openExistingRawFile()
 {
-    fileHandle_ = fopen(fileName_, "ab+");
+    fileHandle_ = fopen(filename_.c_str(), "ab+");
 
     if (!fileHandle_) {
         WARN("AudioRecord: could not create RAW file!");
@@ -324,12 +312,11 @@ bool AudioRecord::openExistingRawFile()
     return true;
 }
 
-
 bool AudioRecord::openExistingWavFile()
 {
-    DEBUG("%s(%s)\n", __PRETTY_FUNCTION__, fileName_);
+    DEBUG("%s(%s)\n", __PRETTY_FUNCTION__, filename_.c_str());
 
-    fileHandle_ = fopen(fileName_, "rb+");
+    fileHandle_ = fopen(filename_.c_str(), "rb+");
 
     if (!fileHandle_) {
         WARN("AudioRecord: Error: could not open WAV file!");
@@ -349,7 +336,7 @@ bool AudioRecord::openExistingWavFile()
     if (fclose(fileHandle_) != 0)
         WARN("AudioRecord: Error: Can't close file r+ ");
 
-    fileHandle_ = fopen(fileName_, "ab+");
+    fileHandle_ = fopen(filename_.c_str(), "ab+");
 
     if (!fileHandle_) {
         WARN("AudioRecord: Error: Could not createopen WAV file ab+!");
@@ -410,7 +397,6 @@ void AudioRecord::recSpkrData(SFLDataFormat* buffer, int nSamples)
     }
 }
 
-
 void AudioRecord::recMicData(SFLDataFormat* buffer, int nSamples)
 {
     if (recordingEnabled_) {
@@ -422,7 +408,6 @@ void AudioRecord::recMicData(SFLDataFormat* buffer, int nSamples)
     }
 }
 
-
 void AudioRecord::recData(SFLDataFormat* buffer, int nSamples)
 {
     if (recordingEnabled_) {
@@ -440,7 +425,6 @@ void AudioRecord::recData(SFLDataFormat* buffer, int nSamples)
     }
 }
 
-
 void AudioRecord::recData(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2,
                           int nSamples_1, int /*nSamples_2*/)
 {
diff --git a/daemon/src/audio/audiorecord.h b/daemon/src/audio/audiorecord.h
index d865a5509e..03a9f6a7d3 100644
--- a/daemon/src/audio/audiorecord.h
+++ b/daemon/src/audio/audiorecord.h
@@ -57,16 +57,16 @@ class AudioRecord {
         /**
          * Init recording file path
          */
-        void initFileName(std::string peerNumber);
+        void initFilename(const std::string &peerNumber);
 
         /**
         	 * Return the filepath of the recording
         	 */
-        std::string getFileName();
+        std::string getFilename() const;
 
         /**
          * Check if no otehr file is opened, then create a new one
-         * @param fileName A string containing teh file (with/without extension)
+         * @param filename A string containing teh file (with/without extension)
          * @param type     The sound file format (FILE_RAW, FILE_WAVE)
          * @param format   Internal sound format (INT16 / INT32)
          * @return bool    True if file was opened
@@ -81,12 +81,12 @@ class AudioRecord {
         /**
          * Check if a file is already opened
          */
-        bool isOpenFile();
+        bool isOpenFile() const;
 
         /**
          * Check if a file already exists
          */
-        bool fileExists();
+        bool fileExists() const;
 
         /**
          * Check recording state
@@ -231,7 +231,7 @@ class AudioRecord {
         /**
          * Filename for this recording
          */
-        char fileName_[8192];
+        std::string filename_;
 
         /**
          * Path for this recording
diff --git a/daemon/src/audio/pulseaudio/pulselayer.cpp b/daemon/src/audio/pulseaudio/pulselayer.cpp
index 52228db984..74f2dbf47e 100644
--- a/daemon/src/audio/pulseaudio/pulselayer.cpp
+++ b/daemon/src/audio/pulseaudio/pulselayer.cpp
@@ -189,16 +189,12 @@ bool PulseLayer::inSourceList(const std::string &deviceName) const
 
 std::vector<std::string> PulseLayer::getAudioDeviceList(AudioStreamDirection dir) const 
 {
-    std::vector<std::string> emptyVector;
-
     if(AUDIO_STREAM_CAPTURE == dir) {
         return sinkList_;
     }
-    else if(AUDIO_STREAM_PLAYBACK == dir) {
+    if(AUDIO_STREAM_PLAYBACK) {
         return sourceList_;
     }
-
-    return emptyVector;
 }
 
 void PulseLayer::createStreams(pa_context* c)
diff --git a/daemon/src/audio/recordable.cpp b/daemon/src/audio/recordable.cpp
index b55b4ed7cb..71f5d00d6b 100644
--- a/daemon/src/audio/recordable.cpp
+++ b/daemon/src/audio/recordable.cpp
@@ -30,33 +30,33 @@
 #include "recordable.h"
 #include "manager.h"
 
-Recordable::Recordable() : recAudio(), recorder(&recAudio, Manager::instance().getMainBuffer())
+Recordable::Recordable() : recAudio_(), recorder_(&recAudio_, Manager::instance().getMainBuffer())
 {
-    recAudio.setRecordingOption(AudioRecord::FILE_WAV, 8000, Manager::instance().audioPreference.getRecordpath());
+    recAudio_.setRecordingOption(AudioRecord::FILE_WAV, 8000, Manager::instance().audioPreference.getRecordpath());
 }
 
 Recordable::~Recordable()
 {
-    if (recAudio.isOpenFile())
-        recAudio.closeFile();
+    if (recAudio_.isOpenFile())
+        recAudio_.closeFile();
 }
 
-void Recordable::initRecFileName(std::string filename)
+void Recordable::initRecFilename(const std::string &filename)
 {
-    recAudio.initFileName(filename);
+    recAudio_.initFilename(filename);
 }
 
-std::string Recordable::getFileName()
+std::string Recordable::getFilename() const
 {
-    return recAudio.getFileName();
+    return recAudio_.getFilename();
 }
 
 void Recordable::setRecordingSmplRate(int smplRate)
 {
-    recAudio.setSndSamplingRate(smplRate);
+    recAudio_.setSndSamplingRate(smplRate);
 }
 
 int Recordable::getRecordingSmplRate() const
 {
-    return recAudio.getSndSamplingRate();
+    return recAudio_.getSndSamplingRate();
 }
diff --git a/daemon/src/audio/recordable.h b/daemon/src/audio/recordable.h
index 13effb2ef5..7df25c5365 100644
--- a/daemon/src/audio/recordable.h
+++ b/daemon/src/audio/recordable.h
@@ -43,8 +43,8 @@ class Recordable {
         /**
          * Return recording state (true/false)
          */
-        bool isRecording() {
-            return recAudio.isRecording();
+        bool isRecording() const {
+            return recAudio_.isRecording();
         }
 
         /**
@@ -57,18 +57,18 @@ class Recordable {
          * Stop recording
          */
         void stopRecording() {
-            recAudio.stopRecording();
+            recAudio_.stopRecording();
         }
 
         /**
          * Init the recording file name according to path specified in configuration
          */
-        void initRecFileName(std::string filename);
+        void initRecFilename(const std::string &filename);
 
         /**
          * Return the file path for this recording
          */
-        std::string getFileName();
+        virtual std::string getFilename() const;
 
         /**
          * Set recording sampling rate.
@@ -82,16 +82,13 @@ class Recordable {
 
         /**
          * Virtual method to be implemented in order to the main
-         * buffer to retreive the recorded id.
+         * buffer to retrieve the recorded id.
          */
         virtual std::string getRecFileId() const = 0;
 
-        /**
-         * An instance of audio recorder
-         */
-        AudioRecord recAudio;
-
-        AudioRecorder recorder;
+    protected:
+        AudioRecord recAudio_;
+        AudioRecorder recorder_;
 };
 
 #endif
diff --git a/daemon/src/call.cpp b/daemon/src/call.cpp
index 258d2ca22e..f2f4a6172e 100644
--- a/daemon/src/call.cpp
+++ b/daemon/src/call.cpp
@@ -31,6 +31,7 @@
 #include "call.h"
 #include "manager.h"
 #include "audio/mainbuffer.h"
+#include "history/historyitem.h"
 
 const char * const Call::DEFAULT_ID = "audiolayer_id";
 
@@ -41,13 +42,16 @@ Call::Call(const std::string& id, Call::CallType type)
     , id_(id)
     , confID_()
     , type_(type)
-    , connectionState_(Call::Disconnected)
-    , callState_(Call::Inactive)
-    , callConfig_(Call::Classic)
-    , peerName_()
+    , connectionState_(Call::DISCONNECTED)
+    , callState_(Call::INACTIVE)
+    , isIPToIP_(false)
     , peerNumber_()
     , displayName_()
-{}
+    , timestamp_start_(0)
+    , timestamp_stop_(0)
+{
+    time(&timestamp_start_);
+}
 
 Call::~Call()
 {}
@@ -66,7 +70,6 @@ Call::getConnectionState()
     return connectionState_;
 }
 
-
 void
 Call::setState(CallState state)
 {
@@ -85,34 +88,34 @@ std::string
 Call::getStateStr()
 {
     switch (getState()) {
-        case Active:
+        case ACTIVE:
             switch (getConnectionState()) {
-                case Ringing:
+                case RINGING:
                     return isIncoming() ? "INCOMING" : "RINGING";
-                case Connected:
+                case CONNECTED:
                 default:
                     return isRecording() ? "RECORD" : "CURRENT";
             }
 
-        case Hold:
+        case HOLD:
             return "HOLD";
-        case Busy:
+        case BUSY:
             return "BUSY";
-        case Inactive:
+        case INACTIVE:
 
             switch (getConnectionState()) {
-                case Ringing:
+                case RINGING:
                     return isIncoming() ? "INCOMING" : "RINGING";
-                case Connected:
+                case CONNECTED:
                     return "CURRENT";
                 default:
                     return "INACTIVE";
             }
 
-        case Conferencing:
+        case CONFERENCING:
             return "CONFERENCING";
-        case Refused:
-        case Error:
+        case REFUSED:
+        case ERROR:
         default:
             return "FAILURE";
     }
@@ -136,17 +139,17 @@ Call::getLocalAudioPort()
 bool
 Call::setRecording()
 {
-    bool recordStatus = Recordable::recAudio.isRecording();
+    bool recordStatus = Recordable::recAudio_.isRecording();
 
-    Recordable::recAudio.setRecording();
+    Recordable::recAudio_.setRecording();
     MainBuffer *mbuffer = Manager::instance().getMainBuffer();
-    std::string process_id = Recordable::recorder.getRecorderID();
+    std::string process_id = Recordable::recorder_.getRecorderID();
 
     if (!recordStatus) {
         mbuffer->bindHalfDuplexOut(process_id, id_);
         mbuffer->bindHalfDuplexOut(process_id);
 
-        Recordable::recorder.start();
+        Recordable::recorder_.start();
     } else {
         mbuffer->unBindHalfDuplexOut(process_id, id_);
         mbuffer->unBindHalfDuplexOut(process_id);
@@ -156,3 +159,44 @@ Call::setRecording()
 
     return recordStatus;
 }
+
+void Call::time_stop()
+{
+    time(&timestamp_stop_);
+}
+
+std::string Call::getTypeStr() const
+{
+    switch (type_) {
+        case INCOMING:
+            return "incoming";
+        case OUTGOING:
+            return "outgoing";
+        case MISSED:
+            return "missed";
+        default:
+            return "";
+    }
+}
+
+std::map<std::string, std::string> Call::createHistoryEntry() const
+{
+    std::map<std::string, std::string> result;
+    result[HistoryItem::ACCOUNT_ID_KEY] = Manager::instance().getAccountFromCall(id_);
+    result[HistoryItem::CONFID_KEY] = confID_;
+    result[HistoryItem::CALLID_KEY] = id_;
+    result[HistoryItem::DISPLAY_NAME_KEY] = displayName_;
+    result[HistoryItem::PEER_NUMBER_KEY] = peerNumber_;
+    result[HistoryItem::RECORDING_PATH_KEY] = recAudio_.fileExists() ? getFilename() : "";
+    std::stringstream time_str;
+    time_str << timestamp_start_;
+    result[HistoryItem::TIMESTAMP_START_KEY] = time_str.str();
+    time_str.str("");
+    time_str << timestamp_stop_;
+    result[HistoryItem::TIMESTAMP_STOP_KEY] = time_str.str();
+    if (connectionState_ == RINGING)
+        result[HistoryItem::STATE_KEY] = HistoryItem::MISSED_STRING;
+    else
+        result[HistoryItem::STATE_KEY] = getTypeStr();
+    return result;
+}
diff --git a/daemon/src/call.h b/daemon/src/call.h
index fcb5bba734..784acd9e7d 100644
--- a/daemon/src/call.h
+++ b/daemon/src/call.h
@@ -47,15 +47,10 @@ class Call : public Recordable {
         static const char * const DEFAULT_ID;
 
         /**
-         * This determines if the call is a direct IP-to-IP call or a classic call, made with an existing account
+         * This determines if the call originated from the local user (OUTGOING)
+         * or from some remote peer (INCOMING, MISSED).
          */
-        enum CallConfiguration {Classic, IPtoIP};
-
-        /**
-         * This determines if the call originated from the local user (Outgoing)
-         * or from some remote peer (Incoming).
-         */
-        enum CallType {Incoming, Outgoing};
+        enum CallType {INCOMING, OUTGOING, MISSED};
 
         /**
          * Tell where we're at with the call. The call gets Connected when we know
@@ -65,12 +60,12 @@ class Call : public Recordable {
          * Audio should be transmitted when ConnectionState = Connected AND
          * CallState = Active.
          */
-        enum ConnectionState {Disconnected, Trying, Progressing, Ringing, Connected};
+        enum ConnectionState {DISCONNECTED, TRYING, PROGRESSING, RINGING, CONNECTED};
 
         /**
          * The Call State.
          */
-        enum CallState {Inactive, Active, Hold, Busy, Conferencing, Refused, Error};
+        enum CallState {INACTIVE, ACTIVE, HOLD, BUSY, CONFERENCING, REFUSED, ERROR};
 
         /**
          * Constructor of a call
@@ -122,24 +117,6 @@ class Call : public Recordable {
             return peerNumber_;
         }
 
-        /**
-         * Set the peer name (caller in ingoing)
-         * not protected by mutex (when created)
-         * @param name The peer name
-         */
-        void setPeerName(const std::string& name) {
-            peerName_ = name;
-        }
-
-        /**
-         * Get the peer name (caller in ingoing)
-         * not protected by mutex (when created)
-         * @return std::string The peer name
-         */
-        std::string getPeerName() const {
-            return peerName_;
-        }
-
         /**
              * Set the display name (caller in ingoing)
              * not protected by mutex (when created)
@@ -163,8 +140,8 @@ class Call : public Recordable {
          * @return true if yes
          *	      false otherwise
          */
-        bool isIncoming() {
-            return type_ == Incoming;
+        bool isIncoming() const {
+            return type_ == INCOMING;
         }
 
         /**
@@ -193,12 +170,8 @@ class Call : public Recordable {
 
         std::string getStateStr();
 
-        void setCallConfiguration(Call::CallConfiguration callConfig) {
-            callConfig_ = callConfig;
-        }
-
-        Call::CallConfiguration getCallConfiguration() const {
-            return callConfig_;
+        void setIPToIP(bool IPToIP) {
+            isIPToIP_ = IPToIP;
         }
 
         /**
@@ -230,16 +203,15 @@ class Call : public Recordable {
         unsigned int getLocalAudioPort();
 
         std::string getRecFileId() const {
-            return getPeerName();
-        }
-
-        std::string getFileName() const {
-            return peerNumber_;
+            return getDisplayName();
         }
 
+        void time_stop();
+        std::map<std::string, std::string> createHistoryEntry() const;
         virtual bool setRecording();
 
     private:
+        std::string getTypeStr() const;
         /** Protect every attribute that can be changed by two threads */
         ost::Mutex callMutex_;
 
@@ -267,16 +239,16 @@ class Call : public Recordable {
         CallState callState_;
 
         /** Direct IP-to-IP or classic call */
-        CallConfiguration callConfig_;
-
-        /** Name of the peer */
-        std::string peerName_;
+        bool isIPToIP_;
 
         /** Number of the peer */
         std::string peerNumber_;
 
         /** Display Name */
         std::string displayName_;
+
+        time_t timestamp_start_;
+        time_t timestamp_stop_;
 };
 
 #endif
diff --git a/daemon/src/conference.cpp b/daemon/src/conference.cpp
index fc37157b58..d40da64e58 100644
--- a/daemon/src/conference.cpp
+++ b/daemon/src/conference.cpp
@@ -41,7 +41,7 @@ Conference::Conference()
     , confState_(ACTIVE_ATTACHED)
     , participants_()
 {
-    Recordable::initRecFileName(id_);
+    Recordable::initRecFilename(id_);
 }
 
 int Conference::getState() const
@@ -101,12 +101,12 @@ ParticipantSet Conference::getParticipantList() const
 
 bool Conference::setRecording()
 {
-    bool recordStatus = Recordable::recAudio.isRecording();
+    bool recordStatus = Recordable::recAudio_.isRecording();
 
-    Recordable::recAudio.setRecording();
+    Recordable::recAudio_.setRecording();
     MainBuffer *mbuffer = Manager::instance().getMainBuffer();
 
-    std::string process_id(Recordable::recorder.getRecorderID());
+    std::string process_id(Recordable::recorder_.getRecorderID());
 
     // start recording
     if (!recordStatus) {
@@ -115,7 +115,7 @@ bool Conference::setRecording()
 
         mbuffer->bindHalfDuplexOut(process_id);
 
-        Recordable::recorder.start();
+        Recordable::recorder_.start();
     } else {
         for (ParticipantSet::const_iterator iter = participants_.begin(); iter != participants_.end(); ++iter)
             mbuffer->unBindHalfDuplexOut(process_id, *iter);
diff --git a/daemon/src/config/config.cpp b/daemon/src/config/config.cpp
index ede2679075..32d56f9481 100644
--- a/daemon/src/config/config.cpp
+++ b/daemon/src/config/config.cpp
@@ -42,9 +42,6 @@
 
 namespace Conf {
 
-ConfigTree::~ConfigTree()
-{}
-
 void ConfigTree::addDefaultValue(const std::pair<std::string, std::string>& token, std::string section)
 {
     defaultValueMap_.insert(token);
@@ -90,11 +87,11 @@ ConfigTree::removeSection(const std::string& section)
 
 /** Retrieve the sections as an array */
 std::list<std::string>
-ConfigTree::getSections()
+ConfigTree::getSections() const
 {
     std::list<std::string> sections;
 
-    for (SectionMap::iterator iter = sections_.begin(); iter != sections_.end(); ++iter)
+    for (SectionMap::const_iterator iter = sections_.begin(); iter != sections_.end(); ++iter)
         sections.push_back(iter->first);
 
     return sections;
@@ -194,8 +191,7 @@ ConfigTree::getConfigTreeItem(const std::string& section, const std::string& ite
  * @todo Élimier les 45,000 classes qui servent à rien pour Conf.
  * The true/false logic is useless here.
  */
-bool
-ConfigTree::setConfigTreeItem(const std::string& section,
+void ConfigTree::setConfigTreeItem(const std::string& section,
                               const std::string& itemName,
                               const std::string& value)
 {
@@ -214,17 +210,17 @@ ConfigTree::setConfigTreeItem(const std::string& section,
         // something that would fit.
         std::string defaultValue = getDefaultValue(itemName);
         addConfigTreeItem(section, ConfigTreeItem(itemName, value, defaultValue));
-        return true;
+        return;
     }
 
     // Use default value if the value is empty.
     if (value.empty()) {
         iterItem->second.setValue(getDefaultValue(itemName));
-        return true;
+        return;
     }
 
     iterItem->second.setValue(value);
-    return true;
+    return;
 }
 
 // Save config to a file (ini format)
@@ -265,16 +261,15 @@ ConfigTree::saveConfigTree(const std::string& fileName) const
 }
 
 // Create the tree from an existing ini file
-// 0 = error
-// 1 = OK
-// 2 = unable to open
-int
+// false = error
+// true = OK
+bool
 ConfigTree::populateFromFile(const std::string& fileName)
 {
     DEBUG("ConfigTree: Populate from file %s", fileName.c_str());
 
     if (fileName.empty())
-        return 0;
+        return false;
 
     std::fstream file;
 
@@ -284,11 +279,11 @@ ConfigTree::populateFromFile(const std::string& fileName)
         file.open(fileName.data(), std::fstream::out);
 
         if (!file.is_open())
-            return 0;
+            return false;
 
         file.close();
 
-        return 2;
+        return false;
     }
 
     // get length of file:
@@ -300,7 +295,7 @@ ConfigTree::populateFromFile(const std::string& fileName)
 
     if (length == 0) {
         file.close();
-        return 2; // should load config
+        return false; // should load config
     }
 
     std::string line;
@@ -336,7 +331,7 @@ ConfigTree::populateFromFile(const std::string& fileName)
     if (chmod(fileName.c_str(), S_IRUSR | S_IWUSR))
         DEBUG("Failed to set permission on configuration file because: %m");
 
-    return 1;
+    return true;
 }
 
 std::list<std::string>
diff --git a/daemon/src/config/config.h b/daemon/src/config/config.h
index aff39f99a7..6c1643aa19 100644
--- a/daemon/src/config/config.h
+++ b/daemon/src/config/config.h
@@ -80,7 +80,6 @@ class ConfigTreeIterator {
 class ConfigTree {
     public:
         ConfigTree() : sections_(), defaultValueMap_() {}
-        ~ConfigTree();
         /**
          * Add a default value for a given key.
          * It looks in a map of default values when
@@ -105,7 +104,7 @@ class ConfigTree {
          *
          * @return array Strings of the sections
          */
-        std::list<std::string> getSections();
+        std::list<std::string> getSections() const;
 
         void addConfigTreeItem(const std::string& section, const ConfigTreeItem item);
         /**
@@ -115,7 +114,7 @@ class ConfigTree {
          * @param itemName The itemName= in the .ini file
          * @param value The value to assign to that itemName
          */
-        bool setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value);
+        void setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value);
 
         /**
          * Get a value.
@@ -141,7 +140,7 @@ class ConfigTree {
         /**
          * Load data (and fill ConfigTree) from disk
          */
-        int  populateFromFile(const std::string& fileName);
+        bool populateFromFile(const std::string& fileName);
 
         bool getConfigTreeItemToken(const std::string& section, const std::string& itemName, std::list<std::string>& arg) const;
 
diff --git a/daemon/src/dbus/callmanager-introspec.xml b/daemon/src/dbus/callmanager-introspec.xml
index 46cec40068..5c38193ffd 100644
--- a/daemon/src/dbus/callmanager-introspec.xml
+++ b/daemon/src/dbus/callmanager-introspec.xml
@@ -1,825 +1,781 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.CallManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			<p>The CallManager interface is used to manage
-			any call and conference related actions.</p>
-			<p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p>
-		</tp:docstring>
-		<method name="placeCall" tp:name-for-bindings="placeCall">
-			<tp:docstring>
-			  <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-			  <tp:docstring>
-			    The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
-			<tp:added version="0.9.8"/>
-			<tp:docstring>
-			  Place a call with the fist registered account, regarding to the account list order.
-			  <tp:rationale>
-			    Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)			
-			  </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="refuse" tp:name-for-bindings="refuse">
-			<tp:docstring>
-			  Refuse an incoming call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-
-		</method>
-
-		<method name="accept" tp:name-for-bindings="accept">
-			<tp:docstring>
-			  Answer an incoming call. Automatically put the current call on state HOLD.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUp" tp:name-for-bindings="hangUp">
-			<tp:docstring>
-			  Hangup a call in state "CURRENT" or "HOLD".
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUpConference" tp:name-for-bindings="hangUpConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hangup a conference, and every call participating to the conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The unique conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hold" tp:name-for-bindings="hold">
-			<tp:docstring>
-			  Place a call on hold.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unhold" tp:name-for-bindings="unhold">
-			<tp:docstring>
-			  Hold off a call, and place this call on state CURRENT.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="transfer" tp:name-for-bindings="transfer">
-			<tp:docstring>
-			  Transfer a call to given phone number.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    The phone number to transfer the call to.
-			  </tp:docstring>
-			</arg>
-		</method>
-		
-		<method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
-			<tp:docstring>
-			  Perform an attended transfer on two calls
-			</tp:docstring>
-			<arg type="s" name="transferID" direction="in">
-			  <tp:docstring>
-			    The callID of the call to be transfered.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="targetID" direction="in">
-			  <tp:docstring>
-			    The callID of the target call.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="playDTMF" tp:name-for-bindings="playDTMF">
-			<tp:docstring>
-			  Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server.
-			</tp:docstring>
-			<arg type="s" name="key" direction="in">
-			  <tp:docstring>
-			    Unicode charter for pressed key
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="startTone" tp:name-for-bindings="startTone">
-			<tp:docstring>
-			  Start audio stream and play tone..
-			</tp:docstring>
-			<arg type="i" name="start" direction="in"/>
-			<arg type="i" name="type" direction="in"/>
-		</method>
-
-		<method name="setVolume" tp:name-for-bindings="setVolume">
-			<tp:docstring>
-			  <p>Sets the volume using a linear scale [0,100].</p>
-			  <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="in">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getVolume" tp:name-for-bindings="getVolume">
-			<tp:docstring>
-			  <p>Return the volume value of the given device on a linear scale [0,100].</p>
-			  <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="out">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinParticipant" tp:name-for-bindings="joinParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join two participants together to create a 3-way conference including the current client.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="sel_callID" direction="in"/>
-			<arg type="s" name="drag_callID" direction="in"/>
-		</method>
+    <interface name="org.sflphone.SFLphone.CallManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            <p>The CallManager interface is used to manage call and conference related actions.</p>
+            <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID.
+            SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p>
+        </tp:docstring>
+        <method name="placeCall" tp:name-for-bindings="placeCall">
+            <tp:docstring>
+              <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+              <tp:docstring>
+                The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
+            <tp:added version="0.9.8"/>
+            <tp:docstring>
+              Place a call with the first registered account in the account list.
+              <tp:rationale>
+                Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)
+              </tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="refuse" tp:name-for-bindings="refuse">
+            <tp:docstring>
+              Refuse an incoming call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+
+        </method>
+
+        <method name="accept" tp:name-for-bindings="accept">
+            <tp:docstring>
+              Answer an incoming call. Automatically puts the current call on HOLD.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUp" tp:name-for-bindings="hangUp">
+            <tp:docstring>
+              Hangup a call in state "CURRENT" or "HOLD".
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUpConference" tp:name-for-bindings="hangUpConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hangup a conference, and every call participating to the conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The unique conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hold" tp:name-for-bindings="hold">
+            <tp:docstring>
+              Place a call on hold.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unhold" tp:name-for-bindings="unhold">
+            <tp:docstring>
+              Take a call off hold, and place this call in state CURRENT.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="transfer" tp:name-for-bindings="transfer">
+            <tp:docstring>
+              Transfer a call to the given phone number.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                The phone number to which the call will be transferred.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
+            <tp:docstring>
+              Perform an attended transfer on two calls.
+            </tp:docstring>
+            <arg type="s" name="transferID" direction="in">
+              <tp:docstring>
+                The callID of the call to be transfered.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="targetID" direction="in">
+              <tp:docstring>
+                The callID of the target call.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="playDTMF" tp:name-for-bindings="playDTMF">
+            <tp:docstring>
+              Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server.
+            </tp:docstring>
+            <arg type="s" name="key" direction="in">
+              <tp:docstring>
+                Unicode character for pressed key.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startTone" tp:name-for-bindings="startTone">
+            <tp:docstring>
+              Start audio stream and play tone.
+            </tp:docstring>
+            <arg type="i" name="start" direction="in"/>
+            <arg type="i" name="type" direction="in"/>
+        </method>
+
+        <method name="setVolume" tp:name-for-bindings="setVolume">
+            <tp:docstring>
+              <p>Sets the volume using a linear scale [0,100].</p>
+              <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="in">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getVolume" tp:name-for-bindings="getVolume">
+            <tp:docstring>
+              <p>Return the volume value of the given device on a linear scale [0,100].</p>
+              <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="out">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinParticipant" tp:name-for-bindings="joinParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join two participants together to create a 3-way conference including the current client.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="sel_callID" direction="in"/>
+            <arg type="s" name="drag_callID" direction="in"/>
+        </method>
 
                 <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-				<p>Create a conference from a list of participant</p>
-			<tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
-			</tp:docstring>
-			<arg type="as" name="participants" direction="in"/>
-		</method>
-
-		<method name="addParticipant" tp:name-for-bindings="addParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join a new particiant to an existing conference.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to add to the conference
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p>
-			  <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p>
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="detachParticipant" tp:name-for-bindings="detachParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinConference" tp:name-for-bindings="joinConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-				Join two conferences together.
-			</tp:docstring>
-			<arg type="s" name="sel_confID" direction="in"/>
-			<arg type="s" name="drag_confID" direction="in"/>
-		</method>
-
-		<method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a hashtable containing conference details.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The conference ID
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out">
-			  <tp:docstring>
-			    A map containing the ID of the conferences
-			    and their states:
-			    <ul>
-			      <li>ACTIVE_ATTACHED</li>
-			      <li>ACTIVE_DETACHED</li>
-			      <li>HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getConferenceList" tp:name-for-bindings="getConferenceList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a list containing all active
-			  conferences.
-			  <tp:rationale>To update client status, one should
-			  use <tp:member-ref>getParticipantList</tp:member-ref>
-			  with provided conference IDs.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of conferences.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setRecording" tp:name-for-bindings="setRecording">
-			<tp:docstring>
-			  Start recording a call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to record.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
-			<tp:docstring>
-			  Tells whether or not a call is being recorded.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="b" name="isRecording" direction="out">
-			  <tp:docstring>
-			    Returns true is the call is being recorded. False otherwise.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
-			<tp:docstring>
-			  Once after starting recording for the first time, this signal is emited to 
-			  provide the recorded file path to client application.
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="filepath"/>
-		</signal>
-
-		<signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
-			<tp:docstring/>
-			<arg type="s" name="filepath" />
-		</signal>
-			
-
-		<method name="getCallDetails" tp:name-for-bindings="getCallDetails">
-			<tp:docstring>
-			  Get all the details about a specific call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
-			  <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			    <p>A map containing the call details: </p>
-			    <ul>
-			      <li>ACCOUNTID</li>
-			      <li>PEER_NUMBER</li>
-			      <li>PEER_NAME</li>
-			      <li>DISPLAY_NAME</li>
-			      <li>CALL_STATE</li>
-			      <li>CALL_TYPE</li>
-			    </ul>  
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCallList" tp:name-for-bindings="getCallList">
-			<tp:docstring>
-			  Get the list of active calls.
-			  <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    A list of call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="out">
-			  <tp:docstring>	
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="codecName" direction="out"/>
-		</method>
-
-		<method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
-			<tp:docstring>
-				Send a text message to the specified call
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="message" direction="in"/>
-		</method>
-
-		<signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
-			<tp:docstring>
-			  <p>Notify that a cell have been created.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when call have been created by the daemon itself.</p>
-			  <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the calle. Clients must notify teh right account when receiving this signal.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to">
-			  <tp:docstring>
-			   The sip uri this call is trying to reach
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingCall" tp:name-for-bindings="incomingCall">
-			<tp:docstring>
-			  <p>Notify an incoming call.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when we receive a call from a remote peer</p>
-			  <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the callee. Clients must notify the right account when receiving this signal.	
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="from">
-			  <tp:docstring>
-			    The caller phone number.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
-			<tp:docstring>
-				Notify clients that a new text message has been received. 
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="from" />
-			<arg type="s" name="message" />
-		</signal>
-
-		<signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
-			<tp:docstring>
-			  <p>Notify of a change in a call state.</p> 
-			  <p>The client must subscribe to this signal.</p>
-			</tp:docstring>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state" >
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>INCOMING: Initial state of incoming calls</li>
-			      <li>RINGING: Initial state of received outgoing call</li>
-			      <li>CURRENT: The normal active state of an answered call</li>
-			      <li>HUNGUP: Notify that the call has been hungup by peer</li>
-			      <li>BUSY</li>
-			      <li>FAILURE: Error when processing a call</li>
-			      <li>HOLD</li>
-			      <li>UNHOLD_CURRENT</li>
-			      <li>UNHOLD_RECORD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Notify of a change in the conferences state
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>ACTIVE_ATTACHED: SFLphone user is
-			      participating to this conference</li>
-			      <li>ACTIVE_DETACHED: This situation can
-			      occur if a call is received while
-			      SFLphone user is participating to a
-			      conference. In this case, one can leave
-			      the conference by answering the
-			      call. Other participants may continue
-			      conferencing normally.</li>
-			      <li>HOLD: Each call in this conference
-			      is on state HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="getParticipantList" tp:name-for-bindings="getParticipantList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Get the call IDs of every participant to a given conference. The client should keep and update the list of participant.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of the call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
-			</tp:docstring>
-			<arg type="s" name="confID">  
-			  <tp:docstring>
-			    A new conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="holdConference" tp:name-for-bindings="holdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold on every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unholdConference" tp:name-for-bindings="unholdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold off every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
- 	        
-                <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="filepath" direction="in"/>
-			<arg type="b" name="result" direction="out"/>
-	        </method>
-
-		<method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring/>
-			<arg type="s" name="filepath" direction="in"/>
-		</method>
-
-		<signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
-			<tp:docstring>
-			  <p>Call state changed, SFLphone received a notification
-			    from registrar concerning this call.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			<arg type="s" name="state"  />
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			<arg type="i" name="code"  />
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-		</signal>    
-
-		<signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
-			<tp:docstring>
-				<p>Account state changed, SFLphone received a notification
-				from registrar.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" >
-			  <tp:docstring>
-			    The account ID
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="code">            
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-			</arg>
-		</signal> 
-
-		<signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
-			<tp:docstring>
-			  Notify the clients of the voicemail number for a specific account, if applicable.
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="count">
-			  <tp:docstring>
-			    The number of waiting messages.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
-		        <tp:docstring>
-			  <p>Notify clients of a volume level
-			    change.</p> 
-			  <p>This signal occurs only if ALSA is
-			    enabled since Pulseaudio streams are
-			    managed externally. </p>
-			</tp:docstring>
-			<arg type="s" name="device">
-			  <tp:docstring>
-			    The device: mic or speaker	
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value">
-			  <tp:docstring>
-			    The new volume value	
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
-			<tp:docstring>
-			  <p>Transfer has been successfully
-			  processed. Client should remove transfered
-			  call from call list as it is no longer
-			  accessible in SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="transferFailed" tp:name-for-bindings="transferFailed">
-			<tp:docstring>
-			  <p>Transfer operation failed. Corespondin
-			  call is no longer accessible in
-			  SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Signal sent on SDES session success. Media transmission is encripted
-			  for this call only. It does not apply for a
-			  conference.</p> 
-			  <p>A conference can be considered to be secured if and only if each
-			  participant is secured.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"/>
-		</signal>
-
-		<signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Sinal sent to notify that SDES session
-			  failed.</p> 
-			  <p>Media transmission is not encrypted.</p>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<!-- ZRTP Methods and Signals -->
-		<signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			<arg type="s" name="cipher"  />
-		</signal>
-
-		<signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="reason"  />
-			<arg type="s" name="severity" />
-		</signal>
-
-		<signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="showSAS" tp:name-for-bindings="showSAS">
-			<tp:added version="0.9.7"/>
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="sas"  />
-			<arg type="b" name="verified"/>
-		</signal>
-
-		<method name="setSASVerified" tp:name-for-bindings="setSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="requestGoClear" tp:name-for-bindings="requestGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="accepted" direction="in"/>
-		</method>
-
-		<method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="yesNo" direction="in"/>
-		</method>
-
-	</interface>
+            <tp:added version="0.9.14"/>
+            <tp:docstring>
+                <p>Create a conference from a list of participants</p>
+            <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
+            </tp:docstring>
+            <arg type="as" name="participants" direction="in"/>
+        </method>
+
+        <method name="addParticipant" tp:name-for-bindings="addParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join a new particiant to an existing conference.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to add to the conference
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p>
+              <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p>
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="detachParticipant" tp:name-for-bindings="detachParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinConference" tp:name-for-bindings="joinConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+                Join two conferences together.
+            </tp:docstring>
+            <arg type="s" name="sel_confID" direction="in"/>
+            <arg type="s" name="drag_confID" direction="in"/>
+        </method>
+
+        <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a hashtable containing conference details.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The conference ID
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out">
+              <tp:docstring>
+                A map containing the ID of the conferences
+                and their states:
+                <ul>
+                  <li>ACTIVE_ATTACHED</li>
+                  <li>ACTIVE_DETACHED</li>
+                  <li>HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getConferenceList" tp:name-for-bindings="getConferenceList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a list containing all active
+              conferences.
+              <tp:rationale>To update client status, one should
+              use <tp:member-ref>getParticipantList</tp:member-ref>
+              with provided conference IDs.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of conferences.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setRecording" tp:name-for-bindings="setRecording">
+            <tp:docstring>
+              Start recording a call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to record.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
+            <tp:docstring>
+              Tells whether or not a call is being recorded.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="b" name="isRecording" direction="out">
+              <tp:docstring>
+                Returns true is the call is being recorded. False otherwise.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
+            <tp:docstring>
+              Once after starting recording for the first time, this signal is emited to 
+              provide the recorded file path to client application.
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="filepath"/>
+        </signal>
+
+        <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
+            <tp:docstring/>
+            <arg type="s" name="filepath" />
+        </signal>
+
+
+        <method name="getCallDetails" tp:name-for-bindings="getCallDetails">
+            <tp:docstring>
+              Get all the details about a specific call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
+              <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+                <p>A map containing the call details: </p>
+                <ul>
+                  <li>ACCOUNTID</li>
+                  <li>PEER_NUMBER</li>
+                  <li>PEER_NAME</li>
+                  <li>DISPLAY_NAME</li>
+                  <li>CALL_STATE</li>
+                  <li>CALL_TYPE</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCallList" tp:name-for-bindings="getCallList">
+            <tp:docstring>
+              Get the list of active calls.
+              <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                A list of call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="codecName" direction="out"/>
+        </method>
+
+        <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
+            <tp:docstring>
+                Send a text message to the specified call
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="message" direction="in"/>
+        </method>
+
+        <signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
+            <tp:docstring>
+              <p>Notify that a call has been created.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other actions for
+                this call. This signal is emitted when call haves been created by the daemon itself.</p>
+              <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the call. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to">
+              <tp:docstring>
+               The SIP URI this call is trying to reach.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingCall" tp:name-for-bindings="incomingCall">
+            <tp:docstring>
+              <p>Notify an incoming call.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other action for
+                this call. This signal is emitted when we receive a call from a remote peer</p>
+              <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the callee. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="from">
+              <tp:docstring>
+                The caller phone number.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
+            <tp:docstring>
+                Notify clients that a new text message has been received. 
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="from" />
+            <arg type="s" name="message" />
+        </signal>
+
+        <signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
+            <tp:docstring>
+              <p>Notify of a change in a call state.</p> 
+              <p>The client must subscribe to this signal.</p>
+            </tp:docstring>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state" >
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>INCOMING: Initial state of incoming calls</li>
+                  <li>RINGING: Initial state of received outgoing call</li>
+                  <li>CURRENT: The normal active state of an answered call</li>
+                  <li>HUNGUP: Notify that the call has been hungup by peer</li>
+                  <li>BUSY</li>
+                  <li>FAILURE: Error when processing a call</li>
+                  <li>HOLD</li>
+                  <li>UNHOLD_CURRENT</li>
+                  <li>UNHOLD_RECORD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Notify of a change in the conferences state
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>ACTIVE_ATTACHED: SFLphone user is
+                  participating to this conference</li>
+                  <li>ACTIVE_DETACHED: This situation can
+                  occur if a call is received while
+                  SFLphone user is participating to a
+                  conference. In this case, one can leave
+                  the conference by answering the
+                  call. Other participants may continue
+                  conferencing normally.</li>
+                  <li>HOLD: Each call in this conference
+                  is on state HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="getParticipantList" tp:name-for-bindings="getParticipantList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Get the call IDs of every participant to a given conference. The client should keep and update the list of participants.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of the call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                A new conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="holdConference" tp:name-for-bindings="holdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold every call which is participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unholdConference" tp:name-for-bindings="unholdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold off every call participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <arg type="s" name="filepath" direction="in"/>
+            <arg type="b" name="result" direction="out"/>
+        </method>
+
+        <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <tp:docstring/>
+            <arg type="s" name="filepath" direction="in"/>
+        </method>
+
+        <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
+            <tp:docstring>
+              <p>Call state changed, SFLphone received a notification
+                from registrar concerning this call.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"  />
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            <arg type="s" name="state"  />
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            <arg type="i" name="code"  />
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+        </signal>
+
+        <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
+            <tp:docstring>
+                <p>Account state changed, SFLphone received a notification
+                from registrar.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" >
+              <tp:docstring>
+                The account ID
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="code">
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+            </arg>
+        </signal> 
+
+        <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
+            <tp:docstring>
+              Notify the clients of the voicemail number for a specific account, if applicable.
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID.
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="count">
+              <tp:docstring>
+                The number of waiting messages.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
+                <tp:docstring>
+              <p>Notify clients of a volume level change.</p> 
+              <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p>
+            </tp:docstring>
+            <arg type="s" name="device">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value">
+              <tp:docstring>
+                The new volume value
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
+            <tp:docstring>
+              <p>Transfer has been successfully
+              processed. Client should remove transfered
+              call from call list as it is no longer
+              accessible in SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="transferFailed" tp:name-for-bindings="transferFailed">
+            <tp:docstring>
+              <p>Transfer operation failed. Corespondin
+              call is no longer accessible in
+              SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Signal sent on SDES session success. Media transmission is encripted
+              for this call only. It does not apply for a conference.</p> 
+              <p>A conference can be considered to be secured if and only if each
+              participant is secured.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"/>
+        </signal>
+
+        <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Sinal sent to notify that SDES session failed.</p> 
+              <p>Media transmission is not encrypted.</p>
+            </tp:docstring>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <!-- ZRTP Methods and Signals -->
+        <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID"  />
+            <arg type="s" name="cipher"  />
+        </signal>
+
+        <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="reason"  />
+            <arg type="s" name="severity" />
+        </signal>
+
+        <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="showSAS" tp:name-for-bindings="showSAS">
+            <tp:added version="0.9.7"/>
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="sas"  />
+            <arg type="b" name="verified"/>
+        </signal>
+
+        <method name="setSASVerified" tp:name-for-bindings="setSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="requestGoClear" tp:name-for-bindings="requestGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="accepted" direction="in"/>
+        </method>
+
+        <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="yesNo" direction="in"/>
+        </method>
+
+    </interface>
 </node>
diff --git a/daemon/src/dbus/callmanager.cpp b/daemon/src/dbus/callmanager.cpp
index 3a13295efe..809e0628ed 100644
--- a/daemon/src/dbus/callmanager.cpp
+++ b/daemon/src/dbus/callmanager.cpp
@@ -237,14 +237,11 @@ CallManager::getIsRecording(const std::string& callID)
     return Manager::instance().isRecording(callID);
 }
 
-
-std::string
-CallManager::getCurrentAudioCodecName(const std::string& callID)
+std::string CallManager::getCurrentAudioCodecName(const std::string& callID)
 {
     return Manager::instance().getCurrentCodecName(callID).c_str();
 }
 
-
 std::map<std::string, std::string>
 CallManager::getCallDetails(const std::string& callID)
 {
@@ -257,12 +254,6 @@ CallManager::getCallList()
     return Manager::instance().getCallList();
 }
 
-std::string
-CallManager::getCurrentCallID()
-{
-    return Manager::instance().getCurrentCallId();
-}
-
 void
 CallManager::playDTMF(const std::string& key)
 {
diff --git a/daemon/src/dbus/callmanager.h b/daemon/src/dbus/callmanager.h
index e0592f32b4..7758fa7235 100644
--- a/daemon/src/dbus/callmanager.h
+++ b/daemon/src/dbus/callmanager.h
@@ -86,7 +86,6 @@ class CallManager
         void attendedTransfer(const std::string& transferID, const std::string& targetID);
         std::map< std::string, std::string > getCallDetails(const std::string& callID);
         std::vector< std::string > getCallList();
-        std::string getCurrentCallID();
 
         /* Conference related methods */
         void joinParticipant(const std::string& sel_callID, const std::string& drag_callID);
diff --git a/daemon/src/dbus/configurationmanager-introspec.xml b/daemon/src/dbus/configurationmanager-introspec.xml
index 6271c12c9d..5f30f25268 100644
--- a/daemon/src/dbus/configurationmanager-introspec.xml
+++ b/daemon/src/dbus/configurationmanager-introspec.xml
@@ -1,107 +1,107 @@
 <?xml version="1.0" ?>
 <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.ConfigurationManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
-		</tp:docstring>
-
-		<method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
-			<tp:docstring>
-				Get all parameters of the specified account.
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-					The account ID
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
-				<tp:docstring>
-					The available keys / parameters are:
-					<ul>
-						<li>CONFIG_ACCOUNT_ENABLE:	True or False (Default: True)</li>
-						<li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
-						<li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
-						<li>HOSTNAME: The IP adress or hostname of the registrar</li>
-						<li>USERNAME: The username (or extension) of the account</li>
-						<li>PASSWORD: The password associated to the account</li>
-						<li>REALM</li>
-						<li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
-						<li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
-						<li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
-						<li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
-						<li>PUBLISHED_ADDRESS: The SIP published address</li>
-						<li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
-						<li>PUBLISHED_PORT: The SIP published port</li>
-						<li>DISPLAY_NAMEL: The display name</li>
-						<li>STUN_ENABLE: True or False (Default: False)</li>
-						<li>STUN_SERVER: The STUN server address</li>
-						<li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
-						<li>REGISTRATION_STATE_CODE</li>
-						<li>REGISTRATION_STATE_DESCRIPTION</li>
-						<li>SRTP_KEY_EXCHANGE</li>
-						<li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
-						<li>SRTP_RTP_FALLBACK</li>
-						<li>ZRTP_DISPLAY_SAS</li>
-						<li>ZRTP_DISPLAY_SAS_ONCE</li>
-						<li>ZRTP_HELLO_HASH</li>
-						<li>ZRTP_NOT_SUPP_WARNING</li>
-						<li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
-						<li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
-						<li>TLS_CA_LIST_FILE</li>
-						<li>TLS_CERTIFICATE_FILE</li>
-						<li>TLS_PRIVATE_KEY_FILE</li>
-						<li>TLS_METHOD</li>
-						<li>TLS_CIPHERS</li>
-						<li>TLS_SERVER_NAME</li>
-						<li>TLS_VERIFY_SERVER</li>
-						<li>TLS_VERIFY_CLIENT</li>
-						<li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
-					</ul>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
-			<tp:docstring>
-				Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
-				<tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
-				<tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
-			</tp:docstring>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setCredentials" tp:name-for-bindings="setCredentials">
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
-			<arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
+    <interface name="org.sflphone.SFLphone.ConfigurationManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
+        </tp:docstring>
+
+        <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
+            <tp:docstring>
+                Get all parameters of the specified account.
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                    The account ID
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+                <tp:docstring>
+                    The available keys / parameters are:
+                    <ul>
+                        <li>CONFIG_ACCOUNT_ENABLE:    True or False (Default: True)</li>
+                        <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
+                        <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
+                        <li>HOSTNAME: The IP adress or hostname of the registrar</li>
+                        <li>USERNAME: The username (or extension) of the account</li>
+                        <li>PASSWORD: The password associated to the account</li>
+                        <li>REALM</li>
+                        <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
+                        <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
+                        <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
+                        <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
+                        <li>PUBLISHED_ADDRESS: The SIP published address</li>
+                        <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
+                        <li>PUBLISHED_PORT: The SIP published port</li>
+                        <li>DISPLAY_NAMEL: The display name</li>
+                        <li>STUN_ENABLE: True or False (Default: False)</li>
+                        <li>STUN_SERVER: The STUN server address</li>
+                        <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
+                        <li>REGISTRATION_STATE_CODE</li>
+                        <li>REGISTRATION_STATE_DESCRIPTION</li>
+                        <li>SRTP_KEY_EXCHANGE</li>
+                        <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
+                        <li>SRTP_RTP_FALLBACK</li>
+                        <li>ZRTP_DISPLAY_SAS</li>
+                        <li>ZRTP_DISPLAY_SAS_ONCE</li>
+                        <li>ZRTP_HELLO_HASH</li>
+                        <li>ZRTP_NOT_SUPP_WARNING</li>
+                        <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
+                        <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
+                        <li>TLS_CA_LIST_FILE</li>
+                        <li>TLS_CERTIFICATE_FILE</li>
+                        <li>TLS_PRIVATE_KEY_FILE</li>
+                        <li>TLS_METHOD</li>
+                        <li>TLS_CIPHERS</li>
+                        <li>TLS_SERVER_NAME</li>
+                        <li>TLS_VERIFY_SERVER</li>
+                        <li>TLS_VERIFY_CLIENT</li>
+                        <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
+            <tp:docstring>
+                Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
+                <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
+                <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
+            </tp:docstring>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setCredentials" tp:name-for-bindings="setCredentials">
+            <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
             <tp:docstring>
             Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved.
             </tp:docstring>
             <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
+            <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
             <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
             <tp:docstring>
             Available parameters are:
@@ -134,587 +134,584 @@
             </arg>
         </method>
 
-	   <method name="getCredentials" tp:name-for-bindings="getCredentials">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="credentialInformation" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="addAccount" tp:name-for-bindings="addAccount">
-		   <tp:docstring>
-			   Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-			   <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
-			   <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
-			   <tp:docstring>
-					The new account settings
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="createdAccountId" direction="out">
-			   <tp:docstring>
-					A new account ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
-		   <tp:docstring>
-				Update the accounts order.
-				<tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
-		   </tp:docstring>
-		   <arg type="s" name="order" direction="in">
-			   <tp:docstring>
-				   An ordered list of account IDs, delimited by '/'
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="removeAccount" tp:name-for-bindings="removeAccount">
-		   <tp:docstring>
-			   Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-		   </tp:docstring>
-		   <arg type="s" name="accoundID" direction="in">
-			   <tp:docstring>
-					The account to remove, identified by its ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAccountList" tp:name-for-bindings="getAccountList">
-		   <tp:docstring>
-				Get a list of all created accounts, as stored by the core.
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-				   A list of account IDs
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="sendRegister" tp:name-for-bindings="sendRegister">
-		   <tp:docstring>
-				Send account registration (REGISTER) to the registrar.
-		   </tp:docstring>
-		   the account if expire=1, unregister if expire=0.
-
-		   @param[in] input accountID
-		   -->
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-					The account ID
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="expire" direction="in">
-			   <tp:docstring>
-					<p>To register, expire must be 1.</p>
-					<p>To un-register, expire must be 0.</p>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="enabled" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!--      ///////////////////////               -->
-
-	   <!-- Codecs-related methods -->
-
-	   <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="payload" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="list" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Audio devices methods -->
-
-	   <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-
-	   <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="name" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="index" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="plugin" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+       <method name="getCredentials" tp:name-for-bindings="getCredentials">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <arg type="aa{ss}" name="credentialInformation" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="addAccount" tp:name-for-bindings="addAccount">
+           <tp:docstring>
+               Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+               <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
+               <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
+               <tp:docstring>
+                    The new account settings
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="createdAccountId" direction="out">
+               <tp:docstring>
+                    A new account ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+           <tp:docstring>
+                Update the accounts order.
+                <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
+           </tp:docstring>
+           <arg type="s" name="order" direction="in">
+               <tp:docstring>
+                   An ordered list of account IDs, delimited by '/'
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="removeAccount" tp:name-for-bindings="removeAccount">
+           <tp:docstring>
+               Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+           </tp:docstring>
+           <arg type="s" name="accoundID" direction="in">
+               <tp:docstring>
+                    The account to remove, identified by its ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAccountList" tp:name-for-bindings="getAccountList">
+           <tp:docstring>
+                Get a list of all created accounts, as stored by the core.
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+                   A list of account IDs
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="sendRegister" tp:name-for-bindings="sendRegister">
+           <tp:docstring>
+                Send account registration (REGISTER) to the registrar.
+           </tp:docstring>
+           the account if expire=1, unregister if expire=0.
+
+           @param[in] input accountID
+           -->
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+                    The account ID
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="expire" direction="in">
+               <tp:docstring>
+                    <p>To register, expire must be 1.</p>
+                    <p>To un-register, expire must be 0.</p>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="enabled" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!--      ///////////////////////               -->
+
+       <!-- Codecs-related methods -->
+
+       <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="payload" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="list" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Audio devices methods -->
+
+       <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="audioPlugin" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+
+       <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="name" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="index" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="plugin" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="in">
-	       </arg>
-	   </method>
-
-	   <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="out">
-	       </arg>
-	   </method>
-
-
-	   <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <!--    General Settings Panel         -->
-
-	   <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="level" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook configuration -->
-	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook list -->
-	   <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Hook configuration -->
-	   <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+           </arg>
+       </method>
+
+       <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+           </arg>
+       </method>
+
+
+       <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <!--    General Settings Panel         -->
+
+       <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+       </method>
+
+       <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="level" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook configuration -->
+       <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook list -->
+       <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Hook configuration -->
+       <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getHistory" tp:name-for-bindings="getHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
            <!-- Return a List of type Dict<string, string> >...a List of Dicts -->
            <arg type="aa{ss}" name="entries" direction="out"/>
-	   </method>
-
-	   <method name="setHistory" tp:name-for-bindings="setHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="entries" direction="in">
-		   </arg>
-	   </method>
-
-	   <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-	   </signal>
-
-	   <signal name="errorAlert" tp:name-for-bindings="errorAlert">
-		   <arg type="i" name="code">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </signal>
-
-	   <!-- TLS Methods -->
-	   <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
+       </method>
+
+       <method name="clearHistory" tp:name-for-bindings="clearHistory">
+       </method>
+
+       <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+       </signal>
+
+       <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+           <arg type="i" name="code">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </signal>
+
+       <!-- TLS Methods -->
+       <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="interface" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="address" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="interface" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="address" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
    </interface>
-	   </node>
+</node>
diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp
index aec8f5e881..09be098ff3 100644
--- a/daemon/src/dbus/configurationmanager.cpp
+++ b/daemon/src/dbus/configurationmanager.cpp
@@ -59,8 +59,8 @@ std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails()
         return sipaccount->getIp2IpDetails();
 
     std::map<std::string, std::string> tlsSettings = getTlsSettings();
-    std::copy(tlsSettings.begin(), tlsSettings.end(), std::inserter(
-                  ip2ipAccountDetails, ip2ipAccountDetails.end()));
+    std::copy(tlsSettings.begin(), tlsSettings.end(),
+              std::inserter(ip2ipAccountDetails, ip2ipAccountDetails.end()));
 
     return ip2ipAccountDetails;
 }
@@ -155,7 +155,7 @@ std::vector<std::string> ConfigurationManager::getAccountList()
  * Send the list of all codecs loaded to the client through DBus.
  * Can stay global, as only the active codecs will be set per accounts
  */
-std::vector<int32_t > ConfigurationManager::getAudioCodecList()
+std::vector<int32_t> ConfigurationManager::getAudioCodecList()
 {
     std::vector<int32_t> list(Manager::instance().audioCodecFactory.getAudioCodecList());
 
@@ -336,6 +336,11 @@ int32_t ConfigurationManager::getHistoryLimit()
     return Manager::instance().getHistoryLimit();
 }
 
+void ConfigurationManager::clearHistory()
+{
+    return Manager::instance().clearHistory();
+}
+
 void ConfigurationManager::setHistoryLimit(const int32_t& days)
 {
     Manager::instance().setHistoryLimit(days);
@@ -403,11 +408,6 @@ std::vector<std::map<std::string, std::string> > ConfigurationManager::getHistor
     return Manager::instance().getHistory();
 }
 
-void ConfigurationManager::setHistory(const std::vector<std::map<std::string, std::string> > &entries)
-{
-    Manager::instance().setHistorySerialized(entries);
-}
-
 std::string
 ConfigurationManager::getAddrFromInterfaceName(const std::string& interface)
 {
diff --git a/daemon/src/dbus/configurationmanager.h b/daemon/src/dbus/configurationmanager.h
index 9264c886bc..486421d43b 100644
--- a/daemon/src/dbus/configurationmanager.h
+++ b/daemon/src/dbus/configurationmanager.h
@@ -68,7 +68,7 @@ class ConfigurationManager :
         void removeAccount(const std::string& accoundID);
         void deleteAllCredential(const std::string& accountID);
         std::vector< std::string > getAccountList();
-        void sendRegister(const std::string& accoundID , const int32_t& expire);
+        void sendRegister(const std::string& accoundID, const int32_t& expire);
 
         std::map< std::string, std::string > getTlsSettingsDefault();
 
@@ -108,6 +108,7 @@ class ConfigurationManager :
 
         void setHistoryLimit(const int32_t& days);
         int32_t getHistoryLimit();
+        void clearHistory();
 
         int32_t getMailNotify();
         void setMailNotify();
@@ -124,7 +125,6 @@ class ConfigurationManager :
         void setHookSettings(const std::map<std::string, std::string>& settings);
 
         std::vector<std::map<std::string, std::string> > getHistory();
-        void setHistory(const std::vector<std::map<std::string, std::string> > &entries);
 
         std::map<std::string, std::string> getTlsSettings();
         void setTlsSettings(const std::map< std::string, std::string >& details);
diff --git a/daemon/src/history/Makefile.am b/daemon/src/history/Makefile.am
index 843782642e..7d16303f14 100644
--- a/daemon/src/history/Makefile.am
+++ b/daemon/src/history/Makefile.am
@@ -1,11 +1,9 @@
 include ../../globals.mak
 
-SUBDIRS = 
-
 noinst_LTLIBRARIES = libhistory.la
 
-libhistory_la_SOURCES =         \
-    historyitem.h               \
-    historyitem.cpp             \
-    historymanager.h            \
-    historymanager.cpp
+libhistory_la_SOURCES = \
+    historyitem.h       \
+    historyitem.cpp     \
+    history.h           \
+    history.cpp
diff --git a/daemon/src/history/history.cpp b/daemon/src/history/history.cpp
new file mode 100644
index 0000000000..caa95b663e
--- /dev/null
+++ b/daemon/src/history/history.cpp
@@ -0,0 +1,151 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
+ *
+ *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
+ *  Author: Alexandre Savard <alexandre.savard@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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
+#include "history.h"
+#include <cerrno>
+#include <algorithm>
+#include <sys/stat.h> // for mkdir
+#include <ctime>
+#include "global.h"
+#include "logger.h"
+#include "call.h"
+
+namespace {
+    int oldestAllowed(int days)
+    {
+        time_t currentTimestamp;
+        time(&currentTimestamp);
+        // Number of seconds in one day: 60 sec/min x 60 min/hr x 24hr/day 
+        static const int DAY_UNIX_TIMESTAMP = 60 * 60 * 24;
+        return static_cast<int>(currentTimestamp) - (days * DAY_UNIX_TIMESTAMP);
+    }
+    
+    using std::map;
+    using std::string;
+    using std::vector;
+}
+
+History::History() :
+    items_(), path_("")
+{}
+
+bool History::load(int limit)
+{
+    ensurePath();
+    std::ifstream infile(path_.c_str());
+    if (!infile) {
+        DEBUG("No history file to load");
+        return false;
+    }
+    while (!infile.eof()) {
+        HistoryItem item(infile);
+        addEntry(item, limit);
+    }
+    return true;
+}
+
+bool History::save()
+{
+    DEBUG("History: Saving history in XDG directory: %s", path_.c_str());
+    ensurePath();
+    std::sort(items_.begin(), items_.end());
+    std::ofstream outfile(path_.c_str());
+    if (outfile.fail())
+        return false;
+    for (vector<HistoryItem>::const_iterator iter = items_.begin();
+         iter != items_.end(); ++iter)
+        outfile << *iter << std::endl;
+    return true;
+}
+
+void History::addEntry(const HistoryItem &item, int oldest)
+{
+    if (item.hasPeerNumber() and item.youngerThan(oldest))
+        items_.push_back(item);
+}
+
+void History::ensurePath()
+{
+    if (path_.empty()) {
+        string xdg_data = string(HOMEDIR) + DIR_SEPARATOR_STR + ".local/share/sflphone";
+
+        string userdata;
+        // If the environment variable is set (not null and not empty), we'll use it to save the history
+        // Else we 'll the standard one, ie: XDG_DATA_HOME = $HOMEDIR/.local/share/sflphone
+        if (XDG_DATA_HOME != NULL) {
+            string xdg_env(XDG_DATA_HOME);
+            (!xdg_env.empty()) ? userdata = xdg_env : userdata = xdg_data;
+        } else
+            userdata = xdg_data;
+
+        if (mkdir(userdata.data(), 0755) != 0) {
+            // If directory	creation failed
+            if (errno != EEXIST) {
+                DEBUG("History: Cannot create directory: %m");
+                return;
+            }
+        }
+        // Load user's history
+        path_ = userdata + DIR_SEPARATOR_STR + "history";
+    }
+}
+
+vector<map<string, string> > History::getSerialized() const
+{
+    vector<map<string, string> > result;
+    for (vector<HistoryItem>::const_iterator iter = items_.begin();
+         iter != items_.end(); ++iter)
+        result.push_back(iter->toMap());
+
+    return result;
+}
+
+void History::setPath(const std::string &path)
+{
+    path_ = path;
+}
+
+void History::addCall(Call *call, int limit)
+{
+    if (!call) {
+        ERROR("History: Call is NULL, ignoring");
+        return;
+    }
+    call->time_stop();
+    HistoryItem item(call->createHistoryEntry());
+    addEntry(item, limit);
+}
+
+void History::clear()
+{
+    items_.clear();
+}
diff --git a/daemon/src/history/history.h b/daemon/src/history/history.h
new file mode 100644
index 0000000000..c4d9628e4c
--- /dev/null
+++ b/daemon/src/history/history.h
@@ -0,0 +1,90 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
+ *
+ *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
+ *  Author: Alexandre Savard <alexandre.savard@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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
+#ifndef HISTORY_
+#define HISTORY_
+
+#include "historyitem.h"
+#include <vector>
+
+class Call;
+
+class History {
+
+    public:
+        History();
+
+        /** Load history from file */
+        bool load(int limit);
+
+        /**
+         *@return True if the history has been successfully saved in the file
+         */
+        bool save();
+
+        /*
+         *@return The number of items found in the history file
+         */
+        size_t numberOfItems() const {
+            return items_.size();
+        }
+
+        bool empty() const {
+            return items_.empty();
+        }
+
+        std::vector<std::map<std::string, std::string> > getSerialized() const;
+
+        void addCall(Call *call, int limit);
+        void clear();
+    private:
+        void setPath(const std::string &path);
+        /* If no path has been set, this will initialize path to a
+         * system-dependent location */
+        void ensurePath();
+        /*
+         * Add a new history item in the data structure
+         */
+        void addEntry(const HistoryItem &new_item, int limit);
+
+        /*
+         * Vector containing the history items
+         */
+        std::vector<HistoryItem> items_;
+
+        /* The path to the history file */
+        std::string path_;
+
+        friend class HistoryTest;
+};
+
+#endif // HISTORY_
diff --git a/daemon/src/history/historyitem.cpp b/daemon/src/history/historyitem.cpp
index a0edd4b34d..57799b276a 100644
--- a/daemon/src/history/historyitem.cpp
+++ b/daemon/src/history/historyitem.cpp
@@ -31,65 +31,54 @@
  */
 
 #include "historyitem.h"
-#include <sstream>
 #include <cstdlib>
-#include "config/config.h"
+#include <istream>
 
 const char * const HistoryItem::ACCOUNT_ID_KEY =        "accountid";
 const char * const HistoryItem::CALLID_KEY =            "callid";
 const char * const HistoryItem::CONFID_KEY =            "confid";
-const char * const HistoryItem::PEER_NAME_KEY =         "peer_name";
+const char * const HistoryItem::DISPLAY_NAME_KEY =      "display_name";
 const char * const HistoryItem::PEER_NUMBER_KEY =       "peer_number";
 const char * const HistoryItem::RECORDING_PATH_KEY =    "recordfile";
+const char * const HistoryItem::STATE_KEY =             "state";
 const char * const HistoryItem::TIMESTAMP_START_KEY =   "timestamp_start";
 const char * const HistoryItem::TIMESTAMP_STOP_KEY =    "timestamp_stop";
-const char * const HistoryItem::STATE_KEY =             "state";
+
 const char * const HistoryItem::MISSED_STRING =         "missed";
 const char * const HistoryItem::INCOMING_STRING =       "incoming";
 const char * const HistoryItem::OUTGOING_STRING =       "outgoing";
 
-HistoryItem::HistoryItem(const std::map<std::string, std::string> &args)
-    : entryMap_(args)
-{}
+using std::map;
+using std::string;
 
-HistoryItem::HistoryItem(const std::string &item, Conf::ConfigTree &historyList)
-    : entryMap_()
-{
-    const char *const KEYS [] = {
-        ACCOUNT_ID_KEY,
-        CALLID_KEY,
-        CONFID_KEY,
-        PEER_NAME_KEY,
-        PEER_NUMBER_KEY,
-        RECORDING_PATH_KEY,
-        TIMESTAMP_START_KEY,
-        TIMESTAMP_STOP_KEY,
-        STATE_KEY,
-        NULL};
-    for (int i = 0; KEYS[i]; ++i)
-        entryMap_[KEYS[i]] = historyList.getConfigTreeItemValue(item, KEYS[i]);
-}
+HistoryItem::HistoryItem(const map<string, string> &args) : entryMap_(args),
+    timestampStart_(std::atol(entryMap_[TIMESTAMP_START_KEY].c_str()))
+{}
 
-void HistoryItem::save(Conf::ConfigTree &history) const
+HistoryItem::HistoryItem(std::istream &entry) : entryMap_(), timestampStart_(0)
 {
-    // The section is : "[" + random integer = "]"
-    std::stringstream section;
-    section << rand();
-    const std::string sectionstr = section.str();
-
-    typedef std::map<std::string, std::string>::const_iterator EntryIter;
-    for (EntryIter iter = entryMap_.begin(); iter != entryMap_.end(); ++iter)
-        history.setConfigTreeItem(sectionstr, iter->first, iter->second);
+    string tmp;
+    while (std::getline(entry, tmp, '\n')) {
+        size_t pos = tmp.find('=');
+        if (pos == string::npos)
+            break;
+        else if (pos < tmp.length() - 1) {
+            string key(tmp.substr(0, pos));
+            string val(tmp.substr(pos + 1, tmp.length() - pos - 1));
+            entryMap_[key] = val;
+        }
+    }
+    timestampStart_ = std::atol(entryMap_[TIMESTAMP_START_KEY].c_str());
 }
 
-std::map<std::string, std::string> HistoryItem::toMap() const
+map<string, string> HistoryItem::toMap() const
 {
     return entryMap_;
 }
 
-bool HistoryItem::youngerThan(int otherTime) const
+bool HistoryItem::youngerThan(unsigned long otherTime) const
 {
-    return atol(getTimestampStart().c_str()) >= otherTime;
+    return timestampStart_ > otherTime;
 }
 
 bool HistoryItem::hasPeerNumber() const
@@ -97,12 +86,16 @@ bool HistoryItem::hasPeerNumber() const
     return entryMap_.find(PEER_NUMBER_KEY) != entryMap_.end();
 }
 
-std::string HistoryItem::getTimestampStart() const {
-    using std::map;
-    using std::string;
-    map<string, string>::const_iterator iter(entryMap_.find(TIMESTAMP_START_KEY));
-    if (iter != entryMap_.end())
-        return iter->second;
-    else
-        return "";
+void HistoryItem::print(std::ostream &o) const
+{
+    // every entry starts with "[" + random integer = "]"
+    for (map<string, string>::const_iterator iter = entryMap_.begin();
+         iter != entryMap_.end(); ++iter)
+        o << iter->first << "=" << iter->second << std::endl;
+}
+
+std::ostream& operator << (std::ostream& o, const HistoryItem& item)
+{
+    item.print(o);
+    return o;
 }
diff --git a/daemon/src/history/historyitem.h b/daemon/src/history/historyitem.h
index c134e46f18..3f7e1e5143 100644
--- a/daemon/src/history/historyitem.h
+++ b/daemon/src/history/historyitem.h
@@ -36,16 +36,12 @@
 #include <string>
 #include <map>
 
-namespace Conf {
-class ConfigTree;
-}
-
 class HistoryItem {
     public:
         static const char * const ACCOUNT_ID_KEY;
         static const char * const CONFID_KEY;
         static const char * const CALLID_KEY;
-        static const char * const PEER_NAME_KEY;
+        static const char * const DISPLAY_NAME_KEY;
         static const char * const PEER_NUMBER_KEY;
         static const char * const RECORDING_PATH_KEY;
         static const char * const TIMESTAMP_START_KEY;
@@ -56,20 +52,23 @@ class HistoryItem {
         static const char * const INCOMING_STRING;
         static const char * const OUTGOING_STRING;
         HistoryItem(const std::map<std::string, std::string> &args);
-        HistoryItem(const std::string &item, Conf::ConfigTree &list);
+        HistoryItem(std::istream &stream);
 
         bool hasPeerNumber() const;
 
-        bool youngerThan(int otherTime) const;
-
-        void save(Conf::ConfigTree &history) const;
+        bool youngerThan(unsigned long otherTime) const;
 
         std::map<std::string, std::string> toMap() const;
+        void print(std::ostream &o) const;
+        bool operator< (const HistoryItem &other) const {
+                return timestampStart_ > other.timestampStart_;
+        }
 
     private:
-        std::string getTimestampStart() const;
         std::map<std::string, std::string> entryMap_;
+        unsigned long timestampStart_; // cached as we use this a lot, avoids string ops
 };
 
+std::ostream& operator << (std::ostream& o, const HistoryItem& item);
 
 #endif // HISTORY_ITEM
diff --git a/daemon/src/history/historymanager.cpp b/daemon/src/history/historymanager.cpp
deleted file mode 100644
index 46966cc504..0000000000
--- a/daemon/src/history/historymanager.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
- *
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
- *  Author: Alexandre Savard <alexandre.savard@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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-
-#include "historymanager.h"
-#include <cerrno>
-#include <cc++/file.h>
-#include <ctime>
-#include "config/config.h"
-
-namespace {
-    int get_unix_timestamp_equivalent(int days)
-    {
-        // Number of seconds in one day: 60 x 60 x 24
-        static const int DAY_UNIX_TIMESTAMP = 86400;
-        return days * DAY_UNIX_TIMESTAMP;
-    }
-}
-
-HistoryManager::HistoryManager() :
-    history_items_(), history_loaded_(false), history_path_("")
-{}
-
-int HistoryManager::loadHistory(int limit, const std::string &path)
-{
-    Conf::ConfigTree historyList;
-    createHistoryPath(path);
-    loadHistoryFromFile(historyList);
-    return loadHistoryItemsMap(historyList, limit);
-}
-
-bool HistoryManager::saveHistory()
-{
-    Conf::ConfigTree historyList;
-    saveHistoryItemsVector(historyList);
-    return saveHistoryToFile(historyList);
-}
-
-bool HistoryManager::loadHistoryFromFile(Conf::ConfigTree &historyList)
-{
-    int exist = historyList.populateFromFile(history_path_.c_str());
-    history_loaded_ = (exist == 2) ? false : true;
-
-    return history_loaded_;
-}
-
-int HistoryManager::loadHistoryItemsMap(Conf::ConfigTree &historyList, int limit)
-{
-    using std::string;
-
-    // We want to save only the items recent enough (ie compared to CONFIG_HISTORY_LIMIT)
-    time_t currentTimestamp;
-    time(&currentTimestamp);
-    int historyLimit = get_unix_timestamp_equivalent(limit);
-    int oldestEntryTime =  static_cast<int>(currentTimestamp) - historyLimit;
-
-    std::list<std::string> sections(historyList.getSections());
-    int nb_items = 0;
-    for (std::list<std::string>::const_iterator iter = sections.begin(); iter != sections.end(); ++iter) {
-        HistoryItem item(*iter, historyList);
-        // Make a check on the start timestamp to know it is loadable according to CONFIG_HISTORY_LIMIT
-        if (item.youngerThan(oldestEntryTime)) {
-            addNewHistoryEntry(item);
-            ++nb_items;
-        }
-    }
-
-    return nb_items;
-}
-
-bool HistoryManager::saveHistoryToFile(const Conf::ConfigTree &historyList) const
-{
-    DEBUG("HistoryManager: Saving history in XDG directory: %s", history_path_.c_str());
-    return historyList.saveConfigTree(history_path_.data());
-}
-
-void HistoryManager::saveHistoryItemsVector(Conf::ConfigTree &historyList) const
-{
-    for (std::vector<HistoryItem>::const_iterator iter = history_items_.begin(); iter != history_items_.end(); ++iter)
-        iter->save(historyList);
-}
-
-void HistoryManager::addNewHistoryEntry(const HistoryItem &new_item)
-{
-    history_items_.push_back(new_item);
-}
-
-void HistoryManager::createHistoryPath(const std::string &path)
-{
-    std::string xdg_data = std::string(HOMEDIR) + DIR_SEPARATOR_STR + ".local/share/sflphone";
-
-    if (path.empty()) {
-        std::string userdata;
-        // If the environment variable is set (not null and not empty), we'll use it to save the history
-        // Else we 'll the standard one, ie: XDG_DATA_HOME = $HOMEDIR/.local/share/sflphone
-        if (XDG_DATA_HOME != NULL) {
-            std::string xdg_env(XDG_DATA_HOME);
-            (!xdg_env.empty()) ? userdata = xdg_env : userdata = xdg_data;
-        } else
-            userdata = xdg_data;
-
-        if (mkdir(userdata.data(), 0755) != 0) {
-            // If directory	creation failed
-            if (errno != EEXIST) {
-                DEBUG("HistoryManager: Cannot create directory: %m");
-                return;
-            }
-        }
-        // Load user's history
-        setHistoryPath(userdata + DIR_SEPARATOR_STR + "history");
-    } else
-        setHistoryPath(path);
-}
-
-
-std::vector<std::map<std::string, std::string> > HistoryManager::getSerialized() const
-{
-    using std::map;
-    using std::string;
-    using std::vector;
-
-    vector<map<string, string> > result;
-    for (vector<HistoryItem>::const_iterator iter = history_items_.begin();
-         iter != history_items_.end(); ++iter)
-        result.push_back(iter->toMap());
-
-    return result;
-}
-
-int HistoryManager::setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history, int limit)
-{
-    history_items_.clear();
-    using std::map;
-    using std::string;
-    using std::vector;
-
-    // We want to save only the items recent enough (ie compared to CONFIG_HISTORY_LIMIT)
-    // Get the current timestamp
-    time_t current_timestamp;
-    time(&current_timestamp);
-    int history_limit = get_unix_timestamp_equivalent(limit);
-
-    int items_added = 0;
-    for (vector<map<string, string> >::const_iterator iter = history.begin(); iter != history.end(); ++iter) {
-        HistoryItem new_item(*iter);
-
-        if (new_item.hasPeerNumber() and new_item.youngerThan((int) current_timestamp - history_limit)) {
-            addNewHistoryEntry(new_item);
-            ++items_added;
-        }
-    }
-
-    return items_added;
-}
-
diff --git a/daemon/src/history/historymanager.h b/daemon/src/history/historymanager.h
deleted file mode 100644
index 3e25dff8a6..0000000000
--- a/daemon/src/history/historymanager.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
- *
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
- *  Author: Alexandre Savard <alexandre.savard@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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-
-#ifndef _HISTORY_MANAGER
-#define _HISTORY_MANAGER
-
-#include "historyitem.h"
-#include "global.h"
-
-class HistoryManager {
-
-    public:
-        /*
-         * Constructor
-         */
-        HistoryManager();
-
-        /**
-         *@param path  A specific file to use; if empty, use the global one
-         *
-         *@return int The number of history items successfully loaded
-         */
-        int loadHistory(int limit, const std::string &path="");
-
-        /**
-         *@return bool True if the history has been successfully saved in the file
-         */
-        bool saveHistory();
-
-        /*
-         * Load the history from a file to the dedicated data structure
-         */
-        bool loadHistoryFromFile(Conf::ConfigTree &history_list);
-
-        /*
-         * @return int The number of history items loaded
-         */
-        int loadHistoryItemsMap(Conf::ConfigTree &history_list, int limit);
-
-        /*
-         * Inverse method, ie save a data structure containing the history into a file
-         */
-        bool saveHistoryToFile(const Conf::ConfigTree &history_list) const;
-
-        void saveHistoryItemsVector(Conf::ConfigTree &history_list) const;
-
-        /**
-         *@return bool  True if the history file has been successfully read
-         */
-        bool isLoaded() const {
-            return history_loaded_;
-        }
-
-        void setHistoryPath(const std::string &filename) {
-            history_path_ = filename;
-        }
-
-        /*
-         *@return int   The number of items found in the history file
-         */
-        size_t numberOfItems() const {
-            return history_items_.size();
-        }
-
-        bool empty() const {
-            return history_items_.empty();
-        }
-
-        std::vector<std::string> getHistorySerialized() const;
-        std::vector<std::map<std::string, std::string> > getSerialized() const;
-
-        int setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history, int limit);
-
-    private:
-        /*
-         * Set the path to the history file
-         *
-         * @param path  A specific file to use; if empty, use the global one
-         */
-        void createHistoryPath(const std::string &path="");
-        /*
-         * Add a new history item in the data structure
-         */
-        void addNewHistoryEntry(const HistoryItem &new_item);
-
-        /*
-         * Vector containing the history items
-         */
-        std::vector<HistoryItem> history_items_;
-
-        /*
-         * History has been loaded
-         */
-        bool history_loaded_;
-
-        /*
-         * The path to the history file
-         */
-
-        std::string history_path_;
-
-        friend class HistoryTest;
-};
-
-#endif //_HISTORY_MANAGER
diff --git a/daemon/src/iax/iaxvoiplink.cpp b/daemon/src/iax/iaxvoiplink.cpp
index f8e10cb1e1..1f926e7790 100644
--- a/daemon/src/iax/iaxvoiplink.cpp
+++ b/daemon/src/iax/iaxvoiplink.cpp
@@ -142,7 +142,7 @@ IAXVoIPLink::sendAudioFromMic()
     for (CallMap::const_iterator iter = callMap_.begin(); iter != callMap_.end() ; ++iter) {
         IAXCall *currentCall = dynamic_cast<IAXCall*>(iter->second);
 
-        if (!currentCall or currentCall->getState() != Call::Active)
+        if (!currentCall or currentCall->getState() != Call::ACTIVE)
             continue;
 
         int codecType = currentCall->getAudioCodec();
@@ -240,14 +240,14 @@ IAXVoIPLink::sendUnregister(Account *a)
 Call*
 IAXVoIPLink::newOutgoingCall(const std::string& id, const std::string& toUrl)
 {
-    IAXCall* call = new IAXCall(id, Call::Outgoing);
+    IAXCall* call = new IAXCall(id, Call::OUTGOING);
 
     call->setPeerNumber(toUrl);
-    call->initRecFileName(toUrl);
+    call->initRecFilename(toUrl);
 
     iaxOutgoingInvite(call);
-    call->setConnectionState(Call::Progressing);
-    call->setState(Call::Active);
+    call->setConnectionState(Call::PROGRESSING);
+    call->setState(Call::ACTIVE);
     addCall(call);
 
     return call;
@@ -265,8 +265,8 @@ IAXVoIPLink::answer(Call *c)
     iax_answer(call->session);
     mutexIAX_.leave();
 
-    call->setState(Call::Active);
-    call->setConnectionState(Call::Connected);
+    call->setState(Call::ACTIVE);
+    call->setConnectionState(Call::CONNECTED);
 
     Manager::instance().getMainBuffer()->flushAllBuffers();
 }
@@ -326,7 +326,7 @@ IAXVoIPLink::onhold(const std::string& id)
     iax_quelch_moh(call->session, true);
     mutexIAX_.leave();
 
-    call->setState(Call::Hold);
+    call->setState(Call::HOLD);
 }
 
 void
@@ -343,7 +343,7 @@ IAXVoIPLink::offhold(const std::string& id)
     iax_unquelch(call->session);
     mutexIAX_.leave();
     Manager::instance().getAudioDriver()->startStream();
-    call->setState(Call::Active);
+    call->setState(Call::ACTIVE);
 }
 
 void
@@ -468,8 +468,8 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call)
             break;
 
         case IAX_EVENT_REJECT:
-            call->setConnectionState(Call::Connected);
-            call->setState(Call::Error);
+            call->setConnectionState(Call::CONNECTED);
+            call->setState(Call::ERROR);
             Manager::instance().callFailure(id);
             removeCall(id);
             break;
@@ -484,13 +484,13 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call)
         case IAX_EVENT_ANSWER:
         case IAX_EVENT_TRANSFER:
 
-            if (call->getConnectionState() == Call::Connected)
+            if (call->getConnectionState() == Call::CONNECTED)
                 break;
 
             Manager::instance().addStream(call->getCallId());
 
-            call->setConnectionState(Call::Connected);
-            call->setState(Call::Active);
+            call->setConnectionState(Call::CONNECTED);
+            call->setState(Call::ACTIVE);
 
             if (event->ies.format)
                 call->format = event->ies.format;
@@ -503,8 +503,8 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call)
             break;
 
         case IAX_EVENT_BUSY:
-            call->setConnectionState(Call::Connected);
-            call->setState(Call::Busy);
+            call->setConnectionState(Call::CONNECTED);
+            call->setState(Call::BUSY);
             Manager::instance().callBusy(id);
             removeCall(id);
             break;
@@ -518,7 +518,7 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call)
             break;
 
         case IAX_EVENT_RINGA:
-            call->setConnectionState(Call::Ringing);
+            call->setConnectionState(Call::RINGING);
             Manager::instance().peerRingingCall(call->getCallId());
             break;
 
@@ -608,18 +608,18 @@ void IAXVoIPLink::iaxHandlePrecallEvent(iax_event* event)
         case IAX_EVENT_CONNECT:
             id = Manager::instance().getNewCallID();
 
-            call = new IAXCall(id, Call::Incoming);
+            call = new IAXCall(id, Call::INCOMING);
             call->session = event->session;
-            call->setConnectionState(Call::Progressing);
+            call->setConnectionState(Call::PROGRESSING);
 
             if (event->ies.calling_number)
                 call->setPeerNumber(event->ies.calling_number);
 
             if (event->ies.calling_name)
-                call->setPeerName(std::string(event->ies.calling_name));
+                call->setDisplayName(std::string(event->ies.calling_name));
 
             // if peerNumber exist append it to the name string
-            call->initRecFileName(std::string(event->ies.calling_number));
+            call->initRecFilename(std::string(event->ies.calling_number));
             Manager::instance().incomingCall(call, accountID_);
 
             format = call->getFirstMatchingFormat(event->ies.format, accountID_);
diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp
index ad6cd9fb9c..4423af4177 100644
--- a/daemon/src/main.cpp
+++ b/daemon/src/main.cpp
@@ -155,6 +155,7 @@ main(int argc, char **argv)
 
     DEBUG("Starting DBus event loop");
     Manager::instance().getDbusManager()->exec();
+    Manager::instance().saveHistory();
 
     return 0;
 }
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index aba54726dc..5175812413 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -1963,9 +1963,10 @@ std::vector<std::string> ManagerImpl::getAudioOutputDeviceList()
 
     ost::MutexLock lock(audioLayerMutex_);
 
-    if (audiodriver_)
-        devices = audiodriver_->getAudioDeviceList(AUDIO_STREAM_PLAYBACK);
-    audioLayerMutexUnlock();
+    AlsaLayer *alsalayer = dynamic_cast<AlsaLayer*>(audiodriver_);
+
+    if (alsalayer)
+        devices = alsalayer->getAudioDeviceList(AUDIO_STREAM_PLAYBACK);
 
     return devices;
 }
@@ -1980,8 +1981,10 @@ std::vector<std::string> ManagerImpl::getAudioInputDeviceList()
 
     ost::MutexLock lock(audioLayerMutex_);
 
-    if (audiodriver_)
-        devices = audiodriver_->getAudioDeviceList(AUDIO_STREAM_CAPTURE);
+    AlsaLayer *alsalayer = dynamic_cast<AlsaLayer *>(audiodriver_);
+
+    if (alsalayer)
+        devices = alsalayer->getAudioDeviceList(AUDIO_STREAM_CAPTURE);
 
     return devices;
 }
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index 2412ac2068..222c62b36e 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -51,7 +51,6 @@
 #include "audio/codecs/audiocodecfactory.h"
 
 #include "audio/mainbuffer.h"
-#include "history/historymanager.h"
 #include "preferences.h"
 #include "noncopyable.h"
 
@@ -67,6 +66,7 @@ class YamlEmitter;
 class DTMF;
 class AudioFile;
 class AudioLayer;
+class History;
 class TelephoneTone;
 class VoIPLink;
 
@@ -82,8 +82,6 @@ typedef std::map<std::string, Account*> AccountMap;
 /** Define a type for a std::string to std::string Map inside ManagerImpl */
 typedef std::map<std::string, std::string> CallAccountMap;
 
-typedef std::map<std::string, Call::CallConfiguration> CallConfigMap;
-
 /** To send multiple string */
 typedef std::list<std::string> TokenList;
 
@@ -415,7 +413,7 @@ class ManagerImpl {
          *		 0 for unregistration request
          *		 1 for registration request
          */
-        void sendRegister(const ::std::string& accountId , const int32_t& enable);
+        void sendRegister(const std::string& accountId , const int32_t& enable);
 
         /**
          * Get account list
@@ -758,7 +756,7 @@ class ManagerImpl {
          * @return bool	true on success
          *		      false otherwise
          */
-        bool setConfig(const std::string& section, const std::string& name, const std::string& value);
+        void setConfig(const std::string& section, const std::string& name, const std::string& value);
 
         /**
          * Change a specific value in the configuration tree.
@@ -769,7 +767,7 @@ class ManagerImpl {
          * @return bool	true on success
          *		      false otherwise
          */
-        bool setConfig(const std::string& section, const std::string& name, int value);
+        void setConfig(const std::string& section, const std::string& name, int value);
 
         /**
          * Get a int from the configuration tree
@@ -909,11 +907,11 @@ class ManagerImpl {
         void initAudioDriver();
 
         void audioLayerMutexLock() {
-            audiolayerMutex_.enterMutex();
+            audioLayerMutex_.enterMutex();
         }
 
         void audioLayerMutexUnlock() {
-            audiolayerMutex_.leaveMutex();
+            audioLayerMutex_.leaveMutex();
         }
 
         /**
@@ -1001,7 +999,7 @@ class ManagerImpl {
         /**
          * Mutex used to protect audio layer
          */
-        ost::Mutex audiolayerMutex_;
+        ost::Mutex audioLayerMutex_;
 
         /**
          * Waiting Call Vectors
@@ -1060,13 +1058,11 @@ class ManagerImpl {
         /** Mutex to lock the call account map (main thread + voiplink thread) */
         ost::Mutex callAccountMapMutex_;
 
-        CallConfigMap callConfigMap_;
-
-        bool associateConfigToCall(const std::string& callID, Call::CallConfiguration config);
+        std::map<std::string, bool> IPToIPMap_;
 
-        Call::CallConfiguration getConfigFromCall(const std::string& callID) const;
+        void setIPToIPForCall(const std::string& callID, bool IPToIP);
 
-        bool removeCallConfig(const std::string& callID);
+        bool isIPToIP(const std::string& callID) const;
 
         /**
          *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */
@@ -1146,12 +1142,8 @@ class ManagerImpl {
         bool accountExists(const std::string& accountID);
 
         std::vector<std::map<std::string, std::string> > getHistory() const;
+        void clearHistory();
 
-        /**
-         * Set a list of serialized history entries
-         * @param Vector of history entries
-             */
-        void setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history);
         /**
          * Get an account pointer
          * @param accountID account ID to get
@@ -1190,6 +1182,7 @@ class ManagerImpl {
          * Send registration to all enabled accounts
          */
         void registerAccounts();
+        void saveHistory();
 
     private:
         NON_COPYABLE(ManagerImpl);
@@ -1198,7 +1191,7 @@ class ManagerImpl {
           * To handle the persistent history
           * TODO: move this to ConfigurationManager
           */
-        HistoryManager history_;
+        History *history_;
 
         /**
          * Instant messaging module, resposible to initiate, format, parse,
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index e0f00a7df9..6d370dc8cb 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -403,7 +403,7 @@ Call *SIPVoIPLink::newOutgoingCall(const std::string& id, const std::string& toU
     if (account == NULL) // TODO: We should investigate how we could get rid of this error and create a IP2IP call instead
         throw VoipLinkException("Could not get account for this call");
 
-    SIPCall* call = new SIPCall(id, Call::Outgoing, cp_);
+    SIPCall* call = new SIPCall(id, Call::OUTGOING, cp_);
 
     // If toUri is not a well formated sip URI, use account information to process it
     std::string toUri;
@@ -450,7 +450,7 @@ Call *SIPVoIPLink::newOutgoingCall(const std::string& id, const std::string& toU
         throw VoipLinkException("Could not start rtp session for early media");
     }
 
-    call->initRecFileName(toUrl);
+    call->initRecFilename(toUrl);
 
     call->getLocalSDP()->setLocalIP(addrSdp);
     call->getLocalSDP()->createOffer(account->getActiveCodecs());
@@ -479,8 +479,8 @@ SIPVoIPLink::answer(Call *c)
     if (pjsip_inv_send_msg(call->inv, tdata) != PJ_SUCCESS)
         throw VoipLinkException("Could not send invite request answer (200 OK)");
 
-    call->setConnectionState(Call::Connected);
-    call->setState(Call::Active);
+    call->setConnectionState(Call::CONNECTED);
+    call->setState(Call::ACTIVE);
 }
 
 void
@@ -550,7 +550,7 @@ void
 SIPVoIPLink::onhold(const std::string& id)
 {
     SIPCall *call = getSIPCall(id);
-    call->setState(Call::Hold);
+    call->setState(Call::HOLD);
     call->getAudioRtp().stop();
 
     Sdp *sdpSession = call->getLocalSDP();
@@ -602,7 +602,7 @@ SIPVoIPLink::offhold(const std::string& id)
     sdpSession->addAttributeToLocalAudioMedia("sendrecv");
 
     if (SIPSessionReinvite(call) == PJ_SUCCESS)
-        call->setState(Call::Active);
+        call->setState(Call::ACTIVE);
 }
 
 void
@@ -718,7 +718,7 @@ SIPVoIPLink::refuse(const std::string& id)
 {
     SIPCall *call = getSIPCall(id);
 
-    if (!call->isIncoming() or call->getConnectionState() == Call::Connected)
+    if (!call->isIncoming() or call->getConnectionState() == Call::CONNECTED)
         return;
 
     call->getAudioRtp().stop();
@@ -840,8 +840,8 @@ SIPVoIPLink::SIPStartCall(SIPCall *call)
     if (pjsip_inv_send_msg(call->inv, tdata) != PJ_SUCCESS)
         return false;
 
-    call->setConnectionState(Call::Progressing);
-    call->setState(Call::Active);
+    call->setConnectionState(Call::PROGRESSING);
+    call->setState(Call::ACTIVE);
     addCall(call);
 
     return true;
@@ -870,9 +870,9 @@ SIPVoIPLink::SIPCallClosed(SIPCall *call)
 void
 SIPVoIPLink::SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata UNUSED)
 {
-    if (call->getConnectionState() != Call::Connected) {
-        call->setConnectionState(Call::Connected);
-        call->setState(Call::Active);
+    if (call->getConnectionState() != Call::CONNECTED) {
+        call->setConnectionState(Call::CONNECTED);
+        call->setState(Call::ACTIVE);
         Manager::instance().peerAnsweredCall(call->getCallId());
     }
 }
@@ -896,9 +896,9 @@ bool SIPVoIPLink::SIPNewIpToIpCall(const std::string& id, const std::string& to)
     if (!account)
         return false;
 
-    SIPCall *call = new SIPCall(id, Call::Outgoing, cp_);
-    call->setCallConfiguration(Call::IPtoIP);
-    call->initRecFileName(to);
+    SIPCall *call = new SIPCall(id, Call::OUTGOING, cp_);
+    call->setIPToIP(true);
+    call->initRecFilename(to);
 
     std::string localAddress(getInterfaceAddrFromName(account->getLocalInterface()));
 
@@ -1263,7 +1263,6 @@ void SIPVoIPLink::findLocalAddressFromUri(const std::string& uri, pjsip_transpor
 namespace {
 std::string parseDisplayName(const char * buffer)
 {
-    // Parse the display name from "From" header
     const char* from_header = strstr(buffer, "From: ");
 
     if (!from_header)
@@ -1329,7 +1328,7 @@ void invite_session_state_changed_cb(pjsip_inv_session *inv, pjsip_event *e)
     }
 
     if (inv->state == PJSIP_INV_STATE_EARLY and e->body.tsx_state.tsx->role == PJSIP_ROLE_UAC) {
-        call->setConnectionState(Call::Ringing);
+        call->setConnectionState(Call::RINGING);
         Manager::instance().peerRingingCall(call->getCallId());
     } else if (inv->state == PJSIP_INV_STATE_CONFIRMED) {
         // After we sent or received a ACK - The connection is established
@@ -1768,7 +1767,7 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
         UrlHook::runAction(Manager::instance().hookPreference.getUrlCommand(), header_value);
     }
 
-    SIPCall* call = new SIPCall(Manager::instance().getNewCallID(), Call::Incoming, cp_);
+    SIPCall* call = new SIPCall(Manager::instance().getNewCallID(), Call::INCOMING, cp_);
     Manager::instance().associateCallToAccount(call->getCallId(), account_id);
 
     // May use the published address as well
@@ -1790,10 +1789,10 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
     std::string peerNumber(tmp, length);
     stripSipUriPrefix(peerNumber);
 
-    call->setConnectionState(Call::Progressing);
+    call->setConnectionState(Call::PROGRESSING);
     call->setPeerNumber(peerNumber);
     call->setDisplayName(displayName);
-    call->initRecFileName(peerNumber);
+    call->initRecFilename(peerNumber);
 
     setCallMediaLocal(call, addrToUse);
 
@@ -1878,7 +1877,7 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
         PJ_ASSERT_RETURN(pjsip_inv_initial_answer(call->inv, rdata, PJSIP_SC_RINGING, NULL, NULL, &tdata) == PJ_SUCCESS, 1);
         PJ_ASSERT_RETURN(pjsip_inv_send_msg(call->inv, tdata) == PJ_SUCCESS, 1);
 
-        call->setConnectionState(Call::Ringing);
+        call->setConnectionState(Call::RINGING);
 
         Manager::instance().incomingCall(call, account_id);
         Manager::instance().getAccountLink(account_id)->addCall(call);
diff --git a/daemon/test/constants.h b/daemon/test/constants.h
index 8194770f66..684f00ebac 100644
--- a/daemon/test/constants.h
+++ b/daemon/test/constants.h
@@ -31,11 +31,9 @@
 #ifndef CONSTANTS_H_
 #define CONSTANTS_H_
 
-#define YES_STR "1"
-#define NO_STR "0"
 #define HISTORY_SAMPLE  "history-sample.tpl"
 #define HISTORY_SAMPLE_SIZE     3
 #define CONFIG_SAMPLE   "sflphoned-sample.yml"
-#define HUGE_HISTORY_LIMIT      999999999
+#define HISTORY_LIMIT 30
 
 #endif /* CONSTANTS_H_ */
diff --git a/daemon/test/history-sample.tpl b/daemon/test/history-sample.tpl
index 9cd7a615a4..ec7fcdf0dc 100644
--- a/daemon/test/history-sample.tpl
+++ b/daemon/test/history-sample.tpl
@@ -1,31 +1,28 @@
-[207464428]
 accountid=
 confid=
-id=Account:1239059899
-name=Emmanuel Milou
-number=136
+callid=Account:1239059899
+peer_name=Emmanuel Milou
+peer_number=136
 recordfile=
 timestamp_start=747638685
 timestamp_stop=747638765
 state=outgoing
 
-[221051947]
 accountid=empty
 confid=
-id=
-name=Savoir-faire Linux
-number=514-276-5468
+callid=
+peer_name=Savoir-faire Linux
+peer_number=514-276-5468
 recordfile=
 timestamp_start=144562000
 timestamp_stop=144562458
 state=missed
 
-[871962260]
 accountid=
 confid=
-id=Account:43789459478
-name=
-number=5143848557
+callid=Account:43789459478
+peer_name=
+peer_number=5143848557
 recordfile=
 timestamp_start=775354456
 timestamp_stop=775354987
diff --git a/daemon/test/historytest.cpp b/daemon/test/historytest.cpp
index a910e3d8ec..1c6ec3596c 100644
--- a/daemon/test/historytest.cpp
+++ b/daemon/test/historytest.cpp
@@ -33,7 +33,7 @@
 #include <cstdlib>
 
 #include "historytest.h"
-#include "manager.h"
+#include "logger.h"
 #include "constants.h"
 #include "validator.h"
 
@@ -57,93 +57,51 @@ void backup()
 void HistoryTest::setUp()
 {
     backup();
-    history_ = new HistoryManager();
+    history_ = new History;
+    history_->setPath(HISTORY_SAMPLE);
 }
 
 
-void HistoryTest::test_create_history_path()
+void HistoryTest::test_create_path()
 {
-    DEBUG("-------------------- HistoryTest::test_create_history_path --------------------\n");
+    DEBUG("-------------------- HistoryTest::test_set_path --------------------\n");
 
     std::string path(HISTORY_SAMPLE);
-
-    history_->createHistoryPath(path);
-    CPPUNIT_ASSERT(!history_->isLoaded());
-    CPPUNIT_ASSERT(history_->history_path_ == path);
+    CPPUNIT_ASSERT(history_->path_ == path);
 }
 
-void HistoryTest::test_load_history_from_file()
+void HistoryTest::test_load_from_file()
 {
-    DEBUG("-------------------- HistoryTest::test_load_history_from_file --------------------\n");
-
-    bool res;
-    Conf::ConfigTree history_list;
+    DEBUG("-------------------- HistoryTest::test_load_from_file --------------------\n");
 
-    history_->createHistoryPath(HISTORY_SAMPLE);
-    res = history_->loadHistoryFromFile(history_list);
-
-    CPPUNIT_ASSERT(history_->isLoaded());
+    bool res = history_->load(HISTORY_LIMIT);
     CPPUNIT_ASSERT(res);
 }
 
-void HistoryTest::test_load_history_items_map()
+void HistoryTest::test_load_items()
 {
-    DEBUG("-------------------- HistoryTest::test_load_history_items_map --------------------\n");
-
-    std::string path;
-    int nb_items;
-    Conf::ConfigTree history_list;
-
-    history_->setHistoryPath(HISTORY_SAMPLE);
-    history_->loadHistoryFromFile(history_list);
-    nb_items = history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT);
-    CPPUNIT_ASSERT(nb_items == HISTORY_SAMPLE_SIZE);
+    DEBUG("-------------------- HistoryTest::test_load_items --------------------\n");
+    bool res = history_->load(HISTORY_LIMIT);
+    CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(history_->numberOfItems() == HISTORY_SAMPLE_SIZE);
 }
 
-void HistoryTest::test_save_history_items_map()
-{
-    DEBUG("-------------------- HistoryTest::test_save_history_items_map --------------------\n");
-
-    std::string path;
-    Conf::ConfigTree history_list, history_list2;
-
-    history_->setHistoryPath(HISTORY_SAMPLE);
-    history_->loadHistoryFromFile(history_list);
-    history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT);
-    history_->saveHistoryItemsVector(history_list2);
-}
-
-void HistoryTest::test_save_history_to_file()
+void HistoryTest::test_save_to_file()
 {
-    DEBUG("-------------------- HistoryTest::test_save_history_to_file --------------------\n");
-
-    std::string path;
-    Conf::ConfigTree history_list, history_list2;
-    std::map<std::string, std::string> res;
-    std::map<std::string, std::string>::iterator iter;
-
-    history_->setHistoryPath(HISTORY_SAMPLE);
-    history_->loadHistoryFromFile(history_list);
-    history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT);
-    history_->saveHistoryItemsVector(history_list2);
-    CPPUNIT_ASSERT(history_->saveHistoryToFile(history_list2));
+    DEBUG("-------------------- HistoryTest::test_save_to_file --------------------\n");
+    CPPUNIT_ASSERT(history_->save());
 }
 
-void HistoryTest::test_get_history_serialized()
+void HistoryTest::test_get_serialized()
 {
-    DEBUG("-------------------- HistoryTest::test_get_history_serialized --------------------\n");
-
-    std::vector<std::string>::iterator iter;
-    std::string tmp;
-
-    CPPUNIT_ASSERT(history_->loadHistory(HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+    DEBUG("-------------------- HistoryTest::test_get_serialized --------------------\n");
+    bool res = history_->load(HISTORY_LIMIT);
+    CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(history_->getSerialized().size() == HISTORY_SAMPLE_SIZE);
 }
 
 void HistoryTest::tearDown()
 {
-    // Delete the history object
     delete history_;
     restore();
 }
diff --git a/daemon/test/historytest.h b/daemon/test/historytest.h
index 1706bab7d8..19f2b372e8 100644
--- a/daemon/test/historytest.h
+++ b/daemon/test/historytest.h
@@ -38,15 +38,15 @@
 
 // Application import
 #include "noncopyable.h"
-#include "history/historymanager.h"
+#include "history/history.h"
 
 /*
  * @file historyTest.h
  * @brief       Regroups unitary tests related to the phone number cleanup function.
  */
 
-#ifndef _HISTORY_TEST_
-#define _HISTORY_TEST_
+#ifndef HISTORY_TEST_
+#define HISTORY_TEST_
 
 class HistoryTest : public CppUnit::TestCase {
 
@@ -54,12 +54,10 @@ class HistoryTest : public CppUnit::TestCase {
           * Use cppunit library macros to add unit test the factory
           */
         CPPUNIT_TEST_SUITE(HistoryTest);
-        CPPUNIT_TEST(test_create_history_path);
-        CPPUNIT_TEST(test_save_history_items_map);
-        CPPUNIT_TEST(test_load_history_from_file);
-        CPPUNIT_TEST(test_load_history_items_map);
-        CPPUNIT_TEST(test_get_history_serialized);
-        // CPPUNIT_TEST (test_save_history_to_file);
+        CPPUNIT_TEST(test_create_path);
+        CPPUNIT_TEST(test_load_from_file);
+        CPPUNIT_TEST(test_load_items);
+        CPPUNIT_TEST(test_get_serialized);
         CPPUNIT_TEST_SUITE_END();
 
     public:
@@ -71,21 +69,15 @@ class HistoryTest : public CppUnit::TestCase {
          */
         void setUp();
 
-        void test_create_history_path();
+        void test_create_path();
 
-        void test_load_history_from_file();
+        void test_load_from_file();
 
-        void test_load_history_items_map();
+        void test_load_items();
 
-        void test_save_history_items_map();
+        void test_save_to_file();
 
-        void test_save_history_to_file();
-
-        void test_get_history_serialized();
-
-        void test_set_serialized_history();
-
-        void test_set_serialized_history_with_limit();
+        void test_get_serialized();
 
         /*
          * Code factoring - Common resources can be released here.
@@ -95,11 +87,11 @@ class HistoryTest : public CppUnit::TestCase {
 
     private:
         NON_COPYABLE(HistoryTest);
-        HistoryManager *history_;
+        History *history_;
 };
 
 /* Register our test module */
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(HistoryTest, "HistoryTest");
 CPPUNIT_TEST_SUITE_REGISTRATION(HistoryTest);
 
-#endif
+#endif // HISTORY_TEST_
diff --git a/gnome/src/actions.c b/gnome/src/actions.c
index 4e33ba443a..17233fba91 100644
--- a/gnome/src/actions.c
+++ b/gnome/src/actions.c
@@ -97,7 +97,7 @@ sflphone_notify_voice_mail(const gchar* accountID , guint count)
  * Else, check if it an IP call. if not, popup an error message
  */
 
-static gboolean _is_direct_call(callable_obj_t * c)
+static gboolean is_direct_call(callable_obj_t * c)
 {
     if (g_strcasecmp(c->_accountID, "empty") == 0) {
         if (!g_str_has_prefix(c->_peer_number, "sip:")) {
@@ -142,9 +142,6 @@ void
 sflphone_quit()
 {
     if (calllist_get_size(current_calls_tab) == 0 || main_window_ask_quit()) {
-        // Save the history
-        sflphone_save_history();
-
         dbus_unregister(getpid());
         dbus_clean();
         account_list_free();
@@ -190,7 +187,7 @@ sflphone_hung_up(callable_obj_t * c)
         c->_confID = NULL;
     }
 
-    // test wether the widget contain text, if not remove it
+    // test whether the widget contains text, if not remove it
     if ((im_window_get_nb_tabs() > 1) && c->_im_widget && !(IM_WIDGET(c->_im_widget)->containText))
         im_window_remove_tab(c->_im_widget);
     else
@@ -213,7 +210,7 @@ void sflphone_fill_account_list(void)
 
     if (array) {
         for (gchar **accountID = array; accountID && *accountID; accountID++) {
-            account_t * a = g_new0(account_t,1);
+            account_t * a = g_new0(account_t, 1);
             a->accountID = g_strdup(*accountID);
             a->credential_information = NULL;
             account_list_add(a);
@@ -558,7 +555,7 @@ sflphone_incoming_call(callable_obj_t * c)
     calltree_display(current_calls_tab);
 
     // Change the status bar if we are dealing with a direct SIP call
-    if (_is_direct_call(c)) {
+    if (is_direct_call(c)) {
         gchar *msg = g_markup_printf_escaped(_("Direct SIP call"));
         statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
         statusbar_push_message(msg , NULL, __MSG_ACCOUNT_DEFAULT);
@@ -828,9 +825,9 @@ static int place_registered_call(callable_obj_t * c)
 void
 sflphone_place_call(callable_obj_t * c)
 {
-    DEBUG("Actions: Placing call with %s @ %s and accountid %s", c->_peer_name, c->_peer_number, c->_accountID);
+    DEBUG("Actions: Placing call with %s @ %s and accountid %s", c->_display_name, c->_peer_number, c->_accountID);
 
-    if (_is_direct_call(c)) {
+    if (is_direct_call(c)) {
         gchar *msg = g_markup_printf_escaped(_("Direct SIP call"));
         statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
         statusbar_push_message(msg , NULL, __MSG_ACCOUNT_DEFAULT);
@@ -1057,55 +1054,6 @@ void sflphone_fill_history(void)
     fill_treeview_with_calls();
 }
 
-/* Ordered from highest timestamp (most recent) to lowest (oldest) */
-static gint
-history_compare_func(gconstpointer a, gconstpointer b)
-{
-    gconstpointer first_value =  g_hash_table_lookup(* (GHashTable **) a, TIMESTAMP_START_KEY);
-    gconstpointer second_value = g_hash_table_lookup(* (GHashTable **) b, TIMESTAMP_START_KEY);
-    /* treat NULL values as less than non-NULL values, like g_strcmp0 does */
-    if (!first_value)
-        return -(first_value != second_value);
-    else if (!second_value)
-        return first_value != second_value;
-
-    long f = atol(first_value);
-    long s = atol(second_value);
-    if (f > s)
-        return -1;
-    else if (f == s)
-        return 0;
-    else
-        return 1;
-}
-
-void sflphone_save_history(void)
-{
-    gint size = calllist_get_size(history_tab);
-
-    GPtrArray *sorted_history = g_ptr_array_new();
-    /* For each entry in our call history */
-    for (gint i = 0; i < size; ++i) {
-        QueueElement *current = calllist_get_nth(history_tab, i);
-
-        if (!current) {
-            WARN("SFLphone: Warning: %dth element is null", i);
-            break;
-        }
-
-        if (current->type == HIST_CALL) {
-            GHashTable *value = create_hashtable_from_history_entry(current->elem.call);
-            g_ptr_array_add(sorted_history, (gpointer) value);
-        }
-        else
-            ERROR("SFLphone: Error: Unknown type for serialization");
-    }
-
-    g_ptr_array_sort(sorted_history, history_compare_func);
-    dbus_set_history(sorted_history);
-    g_ptr_array_free(sorted_history, TRUE);
-}
-
 void
 sflphone_srtp_sdes_on(callable_obj_t * c)
 {
diff --git a/gnome/src/actions.h b/gnome/src/actions.h
index 203460e499..efb2fe2f93 100644
--- a/gnome/src/actions.h
+++ b/gnome/src/actions.h
@@ -201,8 +201,6 @@ void status_bar_display_account ();
 
 void sflphone_fill_history (void);
 
-void sflphone_save_history (void);
-
 /**
  * Action called when a new participant is dragged in
  */
diff --git a/gnome/src/callable_obj.c b/gnome/src/callable_obj.c
index 995cbdf80a..d381941927 100644
--- a/gnome/src/callable_obj.c
+++ b/gnome/src/callable_obj.c
@@ -46,7 +46,7 @@ gint get_state_callstruct(gconstpointer a, gconstpointer b)
     return c->_state == state ? 0 : 1;
 }
 
-gchar* call_get_peer_name(const gchar *format)
+gchar* call_get_display_name(const gchar *format)
 {
     const gchar *end = g_strrstr(format, "<");
     return g_strndup(format, end ? end - format : 0);
@@ -115,7 +115,7 @@ void call_remove_all_errors(callable_obj_t * call)
 callable_obj_t *create_new_call(callable_type_t type, call_state_t state,
                                 const gchar* const callID,
                                 const gchar* const accountID,
-                                const gchar* const peer_name,
+                                const gchar* const display_name,
                                 const gchar* const peer_number)
 {
     callable_obj_t *obj = g_new0(callable_obj_t, 1);
@@ -129,9 +129,9 @@ callable_obj_t *create_new_call(callable_type_t type, call_state_t state,
     time(&obj->_time_start);
     time(&obj->_time_stop);
 
-    obj->_peer_name = g_strdup(peer_name);
+    obj->_display_name = g_strdup(display_name);
     obj->_peer_number = g_strdup(peer_number);
-    obj->_peer_info = get_peer_info(peer_name, peer_number);
+    obj->_peer_info = get_peer_info(display_name, peer_number);
 
     return obj;
 }
@@ -142,7 +142,7 @@ callable_obj_t *create_new_call_from_details(const gchar *call_id, GHashTable *d
 
     const gchar * const accountID = g_hash_table_lookup(details, "ACCOUNTID");
     const gchar * const peer_number = g_hash_table_lookup(details, "PEER_NUMBER");
-    const gchar * const peer_name = g_hash_table_lookup(details, "DISPLAY_NAME");
+    const gchar * const display_name = g_hash_table_lookup(details, "DISPLAY_NAME");
     const gchar * const state_str = g_hash_table_lookup(details, "CALL_STATE");
 
     if (g_strcasecmp(state_str, "CURRENT") == 0)
@@ -159,7 +159,7 @@ callable_obj_t *create_new_call_from_details(const gchar *call_id, GHashTable *d
         state = CALL_STATE_FAILURE;
 
     gchar *number = call_get_peer_number(peer_number);
-    callable_obj_t *c = create_new_call(CALL, state, call_id, accountID, peer_name, number);
+    callable_obj_t *c = create_new_call(CALL, state, call_id, accountID, display_name, number);
     g_free(number);
     return c;
 }
@@ -176,29 +176,27 @@ static gconstpointer get_str(GHashTable *entry, gconstpointer key)
 static const char * const ACCOUNT_ID_KEY =        "accountid";
 static const char * const CALLID_KEY =            "callid";
 static const char * const CONFID_KEY =            "confid";
-static const char * const PEER_NAME_KEY =         "peer_name";
+static const char * const DISPLAY_NAME_KEY =      "display_name";
 static const char * const PEER_NUMBER_KEY =       "peer_number";
 static const char * const RECORDING_PATH_KEY =    "recordfile";
-static const char * const TIMESTAMP_STOP_KEY =    "timestamp_stop";
 static const char * const STATE_KEY =             "state";
+static const char * const TIMESTAMP_STOP_KEY =    "timestamp_stop";
 
 callable_obj_t *create_history_entry_from_hashtable(GHashTable *entry)
 {
     gconstpointer callID = get_str(entry, CALLID_KEY);
     gconstpointer accountID =  get_str(entry, ACCOUNT_ID_KEY);
-    gconstpointer peer_name =  get_str(entry, PEER_NAME_KEY);
+    gconstpointer display_name =  get_str(entry, DISPLAY_NAME_KEY);
     gconstpointer peer_number =  get_str(entry, PEER_NUMBER_KEY);
-    callable_obj_t *new_call = create_new_call(HISTORY_ENTRY, CALL_STATE_DIALING, callID, accountID, peer_name, peer_number);
+    callable_obj_t *new_call = create_new_call(HISTORY_ENTRY, CALL_STATE_DIALING, callID, accountID, display_name, peer_number);
     new_call->_history_state = g_strdup(get_str(entry, STATE_KEY));
     gconstpointer value =  g_hash_table_lookup(entry, TIMESTAMP_START_KEY);
     new_call->_time_start = value ? atoi(value) : 0;
     value =  g_hash_table_lookup(entry, TIMESTAMP_STOP_KEY);
     new_call->_time_stop = value ? atoi(value) : 0;
-    value =  g_hash_table_lookup(entry, RECORDING_PATH_KEY);
-    new_call->_recordfile = g_strdup(value);
-    value =  g_hash_table_lookup(entry, CONFID_KEY);
-    new_call->_confID = g_strdup(value);
-    new_call->_historyConfID = g_strdup(value);
+    new_call->_recordfile = g_strdup(g_hash_table_lookup(entry, RECORDING_PATH_KEY));
+    new_call->_confID = g_strdup(g_hash_table_lookup(entry, CONFID_KEY));
+    new_call->_historyConfID = g_strdup(new_call->_confID);
     new_call->_record_is_playing = FALSE;
 
     return new_call;
@@ -212,7 +210,7 @@ void free_callable_obj_t (callable_obj_t *c)
     g_free(c->_accountID);
     g_free(c->_srtp_cipher);
     g_free(c->_sas);
-    g_free(c->_peer_name);
+    g_free(c->_display_name);
     g_free(c->_peer_number);
     g_free(c->_trsft_to);
     g_free(c->_peer_info);
@@ -251,21 +249,19 @@ GHashTable* create_hashtable_from_history_entry(callable_obj_t *entry)
 
     const gchar *call_id = entry->_callID ? entry->_callID : "";
     const gchar *peer_number = entry->_peer_number ? entry->_peer_number : "";
-    const gchar *peer_name = (entry->_peer_name && *entry->_peer_name) ? entry->_peer_name : "empty";
+    const gchar *display_name = (entry->_display_name && *entry->_display_name) ? entry->_display_name : "empty";
     const gchar *account_id = (entry->_accountID && *entry->_accountID) ? entry->_accountID : "empty";
 
     const gchar *conf_id = entry->_historyConfID ? entry->_historyConfID : "";
     const gchar *recording_path = entry->_recordfile ? entry->_recordfile : "";
 
     GHashTable *result = g_hash_table_new(NULL, g_str_equal);
+    add_to_hashtable(result, ACCOUNT_ID_KEY, account_id);
     add_to_hashtable(result, CALLID_KEY, call_id);
     add_to_hashtable(result, CONFID_KEY, conf_id);
+    add_to_hashtable(result, DISPLAY_NAME_KEY, display_name);
     add_to_hashtable(result, PEER_NUMBER_KEY, peer_number);
-    add_to_hashtable(result, PEER_NAME_KEY, peer_name);
     add_to_hashtable(result, RECORDING_PATH_KEY, recording_path);
-    add_to_hashtable(result, ACCOUNT_ID_KEY, account_id);
-    add_to_hashtable(result, TIMESTAMP_START_KEY, time_start);
-    add_to_hashtable(result, TIMESTAMP_STOP_KEY, time_stop);
     add_to_hashtable(result, STATE_KEY, history_state);
     /* These values were already allocated dynamically */
     g_hash_table_insert(result, g_strdup(TIMESTAMP_START_KEY), time_start);
@@ -304,3 +300,8 @@ gchar *get_formatted_start_timestamp(time_t start)
     strftime(str, sizeof str, fmt, &start_tm);
     return g_markup_printf_escaped("%s\n", str);
 }
+
+gboolean call_was_outgoing(callable_obj_t * obj)
+{
+    return g_strcmp0(obj->_history_state, OUTGOING_STRING) == 0;
+}
diff --git a/gnome/src/callable_obj.h b/gnome/src/callable_obj.h
index 849ec7783d..b2437962e6 100644
--- a/gnome/src/callable_obj.h
+++ b/gnome/src/callable_obj.h
@@ -112,7 +112,7 @@ typedef struct  {
     /**
      * The information about the person we are talking
      */
-    gchar *_peer_name;
+    gchar *_display_name;
     gchar *_peer_number;
 
     /**
@@ -183,7 +183,7 @@ gint get_state_callstruct(gconstpointer, gconstpointer);
   * @param c The call
   * @return The full name of the caller or an empty string
   */
-gchar* call_get_peer_name(const gchar*);
+gchar* call_get_display_name(const gchar*);
 
 /**
  * This function parse the callable_obj_t.from field to return the number
@@ -202,4 +202,6 @@ gchar* get_formatted_start_timestamp(time_t);
 
 gchar* call_get_audio_codec(callable_obj_t *obj);
 
+gboolean call_was_outgoing(callable_obj_t * obj);
+
 #endif
diff --git a/gnome/src/config/accountconfigdialog.c b/gnome/src/config/accountconfigdialog.c
index 0ff56eace9..ef55ea27cd 100644
--- a/gnome/src/config/accountconfigdialog.c
+++ b/gnome/src/config/accountconfigdialog.c
@@ -1064,7 +1064,7 @@ static GtkWidget* create_audiocodecs_configuration(account_t *currentAccount)
     GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
     gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
 
-    GtkWidget *box = create_audiocodecs_box(currentAccount);
+    GtkWidget *box = audiocodecs_box(currentAccount);
 
     // Box for the audiocodecs
     GtkWidget *audiocodecs = gnome_main_section_new(_("Audio"));
diff --git a/gnome/src/config/audioconf.c b/gnome/src/config/audioconf.c
index 982aa526d3..84d6b42c68 100644
--- a/gnome/src/config/audioconf.c
+++ b/gnome/src/config/audioconf.c
@@ -1,7 +1,6 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
- *  Author: Alexandre Savard <alexandre.savard@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
@@ -29,8 +28,6 @@
  *  as that of the covered work.
  */
 
-#include <gtk/gtk.h>
-
 
 #include "audioconf.h"
 #include "utils.h"
@@ -55,9 +52,8 @@ static GtkWidget *codecMoveUpButton;
 static GtkWidget *codecMoveDownButton;
 static GtkWidget *codecTreeView;		// View used instead of store to get access to selection
 static GtkWidget *pulse;
-static GtkWidget *alsabox;                      // alsa audio plugin/device selection menu
-static GtkWidget *pulseaudiobox;                // pulseaudio device selection menu
-static GtkWidget *audio_conf;
+static GtkWidget *alsabox;
+static GtkWidget *alsa_conf;
 
 // Codec properties ID
 enum {
@@ -69,7 +65,6 @@ enum {
 };
 
 static void active_is_always_recording(void);
-static GtkWidget *device_selection_box_alsa(void);
 
 /**
  * Fills the tree list with supported codecs
@@ -105,7 +100,7 @@ static void preferences_dialog_fill_codec_list(account_t *a)
 /**
  * Fill store with output audio plugins
  */
-static void
+void
 preferences_dialog_fill_audio_plugin_list()
 {
     gtk_list_store_clear(pluginlist);
@@ -126,48 +121,40 @@ preferences_dialog_fill_audio_plugin_list()
     }
 }
 
-static void
+void
 preferences_dialog_fill_output_audio_device_list()
 {
-    int device_index = 0;
-
     gtk_list_store_clear(outputlist);
 
-    DEBUG("FILL OUTPUT DEVICE LIST");
-
     // Call dbus to retrieve list
     for (gchar **list = dbus_get_audio_output_device_list(); *list ; list++) {
-        // int device_index = dbus_get_audio_device_index(*list);
+        int device_index = dbus_get_audio_device_index(*list);
         GtkTreeIter iter;
         gtk_list_store_append(outputlist, &iter);
-        gtk_list_store_set(outputlist, &iter, 0, *list, 1, device_index++, -1);
+        gtk_list_store_set(outputlist, &iter, 0, *list, 1, device_index, -1);
     }
 }
 
-static void
+void
 preferences_dialog_fill_ringtone_audio_device_list()
 {
-    int device_index = 0;
-
     gtk_list_store_clear(ringtonelist);
 
-    DEBUG("FILL RINGTONE DEVICE LIST");
-
     // Call dbus to retreive output device
     for (gchar **list = dbus_get_audio_output_device_list(); *list; list++) {
-        // int device_index = dbus_get_audio_device_index(*list);
+        int device_index = dbus_get_audio_device_index(*list);
         GtkTreeIter iter;
         gtk_list_store_append(ringtonelist, &iter);
-        gtk_list_store_set(ringtonelist, &iter, 0, *list, 1, device_index++, -1);
+        gtk_list_store_set(ringtonelist, &iter, 0, *list, 1, device_index, -1);
     }
 }
 
-static void
+void
 select_active_output_audio_device()
 {
-    SelectedAudioLayer selected = get_selected_audio_api();
+    gboolean show_alsa = must_show_alsa_conf();
 
-    if(ALSA_LAYER_SELECTED != selected)
+    if(!show_alsa)
         return;
 
     // Select active output device on server
@@ -202,12 +189,10 @@ select_active_output_audio_device()
 /**
  * Select active output audio device
  */
-static void
+void
 select_active_ringtone_audio_device()
 {
-    SelectedAudioLayer selected = get_selected_audio_api();
-
-    if (ALSA_LAYER_SELECTED == selected) {
+    if (must_show_alsa_conf()) {
         // Select active ringtone device on server
         gchar **devices = dbus_get_current_audio_devices_index();
         int currentDeviceIndex = atoi(devices[2]);
@@ -235,34 +220,28 @@ select_active_ringtone_audio_device()
     }
 }
 
-static void
+void
 preferences_dialog_fill_input_audio_device_list()
 {
-    int device_index = 0;
-
     gtk_list_store_clear(inputlist);
 
-    DEBUG("FILL INPUT DEVICE LIST");
-
     // Call dbus to retreive list
     gchar **list = dbus_get_audio_input_device_list();
 
     // For each device name included in list
     for (; *list; list++) {
-        // int device_index = dbus_get_audio_device_index(*list);
+        int device_index = dbus_get_audio_device_index(*list);
         GtkTreeIter iter;
         gtk_list_store_append(inputlist, &iter);
-        gtk_list_store_set(inputlist, &iter, 0, *list, 1, device_index++, -1);
+        gtk_list_store_set(inputlist, &iter, 0, *list, 1, device_index, -1);
     }
 
 }
 
-static void
+void
 select_active_input_audio_device()
 {
-    SelectedAudioLayer selected = get_selected_audio_api();
-
-    if (ALSA_LAYER_SELECTED == selected) {
+    if (must_show_alsa_conf()) {
         // Select active input device on server
         gchar **devices = dbus_get_current_audio_devices_index();
         int currentDeviceIndex = atoi(devices[1]);
@@ -319,7 +298,7 @@ select_output_audio_plugin(GtkComboBox* widget, gpointer data UNUSED)
     }
 }
 
-static void
+void
 select_active_output_audio_plugin()
 {
     // Select active output device on server
@@ -537,7 +516,7 @@ static void codec_move_down(GtkButton *button UNUSED, gpointer data)
     codec_move(FALSE, data);
 }
 
-GtkWidget* create_audiocodecs_box(account_t *a)
+GtkWidget* audiocodecs_box(account_t *a)
 {
     GtkWidget *audiocodecs_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
     gtk_container_set_border_width(GTK_CONTAINER(audiocodecs_hbox), 10);
@@ -609,25 +588,19 @@ GtkWidget* create_audiocodecs_box(account_t *a)
 }
 
 void
-switch_audio_manager(void)
+select_audio_manager(void)
 {
-    SelectedAudioLayer selected = get_selected_audio_api();
-
-    if (PULSEAUDIO_LAYER_SELECTED == selected) {
-        dbus_set_audio_manager(ALSA_API_STR);        
-        gtk_widget_set_sensitive(audio_conf, TRUE);
-        gtk_widget_hide(pulseaudiobox);
-        gtk_container_remove(GTK_CONTAINER(audio_conf), pulseaudiobox);
-        gtk_container_add(GTK_CONTAINER(audio_conf), alsabox);
-        gtk_widget_show(alsabox);
+    if (!must_show_alsa_conf() && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pulse))) {
+        dbus_set_audio_manager(ALSA_API_STR);
+        alsabox = alsa_box();
+        gtk_container_add(GTK_CONTAINER(alsa_conf), alsabox);
+        gtk_widget_show(alsa_conf);
+        gtk_widget_set_sensitive(alsa_conf, TRUE);
         gtk_action_set_sensitive(volumeToggle_, TRUE);
-    } else if (ALSA_LAYER_SELECTED == selected) {
+    } else if (must_show_alsa_conf() && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pulse))) {
         dbus_set_audio_manager(PULSEAUDIO_API_STR);
-        gtk_widget_set_sensitive(audio_conf, TRUE);
-        gtk_widget_hide(alsabox);
-        gtk_container_remove(GTK_CONTAINER(audio_conf), alsabox);
-        gtk_container_add(GTK_CONTAINER(audio_conf), pulseaudiobox);
-        gtk_widget_show(pulseaudiobox);
+        gtk_container_remove(GTK_CONTAINER(alsa_conf) , alsabox);
+        gtk_widget_hide(alsa_conf);
 
         if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(volumeToggle_))) {
             main_window_volume_controls(FALSE);
@@ -637,11 +610,6 @@ switch_audio_manager(void)
 
         gtk_action_set_sensitive(volumeToggle_, FALSE);
     }
-
-    preferences_dialog_fill_output_audio_device_list();
-    preferences_dialog_fill_input_audio_device_list(); 
-    preferences_dialog_fill_ringtone_audio_device_list();
-
 }
 
 void
@@ -688,7 +656,7 @@ active_is_always_recording(void)
     dbus_set_is_always_recording(!dbus_get_is_always_recording());
 }
 
-GtkWidget* device_selection_box_alsa()
+GtkWidget* alsa_box()
 {
     GtkWidget *alsa_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
     gtk_widget_show(alsa_hbox);
@@ -767,7 +735,7 @@ GtkWidget* device_selection_box_alsa()
     gtk_table_attach(GTK_TABLE(table), input, 2, 3, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
     gtk_widget_show(input);
 
-    DEBUG("Audio: Configuration ringtone");
+    DEBUG("Audio: Configuration rintgtone");
     label = gtk_label_new(_("Ringtone"));
     gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
     gtk_table_attach(GTK_TABLE(table), label, 1, 2, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
@@ -794,92 +762,6 @@ GtkWidget* device_selection_box_alsa()
     return alsa_hbox;
 }
 
-GtkWidget *device_selection_box_pulseaudio()
-{
-    GtkWidget *pulseaudio_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
-    gtk_widget_show(pulseaudio_hbox);
-
-    GtkWidget *table = gtk_table_new(6, 3, FALSE);
-    gtk_table_set_col_spacing(GTK_TABLE(table), 0, 40);
-    gtk_box_pack_start(GTK_BOX(pulseaudio_hbox), table, TRUE, TRUE, 1);
-    gtk_widget_show(table);
-
-    // Device : Output Device
-    // Create title label
-    DEBUG("Audio: Configuration output");
-    GtkWidget *label = gtk_label_new(_("Output"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(label);
-    // Set choices of output devices
-    outputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    preferences_dialog_fill_output_audio_device_list();
-    output = gtk_combo_box_new_with_model(GTK_TREE_MODEL(outputlist));
-    select_active_output_audio_device();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), output);
-    g_signal_connect(G_OBJECT(output), "changed", G_CALLBACK(select_audio_output_device), output);
-
-    // Set rendering
-    GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(output), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(output), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), output, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(output);
-
-    // Device : Input device
-    // Create title label
-    DEBUG("Audio: Configuration input");
-    label = gtk_label_new(_("Input"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 1, 2, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(label);
-
-    // Set choice of ouput devices
-    inputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    preferences_dialog_fill_input_audio_device_list();
-    input = gtk_combo_box_new_with_model(GTK_TREE_MODEL(inputlist));
-    select_active_input_audio_device();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), input);
-    g_signal_connect(G_OBJECT(input), "changed", G_CALLBACK(select_audio_input_device), input);
-
-    // Set rendering
-    renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(input), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(input), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), input, 2, 3, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(input);
-
-    // Device : Ringtone device
-    // Create title label
-    DEBUG("Audio: Configuration ringtone");
-    label = gtk_label_new(_("Ringtone"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 1, 2, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(label);
-    // set choices of ringtone devices
-    ringtonelist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    preferences_dialog_fill_ringtone_audio_device_list();
-    ringtone = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ringtonelist));
-    select_active_ringtone_audio_device();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), output);
-    g_signal_connect(G_OBJECT(ringtone), "changed", G_CALLBACK(select_audio_ringtone_device), output);
-
-    // Set rendering
-    renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(ringtone), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(ringtone), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), ringtone, 2, 3, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(ringtone);
-
-    gtk_widget_show_all(pulseaudio_hbox);
-
-    // Update the combo box
-    update_device_widget(dbus_get_current_audio_output_plugin());
-    return pulseaudio_hbox;
-}
-    
-
-
 static void record_path_changed(GtkFileChooser *chooser , GtkLabel *label UNUSED)
 {
     gchar* path;
@@ -890,55 +772,42 @@ static void record_path_changed(GtkFileChooser *chooser , GtkLabel *label UNUSED
 GtkWidget* create_audio_configuration()
 {
     /* Main widget */
-    GtkWidget *frame = NULL;
-    GtkWidget *table = NULL;
-    
     GtkWidget *audio_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
     gtk_container_set_border_width(GTK_CONTAINER(audio_vbox), 10);
 
+    GtkWidget *frame;
+    GtkWidget *table;
     gnome_main_section_new_with_table(_("Sound Manager"), &frame, &table, 1, 4);
     gtk_box_pack_start(GTK_BOX(audio_vbox), frame, FALSE, FALSE, 0);
 
-    SelectedAudioLayer selected = get_selected_audio_api();
+    gchar *audio_manager = dbus_get_audio_manager();
+    gboolean pulse_audio = FALSE;
+
+    if (g_strcmp0(audio_manager, PULSEAUDIO_API_STR) == 0)
+        pulse_audio = TRUE;
+
+    g_free(audio_manager);
 
     pulse = gtk_radio_button_new_with_mnemonic(NULL , _("_Pulseaudio"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pulse), (selected == PULSEAUDIO_LAYER_SELECTED) ? TRUE : FALSE);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pulse), pulse_audio);
     gtk_table_attach(GTK_TABLE(table), pulse, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     GtkWidget *alsa = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(pulse), _("_ALSA"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alsa), (selected == ALSA_LAYER_SELECTED)  ? TRUE : FALSE);
-    g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(switch_audio_manager), NULL);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alsa), !pulse_audio);
+    g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(select_audio_manager), NULL);
     gtk_table_attach(GTK_TABLE(table), alsa, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    // Box for audio device selection
-    audio_conf = gnome_main_section_new(_("Audio Device Selection"));
-    gtk_box_pack_start(GTK_BOX(audio_vbox), audio_conf, FALSE, FALSE, 0);
-    gtk_widget_show(audio_conf);
-
-    // Alsa specific device configuration
-    alsabox = device_selection_box_alsa();
-    g_object_ref(G_OBJECT(alsabox));
-
-    // Pulseaudio specific device configuration
-    pulseaudiobox = device_selection_box_pulseaudio();
-    g_object_ref(G_OBJECT(pulseaudiobox));
-
-    switch (selected) {
-    case ALSA_LAYER_SELECTED:
-        gtk_container_add(GTK_CONTAINER(audio_conf), alsabox);
-        gtk_widget_hide(pulseaudiobox);
-        gtk_widget_show(alsabox);
-        break;
-    case PULSEAUDIO_LAYER_SELECTED:
-        gtk_container_add(GTK_CONTAINER(audio_conf), pulseaudiobox);
-        gtk_widget_hide(alsabox);
-        gtk_widget_show(pulseaudiobox);
-        break;
-    case UNKNOWN_AUDIO_LAYER:  
-    default:
-         DEBUG("Error: Unknown audio layer");
-         break;
-    };
+    // Box for the ALSA configuration
+    alsa_conf = gnome_main_section_new(_("ALSA settings"));
+    gtk_box_pack_start(GTK_BOX(audio_vbox), alsa_conf, FALSE, FALSE, 0);
+    gtk_widget_show(alsa_conf);
+
+    if (must_show_alsa_conf()) {
+        // Box for the ALSA configuration
+        alsabox = alsa_box();
+        gtk_container_add(GTK_CONTAINER(alsa_conf) , alsabox);
+        gtk_widget_hide(alsa_conf);
+    }
 
     gnome_main_section_new_with_table(_("Recordings"), &frame, &table, 2, 3);
     gtk_box_pack_start(GTK_BOX(audio_vbox), frame, FALSE, FALSE, 0);
@@ -999,27 +868,19 @@ GtkWidget* create_audio_configuration()
 
     gtk_widget_show_all(audio_vbox);
 
+    if (!pulse_audio)
+        gtk_widget_show(alsa_conf);
+    else
+        gtk_widget_hide(alsa_conf);
+
     return audio_vbox;
 }
 
 /** Show/Hide the alsa configuration panel */
-SelectedAudioLayer get_selected_audio_api()
+gboolean must_show_alsa_conf()
 {
-    SelectedAudioLayer selected = UNKNOWN_AUDIO_LAYER;
     gchar *api = dbus_get_audio_manager();
-
-    if(g_strcmp0(api, ALSA_API_STR) == 0) {
-        selected = ALSA_LAYER_SELECTED;
-    }
-    else if (g_strcmp0(api, PULSEAUDIO_API_STR) == 0) {
-        selected = PULSEAUDIO_LAYER_SELECTED;
-    }
-    else {
-        DEBUG("ERROR UNKNOWN SELECTION");
-    }
-    
-
+    int ret = g_strcmp0(api, ALSA_API_STR);
     g_free(api);
-
-    return selected;
+    return ret == 0;
 }
diff --git a/gnome/src/config/audioconf.h b/gnome/src/config/audioconf.h
index 4d53f053ef..6f0b399f73 100644
--- a/gnome/src/config/audioconf.h
+++ b/gnome/src/config/audioconf.h
@@ -33,28 +33,15 @@
 
 #include "actions.h"
 
-/**
- * Selected audio layer enumeration type
- */
-typedef enum SelectedAudioLayer_ {
-    ALSA_LAYER_SELECTED,
-    PULSEAUDIO_LAYER_SELECTED,
-    UNKNOWN_AUDIO_LAYER,
-} SelectedAudioLayer;
-
-/**
- * Return the full audio configuration panel
- */
 GtkWidget* create_audio_configuration (void);
 
-/**
- * Returns the audio codec activation/deactivation & preference ordering box
- */
-GtkWidget* create_audiocodecs_box(account_t *);
+GtkWidget* api_box();
+GtkWidget* alsa_box();
+GtkWidget* pulse_box();
+GtkWidget* audiocodecs_box();
+GtkWidget* ringtone_box();
 
-/**
- * Returns the type of the selected api (i.e. ALSA or PULSEAUDIO)
- */
-SelectedAudioLayer get_selected_audio_api(void);
+gboolean get_api();
+gboolean must_show_alsa_conf ();
 
 #endif // __AUDIO_CONF_H
diff --git a/gnome/src/config/preferencesdialog.c b/gnome/src/config/preferencesdialog.c
index efaf7a98f7..3bd5057913 100644
--- a/gnome/src/config/preferencesdialog.c
+++ b/gnome/src/config/preferencesdialog.c
@@ -47,10 +47,10 @@
 #include "addressbook-config.h"
 #include "shortcuts-config.h"
 #include "hooks-config.h"
+#include "audioconf.h"
 #include "uimanager.h"
 #include "unused.h"
 #include "mainwindow.h"
-#include "audioconf.h"
 
 /**
  * Local variables
diff --git a/gnome/src/config/preferencesdialog.h b/gnome/src/config/preferencesdialog.h
index 523241e723..41b92082cb 100644
--- a/gnome/src/config/preferencesdialog.h
+++ b/gnome/src/config/preferencesdialog.h
@@ -38,6 +38,42 @@
  * @brief The Preferences window.
  */
 
+/**
+ * Fill the input audio plugin list widget with the data the server send
+ * Currently not used
+ */
+void preferences_dialog_fill_input_audio_plugin_list();
+
+/**
+ * Fill the output audio plugin list widget with the data the server send
+ */
+void preferences_dialog_fill_output_audio_plugin_list();
+
+/**
+ * Fill the output audio device list widget with the data the server send
+ */
+void preferences_dialog_fill_output_audio_device_list();
+
+/**
+ * Select an output audio device
+ */
+void select_active_output_audio_device();
+
+/**
+ * Fill the input audio device list widget with the data the server send
+ */
+void preferences_dialog_fill_input_audio_device_list();
+
+/**
+ * Select an input audio device
+ */
+void select_active_input_audio_device();
+
+/**
+ * Select an output audio plugin
+ */
+void select_active_output_audio_plugin();
+
 /**
  * Update the combo box state.
  * If the default plugin has been selected, the audio devices have to been unsensitive
diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c
index 3ccf76705a..33f76cacbd 100644
--- a/gnome/src/contacts/calltree.c
+++ b/gnome/src/contacts/calltree.c
@@ -33,7 +33,6 @@
 #include "calllist.h"
 #include "calltree.h"
 #include <stdlib.h>
-#include <glib/gprintf.h>
 
 #include "eel-gconf-extensions.h"
 #include "unused.h"
@@ -211,7 +210,7 @@ row_activated(GtkTreeView *tree_view UNUSED,
                 }
             } else {
                 // If history or contact: double click action places a new call
-                callable_obj_t* new_call = create_new_call(CALL, CALL_STATE_DIALING, "", selectedCall->_accountID, selectedCall->_peer_name, selectedCall->_peer_number);
+                callable_obj_t* new_call = create_new_call(CALL, CALL_STATE_DIALING, "", selectedCall->_accountID, selectedCall->_display_name, selectedCall->_peer_number);
 
                 calllist_add_call(current_calls_tab, new_call);
                 calltree_add_call(current_calls_tab, new_call, NULL);
@@ -332,6 +331,16 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS
     return TRUE;
 }
 
+static gchar *clean_display_number(gchar *name)
+{
+    const gchar SIP_PREFIX[] = "<sip:";
+    const gchar SIPS_PREFIX[] = "<sips:";
+    if (g_str_has_prefix(name, SIP_PREFIX))
+        name += (sizeof(SIP_PREFIX) - 1);
+    else if (g_str_has_prefix(name, SIPS_PREFIX))
+        name += (sizeof(SIPS_PREFIX) - 1);
+    return name;
+}
 
 static gchar *
 calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, const gchar *const audio_codec)
@@ -339,7 +348,7 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, con
     gchar display_number[strlen(c->_peer_number) + 1];
     strcpy(display_number, c->_peer_number);
 
-    if (c->_type != CALL || g_strcmp0(c->_history_state, OUTGOING_STRING)) {
+    if (c->_type != CALL || !call_was_outgoing(c)) {
         // Get the hostname for this call (NULL if not existent)
         gchar * hostname = g_strrstr(c->_peer_number, "@");
 
@@ -349,13 +358,14 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, con
     }
 
     // Different display depending on type
-    const gchar *name, *details = NULL;
+    gchar *name, *details = NULL;
 
-    if (*c->_peer_name) {
-        name = c->_peer_name;
+    if (*c->_display_name) {
+        name = c->_display_name;
         details = display_number;
     } else {
         name = display_number;
+        name = clean_display_number(name);
         details = "";
     }
 
@@ -712,7 +722,7 @@ calltree_update_call_recursive(calltab_t* tab, callable_obj_t * c, GtkTreeIter *
                 g_free(duration);
 
                 gchar *old_description = description;
-                description = g_strconcat(old_description , full_duration, NULL);
+                description = g_strconcat(old_description, full_duration, NULL);
                 g_free(full_duration);
                 g_free(old_description);
             }
diff --git a/gnome/src/dbus/callmanager-introspec.xml b/gnome/src/dbus/callmanager-introspec.xml
index 46cec40068..5c38193ffd 100644
--- a/gnome/src/dbus/callmanager-introspec.xml
+++ b/gnome/src/dbus/callmanager-introspec.xml
@@ -1,825 +1,781 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.CallManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			<p>The CallManager interface is used to manage
-			any call and conference related actions.</p>
-			<p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p>
-		</tp:docstring>
-		<method name="placeCall" tp:name-for-bindings="placeCall">
-			<tp:docstring>
-			  <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-			  <tp:docstring>
-			    The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
-			<tp:added version="0.9.8"/>
-			<tp:docstring>
-			  Place a call with the fist registered account, regarding to the account list order.
-			  <tp:rationale>
-			    Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)			
-			  </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="refuse" tp:name-for-bindings="refuse">
-			<tp:docstring>
-			  Refuse an incoming call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-
-		</method>
-
-		<method name="accept" tp:name-for-bindings="accept">
-			<tp:docstring>
-			  Answer an incoming call. Automatically put the current call on state HOLD.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUp" tp:name-for-bindings="hangUp">
-			<tp:docstring>
-			  Hangup a call in state "CURRENT" or "HOLD".
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUpConference" tp:name-for-bindings="hangUpConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hangup a conference, and every call participating to the conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The unique conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hold" tp:name-for-bindings="hold">
-			<tp:docstring>
-			  Place a call on hold.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unhold" tp:name-for-bindings="unhold">
-			<tp:docstring>
-			  Hold off a call, and place this call on state CURRENT.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="transfer" tp:name-for-bindings="transfer">
-			<tp:docstring>
-			  Transfer a call to given phone number.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    The phone number to transfer the call to.
-			  </tp:docstring>
-			</arg>
-		</method>
-		
-		<method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
-			<tp:docstring>
-			  Perform an attended transfer on two calls
-			</tp:docstring>
-			<arg type="s" name="transferID" direction="in">
-			  <tp:docstring>
-			    The callID of the call to be transfered.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="targetID" direction="in">
-			  <tp:docstring>
-			    The callID of the target call.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="playDTMF" tp:name-for-bindings="playDTMF">
-			<tp:docstring>
-			  Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server.
-			</tp:docstring>
-			<arg type="s" name="key" direction="in">
-			  <tp:docstring>
-			    Unicode charter for pressed key
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="startTone" tp:name-for-bindings="startTone">
-			<tp:docstring>
-			  Start audio stream and play tone..
-			</tp:docstring>
-			<arg type="i" name="start" direction="in"/>
-			<arg type="i" name="type" direction="in"/>
-		</method>
-
-		<method name="setVolume" tp:name-for-bindings="setVolume">
-			<tp:docstring>
-			  <p>Sets the volume using a linear scale [0,100].</p>
-			  <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="in">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getVolume" tp:name-for-bindings="getVolume">
-			<tp:docstring>
-			  <p>Return the volume value of the given device on a linear scale [0,100].</p>
-			  <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="out">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinParticipant" tp:name-for-bindings="joinParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join two participants together to create a 3-way conference including the current client.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="sel_callID" direction="in"/>
-			<arg type="s" name="drag_callID" direction="in"/>
-		</method>
+    <interface name="org.sflphone.SFLphone.CallManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            <p>The CallManager interface is used to manage call and conference related actions.</p>
+            <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID.
+            SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p>
+        </tp:docstring>
+        <method name="placeCall" tp:name-for-bindings="placeCall">
+            <tp:docstring>
+              <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+              <tp:docstring>
+                The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
+            <tp:added version="0.9.8"/>
+            <tp:docstring>
+              Place a call with the first registered account in the account list.
+              <tp:rationale>
+                Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)
+              </tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="refuse" tp:name-for-bindings="refuse">
+            <tp:docstring>
+              Refuse an incoming call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+
+        </method>
+
+        <method name="accept" tp:name-for-bindings="accept">
+            <tp:docstring>
+              Answer an incoming call. Automatically puts the current call on HOLD.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUp" tp:name-for-bindings="hangUp">
+            <tp:docstring>
+              Hangup a call in state "CURRENT" or "HOLD".
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUpConference" tp:name-for-bindings="hangUpConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hangup a conference, and every call participating to the conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The unique conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hold" tp:name-for-bindings="hold">
+            <tp:docstring>
+              Place a call on hold.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unhold" tp:name-for-bindings="unhold">
+            <tp:docstring>
+              Take a call off hold, and place this call in state CURRENT.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="transfer" tp:name-for-bindings="transfer">
+            <tp:docstring>
+              Transfer a call to the given phone number.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                The phone number to which the call will be transferred.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
+            <tp:docstring>
+              Perform an attended transfer on two calls.
+            </tp:docstring>
+            <arg type="s" name="transferID" direction="in">
+              <tp:docstring>
+                The callID of the call to be transfered.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="targetID" direction="in">
+              <tp:docstring>
+                The callID of the target call.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="playDTMF" tp:name-for-bindings="playDTMF">
+            <tp:docstring>
+              Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server.
+            </tp:docstring>
+            <arg type="s" name="key" direction="in">
+              <tp:docstring>
+                Unicode character for pressed key.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startTone" tp:name-for-bindings="startTone">
+            <tp:docstring>
+              Start audio stream and play tone.
+            </tp:docstring>
+            <arg type="i" name="start" direction="in"/>
+            <arg type="i" name="type" direction="in"/>
+        </method>
+
+        <method name="setVolume" tp:name-for-bindings="setVolume">
+            <tp:docstring>
+              <p>Sets the volume using a linear scale [0,100].</p>
+              <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="in">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getVolume" tp:name-for-bindings="getVolume">
+            <tp:docstring>
+              <p>Return the volume value of the given device on a linear scale [0,100].</p>
+              <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="out">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinParticipant" tp:name-for-bindings="joinParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join two participants together to create a 3-way conference including the current client.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="sel_callID" direction="in"/>
+            <arg type="s" name="drag_callID" direction="in"/>
+        </method>
 
                 <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-				<p>Create a conference from a list of participant</p>
-			<tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
-			</tp:docstring>
-			<arg type="as" name="participants" direction="in"/>
-		</method>
-
-		<method name="addParticipant" tp:name-for-bindings="addParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join a new particiant to an existing conference.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to add to the conference
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p>
-			  <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p>
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="detachParticipant" tp:name-for-bindings="detachParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinConference" tp:name-for-bindings="joinConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-				Join two conferences together.
-			</tp:docstring>
-			<arg type="s" name="sel_confID" direction="in"/>
-			<arg type="s" name="drag_confID" direction="in"/>
-		</method>
-
-		<method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a hashtable containing conference details.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The conference ID
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out">
-			  <tp:docstring>
-			    A map containing the ID of the conferences
-			    and their states:
-			    <ul>
-			      <li>ACTIVE_ATTACHED</li>
-			      <li>ACTIVE_DETACHED</li>
-			      <li>HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getConferenceList" tp:name-for-bindings="getConferenceList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a list containing all active
-			  conferences.
-			  <tp:rationale>To update client status, one should
-			  use <tp:member-ref>getParticipantList</tp:member-ref>
-			  with provided conference IDs.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of conferences.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setRecording" tp:name-for-bindings="setRecording">
-			<tp:docstring>
-			  Start recording a call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to record.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
-			<tp:docstring>
-			  Tells whether or not a call is being recorded.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="b" name="isRecording" direction="out">
-			  <tp:docstring>
-			    Returns true is the call is being recorded. False otherwise.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
-			<tp:docstring>
-			  Once after starting recording for the first time, this signal is emited to 
-			  provide the recorded file path to client application.
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="filepath"/>
-		</signal>
-
-		<signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
-			<tp:docstring/>
-			<arg type="s" name="filepath" />
-		</signal>
-			
-
-		<method name="getCallDetails" tp:name-for-bindings="getCallDetails">
-			<tp:docstring>
-			  Get all the details about a specific call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
-			  <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			    <p>A map containing the call details: </p>
-			    <ul>
-			      <li>ACCOUNTID</li>
-			      <li>PEER_NUMBER</li>
-			      <li>PEER_NAME</li>
-			      <li>DISPLAY_NAME</li>
-			      <li>CALL_STATE</li>
-			      <li>CALL_TYPE</li>
-			    </ul>  
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCallList" tp:name-for-bindings="getCallList">
-			<tp:docstring>
-			  Get the list of active calls.
-			  <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    A list of call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="out">
-			  <tp:docstring>	
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="codecName" direction="out"/>
-		</method>
-
-		<method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
-			<tp:docstring>
-				Send a text message to the specified call
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="message" direction="in"/>
-		</method>
-
-		<signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
-			<tp:docstring>
-			  <p>Notify that a cell have been created.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when call have been created by the daemon itself.</p>
-			  <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the calle. Clients must notify teh right account when receiving this signal.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to">
-			  <tp:docstring>
-			   The sip uri this call is trying to reach
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingCall" tp:name-for-bindings="incomingCall">
-			<tp:docstring>
-			  <p>Notify an incoming call.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when we receive a call from a remote peer</p>
-			  <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the callee. Clients must notify the right account when receiving this signal.	
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="from">
-			  <tp:docstring>
-			    The caller phone number.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
-			<tp:docstring>
-				Notify clients that a new text message has been received. 
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="from" />
-			<arg type="s" name="message" />
-		</signal>
-
-		<signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
-			<tp:docstring>
-			  <p>Notify of a change in a call state.</p> 
-			  <p>The client must subscribe to this signal.</p>
-			</tp:docstring>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state" >
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>INCOMING: Initial state of incoming calls</li>
-			      <li>RINGING: Initial state of received outgoing call</li>
-			      <li>CURRENT: The normal active state of an answered call</li>
-			      <li>HUNGUP: Notify that the call has been hungup by peer</li>
-			      <li>BUSY</li>
-			      <li>FAILURE: Error when processing a call</li>
-			      <li>HOLD</li>
-			      <li>UNHOLD_CURRENT</li>
-			      <li>UNHOLD_RECORD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Notify of a change in the conferences state
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>ACTIVE_ATTACHED: SFLphone user is
-			      participating to this conference</li>
-			      <li>ACTIVE_DETACHED: This situation can
-			      occur if a call is received while
-			      SFLphone user is participating to a
-			      conference. In this case, one can leave
-			      the conference by answering the
-			      call. Other participants may continue
-			      conferencing normally.</li>
-			      <li>HOLD: Each call in this conference
-			      is on state HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="getParticipantList" tp:name-for-bindings="getParticipantList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Get the call IDs of every participant to a given conference. The client should keep and update the list of participant.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of the call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
-			</tp:docstring>
-			<arg type="s" name="confID">  
-			  <tp:docstring>
-			    A new conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="holdConference" tp:name-for-bindings="holdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold on every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unholdConference" tp:name-for-bindings="unholdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold off every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
- 	        
-                <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="filepath" direction="in"/>
-			<arg type="b" name="result" direction="out"/>
-	        </method>
-
-		<method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring/>
-			<arg type="s" name="filepath" direction="in"/>
-		</method>
-
-		<signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
-			<tp:docstring>
-			  <p>Call state changed, SFLphone received a notification
-			    from registrar concerning this call.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			<arg type="s" name="state"  />
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			<arg type="i" name="code"  />
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-		</signal>    
-
-		<signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
-			<tp:docstring>
-				<p>Account state changed, SFLphone received a notification
-				from registrar.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" >
-			  <tp:docstring>
-			    The account ID
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="code">            
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-			</arg>
-		</signal> 
-
-		<signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
-			<tp:docstring>
-			  Notify the clients of the voicemail number for a specific account, if applicable.
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="count">
-			  <tp:docstring>
-			    The number of waiting messages.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
-		        <tp:docstring>
-			  <p>Notify clients of a volume level
-			    change.</p> 
-			  <p>This signal occurs only if ALSA is
-			    enabled since Pulseaudio streams are
-			    managed externally. </p>
-			</tp:docstring>
-			<arg type="s" name="device">
-			  <tp:docstring>
-			    The device: mic or speaker	
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value">
-			  <tp:docstring>
-			    The new volume value	
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
-			<tp:docstring>
-			  <p>Transfer has been successfully
-			  processed. Client should remove transfered
-			  call from call list as it is no longer
-			  accessible in SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="transferFailed" tp:name-for-bindings="transferFailed">
-			<tp:docstring>
-			  <p>Transfer operation failed. Corespondin
-			  call is no longer accessible in
-			  SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Signal sent on SDES session success. Media transmission is encripted
-			  for this call only. It does not apply for a
-			  conference.</p> 
-			  <p>A conference can be considered to be secured if and only if each
-			  participant is secured.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"/>
-		</signal>
-
-		<signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Sinal sent to notify that SDES session
-			  failed.</p> 
-			  <p>Media transmission is not encrypted.</p>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<!-- ZRTP Methods and Signals -->
-		<signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			<arg type="s" name="cipher"  />
-		</signal>
-
-		<signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="reason"  />
-			<arg type="s" name="severity" />
-		</signal>
-
-		<signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="showSAS" tp:name-for-bindings="showSAS">
-			<tp:added version="0.9.7"/>
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="sas"  />
-			<arg type="b" name="verified"/>
-		</signal>
-
-		<method name="setSASVerified" tp:name-for-bindings="setSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="requestGoClear" tp:name-for-bindings="requestGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="accepted" direction="in"/>
-		</method>
-
-		<method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="yesNo" direction="in"/>
-		</method>
-
-	</interface>
+            <tp:added version="0.9.14"/>
+            <tp:docstring>
+                <p>Create a conference from a list of participants</p>
+            <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
+            </tp:docstring>
+            <arg type="as" name="participants" direction="in"/>
+        </method>
+
+        <method name="addParticipant" tp:name-for-bindings="addParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join a new particiant to an existing conference.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to add to the conference
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p>
+              <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p>
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="detachParticipant" tp:name-for-bindings="detachParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinConference" tp:name-for-bindings="joinConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+                Join two conferences together.
+            </tp:docstring>
+            <arg type="s" name="sel_confID" direction="in"/>
+            <arg type="s" name="drag_confID" direction="in"/>
+        </method>
+
+        <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a hashtable containing conference details.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The conference ID
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out">
+              <tp:docstring>
+                A map containing the ID of the conferences
+                and their states:
+                <ul>
+                  <li>ACTIVE_ATTACHED</li>
+                  <li>ACTIVE_DETACHED</li>
+                  <li>HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getConferenceList" tp:name-for-bindings="getConferenceList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a list containing all active
+              conferences.
+              <tp:rationale>To update client status, one should
+              use <tp:member-ref>getParticipantList</tp:member-ref>
+              with provided conference IDs.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of conferences.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setRecording" tp:name-for-bindings="setRecording">
+            <tp:docstring>
+              Start recording a call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to record.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
+            <tp:docstring>
+              Tells whether or not a call is being recorded.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="b" name="isRecording" direction="out">
+              <tp:docstring>
+                Returns true is the call is being recorded. False otherwise.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
+            <tp:docstring>
+              Once after starting recording for the first time, this signal is emited to 
+              provide the recorded file path to client application.
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="filepath"/>
+        </signal>
+
+        <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
+            <tp:docstring/>
+            <arg type="s" name="filepath" />
+        </signal>
+
+
+        <method name="getCallDetails" tp:name-for-bindings="getCallDetails">
+            <tp:docstring>
+              Get all the details about a specific call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
+              <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+                <p>A map containing the call details: </p>
+                <ul>
+                  <li>ACCOUNTID</li>
+                  <li>PEER_NUMBER</li>
+                  <li>PEER_NAME</li>
+                  <li>DISPLAY_NAME</li>
+                  <li>CALL_STATE</li>
+                  <li>CALL_TYPE</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCallList" tp:name-for-bindings="getCallList">
+            <tp:docstring>
+              Get the list of active calls.
+              <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                A list of call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="codecName" direction="out"/>
+        </method>
+
+        <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
+            <tp:docstring>
+                Send a text message to the specified call
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="message" direction="in"/>
+        </method>
+
+        <signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
+            <tp:docstring>
+              <p>Notify that a call has been created.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other actions for
+                this call. This signal is emitted when call haves been created by the daemon itself.</p>
+              <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the call. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to">
+              <tp:docstring>
+               The SIP URI this call is trying to reach.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingCall" tp:name-for-bindings="incomingCall">
+            <tp:docstring>
+              <p>Notify an incoming call.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other action for
+                this call. This signal is emitted when we receive a call from a remote peer</p>
+              <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the callee. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="from">
+              <tp:docstring>
+                The caller phone number.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
+            <tp:docstring>
+                Notify clients that a new text message has been received. 
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="from" />
+            <arg type="s" name="message" />
+        </signal>
+
+        <signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
+            <tp:docstring>
+              <p>Notify of a change in a call state.</p> 
+              <p>The client must subscribe to this signal.</p>
+            </tp:docstring>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state" >
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>INCOMING: Initial state of incoming calls</li>
+                  <li>RINGING: Initial state of received outgoing call</li>
+                  <li>CURRENT: The normal active state of an answered call</li>
+                  <li>HUNGUP: Notify that the call has been hungup by peer</li>
+                  <li>BUSY</li>
+                  <li>FAILURE: Error when processing a call</li>
+                  <li>HOLD</li>
+                  <li>UNHOLD_CURRENT</li>
+                  <li>UNHOLD_RECORD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Notify of a change in the conferences state
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>ACTIVE_ATTACHED: SFLphone user is
+                  participating to this conference</li>
+                  <li>ACTIVE_DETACHED: This situation can
+                  occur if a call is received while
+                  SFLphone user is participating to a
+                  conference. In this case, one can leave
+                  the conference by answering the
+                  call. Other participants may continue
+                  conferencing normally.</li>
+                  <li>HOLD: Each call in this conference
+                  is on state HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="getParticipantList" tp:name-for-bindings="getParticipantList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Get the call IDs of every participant to a given conference. The client should keep and update the list of participants.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of the call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                A new conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="holdConference" tp:name-for-bindings="holdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold every call which is participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unholdConference" tp:name-for-bindings="unholdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold off every call participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <arg type="s" name="filepath" direction="in"/>
+            <arg type="b" name="result" direction="out"/>
+        </method>
+
+        <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <tp:docstring/>
+            <arg type="s" name="filepath" direction="in"/>
+        </method>
+
+        <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
+            <tp:docstring>
+              <p>Call state changed, SFLphone received a notification
+                from registrar concerning this call.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"  />
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            <arg type="s" name="state"  />
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            <arg type="i" name="code"  />
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+        </signal>
+
+        <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
+            <tp:docstring>
+                <p>Account state changed, SFLphone received a notification
+                from registrar.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" >
+              <tp:docstring>
+                The account ID
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="code">
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+            </arg>
+        </signal> 
+
+        <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
+            <tp:docstring>
+              Notify the clients of the voicemail number for a specific account, if applicable.
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID.
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="count">
+              <tp:docstring>
+                The number of waiting messages.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
+                <tp:docstring>
+              <p>Notify clients of a volume level change.</p> 
+              <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p>
+            </tp:docstring>
+            <arg type="s" name="device">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value">
+              <tp:docstring>
+                The new volume value
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
+            <tp:docstring>
+              <p>Transfer has been successfully
+              processed. Client should remove transfered
+              call from call list as it is no longer
+              accessible in SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="transferFailed" tp:name-for-bindings="transferFailed">
+            <tp:docstring>
+              <p>Transfer operation failed. Corespondin
+              call is no longer accessible in
+              SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Signal sent on SDES session success. Media transmission is encripted
+              for this call only. It does not apply for a conference.</p> 
+              <p>A conference can be considered to be secured if and only if each
+              participant is secured.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"/>
+        </signal>
+
+        <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Sinal sent to notify that SDES session failed.</p> 
+              <p>Media transmission is not encrypted.</p>
+            </tp:docstring>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <!-- ZRTP Methods and Signals -->
+        <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID"  />
+            <arg type="s" name="cipher"  />
+        </signal>
+
+        <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="reason"  />
+            <arg type="s" name="severity" />
+        </signal>
+
+        <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="showSAS" tp:name-for-bindings="showSAS">
+            <tp:added version="0.9.7"/>
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="sas"  />
+            <arg type="b" name="verified"/>
+        </signal>
+
+        <method name="setSASVerified" tp:name-for-bindings="setSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="requestGoClear" tp:name-for-bindings="requestGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="accepted" direction="in"/>
+        </method>
+
+        <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="yesNo" direction="in"/>
+        </method>
+
+    </interface>
 </node>
diff --git a/gnome/src/dbus/configurationmanager-introspec.xml b/gnome/src/dbus/configurationmanager-introspec.xml
index 6271c12c9d..5f30f25268 100644
--- a/gnome/src/dbus/configurationmanager-introspec.xml
+++ b/gnome/src/dbus/configurationmanager-introspec.xml
@@ -1,107 +1,107 @@
 <?xml version="1.0" ?>
 <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.ConfigurationManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
-		</tp:docstring>
-
-		<method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
-			<tp:docstring>
-				Get all parameters of the specified account.
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-					The account ID
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
-				<tp:docstring>
-					The available keys / parameters are:
-					<ul>
-						<li>CONFIG_ACCOUNT_ENABLE:	True or False (Default: True)</li>
-						<li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
-						<li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
-						<li>HOSTNAME: The IP adress or hostname of the registrar</li>
-						<li>USERNAME: The username (or extension) of the account</li>
-						<li>PASSWORD: The password associated to the account</li>
-						<li>REALM</li>
-						<li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
-						<li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
-						<li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
-						<li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
-						<li>PUBLISHED_ADDRESS: The SIP published address</li>
-						<li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
-						<li>PUBLISHED_PORT: The SIP published port</li>
-						<li>DISPLAY_NAMEL: The display name</li>
-						<li>STUN_ENABLE: True or False (Default: False)</li>
-						<li>STUN_SERVER: The STUN server address</li>
-						<li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
-						<li>REGISTRATION_STATE_CODE</li>
-						<li>REGISTRATION_STATE_DESCRIPTION</li>
-						<li>SRTP_KEY_EXCHANGE</li>
-						<li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
-						<li>SRTP_RTP_FALLBACK</li>
-						<li>ZRTP_DISPLAY_SAS</li>
-						<li>ZRTP_DISPLAY_SAS_ONCE</li>
-						<li>ZRTP_HELLO_HASH</li>
-						<li>ZRTP_NOT_SUPP_WARNING</li>
-						<li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
-						<li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
-						<li>TLS_CA_LIST_FILE</li>
-						<li>TLS_CERTIFICATE_FILE</li>
-						<li>TLS_PRIVATE_KEY_FILE</li>
-						<li>TLS_METHOD</li>
-						<li>TLS_CIPHERS</li>
-						<li>TLS_SERVER_NAME</li>
-						<li>TLS_VERIFY_SERVER</li>
-						<li>TLS_VERIFY_CLIENT</li>
-						<li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
-					</ul>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
-			<tp:docstring>
-				Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
-				<tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
-				<tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
-			</tp:docstring>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setCredentials" tp:name-for-bindings="setCredentials">
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
-			<arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
+    <interface name="org.sflphone.SFLphone.ConfigurationManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
+        </tp:docstring>
+
+        <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
+            <tp:docstring>
+                Get all parameters of the specified account.
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                    The account ID
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+                <tp:docstring>
+                    The available keys / parameters are:
+                    <ul>
+                        <li>CONFIG_ACCOUNT_ENABLE:    True or False (Default: True)</li>
+                        <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
+                        <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
+                        <li>HOSTNAME: The IP adress or hostname of the registrar</li>
+                        <li>USERNAME: The username (or extension) of the account</li>
+                        <li>PASSWORD: The password associated to the account</li>
+                        <li>REALM</li>
+                        <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
+                        <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
+                        <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
+                        <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
+                        <li>PUBLISHED_ADDRESS: The SIP published address</li>
+                        <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
+                        <li>PUBLISHED_PORT: The SIP published port</li>
+                        <li>DISPLAY_NAMEL: The display name</li>
+                        <li>STUN_ENABLE: True or False (Default: False)</li>
+                        <li>STUN_SERVER: The STUN server address</li>
+                        <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
+                        <li>REGISTRATION_STATE_CODE</li>
+                        <li>REGISTRATION_STATE_DESCRIPTION</li>
+                        <li>SRTP_KEY_EXCHANGE</li>
+                        <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
+                        <li>SRTP_RTP_FALLBACK</li>
+                        <li>ZRTP_DISPLAY_SAS</li>
+                        <li>ZRTP_DISPLAY_SAS_ONCE</li>
+                        <li>ZRTP_HELLO_HASH</li>
+                        <li>ZRTP_NOT_SUPP_WARNING</li>
+                        <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
+                        <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
+                        <li>TLS_CA_LIST_FILE</li>
+                        <li>TLS_CERTIFICATE_FILE</li>
+                        <li>TLS_PRIVATE_KEY_FILE</li>
+                        <li>TLS_METHOD</li>
+                        <li>TLS_CIPHERS</li>
+                        <li>TLS_SERVER_NAME</li>
+                        <li>TLS_VERIFY_SERVER</li>
+                        <li>TLS_VERIFY_CLIENT</li>
+                        <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
+            <tp:docstring>
+                Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
+                <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
+                <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
+            </tp:docstring>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setCredentials" tp:name-for-bindings="setCredentials">
+            <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
             <tp:docstring>
             Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved.
             </tp:docstring>
             <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
+            <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
             <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
             <tp:docstring>
             Available parameters are:
@@ -134,587 +134,584 @@
             </arg>
         </method>
 
-	   <method name="getCredentials" tp:name-for-bindings="getCredentials">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="credentialInformation" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="addAccount" tp:name-for-bindings="addAccount">
-		   <tp:docstring>
-			   Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-			   <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
-			   <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
-			   <tp:docstring>
-					The new account settings
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="createdAccountId" direction="out">
-			   <tp:docstring>
-					A new account ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
-		   <tp:docstring>
-				Update the accounts order.
-				<tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
-		   </tp:docstring>
-		   <arg type="s" name="order" direction="in">
-			   <tp:docstring>
-				   An ordered list of account IDs, delimited by '/'
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="removeAccount" tp:name-for-bindings="removeAccount">
-		   <tp:docstring>
-			   Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-		   </tp:docstring>
-		   <arg type="s" name="accoundID" direction="in">
-			   <tp:docstring>
-					The account to remove, identified by its ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAccountList" tp:name-for-bindings="getAccountList">
-		   <tp:docstring>
-				Get a list of all created accounts, as stored by the core.
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-				   A list of account IDs
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="sendRegister" tp:name-for-bindings="sendRegister">
-		   <tp:docstring>
-				Send account registration (REGISTER) to the registrar.
-		   </tp:docstring>
-		   the account if expire=1, unregister if expire=0.
-
-		   @param[in] input accountID
-		   -->
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-					The account ID
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="expire" direction="in">
-			   <tp:docstring>
-					<p>To register, expire must be 1.</p>
-					<p>To un-register, expire must be 0.</p>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="enabled" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!--      ///////////////////////               -->
-
-	   <!-- Codecs-related methods -->
-
-	   <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="payload" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="list" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Audio devices methods -->
-
-	   <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-
-	   <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="name" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="index" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="plugin" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+       <method name="getCredentials" tp:name-for-bindings="getCredentials">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <arg type="aa{ss}" name="credentialInformation" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="addAccount" tp:name-for-bindings="addAccount">
+           <tp:docstring>
+               Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+               <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
+               <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
+               <tp:docstring>
+                    The new account settings
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="createdAccountId" direction="out">
+               <tp:docstring>
+                    A new account ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+           <tp:docstring>
+                Update the accounts order.
+                <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
+           </tp:docstring>
+           <arg type="s" name="order" direction="in">
+               <tp:docstring>
+                   An ordered list of account IDs, delimited by '/'
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="removeAccount" tp:name-for-bindings="removeAccount">
+           <tp:docstring>
+               Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+           </tp:docstring>
+           <arg type="s" name="accoundID" direction="in">
+               <tp:docstring>
+                    The account to remove, identified by its ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAccountList" tp:name-for-bindings="getAccountList">
+           <tp:docstring>
+                Get a list of all created accounts, as stored by the core.
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+                   A list of account IDs
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="sendRegister" tp:name-for-bindings="sendRegister">
+           <tp:docstring>
+                Send account registration (REGISTER) to the registrar.
+           </tp:docstring>
+           the account if expire=1, unregister if expire=0.
+
+           @param[in] input accountID
+           -->
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+                    The account ID
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="expire" direction="in">
+               <tp:docstring>
+                    <p>To register, expire must be 1.</p>
+                    <p>To un-register, expire must be 0.</p>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="enabled" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!--      ///////////////////////               -->
+
+       <!-- Codecs-related methods -->
+
+       <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="payload" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="list" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Audio devices methods -->
+
+       <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="audioPlugin" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+
+       <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="name" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="index" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="plugin" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="in">
-	       </arg>
-	   </method>
-
-	   <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="out">
-	       </arg>
-	   </method>
-
-
-	   <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <!--    General Settings Panel         -->
-
-	   <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="level" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook configuration -->
-	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook list -->
-	   <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Hook configuration -->
-	   <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+           </arg>
+       </method>
+
+       <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+           </arg>
+       </method>
+
+
+       <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <!--    General Settings Panel         -->
+
+       <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+       </method>
+
+       <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="level" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook configuration -->
+       <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook list -->
+       <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Hook configuration -->
+       <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getHistory" tp:name-for-bindings="getHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
            <!-- Return a List of type Dict<string, string> >...a List of Dicts -->
            <arg type="aa{ss}" name="entries" direction="out"/>
-	   </method>
-
-	   <method name="setHistory" tp:name-for-bindings="setHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="entries" direction="in">
-		   </arg>
-	   </method>
-
-	   <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-	   </signal>
-
-	   <signal name="errorAlert" tp:name-for-bindings="errorAlert">
-		   <arg type="i" name="code">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </signal>
-
-	   <!-- TLS Methods -->
-	   <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
+       </method>
+
+       <method name="clearHistory" tp:name-for-bindings="clearHistory">
+       </method>
+
+       <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+       </signal>
+
+       <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+           <arg type="i" name="code">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </signal>
+
+       <!-- TLS Methods -->
+       <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="interface" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="address" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="interface" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="address" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
    </interface>
-	   </node>
+</node>
diff --git a/gnome/src/dbus/dbus.c b/gnome/src/dbus/dbus.c
index e4cc43bc50..cbf8537ddf 100644
--- a/gnome/src/dbus/dbus.c
+++ b/gnome/src/dbus/dbus.c
@@ -73,13 +73,13 @@ incoming_call_cb(DBusGProxy *proxy UNUSED, const gchar* accountID,
                  const gchar* callID, const gchar* from, void * foo  UNUSED)
 {
     // We receive the from field under a formatted way. We want to extract the number and the name of the caller
-    gchar *peer_name = call_get_peer_name(from);
+    gchar *display_name = call_get_display_name(from);
     gchar *peer_number = call_get_peer_number(from);
 
-    callable_obj_t *c = create_new_call(CALL, CALL_STATE_INCOMING, callID, accountID, peer_name, peer_number);
+    callable_obj_t *c = create_new_call(CALL, CALL_STATE_INCOMING, callID, accountID, display_name, peer_number);
 
     g_free(peer_number);
-    g_free(peer_name);
+    g_free(display_name);
 
     status_tray_icon_blink(TRUE);
     popup_main_window();
@@ -355,8 +355,9 @@ record_playback_stopped_cb(DBusGProxy *proxy UNUSED, const gchar *filepath)
             ERROR("DBUS: ERROR: Could not find %dth call", i);
             break;
         } else if (element->type == HIST_CALL &&
-                   g_strcmp0(element->elem.call->_recordfile, filepath) == 0)
+                   g_strcmp0(element->elem.call->_recordfile, filepath) == 0) {
             element->elem.call->_record_is_playing = FALSE;
+        }
     }
 
     update_actions();
@@ -1715,6 +1716,17 @@ dbus_get_history_limit(void)
     return (guint) days;
 }
 
+void 
+dbus_clear_history(void)
+{
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_clear_history(
+        configurationManagerProxy, &error);
+
+    if (error)
+        g_error_free(error);
+}
+
 void
 dbus_set_audio_manager(const gchar *api)
 {
@@ -1957,20 +1969,6 @@ dbus_get_history(void)
     return entries;
 }
 
-void
-dbus_set_history(const GPtrArray *entries)
-{
-    GError *error = NULL;
-
-    org_sflphone_SFLphone_ConfigurationManager_set_history(
-        configurationManagerProxy, entries, &error);
-
-    if (error) {
-        ERROR("Error calling org_sflphone_SFLphone_ConfigurationlManager_set_history");
-        g_error_free(error);
-    }
-}
-
 void
 dbus_confirm_sas(const callable_obj_t * c)
 {
diff --git a/gnome/src/dbus/dbus.h b/gnome/src/dbus/dbus.h
index 8ff9027cb9..7a2574a120 100644
--- a/gnome/src/dbus/dbus.h
+++ b/gnome/src/dbus/dbus.h
@@ -477,12 +477,7 @@ void dbus_set_accounts_order (const gchar* order);
  */
 GPtrArray *dbus_get_history(void);
 
-/**
- * Set the history entries into the daemon. The daemon then writes the content 
- * of this list into the history file
- * @param A list of serialized history entries
- */
-void dbus_set_history (const GPtrArray *history);
+void dbus_clear_history(void);
 
 void sflphone_display_transfer_status (const gchar* message);
 
diff --git a/gnome/src/imwindow.c b/gnome/src/imwindow.c
index 9b170a22c7..d7841631fa 100644
--- a/gnome/src/imwindow.c
+++ b/gnome/src/imwindow.c
@@ -206,7 +206,7 @@ im_window_add_tab(IMWidget *im)
     im->tab = tab_container;
 
     if (im_widget_call)
-        tab_label = gtk_label_new(*im_widget_call->_peer_name ? im_widget_call->_peer_name : im_widget_call->_peer_number);
+        tab_label = gtk_label_new(*im_widget_call->_display_name ? im_widget_call->_display_name : im_widget_call->_peer_number);
     else if (im_widget_conf)
         tab_label = gtk_label_new("Conferencing");
     else
diff --git a/gnome/src/sflphone_const.h b/gnome/src/sflphone_const.h
index d15b2645de..fd7cec91d2 100644
--- a/gnome/src/sflphone_const.h
+++ b/gnome/src/sflphone_const.h
@@ -140,7 +140,7 @@
 /** Behaviour of the main window on incoming calls */
 #define __POPUP_WINDOW  (eel_gconf_get_integer (POPUP_ON_CALL))
 /** Show/Hide the volume controls */
-#define SHOW_VOLUME	(eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && (ALSA_LAYER_SELECTED == get_selected_audio_api()))
+#define SHOW_VOLUME	(eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && must_show_alsa_conf())
 
 /** DTMF type */
 #define OVERRTP "overrtp"
diff --git a/gnome/src/uimanager.c b/gnome/src/uimanager.c
index 07a84dd381..3145a55ca6 100644
--- a/gnome/src/uimanager.c
+++ b/gnome/src/uimanager.c
@@ -104,7 +104,7 @@ remove_from_toolbar(GtkWidget *widget)
 }
 
 static bool
-is_non_empty_string(const char *str)
+is_non_empty(const char *str)
 {
     return str && strlen(str) > 0;
 }
@@ -120,8 +120,6 @@ static void add_to_toolbar(GtkWidget *toolbar, GtkWidget *item, int pos)
 void
 update_actions()
 {
-    DEBUG("UIManager: Update action");
-
     gtk_action_set_sensitive(newCallAction_, TRUE);
     gtk_action_set_sensitive(pickUpAction_, FALSE);
     gtk_action_set_sensitive(hangUpAction_, FALSE);
@@ -268,7 +266,7 @@ update_actions()
                     if (active_calltree_tab == current_calls_tab)
                         add_to_toolbar(toolbar_, hangUpWidget_, pos++);
                     else if (active_calltree_tab == history_tab) {
-                        if (is_non_empty_string(selectedCall->_recordfile)) {
+                        if (is_non_empty(selectedCall->_recordfile)) {
                             if (selectedCall->_record_is_playing)
                                 add_to_toolbar(toolbar_, stopRecordWidget_, pos);
                             else
@@ -386,7 +384,7 @@ update_actions()
                         add_to_toolbar(toolbar_, imToolbar_, pos);
                     }
                 } else if (active_calltree_tab == history_tab) {
-                    if (is_non_empty_string(selectedConf->_recordfile)) {
+                    if (is_non_empty(selectedConf->_recordfile)) {
                         int pos = 2;
                         if (selectedConf->_record_is_playing)
                             add_to_toolbar(toolbar_, stopRecordWidget_, pos);
@@ -802,7 +800,7 @@ call_back(void * foo UNUSED)
     }
 
     callable_obj_t *new_call = create_new_call(CALL, CALL_STATE_DIALING, "",
-                               "", selected_call->_peer_name,
+                               "", selected_call->_display_name,
                                selected_call->_peer_number);
 
     calllist_add_call(current_calls_tab, new_call);
@@ -897,7 +895,7 @@ edit_paste(void * foo UNUSED)
                     gchar * temp = g_strconcat(selectedCall->_peer_number,
                                                oneNo, NULL);
                     g_free(selectedCall->_peer_info);
-                    selectedCall->_peer_info = get_peer_info(temp, selectedCall->_peer_name);
+                    selectedCall->_peer_info = get_peer_info(temp, selectedCall->_display_name);
                     g_free(temp);
                     g_free(oneNo);
                     calltree_update_call(current_calls_tab, selectedCall);
@@ -926,6 +924,7 @@ static void
 clear_history(void)
 {
     calllist_clean_history();
+    dbus_clear_history();
 }
 
 /**
@@ -1485,7 +1484,7 @@ ok_cb(GtkWidget *widget UNUSED, gpointer userdata)
 
     // Create the new call
     callable_obj_t *modified_call = create_new_call(CALL, CALL_STATE_DIALING, "", original->_accountID,
-                                    original->_peer_name, new_number);
+                                    original->_display_name, new_number);
 
     // Update the internal data structure and the GUI
     calllist_add_call(current_calls_tab, modified_call);
@@ -1576,10 +1575,9 @@ create_menus(GtkUIManager *ui_manager)
     volumeToggle_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/VolumeControls");
 
     // Set the toggle buttons
-    SelectedAudioLayer selected = get_selected_audio_api(); 
     gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/Dialpad")), eel_gconf_get_boolean(CONF_SHOW_DIALPAD));
     gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(volumeToggle_),(gboolean) SHOW_VOLUME);
-    gtk_action_set_sensitive(volumeToggle_, (ALSA_LAYER_SELECTED == selected) ? TRUE : FALSE);
+    gtk_action_set_sensitive(volumeToggle_, must_show_alsa_conf());
     gtk_action_set_sensitive(gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/Toolbar"), FALSE);
 
     /* Add the loading icon at the right of the toolbar. It is used for addressbook searches. */
diff --git a/gnome/src/widget/imwidget.c b/gnome/src/widget/imwidget.c
index fcfee2d551..ec7a686168 100644
--- a/gnome/src/widget/imwidget.c
+++ b/gnome/src/widget/imwidget.c
@@ -345,7 +345,7 @@ im_widget_infobar(IMWidget *im)
     gchar *msg1;
 
     if (im_widget_call)
-        msg1 = g_strdup_printf("Calling %s  %s", im_widget_call->_peer_number, im_widget_call->_peer_name);
+        msg1 = g_strdup_printf("Calling %s  %s", im_widget_call->_peer_number, im_widget_call->_display_name);
     else if (im_widget_conf)
         msg1 = g_strdup_printf("Conferencing");
     else
diff --git a/kde/src/dbus/callmanager-introspec.xml b/kde/src/dbus/callmanager-introspec.xml
index 46cec40068..5c38193ffd 100755
--- a/kde/src/dbus/callmanager-introspec.xml
+++ b/kde/src/dbus/callmanager-introspec.xml
@@ -1,825 +1,781 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.CallManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			<p>The CallManager interface is used to manage
-			any call and conference related actions.</p>
-			<p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p>
-		</tp:docstring>
-		<method name="placeCall" tp:name-for-bindings="placeCall">
-			<tp:docstring>
-			  <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-			  <tp:docstring>
-			    The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
-			<tp:added version="0.9.8"/>
-			<tp:docstring>
-			  Place a call with the fist registered account, regarding to the account list order.
-			  <tp:rationale>
-			    Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)			
-			  </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="refuse" tp:name-for-bindings="refuse">
-			<tp:docstring>
-			  Refuse an incoming call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-
-		</method>
-
-		<method name="accept" tp:name-for-bindings="accept">
-			<tp:docstring>
-			  Answer an incoming call. Automatically put the current call on state HOLD.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUp" tp:name-for-bindings="hangUp">
-			<tp:docstring>
-			  Hangup a call in state "CURRENT" or "HOLD".
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hangUpConference" tp:name-for-bindings="hangUpConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hangup a conference, and every call participating to the conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The unique conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="hold" tp:name-for-bindings="hold">
-			<tp:docstring>
-			  Place a call on hold.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unhold" tp:name-for-bindings="unhold">
-			<tp:docstring>
-			  Hold off a call, and place this call on state CURRENT.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="transfer" tp:name-for-bindings="transfer">
-			<tp:docstring>
-			  Transfer a call to given phone number.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The callID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to" direction="in">
-			  <tp:docstring>
-			    The phone number to transfer the call to.
-			  </tp:docstring>
-			</arg>
-		</method>
-		
-		<method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
-			<tp:docstring>
-			  Perform an attended transfer on two calls
-			</tp:docstring>
-			<arg type="s" name="transferID" direction="in">
-			  <tp:docstring>
-			    The callID of the call to be transfered.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="targetID" direction="in">
-			  <tp:docstring>
-			    The callID of the target call.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="playDTMF" tp:name-for-bindings="playDTMF">
-			<tp:docstring>
-			  Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server.
-			</tp:docstring>
-			<arg type="s" name="key" direction="in">
-			  <tp:docstring>
-			    Unicode charter for pressed key
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="startTone" tp:name-for-bindings="startTone">
-			<tp:docstring>
-			  Start audio stream and play tone..
-			</tp:docstring>
-			<arg type="i" name="start" direction="in"/>
-			<arg type="i" name="type" direction="in"/>
-		</method>
-
-		<method name="setVolume" tp:name-for-bindings="setVolume">
-			<tp:docstring>
-			  <p>Sets the volume using a linear scale [0,100].</p>
-			  <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="in">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getVolume" tp:name-for-bindings="getVolume">
-			<tp:docstring>
-			  <p>Return the volume value of the given device on a linear scale [0,100].</p>
-			  <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="device" direction="in">
-			  <tp:docstring>
-			    The device: mic or speaker
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value" direction="out">
-			  <tp:docstring>
-			    The volume value (between 0 and 100)
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinParticipant" tp:name-for-bindings="joinParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join two participants together to create a 3-way conference including the current client.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="sel_callID" direction="in"/>
-			<arg type="s" name="drag_callID" direction="in"/>
-		</method>
+    <interface name="org.sflphone.SFLphone.CallManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            <p>The CallManager interface is used to manage call and conference related actions.</p>
+            <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID.
+            SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p>
+        </tp:docstring>
+        <method name="placeCall" tp:name-for-bindings="placeCall">
+            <tp:docstring>
+              <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+              <tp:docstring>
+                The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
+            <tp:added version="0.9.8"/>
+            <tp:docstring>
+              Place a call with the first registered account in the account list.
+              <tp:rationale>
+                Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)
+              </tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="refuse" tp:name-for-bindings="refuse">
+            <tp:docstring>
+              Refuse an incoming call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+
+        </method>
+
+        <method name="accept" tp:name-for-bindings="accept">
+            <tp:docstring>
+              Answer an incoming call. Automatically puts the current call on HOLD.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUp" tp:name-for-bindings="hangUp">
+            <tp:docstring>
+              Hangup a call in state "CURRENT" or "HOLD".
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hangUpConference" tp:name-for-bindings="hangUpConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hangup a conference, and every call participating to the conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The unique conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="hold" tp:name-for-bindings="hold">
+            <tp:docstring>
+              Place a call on hold.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unhold" tp:name-for-bindings="unhold">
+            <tp:docstring>
+              Take a call off hold, and place this call in state CURRENT.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="transfer" tp:name-for-bindings="transfer">
+            <tp:docstring>
+              Transfer a call to the given phone number.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The callID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to" direction="in">
+              <tp:docstring>
+                The phone number to which the call will be transferred.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
+            <tp:docstring>
+              Perform an attended transfer on two calls.
+            </tp:docstring>
+            <arg type="s" name="transferID" direction="in">
+              <tp:docstring>
+                The callID of the call to be transfered.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="targetID" direction="in">
+              <tp:docstring>
+                The callID of the target call.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="playDTMF" tp:name-for-bindings="playDTMF">
+            <tp:docstring>
+              Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server.
+            </tp:docstring>
+            <arg type="s" name="key" direction="in">
+              <tp:docstring>
+                Unicode character for pressed key.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startTone" tp:name-for-bindings="startTone">
+            <tp:docstring>
+              Start audio stream and play tone.
+            </tp:docstring>
+            <arg type="i" name="start" direction="in"/>
+            <arg type="i" name="type" direction="in"/>
+        </method>
+
+        <method name="setVolume" tp:name-for-bindings="setVolume">
+            <tp:docstring>
+              <p>Sets the volume using a linear scale [0,100].</p>
+              <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="in">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getVolume" tp:name-for-bindings="getVolume">
+            <tp:docstring>
+              <p>Return the volume value of the given device on a linear scale [0,100].</p>
+              <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="out">
+              <tp:docstring>
+                The volume value (between 0 and 100)
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinParticipant" tp:name-for-bindings="joinParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join two participants together to create a 3-way conference including the current client.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="sel_callID" direction="in"/>
+            <arg type="s" name="drag_callID" direction="in"/>
+        </method>
 
                 <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-				<p>Create a conference from a list of participant</p>
-			<tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
-			</tp:docstring>
-			<arg type="as" name="participants" direction="in"/>
-		</method>
-
-		<method name="addParticipant" tp:name-for-bindings="addParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Join a new particiant to an existing conference.</p>
-			  <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to add to the conference
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p>
-			  <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p>
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    An existing conference ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="detachParticipant" tp:name-for-bindings="detachParticipant">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="joinConference" tp:name-for-bindings="joinConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-				Join two conferences together.
-			</tp:docstring>
-			<arg type="s" name="sel_confID" direction="in"/>
-			<arg type="s" name="drag_confID" direction="in"/>
-		</method>
-
-		<method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a hashtable containing conference details.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The conference ID
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out">
-			  <tp:docstring>
-			    A map containing the ID of the conferences
-			    and their states:
-			    <ul>
-			      <li>ACTIVE_ATTACHED</li>
-			      <li>ACTIVE_DETACHED</li>
-			      <li>HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getConferenceList" tp:name-for-bindings="getConferenceList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Returns a list containing all active
-			  conferences.
-			  <tp:rationale>To update client status, one should
-			  use <tp:member-ref>getParticipantList</tp:member-ref>
-			  with provided conference IDs.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of conferences.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setRecording" tp:name-for-bindings="setRecording">
-			<tp:docstring>
-			  Start recording a call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The ID of the call to record.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
-			<tp:docstring>
-			  Tells whether or not a call is being recorded.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="b" name="isRecording" direction="out">
-			  <tp:docstring>
-			    Returns true is the call is being recorded. False otherwise.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
-			<tp:docstring>
-			  Once after starting recording for the first time, this signal is emited to 
-			  provide the recorded file path to client application.
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="filepath"/>
-		</signal>
-
-		<signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
-			<tp:docstring/>
-			<arg type="s" name="filepath" />
-		</signal>
-			
-
-		<method name="getCallDetails" tp:name-for-bindings="getCallDetails">
-			<tp:docstring>
-			  Get all the details about a specific call.
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
-			  <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			    <p>A map containing the call details: </p>
-			    <ul>
-			      <li>ACCOUNTID</li>
-			      <li>PEER_NUMBER</li>
-			      <li>PEER_NAME</li>
-			      <li>DISPLAY_NAME</li>
-			      <li>CALL_STATE</li>
-			      <li>CALL_TYPE</li>
-			    </ul>  
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCallList" tp:name-for-bindings="getCallList">
-			<tp:docstring>
-			  Get the list of active calls.
-			  <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
-			</tp:docstring>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    A list of call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="out">
-			  <tp:docstring>	
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
-			<tp:docstring>
-			  Unused
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="codecName" direction="out"/>
-		</method>
-
-		<method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
-			<tp:docstring>
-				Send a text message to the specified call
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="s" name="message" direction="in"/>
-		</method>
-
-		<signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
-			<tp:docstring>
-			  <p>Notify that a cell have been created.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when call have been created by the daemon itself.</p>
-			  <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the calle. Clients must notify teh right account when receiving this signal.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="to">
-			  <tp:docstring>
-			   The sip uri this call is trying to reach
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingCall" tp:name-for-bindings="incomingCall">
-			<tp:docstring>
-			  <p>Notify an incoming call.</p>
-			  <p>The callID generated by the daemon must be stored by the clients in order to address other action for
-			    this call. This signal is emitted when we receive a call from a remote peer</p>
-			  <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID of the callee. Clients must notify the right account when receiving this signal.	
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    A new call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="from">
-			  <tp:docstring>
-			    The caller phone number.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
-			<tp:docstring>
-				Notify clients that a new text message has been received. 
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="from" />
-			<arg type="s" name="message" />
-		</signal>
-
-		<signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
-			<tp:docstring>
-			  <p>Notify of a change in a call state.</p> 
-			  <p>The client must subscribe to this signal.</p>
-			</tp:docstring>
-			<arg type="s" name="callID">
-			  <tp:docstring>
-			    The call ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state" >
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>INCOMING: Initial state of incoming calls</li>
-			      <li>RINGING: Initial state of received outgoing call</li>
-			      <li>CURRENT: The normal active state of an answered call</li>
-			      <li>HUNGUP: Notify that the call has been hungup by peer</li>
-			      <li>BUSY</li>
-			      <li>FAILURE: Error when processing a call</li>
-			      <li>HOLD</li>
-			      <li>UNHOLD_CURRENT</li>
-			      <li>UNHOLD_RECORD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Notify of a change in the conferences state
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    The acceptable states are: 
-			    <ul>
-			      <li>ACTIVE_ATTACHED: SFLphone user is
-			      participating to this conference</li>
-			      <li>ACTIVE_DETACHED: This situation can
-			      occur if a call is received while
-			      SFLphone user is participating to a
-			      conference. In this case, one can leave
-			      the conference by answering the
-			      call. Other participants may continue
-			      conferencing normally.</li>
-			      <li>HOLD: Each call in this conference
-			      is on state HOLD</li>
-			    </ul>
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="getParticipantList" tp:name-for-bindings="getParticipantList">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Get the call IDs of every participant to a given conference. The client should keep and update the list of participant.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="as" name="list" direction="out">
-			  <tp:docstring>
-			    The list of the call IDs.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
-			</tp:docstring>
-			<arg type="s" name="confID">  
-			  <tp:docstring>
-			    A new conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
-			</tp:docstring>
-			<arg type="s" name="confID">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<method name="holdConference" tp:name-for-bindings="holdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold on every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
-
-		<method name="unholdConference" tp:name-for-bindings="unholdConference">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  Hold off every calls participating to this conference.
-			</tp:docstring>
-			<arg type="s" name="confID" direction="in">
-			  <tp:docstring>
-			    The conference ID.
-			  </tp:docstring>
-			</arg>
-		</method>
- 	        
-                <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="filepath" direction="in"/>
-			<arg type="b" name="result" direction="out"/>
-	        </method>
-
-		<method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
-			<tp:added version="0.9.14"/>
-			<tp:docstring/>
-			<arg type="s" name="filepath" direction="in"/>
-		</method>
-
-		<signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
-			<tp:docstring>
-			  <p>Call state changed, SFLphone received a notification
-			    from registrar concerning this call.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			  <tp:docstring>
-			    The call ID
-			  </tp:docstring>
-			<arg type="s" name="state"  />
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			<arg type="i" name="code"  />
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-		</signal>    
-
-		<signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
-			<tp:docstring>
-				<p>Account state changed, SFLphone received a notification
-				from registrar.</p>
-			</tp:docstring>
-			<arg type="s" name="accountID" >
-			  <tp:docstring>
-			    The account ID
-			  </tp:docstring>
-			</arg>
-			<arg type="s" name="state">
-			  <tp:docstring>
-			    Description string
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="code">            
-			  <tp:docstring>
-			    The SIP or IAX2 message code
-			  </tp:docstring>
-			</arg>
-		</signal> 
-
-		<signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
-			<tp:docstring>
-			  Notify the clients of the voicemail number for a specific account, if applicable.
-			</tp:docstring>
-			<arg type="s" name="accountID">
-			  <tp:docstring>
-			    The account ID.
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="count">
-			  <tp:docstring>
-			    The number of waiting messages.
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
-		        <tp:docstring>
-			  <p>Notify clients of a volume level
-			    change.</p> 
-			  <p>This signal occurs only if ALSA is
-			    enabled since Pulseaudio streams are
-			    managed externally. </p>
-			</tp:docstring>
-			<arg type="s" name="device">
-			  <tp:docstring>
-			    The device: mic or speaker	
-			  </tp:docstring>
-			</arg>
-			<arg type="d" name="value">
-			  <tp:docstring>
-			    The new volume value	
-			  </tp:docstring>
-			</arg>
-		</signal>
-
-		<signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
-			<tp:docstring>
-			  <p>Transfer has been successfully
-			  processed. Client should remove transfered
-			  call from call list as it is no longer
-			  accessible in SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="transferFailed" tp:name-for-bindings="transferFailed">
-			<tp:docstring>
-			  <p>Transfer operation failed. Corespondin
-			  call is no longer accessible in
-			  SFLphone-daemon.</p>
-			</tp:docstring>
-		</signal>
-
-		<signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Signal sent on SDES session success. Media transmission is encripted
-			  for this call only. It does not apply for a
-			  conference.</p> 
-			  <p>A conference can be considered to be secured if and only if each
-			  participant is secured.</p>
-			</tp:docstring>
-			<arg type="s" name="callID"/>
-		</signal>
-
-		<signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			  <p>Sinal sent to notify that SDES session
-			  failed.</p> 
-			  <p>Media transmission is not encrypted.</p>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<!-- ZRTP Methods and Signals -->
-		<signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID"  />
-			<arg type="s" name="cipher"  />
-		</signal>
-
-		<signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="reason"  />
-			<arg type="s" name="severity" />
-		</signal>
-
-		<signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-		</signal>
-
-		<signal name="showSAS" tp:name-for-bindings="showSAS">
-			<tp:added version="0.9.7"/>
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" />
-			<arg type="s" name="sas"  />
-			<arg type="b" name="verified"/>
-		</signal>
-
-		<method name="setSASVerified" tp:name-for-bindings="setSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="requestGoClear" tp:name-for-bindings="requestGoClear">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-		</method>
-
-		<method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="accepted" direction="in"/>
-		</method>
-
-		<method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
-			<tp:added version="0.9.7"/>
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="callID" direction="in"/>
-			<arg type="b" name="yesNo" direction="in"/>
-		</method>
-
-	</interface>
+            <tp:added version="0.9.14"/>
+            <tp:docstring>
+                <p>Create a conference from a list of participants</p>
+            <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
+            </tp:docstring>
+            <arg type="as" name="participants" direction="in"/>
+        </method>
+
+        <method name="addParticipant" tp:name-for-bindings="addParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Join a new particiant to an existing conference.</p>
+              <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to add to the conference
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p>
+              <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p>
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                An existing conference ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="detachParticipant" tp:name-for-bindings="detachParticipant">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="joinConference" tp:name-for-bindings="joinConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+                Join two conferences together.
+            </tp:docstring>
+            <arg type="s" name="sel_confID" direction="in"/>
+            <arg type="s" name="drag_confID" direction="in"/>
+        </method>
+
+        <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a hashtable containing conference details.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The conference ID
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out">
+              <tp:docstring>
+                A map containing the ID of the conferences
+                and their states:
+                <ul>
+                  <li>ACTIVE_ATTACHED</li>
+                  <li>ACTIVE_DETACHED</li>
+                  <li>HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getConferenceList" tp:name-for-bindings="getConferenceList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Returns a list containing all active
+              conferences.
+              <tp:rationale>To update client status, one should
+              use <tp:member-ref>getParticipantList</tp:member-ref>
+              with provided conference IDs.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of conferences.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setRecording" tp:name-for-bindings="setRecording">
+            <tp:docstring>
+              Start recording a call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The ID of the call to record.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
+            <tp:docstring>
+              Tells whether or not a call is being recorded.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="b" name="isRecording" direction="out">
+              <tp:docstring>
+                Returns true is the call is being recorded. False otherwise.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
+            <tp:docstring>
+              Once after starting recording for the first time, this signal is emited to 
+              provide the recorded file path to client application.
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="filepath"/>
+        </signal>
+
+        <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
+            <tp:docstring/>
+            <arg type="s" name="filepath" />
+        </signal>
+
+
+        <method name="getCallDetails" tp:name-for-bindings="getCallDetails">
+            <tp:docstring>
+              Get all the details about a specific call.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
+              <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+                <p>A map containing the call details: </p>
+                <ul>
+                  <li>ACCOUNTID</li>
+                  <li>PEER_NUMBER</li>
+                  <li>PEER_NAME</li>
+                  <li>DISPLAY_NAME</li>
+                  <li>CALL_STATE</li>
+                  <li>CALL_TYPE</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCallList" tp:name-for-bindings="getCallList">
+            <tp:docstring>
+              Get the list of active calls.
+              <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
+            </tp:docstring>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                A list of call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName">
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="codecName" direction="out"/>
+        </method>
+
+        <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
+            <tp:docstring>
+                Send a text message to the specified call
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="s" name="message" direction="in"/>
+        </method>
+
+        <signal name="newCallCreated" tp:name-for-bindings="newCallCreated">
+            <tp:docstring>
+              <p>Notify that a call has been created.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other actions for
+                this call. This signal is emitted when call haves been created by the daemon itself.</p>
+              <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the call. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="to">
+              <tp:docstring>
+               The SIP URI this call is trying to reach.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingCall" tp:name-for-bindings="incomingCall">
+            <tp:docstring>
+              <p>Notify an incoming call.</p>
+              <p>The callID generated by the daemon must be stored by the clients in order to address other action for
+                this call. This signal is emitted when we receive a call from a remote peer</p>
+              <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID of the callee. Clients must notify the right account when receiving this signal.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                A new call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="from">
+              <tp:docstring>
+                The caller phone number.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
+            <tp:docstring>
+                Notify clients that a new text message has been received. 
+            </tp:docstring>
+            <arg type="s" name="callID" />
+            <arg type="s" name="from" />
+            <arg type="s" name="message" />
+        </signal>
+
+        <signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
+            <tp:docstring>
+              <p>Notify of a change in a call state.</p> 
+              <p>The client must subscribe to this signal.</p>
+            </tp:docstring>
+            <arg type="s" name="callID">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state" >
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>INCOMING: Initial state of incoming calls</li>
+                  <li>RINGING: Initial state of received outgoing call</li>
+                  <li>CURRENT: The normal active state of an answered call</li>
+                  <li>HUNGUP: Notify that the call has been hungup by peer</li>
+                  <li>BUSY</li>
+                  <li>FAILURE: Error when processing a call</li>
+                  <li>HOLD</li>
+                  <li>UNHOLD_CURRENT</li>
+                  <li>UNHOLD_RECORD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Notify of a change in the conferences state
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                The acceptable states are: 
+                <ul>
+                  <li>ACTIVE_ATTACHED: SFLphone user is
+                  participating to this conference</li>
+                  <li>ACTIVE_DETACHED: This situation can
+                  occur if a call is received while
+                  SFLphone user is participating to a
+                  conference. In this case, one can leave
+                  the conference by answering the
+                  call. Other participants may continue
+                  conferencing normally.</li>
+                  <li>HOLD: Each call in this conference
+                  is on state HOLD</li>
+                </ul>
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="getParticipantList" tp:name-for-bindings="getParticipantList">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Get the call IDs of every participant to a given conference. The client should keep and update the list of participants.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+            <arg type="as" name="list" direction="out">
+              <tp:docstring>
+                The list of the call IDs.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                A new conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
+            </tp:docstring>
+            <arg type="s" name="confID">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="holdConference" tp:name-for-bindings="holdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold every call which is participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unholdConference" tp:name-for-bindings="unholdConference">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              Hold off every call participating in this conference.
+            </tp:docstring>
+            <arg type="s" name="confID" direction="in">
+              <tp:docstring>
+                The conference ID.
+              </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <arg type="s" name="filepath" direction="in"/>
+            <arg type="b" name="result" direction="out"/>
+        </method>
+
+        <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
+            <tp:added version="0.9.14"/>
+            <tp:docstring/>
+            <arg type="s" name="filepath" direction="in"/>
+        </method>
+
+        <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
+            <tp:docstring>
+              <p>Call state changed, SFLphone received a notification
+                from registrar concerning this call.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"  />
+              <tp:docstring>
+                The call ID
+              </tp:docstring>
+            <arg type="s" name="state"  />
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            <arg type="i" name="code"  />
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+        </signal>
+
+        <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
+            <tp:docstring>
+                <p>Account state changed, SFLphone received a notification
+                from registrar.</p>
+            </tp:docstring>
+            <arg type="s" name="accountID" >
+              <tp:docstring>
+                The account ID
+              </tp:docstring>
+            </arg>
+            <arg type="s" name="state">
+              <tp:docstring>
+                Description string
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="code">
+              <tp:docstring>
+                The SIP or IAX2 message code
+              </tp:docstring>
+            </arg>
+        </signal> 
+
+        <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
+            <tp:docstring>
+              Notify the clients of the voicemail number for a specific account, if applicable.
+            </tp:docstring>
+            <arg type="s" name="accountID">
+              <tp:docstring>
+                The account ID.
+              </tp:docstring>
+            </arg>
+            <arg type="i" name="count">
+              <tp:docstring>
+                The number of waiting messages.
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
+                <tp:docstring>
+              <p>Notify clients of a volume level change.</p> 
+              <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p>
+            </tp:docstring>
+            <arg type="s" name="device">
+              <tp:docstring>
+                The device: mic or speaker
+              </tp:docstring>
+            </arg>
+            <arg type="d" name="value">
+              <tp:docstring>
+                The new volume value
+              </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
+            <tp:docstring>
+              <p>Transfer has been successfully
+              processed. Client should remove transfered
+              call from call list as it is no longer
+              accessible in SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="transferFailed" tp:name-for-bindings="transferFailed">
+            <tp:docstring>
+              <p>Transfer operation failed. Corespondin
+              call is no longer accessible in
+              SFLphone-daemon.</p>
+            </tp:docstring>
+        </signal>
+
+        <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Signal sent on SDES session success. Media transmission is encripted
+              for this call only. It does not apply for a conference.</p> 
+              <p>A conference can be considered to be secured if and only if each
+              participant is secured.</p>
+            </tp:docstring>
+            <arg type="s" name="callID"/>
+        </signal>
+
+        <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
+            <tp:added version="0.9.7"/>
+            <tp:docstring>
+              <p>Sinal sent to notify that SDES session failed.</p> 
+              <p>Media transmission is not encrypted.</p>
+            </tp:docstring>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <!-- ZRTP Methods and Signals -->
+        <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID"  />
+            <arg type="s" name="cipher"  />
+        </signal>
+
+        <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="reason"  />
+            <arg type="s" name="severity" />
+        </signal>
+
+        <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+        </signal>
+
+        <signal name="showSAS" tp:name-for-bindings="showSAS">
+            <tp:added version="0.9.7"/>
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" />
+            <arg type="s" name="sas"  />
+            <arg type="b" name="verified"/>
+        </signal>
+
+        <method name="setSASVerified" tp:name-for-bindings="setSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="requestGoClear" tp:name-for-bindings="requestGoClear">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+        </method>
+
+        <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="accepted" direction="in"/>
+        </method>
+
+        <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
+            <tp:added version="0.9.7"/>
+            <arg type="s" name="callID" direction="in"/>
+            <arg type="b" name="yesNo" direction="in"/>
+        </method>
+
+    </interface>
 </node>
diff --git a/kde/src/dbus/configurationmanager-introspec.xml b/kde/src/dbus/configurationmanager-introspec.xml
index 6271c12c9d..5f30f25268 100755
--- a/kde/src/dbus/configurationmanager-introspec.xml
+++ b/kde/src/dbus/configurationmanager-introspec.xml
@@ -1,107 +1,107 @@
 <?xml version="1.0" ?>
 <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-	<interface name="org.sflphone.SFLphone.ConfigurationManager">
-
-		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-			Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
-		</tp:docstring>
-
-		<method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
-			<tp:docstring>
-				Get all parameters of the specified account.
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-					The account ID
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
-				<tp:docstring>
-					The available keys / parameters are:
-					<ul>
-						<li>CONFIG_ACCOUNT_ENABLE:	True or False (Default: True)</li>
-						<li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
-						<li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
-						<li>HOSTNAME: The IP adress or hostname of the registrar</li>
-						<li>USERNAME: The username (or extension) of the account</li>
-						<li>PASSWORD: The password associated to the account</li>
-						<li>REALM</li>
-						<li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
-						<li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
-						<li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
-						<li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
-						<li>PUBLISHED_ADDRESS: The SIP published address</li>
-						<li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
-						<li>PUBLISHED_PORT: The SIP published port</li>
-						<li>DISPLAY_NAMEL: The display name</li>
-						<li>STUN_ENABLE: True or False (Default: False)</li>
-						<li>STUN_SERVER: The STUN server address</li>
-						<li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
-						<li>REGISTRATION_STATE_CODE</li>
-						<li>REGISTRATION_STATE_DESCRIPTION</li>
-						<li>SRTP_KEY_EXCHANGE</li>
-						<li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
-						<li>SRTP_RTP_FALLBACK</li>
-						<li>ZRTP_DISPLAY_SAS</li>
-						<li>ZRTP_DISPLAY_SAS_ONCE</li>
-						<li>ZRTP_HELLO_HASH</li>
-						<li>ZRTP_NOT_SUPP_WARNING</li>
-						<li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
-						<li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
-						<li>TLS_CA_LIST_FILE</li>
-						<li>TLS_CERTIFICATE_FILE</li>
-						<li>TLS_PRIVATE_KEY_FILE</li>
-						<li>TLS_METHOD</li>
-						<li>TLS_CIPHERS</li>
-						<li>TLS_SERVER_NAME</li>
-						<li>TLS_VERIFY_SERVER</li>
-						<li>TLS_VERIFY_CLIENT</li>
-						<li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
-						<li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
-					</ul>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
-			<tp:docstring>
-				Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
-				<tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
-				<tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
-			</tp:docstring>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="setCredentials" tp:name-for-bindings="setCredentials">
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
-			<arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
-		<method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
+    <interface name="org.sflphone.SFLphone.ConfigurationManager">
+
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
+        </tp:docstring>
+
+        <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
+            <tp:docstring>
+                Get all parameters of the specified account.
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                    The account ID
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+                <tp:docstring>
+                    The available keys / parameters are:
+                    <ul>
+                        <li>CONFIG_ACCOUNT_ENABLE:    True or False (Default: True)</li>
+                        <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
+                        <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
+                        <li>HOSTNAME: The IP adress or hostname of the registrar</li>
+                        <li>USERNAME: The username (or extension) of the account</li>
+                        <li>PASSWORD: The password associated to the account</li>
+                        <li>REALM</li>
+                        <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
+                        <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
+                        <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
+                        <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
+                        <li>PUBLISHED_ADDRESS: The SIP published address</li>
+                        <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
+                        <li>PUBLISHED_PORT: The SIP published port</li>
+                        <li>DISPLAY_NAMEL: The display name</li>
+                        <li>STUN_ENABLE: True or False (Default: False)</li>
+                        <li>STUN_SERVER: The STUN server address</li>
+                        <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
+                        <li>REGISTRATION_STATE_CODE</li>
+                        <li>REGISTRATION_STATE_DESCRIPTION</li>
+                        <li>SRTP_KEY_EXCHANGE</li>
+                        <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
+                        <li>SRTP_RTP_FALLBACK</li>
+                        <li>ZRTP_DISPLAY_SAS</li>
+                        <li>ZRTP_DISPLAY_SAS_ONCE</li>
+                        <li>ZRTP_HELLO_HASH</li>
+                        <li>ZRTP_NOT_SUPP_WARNING</li>
+                        <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
+                        <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
+                        <li>TLS_CA_LIST_FILE</li>
+                        <li>TLS_CERTIFICATE_FILE</li>
+                        <li>TLS_PRIVATE_KEY_FILE</li>
+                        <li>TLS_METHOD</li>
+                        <li>TLS_CIPHERS</li>
+                        <li>TLS_SERVER_NAME</li>
+                        <li>TLS_VERIFY_SERVER</li>
+                        <li>TLS_VERIFY_CLIENT</li>
+                        <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
+                        <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
+            <tp:docstring>
+                Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
+                <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
+                <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
+            </tp:docstring>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setCredentials" tp:name-for-bindings="setCredentials">
+            <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
             <tp:docstring>
             Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved.
             </tp:docstring>
             <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-			<!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
+            <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>-->
             <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
             <tp:docstring>
             Available parameters are:
@@ -134,587 +134,584 @@
             </arg>
         </method>
 
-	   <method name="getCredentials" tp:name-for-bindings="getCredentials">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="credentialInformation" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="addAccount" tp:name-for-bindings="addAccount">
-		   <tp:docstring>
-			   Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-			   <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
-			   <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
-			   <tp:docstring>
-					The new account settings
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="createdAccountId" direction="out">
-			   <tp:docstring>
-					A new account ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
-		   <tp:docstring>
-				Update the accounts order.
-				<tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
-		   </tp:docstring>
-		   <arg type="s" name="order" direction="in">
-			   <tp:docstring>
-				   An ordered list of account IDs, delimited by '/'
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="removeAccount" tp:name-for-bindings="removeAccount">
-		   <tp:docstring>
-			   Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-		   </tp:docstring>
-		   <arg type="s" name="accoundID" direction="in">
-			   <tp:docstring>
-					The account to remove, identified by its ID
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAccountList" tp:name-for-bindings="getAccountList">
-		   <tp:docstring>
-				Get a list of all created accounts, as stored by the core.
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-				   A list of account IDs
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="sendRegister" tp:name-for-bindings="sendRegister">
-		   <tp:docstring>
-				Send account registration (REGISTER) to the registrar.
-		   </tp:docstring>
-		   the account if expire=1, unregister if expire=0.
-
-		   @param[in] input accountID
-		   -->
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-					The account ID
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="expire" direction="in">
-			   <tp:docstring>
-					<p>To register, expire must be 1.</p>
-					<p>To un-register, expire must be 0.</p>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="api" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="rec" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="enabled" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!--      ///////////////////////               -->
-
-	   <!-- Codecs-related methods -->
-
-	   <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="payload" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="ai" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="list" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Audio devices methods -->
-
-	   <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-
-	   <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="name" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="i" name="index" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="plugin" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+       <method name="getCredentials" tp:name-for-bindings="getCredentials">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <arg type="aa{ss}" name="credentialInformation" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="addAccount" tp:name-for-bindings="addAccount">
+           <tp:docstring>
+               Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+               <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
+               <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
+               <tp:docstring>
+                    The new account settings
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="createdAccountId" direction="out">
+               <tp:docstring>
+                    A new account ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+           <tp:docstring>
+                Update the accounts order.
+                <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
+           </tp:docstring>
+           <arg type="s" name="order" direction="in">
+               <tp:docstring>
+                   An ordered list of account IDs, delimited by '/'
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="removeAccount" tp:name-for-bindings="removeAccount">
+           <tp:docstring>
+               Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+           </tp:docstring>
+           <arg type="s" name="accoundID" direction="in">
+               <tp:docstring>
+                    The account to remove, identified by its ID
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAccountList" tp:name-for-bindings="getAccountList">
+           <tp:docstring>
+                Get a list of all created accounts, as stored by the core.
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+                   A list of account IDs
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="sendRegister" tp:name-for-bindings="sendRegister">
+           <tp:docstring>
+                Send account registration (REGISTER) to the registrar.
+           </tp:docstring>
+           the account if expire=1, unregister if expire=0.
+
+           @param[in] input accountID
+           -->
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+                    The account ID
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="expire" direction="in">
+               <tp:docstring>
+                    <p>To register, expire must be 1.</p>
+                    <p>To un-register, expire must be 0.</p>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="api" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="rec" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="b" name="enabled" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!--      ///////////////////////               -->
+
+       <!-- Codecs-related methods -->
+
+       <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="payload" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="ai" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="list" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="accountID" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Audio devices methods -->
+
+       <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="audioPlugin" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+
+       <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="name" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="i" name="index" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="plugin" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="index" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="in">
-	       </arg>
-	   </method>
-
-	   <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
-	       <tp:docstring>
-	       </tp:docstring>
-	       <arg type="i" name="index" direction="out">
-	       </arg>
-	   </method>
-
-
-	   <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
-	           <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-		           <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
-	           <arg type="s" name="state" direction="in">
-	           </arg>
-	   </method>
-
-	   <!--    General Settings Panel         -->
-
-	   <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="res" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="level" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="days" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook configuration -->
-	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
-		   <arg type="a{si}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Addressbook list -->
-	   <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-		   <arg type="as" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <!-- Hook configuration -->
-	   <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="settings" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+             <tp:docstring>
+             </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="in">
+           </arg>
+       </method>
+
+       <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="index" direction="out">
+           </arg>
+       </method>
+
+
+       <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState">
+               <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="state" direction="out">
+                   <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
+               <arg type="s" name="state" direction="in">
+               </arg>
+       </method>
+
+       <!--    General Settings Panel         -->
+
+       <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="res" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+       </method>
+
+       <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="level" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="i" name="days" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook configuration -->
+       <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
+           <arg type="a{si}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Addressbook list -->
+       <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+           <arg type="as" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <!-- Hook configuration -->
+       <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="settings" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
 
        <method name="getHistory" tp:name-for-bindings="getHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
            <!-- Return a List of type Dict<string, string> >...a List of Dicts -->
            <arg type="aa{ss}" name="entries" direction="out"/>
-	   </method>
-
-	   <method name="setHistory" tp:name-for-bindings="setHistory">
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/>
-		   <arg type="aa{ss}" name="entries" direction="in">
-		   </arg>
-	   </method>
-
-	   <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-	   </signal>
-
-	   <signal name="errorAlert" tp:name-for-bindings="errorAlert">
-		   <arg type="i" name="code">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </signal>
-
-	   <!-- TLS Methods -->
-	   <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
+       </method>
+
+       <method name="clearHistory" tp:name-for-bindings="clearHistory">
+       </method>
+
+       <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+       </signal>
+
+       <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+           <arg type="i" name="code">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </signal>
+
+       <!-- TLS Methods -->
+       <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <arg type="a{ss}" name="details" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="interface" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-		   <arg type="s" name="address" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="s" name="interface" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+           <arg type="s" name="address" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+           <tp:docstring>
+           </tp:docstring>
+           <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="list" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="out">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
                    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="a{ss}" name="shortcutsMap" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
+           <tp:docstring>
+           </tp:docstring>
+           <arg type="a{ss}" name="shortcutsMap" direction="in">
+               <tp:docstring>
+               </tp:docstring>
+           </arg>
+       </method>
    </interface>
-	   </node>
+</node>
-- 
GitLab